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

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

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

1
задан 29 October 2016 в 08:55

4 ответа

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

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

6
ответ дан 3 December 2019 в 06:22

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

0
ответ дан 3 December 2019 в 06:22

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

sudo env PATH=$PATH command

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

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

alias sudo2='sudo env PATH=$PATH'

Затем Вы могли использовать sudo2 command выполнять исполняемый файл с sudo использование собственного ПУТИ.

2
ответ дан 3 December 2019 в 06:22

Почему сценарий перестал работать, когда выполнено корнем?

Необходимо проверить путь эффективного пользователя... в этом случае 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.

0
ответ дан 3 December 2019 в 06:22

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

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