Изменение разрешений и выполнение корневых скриптов. Что лучше?

После каждой приостановки, когда я просыпаюсь с ноутбуком, он никогда не подключается к какой-либо сети и должен перезапустить NetworkManager снова. Итак, из-за лени я написал этот сценарий , который работает нормально, как и ожидалось.

Я использовал блок if, чтобы проверить, что скрипт всегда выполняется пользователем root:

if [ $(id -u) -ne 0 ]
then
    echo "ERROR : Root Priveleges Required"                                                                                       
    exit NOT_ROOT                                                                                                                 

else                                                                                                                                  
    netrestart                                                                                                                
fi

И я дал этому сценарию это разрешение (будучи root при выполнении этой команды):

chmod u+x netrestart

Теперь, когда я запускаю этот скрипт как пользователь без полномочий root, он показывает это

bash: ./netrestart: Permission denied

И затем, запуск сценария с sudo работает нормально

sudo ./netrestart

Я думаю, что делает проверку root в сценарии бесполезной. Теперь у меня есть 2 вопроса:

  1. Должен ли я удалить эту часть кода или все еще использовать в сценарии?

  2. Что лучше и как?

    • Проверка, является ли пользователь root внутри скрипта, и предоставление прав на выполнение всем, т. Е. chmod 755 netrestart
    • Установка необходимых прав доступа для самого скрипта и не включая проверку, если пользователь является корнем внутри скрипта, то есть chmod 711 netrestart
1
задан 18 January 2018 в 11:23

1 ответ

Я думаю, что ваш скрипт может быть сжат до:

#!/bin/bash

NOT_ROOT=2
sudo service network-manager restart || exit $NOT_ROOT
if service network-manager status
then
    echo "Successfully Restarted NetworkManager"
else
    echo "ERROR : Failed to work"
    exit 1
fi

sudo проверит для вас root-доступ и при необходимости подскажет. Проверка service ... status будет более надежно сообщать вам, нормально ли запущен NetworkManager.

Вы можете предоставить права на выполнение этого сценария всем, и sudo позаботится о проверке разрешений.

0
ответ дан 18 January 2018 в 11:23

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

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