Поскольку Ubuntu по умолчанию отключает учетную запись root, почему бы не отключить доступ к корневой оболочке?

12

Текущие значения по умолчанию для учетной записи суперпользователя в /etc/passwdIS root:x:0:0:root:/root:/bin/bash.

Почему бы не установить его root:x:0:0:root:/root:/usr/sbin/nologin?

loongyh
источник
7
Так что вы можете сделать sudo -i?
AlexP
12
«Отключение учетной записи root» - это довольно простое описание: на самом деле она отключает аутентификацию учетной записи root на основе
пароля
1
@AlexP, действительно, я только что проверил это, sudo -i не работает с корнем, установленным в / usr / sbin / nologin.
loongyh

Ответы:

19

Если бы это было так, вы могли бы запускать команды только по sudoодной за раз, но вы не смогли бы запустить корневую оболочку. Корневая оболочка удобна во многих случаях, например, если вы планируете запускать несколько команд от имени пользователя root подряд.

В частности, вы не могли бежать sudo -i, как отметил AlexP. От man sudo:

-i, --login    Run the shell specified by the target user's password database entry as a login shell.
Альберто Сантини
источник
7
Не sudo /bin/bashработает, чтобы сделать это?
Федерико Полони
5
@FedericoPoloni, это было бы больше похоже на sudo -sменя (корневая оболочка, но не корневая оболочка входа в систему ). Это хороший момент - и на самом деле sudo -s, похоже, он работает, даже когда оболочка root/usr/sbin/nologin
Steeldriver
1
Можно отключить -i, -s, /bin/bashи так далее, просто позволяя белый список команд, смотрите документацию для файла sudoers. Это настолько мелко, что, например, можно разрешить пользователям работать /etc/init.d/someservice restartс правами root, не позволяя им работать /etc/init.d/someservice stop. Но по умолчанию Ubuntu просто не устанавливает пароль rootи позволяет администраторам делать все с помощью sudo. Вероятно, обоснование заключается в том, что: а) несколько пользователей с правами администратора и б) пользователю с правами администратора не нужно запоминать второй пароль для учетной записи root.
алло
8

Помимо sudo ответа Альберто Сантини, есть еще один (гораздо лучший) ответ. Если для оболочки root задано значение, не являющееся оболочкой, загрузка одного пользователя не работает. Существует восстановление suloginдля таких вещей, как не существующая оболочка или полностью поврежденная оболочка, но она не будет работать, если оболочка окажется действительной, но на самом деле не является оболочкой.

Вы все еще можете sudoнапрямую получить оболочку, указав ее, sudoчтобы она даже не была хорошей защитой.

Джошуа
источник