Я хочу предоставить не-sudo доступ пользователю без полномочий root на моем компьютере, есть пользователь dns-manager, его единственная роль - запускать все команды BIND (rndc, dnssec-keygen) и т. Д.
Теперь каждый раз, когда он должен выполнить команду, он печатает,
sudo rndc reload
Есть ли способ, которым я могу избавиться от этого sudo, но только по определенному набору команд (и только для dns-manager)?
sudo
предназначено для этого. Каковы ваши бизнес возражения против его использованияsudo
для этого?sudo
. Какие есть возражения?sudo
Тогда как насчет пароля ? Или пароль sudo для запуска инструмента управления DNS , который может при необходимости работать сnamed
привилегиями группы или пользователя, либо с привилегиями root.sudo
. Пытаясь выразить это нам, он может или прояснить наше замешательство, или свое собственное - или оба!Ответы:
Если я правильно понимаю ваши комментарии, проблема заключается в том, что команда будет отправлена через соединение, которое не имеет возможности ввести пароль, который по умолчанию запрашивает sudo. Кроме того, во многих дистрибутивах ОС sudo по умолчанию требует TTY, чего может не быть в этой программе.
Однако sudo может иметь очень детализированную структуру разрешений, позволяющую одному или нескольким пользователям выполнять одну конкретную команду без пароля и TTY. Ниже я покажу три способа настроить это для ваших нужд. Какой бы вы ни выбрали, пользователь теперь сможет
sudo rndc reload
вводить команду без необходимости ввода пароля.(Кроме того, это может быть ненужным, но ... пожалуйста, не забудьте сделать резервную копию файла sudoers перед его редактированием, чтобы сохранить оболочку, в которой вы являетесь пользователем root, на случай, если вам потребуется вернуться к резервной копии, и отредактировать он использует
visudo
вместоsudo vi /etc/sudoers
. Надеюсь, эти меры предосторожности будут ненужными, но ... лучше иметь их, а не нуждаться в них, чем наоборот!)1. Если вы не хотите требовать TTY для каких-либо запросов
Самый простой способ избавиться от требований TTY (если он существует) - убедиться, что строка, начинающаяся с
Defaults
in/etc/sudoers
, не содержит словаrequiretty
- вместо этого оно должно содержать!requiretty
. Однако, если вы сделаете это, это означает, что никакая команда sudo не потребует tty!Вам также нужно будет добавить строку
2. Если вы хотите требовать TTY для всех пользователей, кроме этого
Это можно сделать, установив значение по умолчанию для этого пользователя, например:
3. Если вы хотите запросить TTY для всех команд, кроме этой, одним этим пользователем
Это немного сложнее из-за синтаксиса файла sudoers. Вам необходимо создать псевдоним команды для этой команды, а затем установить для нее псевдоним по умолчанию, например:
источник
Да. sudo может быть настроен очень гибко. Тем не менее, я должен упомянуть: эти типы решений не следует считать очень безопасными, и их следует использовать только в совместной среде, где есть другие средства управления (таким образом, вы можете дать эти расширенные привилегии своему лояльному подчиненному, но не следует делать это для клиента, которого вы знаете только из сети).
Конфигурация sudo присутствует
/etc/sudoers
в большинстве систем. Вы можете узнать его синтаксис, используя Google илиman sudo
команду.Вы не должны редактировать этот файл напрямую; это может привести к условиям гонки безопасности. Вместо этого используйте
visudo
команду (которая является оберткой вокруг вашего$EDITOR
переменной среды).После настройки sudo вы можете легко обернуть это вокруг видимых команд. Это очень просто:
/usr/local/dnsadmin/bin
)Создайте скрипт-обертку для команд, которые вы хотите, чтобы они могли использоваться без sudo. Это будет очень простая команда, например,
/usr/local/dnsadmin/bin/rndc
будет:#!/bin/bash exec /usr/bin/sudo /usr/sbin/rndc "$@"
Получить этот каталог в их
PATH
переменную среды (например, общесистемной или локальной.profile
).источник
exec
сценарий оболочки вместо простого непосредственного вызова команды? (Я не говорю, что это неправильно, я просто хотел бы знать, почему вы это делаете, чтобы я мог чему-то научиться)exec
, вызываемая команда будет подставлена вместо оболочки. Снаряд уйдет. Без exec оболочка запустит эту команду, затем дождется ее завершения и затем завершится. Этот второй, exec-less означает несколько взаимодействующих процессов, которые не нужны. Но нет большой разницы, без exec эта работа так же хорошо, как и с этим.Хотя это не общее решение в конкретном случае,
rndc
вам не нужноsudo
вообще.rndc
может связываться с любымnamed
процессом через локальный сокет или удаленный порт, используя секретный ключ для аутентификации. По умолчанию (или, по крайней мере, для Debian, который я использую), этот файл находится в/etc/bind/rndc.key
и обычно доступен для чтения только пользователюbind
и группеbind
.Любой, кто имеет доступ для чтения к этому ключевому файлу (или его идентичной копии), может использовать
rndc
для управления сервером BIND, поэтому самым простым решением в этом конкретном случае будет добавление пользователя вbind
группу.Удивительное число обычных демонов имеет нечто подобное (лично я все еще выясняю возможности PowerDNS в этом отношении, но пока это выглядит многообещающе). Если вы не хотите этого делать,
sudo
вам придется проверить, возможно ли то, чего вы хотите достичь, в каждом конкретном случае.источник
Вы не хотите использовать sudo для предоставления root для некоторых команд. Вместо этого вы можете выполнить chmod 4750 для конкретной программы [которая может обернуть команду], чтобы повысить права обычного пользователя на его выполнение от имени пользователя root.
источник