1

Проблема:

Запуск сценария, когда возвращается sudo

sudo: mount-remove-hiberfile: command not found

Информация:

  • Папка Scripts: '/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

2 ответа2

3

По умолчанию sudo не использует ваш путь и не запускает bashrc root или его эквивалент. Смотрите https://askubuntu.com/q/128413 для полного описания.

3

Конфигурация 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 env, путь ограничен в sudoers параметром Defaults secure_path='...' Вы можете либо закомментировать этот параметр, либо добавить путь, по которому ваш сценарий находится в записи.

После этого sudo сохранит переменную PATH и выполнит ваш скрипт.

обход командной строки

Чтобы избежать изменения файла sudoers, вы можете вызвать sudo с помощью следующего синтаксиса:

sudo env "PATH=$PATH" <script name>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .