Чи є спосіб зробити частину скрипту запустити як інший (некоріозний) користувач? Якщо це допомагає, частина, яку потрібно запустити як інший користувач, виникає в кінці сценарію
Редагувати:
ОС -> Ubuntu 9.04
Чи є спосіб зробити частину скрипту запустити як інший (некоріозний) користувач? Якщо це допомагає, частина, яку потрібно запустити як інший користувач, виникає в кінці сценарію
Редагувати:
ОС -> Ubuntu 9.04
Відповіді:
Використовуйте команду sudo в сценарії.
У формі:
sudo -u username command
команда sudo запускає команду як ім'я користувача .
Якщо сценарій запускається як root, я не думаю, що він запропонує ввести пароль. Інакше в цій статті йдеться про те, як використовувати sudo з паролем в одному командному рядку? , і ця стаття розповідає про те, як користуватися sudo без пароля?
chmod +x script.sh
а потім простоsudo -u username script.sh
i
опцію, якщо ви хочете придбати середовище користувача
Ця відповідь хороша, але порада сервера за замовчуванням трохи небезпечна - дозволила б будь-кому запустити що-небудь як root! Тож я публікую тут, бо не можу відформатувати коментар.
Я рекомендую використовувати visudo, щоб надати необхідні дозволи максимально точно. Введіть visudo
і додайте рядок типу:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
Якщо вам потрібно запустити цю саму річ на багатьох хостах, ви можете відкрити її за допомогою:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
Але я б ** не використовував:
username ALL=(ALL) NOPASSWD: ALL
або ім'я хоста користувача = ВСІ
На сторінці чоловіка судора є безліч деталей горілого
username
ім'ям користувача, який повинен мати можливість виконувати команду). Якщо виконуваний файл, який ви хочете запустити, виконується лише одним конкретним користувачем, це теж добре - просто переведіть це ім'я користувача у sudo -u username commandline
рядку сценарію.
# I = як:
#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
# ./run
1: root
2: nobody
3: root
не дуже впевнений у цьому, але якщо ви хочете, щоб ТІЛЬКИ кінець цього сценарію запустився як інший користувач, ви можете додати його su someuser
до кінця сценарію.
Я щось пропускаю?
Сподіваюся, що це допомагає,
З повагою
Таким чином, кінець сценарію буде виконаний іншим користувачем (root). Зверніть увагу на дзвінки $[LINENO+2]
та exit $?
дзвінки. Вони потрібні, щоб закінчити сценарій, щоб виконати його лише один раз, і зберегти код виходу sudo
виклику.
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1