Невозможно получить доступ к некоторым командам при входе в систему как не-root пользователь (даже после «su root»)

Невозможно получить доступ к некоторым командам при входе в систему как не-root пользователь (даже после «su root»)

Так что я не понимаю, что здесь происходит.

Я установил сервер Debian 10.2 и настроил его так же, как и другие серверы. Все работает отлично, и поскольку это локальная машина, и я единственный пользователь, я использовал root для всего. Теперь я хотел отключить ssh root-login.

Но если я использую пользователя без прав root для входа через SSH, он не может найти основные команды, такие как «service» или «reboot». (Bash: Service: Command not found.)

Еще более странно, я даже не могу получить доступ к этим вещам, когда использую "su root". Я действительно пользователь root, но все равно не могу получить доступ/найти эти команды.

При входе в систему напрямую как пользователь root все работает как надо.

решение1

Переменная окружения вашего пользователя PATHне содержит путь, где находятся эти файлы. Когда вы используете su -, переменные окружения root загружаются в ваш сеанс. Смотрите man su:

   -, -l, --login
          Start the shell as a login shell with an environment similar
          to a real login:

             o      clears all the environment variables except TERM and
                    variables specified by --whitelist-environment

             o      initializes the environment variables HOME, SHELL,
                    USER, LOGNAME, and PATH

             o      changes to the target user's home directory

             o      sets argv[0] of the shell to '-' in order to make
                    the shell a login shell

Чтобы лучше это понять, давайте посмотрим, где находится один из этих двоичных файлов, и сравним PATH пользователя root с вашим:

  1. делатьsu -
  2. do which service. Это скажет вам, откуда serviceбудет загружен двоичный файл, если вы выполните команду service.
  3. do echo $PATH. Это покажет вам PATH root. Вы заметите, что каталог, где serviceможно найти, указан здесь.
  4. сделать exit, чтобы снова стать не-root пользователем.
  5. do echo $PATH. Вы увидите, что каталога, который вы указали на шаге 2, здесь нет.

Это обычная настройка по умолчанию в определенных средах/дистрибутивах, где определенные административные программы, такие как service, fdiskи т. д., хранятся в каталоге, например /usr/sbinили /sbin, при этом такие каталоги находятся вне PATH обычных пользователей.

Связанный контент