Как сделать скрипт доступным для пользователя root?

Обычный пользователь может запустить этот скрипт, но root не может его найти.

У меня есть простой скрипт, который я сохранил в ~/bin, Я обновил .profile файл для включения этой папки в PATH. Я могу зайти в терминал, работать в любом каталоге, ввести имя скрипта, и он работает нормально. Но если в этом терминале я переключаюсь на root, скрипт не может быть найден. Я предполагаю, что где-то есть файл, который требует нового обновления $PATH, но я не знаю, какой именно.

4 ответа

Если вы используете sudo, что, вероятно, имеет место, есть политика безопасности, которая изменяет переменную среды $PATH на безопасный путь (определенный в файле / etc / sudoers). Каталог ~/bin не включен в набор по умолчанию secure_path в файле sudoers, поэтому выполняется sudo script не сработает, но sudo ~/bin/script было бы.

Вы можете поместить скрипт в одну из папок, определенных в файле конфигурации sudoers (например, / usr / local / bin), чтобы сделать его напрямую доступным. Secure_path также можно изменить в файле конфигурации, хотя это не рекомендуется.

Временно предотвратить sudo от сброса вашего пути к secure_pathДля одной команды, без изменения какой-либо глобальной конфигурации, вы можете сделать:

sudo env PATH=$PATH command

куда command это имя исполняемого файла, который вы хотите запустить, который находится в вашем PATH,

Вы можете сделать псевдоним для этого и добавить свой собственный (не root) ~/.bashrc... что-то вроде

alias sudo2='sudo env PATH=$PATH'

Тогда вы могли бы использовать sudo2 command запустить исполняемый файл с sudo используя свой собственный путь

Как уже говорили другие, привилегированная среда не такая, как у пользователя, и по веским причинам. В основном есть два решения: (i) вызывать ваши сценарии по их пути, или (ii) размещать ваши сценарии в корне и перемещать их выше в файловой иерархии (скажем, /usr/custom/bin, но все, что работает), затем обновлять ПУТЬ пользователя, а не пытаться сделать наоборот.

Почему скрипт не запускается при запуске root?

Вы должны проверить путь эффективного пользователя... в этом случае root,

Запустите это:

(Первые две строки - это приглашения плюс команды. Последняя строка - это вывод команды.)

$ sudo su -
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

Рекомендации по размещению вашего скрипта для других пользователей:

Сделать подкаталог в разделе /opt для вашего проекта и поместите там исполняемые скрипты вашего проекта. Это место, которое переживет новую установку ОС в том же разделе (конечно, за исключением форматирования).

Корневая область для ваших скриптов может быть в:

/opt/myprojectname/myscriptfiles/

Теперь вы можете связать свои скрипты /usr/local/bin/ с

$ sudo ln -s /opt/myprojectname/myscriptfile/myscript.sh /usr/local/bin/myscript.sh`

Вам не придется менять root Переменная $PATH, потому что, как видно из теста выше, она уже есть.

Таким образом, вместо изменения корневого пути, вы можете изменить свой путь для поиска /opt/myprojectname/myscriptname

Кроме того, вы можете связать свой ~/bin/myscript.sh в /usr/local/bin/myscript.sh,

Другие вопросы по тегам