impedir que alguns comandos sejam executados com privilégios de superusuário

impedir que alguns comandos sejam executados com privilégios de superusuário

Eu sou novo no bash. Eu escrevi um script que consiste em muitas linhas e comandos. Este é um arquivo de configuração para obter e instalar vários pacotes. Como resultado, preciso usar muitos comandos de instalação em meu script, como este comando:

sudo apt install python2.7 python-pip

Na tentativa de evitar o uso de tantos sudoem meu script, decidi remover sudoantes de cada comando e executar o script como sudo ./setup.sh.

Funciona bem, mas o problema é que existem alguns comandos que realmente não precisam sudoantes deles, como mkdir, wgete ...

Quando executo meu script usando sudo ./setup.sh, os diretórios criados usando este script não podem ser removidos, copiados ou editados sem usar sudo, porém eu queria que eles fossem acessíveis para todos os usuários. Portanto, minha pergunta é a seguinte:

Ao executar um script com sudo (como sudo ./setup.sh), existe alguma maneira de não executar alguns de seus comandos internos como mkdirou wgetcom privilégios de superusuário?

Responder1

Ao usar sudo, você inicia um novo shell como qualquer usuário para o qual você disse sudopara mudar (root, por padrão). Isso definirá a SUDO_USERvariável para o nome de usuário desse usuário:

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

Se eu executar este script como eu, não recebo nada, pois a variável não está definida:

$ foo.sh
SUDO_USER: 

Mas se eu executar com sudo, a variável será definida:

$ sudo foo.sh
SUDO_USER: terdon

Com isso em mente, você pode simplesmente executar os comandos específicos que deseja executar como um usuário normal, usando o nome de usuário do usuário que inicia o script. Portanto, altere seu wgete chmodquaisquer outros comandos que você deseja executar como um usuário normal no script e faça-os rodar sudo -u $SUDO_USERpara que sejam executados como um usuário normal em vez de root:

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

O uso da SUDO_USERvariável garante que todos os diretórios e arquivos criados pertencerão ao usuário que iniciou o script e você não precisará informar explicitamente ao script o nome desse usuário sempre que executá-lo.

Responder2

Para fazer com que os diretórios criados por mkdir sejam usados ​​por todos os usuários, você precisa alterar a permissão para WORLD legível/gravável usando o comando chmod.

No script, após executar mkdir, use o comando abaixo:

chmod -R 755  «directory-name»

(Legível para todos, gravável apenas pelo root)

ou

chmod -R 777  «directory-name» 

(Legível e também gravável por todos os usuários do sistema)

Para wget, use o chmodcomando após o download.

OU

Ainda assim, se você quiser executar o comando como outro usuário, use o comando su:

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

informação relacionada