Что-то вроде Как подавить предупреждение об ошибке аутентификации su?, но на самом деле он вообще не запускает команду.

# su limited
su: Authentication failure
# su -s /bin/bash limited
su: Authentication failure
# su -s /bin/bash - limited
su: Authentication failure

Почему нужно проверять аутентификацию при запуске от root?


Для большинства пользователей su работает нормально.

# grep limited /etc/passwd
limited:x:1001:1001::/home/limited:/bin/bash
# grep limited /etc/shadow
#

Отсутствие в /etc/shadow не препятствует включению большинства других пользователей в su.

Я вижу запись в журнале, когда пытаюсь:

Apr 21 10:43:18 thehostname su: FAILED SU (to limited) root on pts/110
# egrep -v '^#|^$' /etc/pam.d/su
auth       sufficient pam_rootok.so
session       required   pam_env.so readenv=1
session       required   pam_env.so readenv=1 envfile=/etc/default/locale
session    optional   pam_mail.so nopen
session    required   pam_limits.so
@include common-auth
@include common-account
@include common-session
4
Vi. 21 Апр 2020 в 10:53
Имеет ли рассматриваемый хост какую-либо нестандартную конфигурацию PAM?
 – 
Joseph Sible-Reinstate Monica
21 Апр 2020 в 06:01
@JosephSible-ReinstateMonica, я не помню, чтобы я его настраивал. Для большинства других пользователей su работает нормально.
 – 
Vi.
21 Апр 2020 в 10:25
Как вы создали пользователя limited? Насколько я знаю, для него должна быть запись в файле shadow.
 – 
Kusalananda
21 Апр 2020 в 10:31
@Кусалананда, я не помню, это было давно. Есть 95 записей в /etc/shadow и 157 записей в /etc/passwd, но для большинства других пользователей, отсутствующих в тени, su $USERNAME работает как надо.
 – 
Vi.
21 Апр 2020 в 10:42
Что говорит egrep -v '^#|^$' /etc/pam.d/su? (отредактируйте это в своем вопросе)
 – 
mosvy
21 Апр 2020 в 10:52

1 ответ

Лучший ответ

У вас есть x в (в основном устаревшем) поле пароля /etc/passwd. Согласно man 5 passwd (на моих машинах Debian/Raspbian, а также онлайн), это означает, что должна быть соответствующая запись в /etc/shadow:

Если поле пароля представляет собой строчную букву «x», то вместо этого зашифрованный пароль фактически хранится в файле shadow(5); в /etc/shadow file должна быть соответствующая строка, иначе учетная запись пользователя недействительна.

Я подозреваю, что вы нажимаете последнее предложение, "учетная запись пользователя недействительна", и su ошибается в сторону осторожности.

Пример (Распбиан)

grep test.: /etc/passwd
test1:x:1005:1005:Test 1:/home/test1:/bin/bash
test2:x:1006:1006:Test 2:/home/test2:/bin/bash

grep test.: /etc/shadow
test1:!:18373:0:99999:7:::

su test1 -c id
uid=1005(test1) gid=1005(test1) groups=1005(test1)

su test2 -c id
su: Authentication failure

Решение, по-видимому, состоит в том, чтобы либо не использовать x в поле пароля passwd, либо добавить соответствующие записи в /etc/shadow. (Обратите внимание, что пустое поле пароля в /etc/passwd, вероятно, позволит пользователю войти в систему без пароля. Вместо этого используйте !, что пометит учетную запись как заблокированную.)

Вы должны иметь возможность использовать команду pwconv, чтобы исправить файл /etc/shadow с отсутствующими записями.

5
roaima 21 Апр 2020 в 18:27
Но, согласно ОП, это работает с другими пользователями (правда, это может быть ошибка пользователя, я не смог ее воспроизвести)
 – 
mosvy
21 Апр 2020 в 11:30
Да, удаление x из строки /etc/passwd заставило su снова работать. Почему не было конкретного сообщения об ошибке ни в консоли, ни в журнале авторизации?
 – 
Vi.
21 Апр 2020 в 15:26
2
@Ви. удаление x позволит любому войти в систему как этот пользователь без пароля (по крайней мере, из консоли, Ctrl-Alt-F3 и введите имя пользователя; ssh или su могут быть более привередливыми и отказаться принимать его). Не делай этого. Плохая идея возиться с этим материалом вручную. NB В ванильном Debian 10 su не будет жаловаться и позволит любому стать пользователем, если у этого пользователя есть пустое поле пароля в /etc/passwd.
 – 
mosvy
21 Апр 2020 в 18:01
Верно. pwconv устранил проблемы.
 – 
Vi.
21 Апр 2020 в 18:06