Чому я не можу подати деякі команди? (наприклад, vim)


16

У мене на сервері друзів є доступ до судо, працює centos-6.3, але коли я намагаюся запускати деякі команди, як-от, sudo vim /var/www/html/index.htmlя отримую помилку, sudo: vim: command not foundя можу, однак, запустити sudo suі тоді, vim /var/www/html/index.htmlі це працює, як очікувалося.

echo $PATHі sudo echo $PATHобидва врожайності:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin

sudo which vim однак урожайність:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

Я спробував додати

export PATH=$PATH:/usr/local/bin

до /root/.bashrcчого, як вирішено проблему при використанні, sudo suале не просто sudo <command>.

Як я можу sudo <command>працювати?


Ви вже додали цього користувача до судорів в ОС Centos?
AAlvz

Відповіді:


18

Під час роботи sudoбагато систем налаштовані для очищення середовища від усіх небілевих значень та для скидання змінної PATH до санізованого значення.

Ви знайдете колишнього як Defaults env_resetі декілька Defaults env_keep += "SOME_VARIABLE_NAME"в /etc/sudoers. Останнє "захищене" PATHперевизначення вказано як Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin- видалити цей рядок, щоб видалити цю поведінку під час sudo.


Як яке середовище змінної обробляється друкуються при запуску  , sudo -Vяк root.


Якщо ви не хочете позбутися цих замовчувань, ви завжди можете вказати програми, використовуючи їх повний шлях ( sudo /usr/local/bin/vim).

Крім того, ви можете дозволити свій обліковий запис SETENVу sudoersфайлі, наприклад:

%wheel  ALL=(ALL)       SETENV: ALL

Це дозволяє переопрацювати за замовчуванням оточення таким чином: sudo PATH=$PATH which vimтак як змінна інтерпретується вашою оболонкою перед виконанням команди, в результаті чого буде успадковано PATH(яке, ймовірно, не включає /sbinтощо, хоча).


Спасибі. Я буду використовувати роботу Деніса до тих пір, поки не зроблю власника додати файл судорів.
JaredMcAteer

6
sudo echo $PATH

не робить те, що ти думаєш. $PATHзамінюється на (вашу) оболонку перед виконанням команди.

Для досягнення бажаної поведінки можна скористатися sudo -i.

Від людини судо :

-i [команда]

Параметр -i ( імітувати початковий вхід ) запускає оболонку, вказану у записі passwd (5) цільового користувача, як оболонку входу. Це означає, що специфічні для входу файли ресурсів, такі як оболонка .profileабо .loginбудуть прочитані оболонкою. Якщо вказана команда, вона передається оболонці для виконання.


1
Це підходяще вирішення, поки я не зможу власником скорегувати файл sudoers.
JaredMcAteer

1

Як я можу sudo <command>працювати?

Поки ви не вирішите проблему з шляхами, використовуйте повне ім'я шляху

  sudo /usr/local/bin/vim /var/www/html/index.html

5
Я не збираюся downvote вас, але я ніколи не любив просто працювати навколо проблеми , а не отримувати право на точку з'ясовуючи їх і фіксуючи їх.
Ніколь Гамільтон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.