2015-03-24 3 views
1

Я новичок в Ubuntu и Баш сценариев, но я только что сделал runUpdates.sh и добавил это к моему .profile, чтобы запустить его:Как сделать скрипт запуска команды, как корень

if [ -f "$HOME/bin/runUpdates.sh" ]; then 
    . "$HOME/bin/runUpdates.sh" 
fi 

Проблема у меня is, я хочу, чтобы скрипт работал, как если бы root выполнял его (потому что я не хочу вводить пароль sudo)

Я нашел несколько мест, которые я должен был бы сделать sudo chown root.root <my script> и sudo chmod 4755 <my script>, и когда я запускаю он должен работать от root. Но это не так ...

Сценарий выглядит хорошо для меня. Что мне не хватает? -rwxr-xr-x 1 root root 851 Mar 23 21:14 runUpdates.sh*

Не могли бы вы помочь мне запустить команды в этом скрипте как root? Я действительно не хочу менять файл sudors, я просто хочу запустить команды в этом скрипте у root (если это возможно).

#!/bin/sh 

echo "user is ${USER}" 

#check for updates 
update=`cat /var/lib/update-notifier/updates-available | head -c 2 | tail -c 1`; 
if [ "$update" = "0" ]; then 
     echo -e "No updates found.\n"; 
else 
     read -p "Do you wish to install updates? [yN] " yn 
     if [ "$yn" != "y" ] && [ "$yn" != "Y" ]; then 
       echo -e 'No\n'; 
     else 
       echo "Please wait..."; 
       echo `sudo apt-get update`; 
       echo `sudo apt-get upgrade`; 
       echo `sudo apt-get dist-upgrade`; 
       echo -e "Done!\n"; 
     fi 
fi 

#check for restart 
restartFile=`/usr/lib/update-notifier/update-motd-reboot-required`; 
if [ ! -z "$restartFile" ]; then 
     echo "$restartFile"; 
     read -p "Do you wish to REBOOT? [yN] " yn 
     if [ "$yn" != "y" ] && [ "$yn" != "Y" ]; then 
       echo -e 'No\n'; 
     else 
       echo `sudo shutdown -r now`; 
     fi 
fi 

Я добавил пользователь отлаживать, она всегда выводит мой пользователь не корень, и запрашивает пароль SUDO (так как я звоню команды с Sudo) или говорит мне, ты корень? (если я удалю sudo)

Также есть способ вывода команд обновления stdout в режиме реального времени, а не только один блок, когда они заканчиваются?

(я также попытался с притон как #!/bin/bash)

ответ

6

УИП не работает над сценариями оболочки по соображениям безопасности. Если вы хотите запустить скрипт как root без пароля, вы можете отредактировать /etc/sudoers, чтобы он мог работать с sudo без пароля.

Чтобы «обновить в реальном времени», вы должны запустить команду напрямую, вместо использования эха.

+0

Спасибо! Я новичок во всем этом, но я не понимаю, как это может быть безопаснее. Если скрипт может быть запущен с правами администратора, только он может работать от имени root (правда?) Но с/etc/sudors я должен указать путь к файлу. Что делать, если кто-то rm является существующим файлом и там там есть. Не может ли этот непреднамеренный скрипт работать как суперпользователь сейчас? – KPK

+2

Вот почему вы меняете права собственности и разрешения файла, чтобы предотвратить несанкционированное использование прав. – miken32

+0

@KPK В дополнение к разрешениям файловой системы, если 'sudo' составляет 1,8.7 или более поздней версии, вы также можете использовать 'Digest_Spec' в' sudoers', поэтому он подходит только в том случае, если верстка SHA-2 верна. – user4098326

4

Это не безопасно, вы, вероятно, следует использовать sudoers, но если вам действительно нужно/хотите, вы можете сделать это с чем-то вроде этого:

echo <root password> | sudo -S echo -n 2>/dev/random 1>/dev/random 
sudo <command> 

Это работает, потому что sudo не требует пароля для краткого окна после успешного использования.

корневых скрипты SUID были прекращены много лет назад, если вы действительно хотите, чтобы запускать скрипты как корень, нужно, чтобы обернуть их в исполняемом файле, вы можете увидеть пример того, как сделать это на моем блоге: http://scriptsandoneliners.blogspot.com/2015/01/sanitizing-dangerous-yet-useful-commands.html

Пример: изменить исполняемые разрешения и поместить фильтр вокруг других исполняемых файлов с помощью сценария оболочки, но концепция обертки скрипта оболочки также работает и для SUID, получившийся исполняемый файл из сценария оболочки можно сделать SUID.

https://help.ubuntu.com/community/Sudoers

Смежные вопросы