запустить сценарий от имени пользователя root без пароля [закрыто]

Я хочу запустить сценарий без запроса пароля. Я редактировал файл / 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

Есть помощь? Заранее спасибо.

1
задан 10 November 2017 в 22:12

2 ответа

В / etc / sudoers ( используйте visudo для редактирования ) добавьте:

jose ALL= NOPASSWD: /bin/mount
jose ALL= NOPASSWD: /bin/umount
0
ответ дан 10 November 2017 в 22:12

Фиксация

  1. В /etc/sudoers удостоверьтесь, что строка все еще, там говорит:

    jose ALL= NOPASSWD: /home/jose/sync.sh
    

    Не удаляйте ту строку!

  2. Дополнительный: В Вашем сценарии удалите sudos перед каждым использованием команды для примера:

    sed -i 's/^\(\s*\)sudo\s*/\1/g' /home/jose/sync.sh
    

    Это не необходимо, но проверяет точку. Можно оставить файлы, как это, если Вы хотите смочь выполнить его как обычный пользователь, без sudo /home/jose/sync.sh, и затем попроситься пароля.

  3. Запустите свой скрипт с:

    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.

3
ответ дан 10 November 2017 в 22:12

Другие вопросы по тегам:

Похожие вопросы: