Почему я не могу стать пользователем root через `su`?

Нет, все команды Unix не являются функциями оболочки, но они могут быть переопределены функцией оболочки.

Имена функций оболочки не ограничиваются именами встроенных -или внешних утилит. Точно так же, как у вас может быть несколько внешних утилит с одинаковым именем по разным путям, у вас также может быть функция оболочки или псевдоним с таким же именем.

Если есть функция с именем fooи внешняя или встроенная -утилита с именем foo, то будет вызвана функция foo.

Чтобы оболочка выбрала встроенную -утилиту, используйте

builtin foo

Чтобы не использовать функцию foo, используйте

command foo

Чтобы гарантировать, что внешняя утилита используется вместо функции оболочки, псевдонима или встроенной -утилиты, используйте полный путь к ней, например.

/bin/echo

Псевдонимы и функции занимают одно и то же пространство имен, поэтому псевдоним и функция не могут иметь одно и то же имя.


Короче:

Команды Unix могут быть

  • псевдонимы или
  • функции оболочки или
  • встроенные в оболочку утилиты или
  • внешние утилиты (скомпилированные двоичные файлы или сценарии, написанные на любом языке сценариев ).

Некоторые «команды» являются не командами, а ключевыми словами, такими как forи ifи т. д. Они также могут быть переопределены псевдонимами и функциями оболочки для получения дополнительных захватывающих возможностей оболочки (, т.е. не делайте этого ). ].

0
28.12.2019, 12:12
2 ответа

Установить/изменить пароль root:

sudo passwd root

После этого вы сможете запустить команду su.

5
28.01.2020, 02:13

Краткий ответ можно найти на справочной странице sudoers (, введите man sudoers, чтобы увидеть полную страницу):

Unlike su(1), when sudoers requires authentication, it validates
the invoking user's credentials, not the target user's (or root's)
credentials.

Итак, sudoзапрашивает ваш пароль, а suзапрашивает пароль root.

Длинный ответ

suозначает изменить пользователя , например, запустить оболочку от имени этого пользователя. Вы можете указать, какой пользователь, например su someuser. Затем вас попросят ввести пароль someuser. Если вы не укажете пользователя, suпо умолчанию будет пользователем root. Поэтому, когда вы набираете su, он запрашивает пароль root.

sudoозначает, запустить команду от имени другого пользователя , а sudo -iозначает запустить оболочку входа в систему от имени другого пользователя.Вы можете указать, какой пользователь, но если вы этого не сделаете, по умолчанию он будет root. Вместо ожидания пароля другого пользователя, как это делает su, sudoприменяет политику безопасности. Политика безопасности по умолчанию — проверять файл /etc/sudoers. Версия этого файла по умолчанию включает в себя:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

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

7
28.01.2020, 02:13

Теги

Похожие вопросы