Я хочу запустить сценарий без запроса пароля. Я редактировал файл / etc / sudoers и написал несколько строк за последней. Это мой файл:
#
Defaults env_reset
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
#includedir /etc/sudoers.d
jose ALL= NOPASSWD: /sbin/shutdown -h now
jose ALL= NOPASSWD: /sbin/shutdown -r now
jose ALL= NOPASSWD: /home/jose/sync.sh
Код сценария (он отлично работает с паролем):
#!/bin/bash
#Filename: sync.sh
echo "Empezando sincronizar....."
ping -c 1 -t 1 172.18.2.100 > /dev/null 2> /dev/null # ping and discard output
if [ $? -eq 0 ]; then # check the exit code
echo "${ip} is up" # display the output
sudo mount -t smbfs //172.18.2.100/Downloads /home/jose/pc1
rsync -r -u -verbose /home/jose/pc1/movies/ /home/jose/Movies/
rsync -r -u -verbose /home/jose/pc1/series/ /home/jose/TV?Shows/
sudo umount /home/jose/pc1
# you could send this to a log file by using the >>pinglog.txt redirect
else
echo "${ip} is down"
fi
echo "Fin sincronizacion"
Я могу выключиться и перезагрузиться без ввода пароля, но когда я пытаюсь запустить последнюю строку, сценарий запрашивает пароль. Я заменяю путь сценария на «ВСЕ», и я могу запускать команды root без пароля, но не могу запустить команду mount / umount и сценарий.
Пользователь принадлежит ....
jose: jose adm dialout cdrom floppy audio video plugdev пользователи lpadmin sambashare admin
Есть помощь? Заранее спасибо.
В / etc / sudoers ( используйте visudo
для редактирования ) добавьте:
jose ALL= NOPASSWD: /bin/mount
jose ALL= NOPASSWD: /bin/umount
В /etc/sudoers
удостоверьтесь, что строка все еще, там говорит:
jose ALL= NOPASSWD: /home/jose/sync.sh
Не удаляйте ту строку!
Дополнительный: В Вашем сценарии удалите sudo
s перед каждым использованием команды для примера:
sed -i 's/^\(\s*\)sudo\s*/\1/g' /home/jose/sync.sh
Это не необходимо, но проверяет точку. Можно оставить файлы, как это, если Вы хотите смочь выполнить его как обычный пользователь, без sudo /home/jose/sync.sh
, и затем попроситься пароля.
Запустите свой скрипт с:
sudo /home/jose/sync.sh
sudo
не предложит Вам пароль. Важно иметь sudo перед Вашим вызовом к сценарию.
Также из соображений безопасности выполняет следующие команды на Вашем сценарии:
sudo chown root:root /home/jose/sync.sh
sudo chmod o-rwx /home/jose/sync.sh
Таким образом, никто не может отредактировать Ваш сценарий без пароля root. Это важное, потому что еще все, которые сидят на Вашем компьютере как бесплатный метод и метод пароля меньше для выполнения команд как корня.
Проблема со способом, которым Вы сделали это, что Вы даете полномочия запустить скрипт с полномочиями пользователя root, но на самом деле не выполняете его как корневое использование sudo
.
Единственной вещью, которую Вы выполняете как корень, являются две команды, которые имеют "sudo" перед ними (которые являются, конечно, umount /home/jose/pc1
и mount -t smbfs //172.18.2.100/Downloads /home/jose/pc1
). Но те два монтируют, что команды НЕ имеют корневых полномочий (и не должен несмотря на pl1nk, описывающий, как Вы дали бы им корневое разрешение в его ответе), поскольку они не перечислены в /etc/sudoers
иметь NOPASSWD
fot пользователь jose
.