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

Теперь давайте посмотрим на команды соответственно:

  1. sudo su:

    • sudo запускает команду su (заменить пользователя) с привилегиями root, так что даже если /etc/shadow говорит или имеет root:!:17179:0:99999:7::: он по-прежнему будет запускать команды с правами root.
  2. su - или же su root:

    • Это фактически переключается на пользователя root, который из /etc/shadow Файл не может войти в систему, поэтому использование этих команд не будет работать. Если вы хотите, чтобы они работали, то корневую учетную запись необходимо разблокировать, указав ей пароль.

Резюме:

su - 0r su root переключается на пользователя root, не существует, поэтому не может произойти, но sudo su запускает команду переключения с root привилегии, так что в этом случае это пойдет, если вы находитесь в sudo группа. В этом случае вы на самом деле не входите в систему как root, просто действуете как root.

Источник: В чем разница между "su -" и "su root"?

Другие вопросы по тегам