предотвратить выполнение некоторых команд с привилегиями суперпользователя

предотвратить выполнение некоторых команд с привилегиями суперпользователя

Я новичок в bash. Я написал скрипт, состоящий из множества строк и команд. Это файл установки для получения и установки нескольких пакетов. В результате мне нужно использовать множество команд установки в моем скрипте, например, эта команда:

sudo apt install python2.7 python-pip

Чтобы избежать использования слишком большого количества символов sudoв моем скрипте, я решил удалить sudoперед каждой командой и выполнить скрипт следующим образом sudo ./setup.sh: .

Работает нормально, но проблема в том, что есть некоторые команды, которые на самом деле не нужны sudoперед ними, например mkdir, wgetи ...

Когда я запускаю свой скрипт с помощью sudo ./setup.sh, каталоги, которые создаются с помощью этого скрипта, не могут быть удалены, скопированы или отредактированы без использования sudo, однако я хотел, чтобы они были доступны для всех пользователей. Поэтому мой вопрос заключается в следующем:

При запуске скрипта с помощью sudo (например, sudo ./setup.sh), есть ли способ не выполнять некоторые из его внутренних команд, например, mkdirили wgetс привилегиями суперпользователя?

решение1

При использовании sudoвы запускаете новую оболочку как пользователь, sudoна которого вы указали переключиться (по умолчанию root). Это установит SUDO_USERпеременную на имя пользователя этого пользователя:

$ cat foo.sh
#!/bin/bash
echo "SUDO_USER: $SUDO_USER"

Если я запущу этот скрипт от своего имени, то ничего не получу, так как переменная не установлена:

$ foo.sh
SUDO_USER: 

Но если я запущу его с помощью sudo, переменная будет установлена:

$ sudo foo.sh
SUDO_USER: terdon

Имея это в виду, вы можете просто запустить определенные команды, которые вы хотите запустить как обычный пользователь, используя имя пользователя, запускающего скрипт. Поэтому измените свои wgetи chmodи любые другие команды, которые вы хотите запустить как обычный пользователь в скрипте, и заставьте их запускаться с помощью sudo -u $SUDO_USERтак, чтобы они запускались как обычный пользователь, а не как root:

apt install python2.7 python-pip ## will run as root
sudo -u $SUDO_USER mkdir foo ## will run as $SUDO_USER

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

решение2

Чтобы сделать каталоги, созданные mkdir, доступными для использования всеми пользователями, необходимо изменить права доступа на WORLD (чтение/запись) с помощью команды chmod.

В скрипте после выполнения mkdirиспользуйте следующую команду:

chmod -R 755  «directory-name»

(Чтение доступно всем, запись доступна только пользователю root)

или

chmod -R 777  «directory-name» 

(Все пользователи системы могут читать и записывать)

Для wgetиспользуйте chmodкоманду после загрузки.

ИЛИ

Если вы все же хотите выполнить команду от имени другого пользователя, используйте команду su:

su - «username» -c 'command to be executed'

Связанный контент