Вопрос или проблема
На системе SLES 15 SP1 я добавил пользователя в группу wheel
:
wheel:x:1003:joeuser
Однако, когда joeuser
входит в систему как сам себя, а затем пытается выполнить su
(превратиться в root), его просят ввести пароль. Почему это может происходить?
Вот /etc/pam.d/su
:
#%PAM-1.0
auth sufficient pam_wheel.so trust
auth sufficient pam_rootok.so
auth include common-auth
account sufficient pam_rootok.so
account include common-account
password include common-password
session include common-session
session optional pam_xauth.so
Как вы тестируете это? Вы входите в систему как joeuser
напрямую или входите как root
(или другой пользователь), а затем выполняете su
для перехода к учетной записи joeuser
?
Я пытался воспроизвести описанное вами поведение в контейнере SLES и столкнулся с той же проблемой:
testuser@714eeb148216:~> su
Password:
Я включил вывод отладки для модуля pam_wheel
…
auth sufficient pam_wheel.so trust debug
…и заметил, что возникла эта ошибка:
pam_wheel(su:auth): who is running me ?!
И это произошло потому, что в моей контейнерной среде отсутствовал файл utmp
(/run/utmp
, также известный как /var/run/utmp
). Этот файл используется pam_wheel
для идентификации пользователя, который изначально вошел в систему на текущем tty. Файл заполняется программой login
, и он должен существовать.
Как только я (а) создал пустой файл /run/utmp
и затем (б) организовал выполнение login
на поддельном устройстве pty, я смог войти в систему как тестовый пользователь и выполнить su
без пароля:
testuser@714eeb148216:~> su
714eeb148216:/home/testuser #
Выполнение su -
все еще приводило к ошибке, пока я также не обновил /etc/pam.d/su-l
.
Однако: если я вошел в систему как root
, а затем переключился на пользователя без привилегий:
714eeb148216 login: root
Password:
Directory: /root
Tue Dec 17 11:43:14 UTC 2024
714eeb148216:~ # groups
root
714eeb148216:~ # su - testuser
Меня снова попросят ввести пароль:
testuser@714eeb148216:~> su
Password:
Потому что:
pam_wheel(su:auth): Access denied to 'root' for 'root'
pam_wheel
видит, что root
был пользователем, который изначально вошел в систему на терминале, поэтому, даже несмотря на то, что я выполняю su
как пользователь testuser
, pam_wheel
основывает свои решения на членстве в группе root
.
Вы можете изменить это поведение так, чтобы pam_wheel
не обращался к /run/utmp
(и вместо этого использовал uid вызывающего процесса для определения прав) с помощью опции use_uid
; если я изменю /etc/pam.d/su
следующим образом:
auth sufficient pam_wheel.so trust use_uid debug
То описанный выше процесс будет работать так, как ожидалось.
Ответ или решение
На системе SLES 15 SP1, после добавления пользователя в группу wheel
, возникает ситуация, когда этот пользователь не может выполнить команду su
для получения прав суперпользователя без ввода пароля. Давайте разберем, почему это происходит и какие шаги можно предпринять для решения данной проблемы.
Причины проблемы
-
Проверка через PAM: Ваша конфигурация PAM (Pluggable Authentication Modules) в файле
/etc/pam.d/su
включает в себя модульpam_wheel.so
, который отвечает за доступ к командеsu
. Данная настройка подразумевает, что только пользователи, находящиеся в группеwheel
, могут получить доступ к привилегиям суперпользователя. -
Файл
/run/utmp
: При использованииsu
, модульpam_wheel.so
проверяет файл/run/utmp
, чтобы определить, кто из пользователей изначально вошел в систему на текущем терминале (tty). Если файл/run/utmp
отсутствует, вы получите сообщение об ошибке:pam_wheel(su:auth): who is running me ?!
, что подтверждает, что система не может идентифицировать пользователя, который выполняет командуsu
. -
Проблема доступа при использовании
su
: Если вы вошли в систему как root и затем попытались переключиться на другого пользователя с помощьюsu
, модульpam_wheel
будет проверять группу пользователя, запустившего командуsu
(в данном случае, root). Если root не является членом группыwheel
, то доступ будет отклонен с ошибкойpam_wheel(su:auth): Access denied to 'root' for 'root'
.
Решения
1. Восстановление файла utmp
Убедитесь, что файл /run/utmp
существует. Вы можете создать его следующим образом:
sudo touch /run/utmp
Проверьте, что процесс входа login
работает и заполняет этот файл, чтобы pam_wheel
мог корректно его использовать.
2. Изменение конфигурации PAM
Если вы хотите, чтобы pam_wheel
игнорировал информацию о входе через utmp
, вы можете изменить строку в файле /etc/pam.d/su
следующим образом:
auth sufficient pam_wheel.so trust use_uid debug
Данный параметр use_uid
изменит логику проверки, основываясь на идентификаторе пользователя (UID) вызывающего процесса, а не на информации о текущем tty.
3. Проверьте группы
Убедитесь, что ваш пользователь действительно добавлен в группу wheel
:
groups joeuser
Если wheel
не отображается в списке, то добавьте пользователя в группу снова:
sudo usermod -aG wheel joeuser
4. Проверка работы команд
После внесения изменений, протестируйте su
от имени пользователя joeuser
:
su
Если всё было настроено верно, вам не должно быть предложено вводить пароль.
Заключение
При работе с командами суперпользователя и PAM важно учитывать конфигурацию аутентификации и авторизации. В данном случае добавление пользователя в группу wheel
не является единственным условием для успешного выполнения su
. Обязательно проверяйте наличие необходимых файлов и корректность конфигурации PAM для решения подобных проблем.