Пользователь добавлен в группу wheel, но не может выполнить su без аутентификации по паролю.

Вопрос или проблема

На системе 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 для получения прав суперпользователя без ввода пароля. Давайте разберем, почему это происходит и какие шаги можно предпринять для решения данной проблемы.

Причины проблемы

  1. Проверка через PAM: Ваша конфигурация PAM (Pluggable Authentication Modules) в файле /etc/pam.d/su включает в себя модуль pam_wheel.so, который отвечает за доступ к команде su. Данная настройка подразумевает, что только пользователи, находящиеся в группе wheel, могут получить доступ к привилегиям суперпользователя.

  2. Файл /run/utmp: При использовании su, модуль pam_wheel.so проверяет файл /run/utmp, чтобы определить, кто из пользователей изначально вошел в систему на текущем терминале (tty). Если файл /run/utmp отсутствует, вы получите сообщение об ошибке: pam_wheel(su:auth): who is running me ?!, что подтверждает, что система не может идентифицировать пользователя, который выполняет команду su.

  3. Проблема доступа при использовании 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 для решения подобных проблем.

Оцените материал
Добавить комментарий

Капча загружается...