ubuntu: дозвольте користувачеві запускати скрипт з кореневими дозволами


9

У мене є ubuntu 8.04, і я хочу написати скрипт bash, який працює так, як rootможе працювати кожен користувач.

Я сам вмію робити судо.

Як це зробити?

ПОЯСНЕННЯ : Я не хочу робити це з судо, тому що тоді користувачам доведеться вводити свій пароль. Я просто хочу, щоб вони запустили сценарій як root, можливо, щось налаштоване, не знаю.

Відповіді:


23

Якщо це був звичайний двійковий код, ви можете встановити, запустивши

# chmod u+s /path/to/binary

На жаль, сценарії не можуть бути налаштовані. (Ну можна, але це ігнорується). Причиною цього є те, що перший рядок сценарію повідомляє ОС, під яким інтерпретатором слід запускати сценарій. Наприклад, якщо у вас був сценарій із:

#!/bin/bash

Ви насправді закінчилися бігом

/bin/bash /path/to/script

Очевидно, що вам знадобиться перекладач, щоб встановити, що означало б, що всі сценарії будуть налаштовані. Це було б погано.

Ви можете зробити це за допомогою sudo, помістивши в файл / etc / sudoers, виконавши візуально.

ALL ALL=NOPASSWD: /path/to/script

І тепер будь-який користувач може працювати

$ sudo /path/to/script

Це дозволяє їм запускати сценарій без введення пароля.

Існує альтернатива, яка не вимагає sudo в команді, яка вимагає створення невеликого встановленого бінарного файлу, який виконує ваш сценарій, але кожен додатковий встановлений бінарний додає ще одну потенційну проблему безпеки.


Я думаю, це відповідь, яку я шукав. Не можу я встановити сценарій bash, лише двійковий? (Звичайно, я б вжив заходів, щоб зробити його
непридатним

Ні, ви не можете встановити сценарій.
wfaulk

wfaulk: Ви раніше могли, але останні останні дистрибутиви Linux більше не дозволяють. Ви можете використовувати такий інструмент, як shc, щоб "скласти" сценарій, а потім зробити його налаштованим.
Кайл Брандт

wfaulk: Зрозуміло, це може вийти з твого шляху, щоб зробити щось, що навмисно вимкнене, тому це, мабуть, погана ідея :-)
Кайл Брандт

Замініть термін ALLна ім'я користувача, щоб дозволити бігу саме тому одному судеру без запуску пароля.
hdave

3

Мені потрібно було вставити цей рядок НА КІНЦІ / etc / sudoers: ALL ALL = NOPASSWD: <filename> Мабуть, пізніше %admin ALL=(ALL) ALLперезапис вимагає пароля для користувачів адміністратора.

Немає жодних проблем із безпекою, що дозволяють запускати скрипт як root, доки сценарій виконує чітко визначені, нешкідливі, дозволені дії, і якщо значення для будь-яких параметрів не можуть спричинити неправильний поведінку сценарію.

Але є готча ...

Завжди використовуйте повні шляхи в іменах команд і файлів. Якщо ви пишете щось на кшталт echo Hello world!in myrootscript, хтось може написати a ~/bin/echo scriptі myrootscriptвиконати як root що б там не було.

/bin/echo "Hoping this will keep you safe" :-)


якщо неможливий користувач на машині може редагувати цей скрипт, тоді цей користувач може перейняти машину. Якщо той самий користувач має слабкий пароль, то ніщо не заважає вашій машині бути повністю порушеною.
hdave

2

За замовчуванням членам wheelгрупи дозволено sudoбудь-яку команду як root. Це, мабуть, як ви використовуєте sudoна сьогоднішній день.

Щоб дозволити іншого користувача, вам потрібно створити sudoersправило. Наприклад:

mickey.mouse ALL = (root) NOPASSWD: /usr/local/bin/test.sh

Дозволяє користувачеві mickey.mouseвиконувати команду /usr/local/bin/test.shяк rootбез необхідності додаткового запиту пароля.

Ви повинні прочитати цей документ для отримання додаткової інформації.


Debian / Ubuntu використовують групу адміністратора, а не колесо. Це, можливо, трохи точніша назва.
Девід Пашлі

Називай мене старомодно, але ..;)
Ден Карлі

1
старомодний: P
Девід Пашлі

0

Використовуйте, chmod +s <filename>щоб встановити біт suid. Це означає, що коли файл виконується, він працює з дозволами власника файлу (тому пригнічуйте його до root, щоб він запустився як такий).

Однак це може бути ДУЖЕ небезпечним чимось на зразок баш-скриптів, оскільки користувач знаходить спосіб змінити його, він може легко отримати кореневу оболонку. Переконайтесь, що його не може написати ніхто, крім root.

Linux не дозволяє встановлювати сценарії, для цього вам доведеться компілювати його як програму. Натомість ви можете використовувати файл sudoers (/ etc / sudoers) та додати такий рядок.

<username> ALL = NOPASSWD: /path/to/script


0

Ще одна альтернатива: ви можете зробити невелику встановлену програму C навколо цього сценарію, що

  • перевіряє будь-які обмеження, які ви хочете застосувати (список користувачів, час, завантаження системи, ...)
  • виконання журналів / аудитів за бажанням
  • виконує сценарій

Начебто ваш власний підмножина з декількох можливостей sudo.

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