Почему я могу запустить корневую оболочку с помощью 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"?