Como atualizar privilégios em um script?

2

Eu tenho um script que modifica arquivos e permissões de grupo. Mas isso não traz efeitos até eu fechar a sessão e abrir uma nova.

Instruções onde as permissões são alteradas:

sudo groupadd --system webapps
sudo useradd --system --gid webapps --home /home/lucio/server/webapps/hello_django hello
sudo chown -R hello:webapps .
sudo chmod -R g+w .
sudo usermod -a -G webapps 'whoami'

Instrução em que recebo o erro:

cd /home/lucio/server/webapps/
cp assets/gunicorn_start.bash.template hello_django/bin/gunicorn_start.bash

A última linha me dá o seguinte erro:

cp: cannot create regular file 'hello_django/bin/gunicorn_start.bash': Permission denied

Isso deve ajudar:

Eu tentei usar login username após os privilégios de alterações, mas isso não faz absolutamente nada.

Como posso atualizar os privilégios sem sair do script?

    
por Lucio 20.05.2014 / 01:50

1 resposta

2

Acho que o melhor que você pode fazer é executar os comandos que precisa executar usando sg .

DESCRIPTION
   The sg command works similar to newgrp but accepts a command. The
   command will be executed with the /bin/sh shell. With most shells you
   may run sg from, you need to enclose multi-word commands in quotes.
   Another difference between newgrp and sg is that some shells treat
   newgrp specially, replacing themselves with a new instance of a shell
   that newgrp creates. This doesn't happen with sg, so upon exit from a
   sg command you are returned to your previous group ID.

Assim, depois de criar o grupo e adicionar-se a ele, você poderá executar comandos como membro desse grupo com sg groupname command . Então, por exemplo, isso funcionará:

sudo groupadd --system webapps
sudo useradd --system --gid webapps --home /home/lucio/server/webapps/hello_django hello
sudo chown -R hello:webapps .
sudo chmod -R g+w .
sudo usermod -a -G webapps $(whoami)

## From now on, run all commands through sg
sg webapps "mkdir foorbar"

Como isso seria difícil de escrever, eu colocaria em uma função:

run_as_webapps() sg webapps "$@"

Em seguida, chame os comandos que você precisa chamar usando essa função

run_as_webapps mkdir foobar

E no final do dia, porém, pode ser mais fácil simplesmente executar o script inteiro como root. Ou isso ou tem dois scripts, um para configurar os grupos e outro para fazer todo o resto. Basta sair e fazer login novamente antes de executar o segundo.

A especificação POSIX afirma claramente que as funções devem ser definidas desta forma:

foo () command

Por razões que eu não entendo, o OP teve problemas com isso e teve que usar

function run_as_webapps(){
    sg webapps "$@"
}
    
por terdon 20.05.2014 / 02:20