
Проблема:
Запуск скрипта при возврате sudo
sudo: mount-remove-hiberfile: command not found
Информация:
Папка скриптов: '/scripts' (все мои пользовательские скрипты хранятся здесь)
Мой пользователь: 'cybex'
cybex@cybex-W55xEU:~$ echo $PATH //и 'sudo echo $PATH' возвращают тот же путь
/home/cybex/.rbenv/plugins/ruby-build/bin:/home/cybex/.rbenv/shims:/home/cybex/.rbenv/bin:/home/cybex/.rbenv/plugins/ruby-build/bin:/home/cybex/.rbenv/shims:/home/cybex/.rbenv/bin:/home/cybex/bin:/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/scripts:/snap/bin
root@cybex-W55xEU:/home/cybex# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/scripts
Скрипт «mount-remove-hiberfile» не может быть запущен от имени обычного пользователя, поэтому мне нужно будет запустить sudo mount-remove-hiberfile
.
Почему sudo не обнаруживает этот скрипт?
Примечание: Я нашел несколько вопросов по этой теме, но ни один из них не ответил на мой вопрос.
ОБНОВЛЯТЬ
ls -l /scripts/
total 20
-rwxr-xr-x 1 root root 95 Apr 26 22:45 apt-manage
-rwxr-xr-x 1 root root 40 Apr 26 22:45 apt-update
-rwxr-xr-x 1 root root 769 Apr 28 20:47 create-desktop-file
-rwxr-xr-x 1 root root 370 May 16 22:45 extractgst.sh
-rwxr-xr-x 1 root root 1085 May 16 21:25 mount-remove-hiberfile
ОБНОВЛЕНИЕ (вставьте вставку, содержащую команду, ошибку и каталог)
cybex@cybex-W55xEU:~$ pwd
/home/cybex
cybex@cybex-W55xEU:~$ ls -l /scripts/
total 52
-rwxr-xr-x 1 root root 95 Apr 26 22:45 apt-manage
-rwxr-xr-x 1 root root 2283 May 21 16:59 backup
-rwxr-xr-x 1 root root 109 May 21 16:59 check-port
-rwxr-xr-x 1 root root 2185 May 21 16:59 connected
-rwxr-xr-x 1 root root 769 Apr 28 20:47 create-desktop-file
-rwxr-xr-x 1 root root 164 May 21 16:59 download
-rwxr-xr-x 1 root root 370 May 16 22:45 extractgst.sh
-rwxr-xr-x 1 root root 5142 May 21 16:59 firewall
-rwxr-xr-x 1 root root 3881 May 21 16:59 firewall.save
-rwxr-xr-x 1 root root 1085 May 16 21:25 mount-remove-hiberfile
-rwxr-xr-x 1 root root 80 May 21 16:59 portquiz
-rwxr-xr-x 1 root root 84 May 21 16:59 space-used
drwxr-xr-x 1 root root 0 May 21 17:00 tmp
cybex@cybex-W55xEU:~$ sudo mount-remove-hiberfile
sudo: mount-remove-hiberfile: command not found
решение1
Конфигурация sudo по умолчанию сбросит путь независимо от того, как вызывается sudo. Вот два распространенных способа обойти это, первый — это постоянное изменение, второй — аргумент командной строки для sudo (который вы можете добавить как псевдоним).
постоянные и глобальные изменения
Вам /etc/sudoers
необходимо изменить две настройки:
sudo visudo
В файле sudoers по умолчанию есть параметр, Default env_reset
который очищает настройки среды из оболочки, вызывающей sudo, даже если sudo вызывается с опцией -E (сохранить среду).
В файле найдите параметр с именем env_keep
. Он определяет, какие переменные окружения разрешено передавать в корневую среду, созданную с помощью sudo. Обычно в файле sudoers по умолчанию есть ряд операторов env_keep="xxx" и env_keep+="xxx". По умолчанию PATH не входит в число переменных окружения, через которые разрешено передавать.
Добавьте PATH к одной из этих записей или закомментируйте строку env_reset. Если у вас нет записей env_keep, найдите Defaults env_reset
и добавьте новую env_keep = "PATH"
запись после нее.
Во-вторых, даже если вы разрешите переменной PATH передаваться в среду sudo, путь в sudoers ограничен настройкой. Defaults secure_path='...'
Вы можете либо закомментировать эту настройку, либо добавить путь, по которому находится ваш скрипт, в запись.
После этого sudo сохранит переменную PATH и выполнит ваш скрипт.
обходной путь командной строки
Чтобы избежать изменения файла sudoers, вы можете вызвать sudo с помощью следующего синтаксиса:
sudo env "PATH=$PATH" <script name>
решение2
sudo по умолчанию не использует ваш путь и не запускает bashrc root или эквивалент. Смотритеhttps://askubuntu.com/q/128413для полного описания.