Почему я могу запустить корневую оболочку с помощью sudo даже с '! 'в своей теневой записи?
$cat /etc/passwd |grep -i root
root:x:0:0:root:/root:/bin/bash
$sudo cat /etc/shadow |grep -i root
root:!:17179:0:99999:7:::
Во втором поле теневого файла, ! означает, что пользователь root не может войти в систему, но почему я могу войти в систему как пользователь root sudo su?
Почему я не могу войти в систему как пользователь root su root или же su -?
2 ответа
! в shadow Поле зашифрованного пароля записи означает, что ни один пароль не может аутентифицироваться против него. От man shadow:
If the password field contains some string that is not a valid
result of crypt(3), for instance ! or *, the user will not be able
to use a unix password to log in (but the user may log in the
system by other means).
Как сказано в руководстве, это не означает, что вы не можете войти в систему как root. Это просто означает, что вы не можете войти в систему как root, используя пароль для учетной записи root. (Вы можете войти в систему как root через SSH, используя ключи SSH, например, если вы настроили его ранее, даже если учетная запись заблокирована.)
sudo обычно аутентифицируется с вашим паролем, а не root. Это можно изменить, установив один из targetpw, rootpw или же runaspw в sudoers, Если вы установите один из этих параметров и попытаетесь использовать пароль, когда пароль заблокирован, произойдет сбой.
Теперь давайте посмотрим на команды соответственно:
sudo su:sudoзапускает командуsu(заменить пользователя) с привилегиями root, так что даже если/etc/shadowговорит или имеетroot:!:17179:0:99999:7:::он по-прежнему будет запускать команды с правами root.
su -или жеsu root:- Это фактически переключается на пользователя root, который из
/etc/shadowФайл не может войти в систему, поэтому использование этих команд не будет работать. Если вы хотите, чтобы они работали, то корневую учетную запись необходимо разблокировать, указав ей пароль.
- Это фактически переключается на пользователя root, который из
Резюме:
su - 0r su root переключается на пользователя root, не существует, поэтому не может произойти, но sudo su запускает команду переключения с root привилегии, так что в этом случае это пойдет, если вы находитесь в sudo группа. В этом случае вы на самом деле не входите в систему как root, просто действуете как root.
Источник: В чем разница между "su -" и "su root"?