Как можно настроить так, чтобы su
тому же пользователю, который в настоящее время вошел в систему, то есть
foo$ su -c 'something' foo
не требует пароля? Это не добавит и не удалит никакой безопасности, поскольку это должно быть пустым звуком.
Причина этого заключается в том, что я хотел бы иметь класс пользователей «ниже» root, которые могут администрировать некоторые определенные службы на машине, которые работают под этим пользователем, например news
или mysql
(проверить их данные, изменить конфигурацию, перезапустить и т. д.). Эти пользователи получат sudo
права на эту учетную запись, и это обычно работает хорошо, за исключением того, что сценарии инициализации в некоторых случаях вызывают
su -c 'start_daemon ...' daemonuser
и это обрушивает эту схему. Конечно, я могу изменить скрипты инициализации или добавить дополнительные sudo
разрешений, но я бы хотел избежать подобных исключений, потому что они беспорядочно поддерживать в долгосрочной перспективе.
Конфигурация для su
находится в PAM, так что, возможно, здесь и кроется нужная магия.
Вы должны использовать sudo
для этого, а не su
. С помощью sudo вы можете указать NOPASSWD
в /etc/sudoers
:
username ALL=/path/to/command NOPASSWD: ALL
Я думаю, здесь есть принципиальное недоразумение.
Эти пользователи получат права sudo для этой учетной записи, и это обычно работает хорошо, за исключением того, что сценарии инициализации в некоторых случаях вызывают su -c 'start_daemon ...' daemonuser, что приводит к отключению этой схемы.
Когда сценарий инициализации su -c <start_daemon> <daemon_user>
он переключает контекст, в котором работает демон.
например, наши сценарии tomcat делают именно это, чтобы демон мог работать с правами пользователя "tomcat".
Теперь, если вы измените сценарии инициализации, чтобы сделать su -c <start_daemon> <your_user>
вы РАЗБИВАЕТЕ демон, поскольку он ожидает, что он будет работать в определенной среде.
Предоставление вашим пользователям разрешения sudo для этих сценариев, как все уже сказали, является верный способ дать им возможность управлять этими демонами.
Запустите visudo и добавьте эту строку:
yourusername ALL = (ALL) NOPASSWD: / bin / su - yourusername
и добавьте это в начало сценария инициализации:
псевдоним su = 'sudo su'
Вы можете сделать это, отредактировав файл PAM su в /etc/pam.d и используя модуль pam_succeed_if. В файле уже есть запись для root, поэтому скопируйте эту строку и добавьте после нее еще одну.
достаточно учетной записи pam_succeed_if.so uid = 0 use_uid quiet
достаточно учетной записи pam_succeed_if.so uid = [ваш UID здесь] use_uid quiet
«Предоставление вашим пользователям разрешения sudo для этих сценариев, как уже говорили все остальные, - это правильный способ дать им возможность управлять этими демонами». - Зайфер
Я бы так и поступил. Он говорит, что вы должны позволить пользователям запускать сценарии (и только сценарии) от имени пользователя root, отредактировав ваш файл sudoers. Поскольку root может su где угодно и без пароля, скрипты должны работать нормально. Собственно, я сейчас и делаю именно это.
Имейте в виду, что сценарии инициализации предназначены для запуска от имени пользователя root, поэтому su используется в первую очередь (для отбрасывания привилегий root).