Итак, если я отключу свою корневую учетную запись с помощью sudo passwd -dl root
, у меня все равно будет концептуальный доступ к sudo {su,bash}
или sudo -{s,i}
, чем отличаются удаленные права от корневой учетной записи?
Я знаю разницу между каждым из повышений или оболочек, я ищу глубокую разницу между учетной записью и повышенными правами?
Нет разницы. sudo
меняет идентификатор пользователя на root, независимо от того, есть ли у учетной записи root пароль.
Разница между sudo -s
и sudo -i
заключается в том, хранятся ли переменные окружения (такие как $ HOME) в ваших текущих значениях (поэтому ~
все еще указывает на ваш домашний каталог) или сбрасываются в значения root получит, если он войдет в систему нормально.
passwd -dl root
не отключает пользователя root. Это удаляет и "блокирует" пароль, т.е. это устанавливает бессмысленный хэш пароля.
Наличие учетной записи с заблокированным паролем означает, что Вы не можете войти в пользователя, использующего пароль. su, вход в систему и lightdm не позволят Вам входить в систему как корень, потому что по умолчанию они спрашивают Вас пароль пользователя.
Однако sudo работает по-другому: примерно, это имеет список пользователей, которым разрешают выполнить sudo (пользователей в этом списке называют sudoers), и, по умолчанию, просит пароль пользователя, запустил sudo.
Поэтому, с помощью sudo, можно войти в систему в корень, даже если корень не имеет пароля. Если Вы пробуете команду su root
, Вы будете видеть, что не сможете войти в систему, потому что это попросит пароль, чтобы Вы не могли обеспечить.
su, вход в систему, lightdm, sudo, ssh и другие являются всеми программами, которые можно использовать для входа в систему как пользователь, но они обрабатывают аутентификацию по-разному. Важно не перепутать метод аутентификации с действием входа в систему.
Как Вы могли бы ожидать, тема аутентификации довольно длинна и может быть хитрой. Объяснение здесь всех доступных методов аутентификации и как использовать их, было бы слишком трудным. К счастью, существует инструмент, который может дать Вам более исчерпывающие ответы: человек, которого, конечно, Вы уже знаете. Можно интересоваться чтением:
man passwd
man su
man sudo
man login
В частности, man passwd
содержит этот абзац, который Вы могли бы найти интересным:
-l, --lock
Lock the password of the named account. This option disables a password by
changing it to a value which matches no possible encrypted value (it adds a
´!´ at the beginning of the password).
Note that this does not disable the account. The user may still be able to
login using another authentication token (e.g. an SSH key). To disable the
account, administrators should use usermod --expiredate 1 (this set the
account's expire date to Jan 2, 1970).
Users with a locked password are not allowed to change their password.
Так, для фактического отключения пользователя root, необходимо работать usermod --expiredate 1 root
. В то время как экспериментирование всегда является хорошей вещью, помните, что эта команда может быть действительно опасной и сделает Ваше поле неприменимым. Так, если Вы хотите попробовать его, убедиться знать, как восстановить Вашу систему или (лучшее) использование chroot/linux контейнерная/виртуальная машина / живой CD / живой USB.
Тем не менее Вы заметите, что иногда будете получать сообщение как это:
Your account has expired; please contact your system administrator
su: Authentication failure
Однако существуют другие способы использовать истекшие учетные записи. Например, sudo игнорирует дату истечения срока целевого пользователя (но проверяет дату истечения срока sudoer). Также su игнорирует его, но только, когда выполнено как корень:
Your account has expired; please contact your system administrator
su: Authentication failure
(Ignored)
Для реального создания пользователя недоступным необходимо иметь дело с PAM. Посмотрите man 7 pam
и его раздел SEE ALSO для получения дополнительной информации.