Я на Debian 9. Есть некоторые команды, которые не могут быть найдены, когда я не sudo прямо перед этим. Могу ли я отключить эту функцию?
У меня есть Arch Linux, и у него нет этой функции безопасности. Мой пользователь в группе администраторов.
Я на Debian 9. Есть некоторые команды, которые не могут быть найдены, когда я не sudo прямо перед этим. Могу ли я отключить эту функцию?
У меня есть Arch Linux, и у него нет этой функции безопасности. Мой пользователь в группе администраторов.
В Debian стандартная $PATH . var для пользователя root (или при использовании sudo) содержит каталоги /sbin/ и /usr/sbin/ и /usr/local/sbin/ , тогда как пользователь без полномочий root (даже в группе sudo и т. д.) не имеет эти каталоги в $PATH по умолчанию.
user@LM193:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
user@LM193:~$ sudo -i
[sudo] password for user:
root@LM193:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@LM193:~#
Я бы не назвал это функцией безопасности.
Исполняемый файл можно запускать по его единственному имени, если он находится в одном из каталогов, указанных в переменной среды PATH . В моем Debian 9 файл /etc/profile определяет базовый PATH следующим образом:
if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH
Это означает, что для любого пользователя с UID 0 (в моем Debian только для root) по умолчанию
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
(каталоги : и для любого другого пользователя , это
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
Я называю это "по умолчанию", потому что обычно /etc/profile загружается для любого пользователя, но затем пользователь может изменить свой собственный PATH . Обычно ~/.profile - хороший файл, делайте так.
Когда вы запускаете sudo some_command , sudo использует еще один набор каталогов вместо PATH . Этот набор может быть или не быть определен где-то в конфигурации sudo (/etc/sudoers , /etc/sudoers.d/*). Если это не определено явно, /etc/sudoers говорит, что значением по умолчанию является
secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
(Это несколько упрощено, другие варианты могут изменить эту механику; подробности смотрите в man 5 sudoers ).
Обратите внимание, что PATH для root и secure_path используемые sudo содержат несколько каталогов с именем sbin (в разных местах), а PATH для обычного пользователя - нет. В этих каталогах есть инструменты, предназначенные для использования в основном пользователем root .
Поэтому, если sudo some_command находит исполняемый файл, а единственный some_command не находит , то это потому, что some_command находится в одном из каталогов, которые находятся в secure_path но не в вашем PATH .
Но это не функция безопасности. Любой пользователь может добавить все эти каталоги sbin в свою собственную PATH , поэтому после ввода some_command оболочка попытается запустить исполняемый файл. Или они могут использовать полный путь, например /sbin/some_command . Реальные функции безопасности включают:
/sbin/hwclock);sudo (такой файл, скорее всего, будет помещен в bin в первую очередь, например: /bin/systemd);sbin (например, /sbin/discover в моем Debian).Ваша учетная запись не настроена для запуска some_command без sudo потому что, как обычный пользователь, он вам не нужен. Но если вы все-таки хотите его, просто используйте его полный путь и получите его ( где может пригодиться whereis some_command ). Заполнение вашей PATH всеми этими каталогами sbin приведет только к засорению вашей вкладки (например, в Bash).
Завершение вкладки заслуживает некоторого объяснения. Возьмем Bash в качестве примера оболочки с этой функциональностью. Оболочка имеет PATH в своей среде, она может читать ее, поэтому, если вы another_com и нажмете tab, она может дать вам подсказку о another_command найденном где-то в соответствии с вашим PATH . Если some_command находится где-то в sbin , вкладка some_com не найдет его.
Тем не менее вкладка sudo some_com может найти его. Это может показаться странным, потому что оболочка не может знать root PATH и не может читать /etc/sudoers и тому подобное. В результате оболочка временно добавляет общие каталоги sbin в PATH только для выполнения этого поиска. Это делается внутри файла /usr/share/bash-completion/completions/sudo , соответствующая строка
local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
Чтобы ответить на ваш явный вопрос
Могу ли я отключить эту функцию?
Да, вы можете добавить каталоги sbin в вашу PATH . Это не позволит вам успешно запускать команды без sudo , если они действительно нуждаются в sudo (а многие это делают).