Como executar comandos como outro usuário em scripts Linux
Naturalmente, quando você executa um comando ou script, o sistema o executa como um processo iniciado por você. Mas você pode executar comandos e scripts como outro usuário.
Os processos têm proprietários
Quando um programa ou script é executado, o Linux cria um processo. Esse processo tem um dono. O proprietário é outro processo ou o nome de uma conta de usuário se uma pessoa o iniciou.
A propriedade de um processo outline algumas das capacidades e o ambiente do processo. Dependendo de como o processo foi iniciado, ele herda certos atributos de seu processo pai ou do usuário. Ou, mais estritamente, o processo que o usuário usou para iniciar o programa, que geralmente é um shell.
A execução de um comando ou script como outro usuário pode ser útil porque a propriedade de qualquer arquivo criado pelo processo pertencerá ao usuário apropriado.
Toda vez que usamos sudo
estamos executando um comando como outro usuário. A conta de usuário padrão usada por sudo
é o usuário root ou ‘tremendous’. Por causa disso, sudo
é muitas vezes erroneamente pensado para representar superusuário faz. Mas isso é apenas jargão frouxo. Na verdade significa usuário substituto faça.
Com sudo
, você pode executar comandos como qualquer outro usuário, não apenas como root. Ironicamente, você precisa de privilégios de root para fazer isso. Mas iniciar um programa ou script pertencente a outro usuário não é o mesmo que executar esse processo Como esse outro usuário. Você ainda estará executando-o como root.
Veja como executar um processo como outro usuário e como executar comandos de dentro de um script como se tivessem sido executados por outro usuário.
Executar um script como outro usuário
Estamos usando um computador que tem vários usuários configurados. Um é Mary, que tem o nome de usuário maryq, e o outro é Dave com o nome de usuário dave.
Mary tem um script chamado “other-user.sh” em seu diretório inicial. Este é o texto do roteiro.
#!/bin/bash echo "Script title:" $0 echo "Running listing:" $(pwd) echo "Script operating as consumer:" $(whoami)
Ele imprime o nome do script, que é mantido no $0
variável de ambiente. Em seguida, u.s. pwd
para imprimir o diretório de trabalho. Por fim, utiliza o whoami
comando para imprimir o nome do usuário que iniciou o script. Ou quem é acha lançou o roteiro.
Copie o texto do script em um editor e salve-o como “other-user.sh” no diretório inicial de uma conta de usuário diferente.
Precisamos tornar o script executável. Nós vamos usar o chmod
comandar e usar o +x
(executar) opção e a -u
(usuário) para definir o sinalizador de execução apenas para o proprietário. Isso significa que apenas Mary pode executar o script. Vamos verificar as permissões do arquivo com ls
.
chmod u+x other-user.sh
ls
Da esquerda para a direita, as permissões são:
- O proprietário pode ler, escrever e executar o arquivo.
- Os membros do grupo podem ler e gravar o arquivo.
- Outros podem apenas ler o arquivo.
Portanto, os únicos usuários capazes de executar o script são Mary e root. Isto é o que acontece quando Mary executa o script:
./other-user.sh
Fomos informados de que o diretório de trabalho atual do script é o diretório inicial de Mary e o proprietário do script é a conta de usuário maryq.
Como esperado, Dave não pode executar o script.
/house/maryq/other-user.sh
Se Dave tiver privilégios de usuário root, ele pode tentar executar o script como root, usando sudo
.
sudo /house/maryq/other-user.sh
Este é um sucesso parcial. O script é executado, mas o proprietário do script é root, não maryq.
O truque que precisamos empregar é o sudo -u
opção (usuário). Isso permite que você especifique o usuário com o qual deseja executar o comando. Se você não usar o -u
opção, sudo
o padrão é usar root. Se quisermos executar o comando como Mary, precisamos passar o nome de sua conta de usuário para o sudo
comando.
sudo -u maryq /house/maryq/other-user.sh
Desta vez, o script informa que o proprietário do processo é maryq.
Vamos adicionar uma linha ao script “other-user.sh”. Poço echo
algum texto e redirecione a saída para um arquivo chamado “mary.txt”.
#!/bin/bash echo "Script title:" $0 echo "Running listing:" $(pwd) echo "Script operating as consumer:" $(whoami) echo "That is going right into a report in /house/maryq/" > /house/maryq/mary.txt
Estamos criando o novo arquivo no diretório inicial de Mary. Isso está perfeitamente bem porque estamos executando o script como Mary.
./other-user.sh
Se verificarmos no diretório inicial de Mary, veremos que o arquivo foi criado e que a propriedade do arquivo pertence à conta de usuário maryq.
ls -hl mary.txt
Este é o mesmo comportamento que veríamos se Mary tivesse realmente lançado o script.
RELACIONADO: Como usar o comando chmod no Linux
The runuser Command
You need to use the sudo -u
instructions we’ve used up to now inside of a script, however there’s any other command, runuser
, that’s designed to run processes as a special consumer from inside of scripts. It has higher dealing with of the go back code from the introduced procedure, and it has fewer overheads than sudo
.
The runuser
command must be run through root, however this is achieved through operating all of the script as root. You don’t want to use sudo
within the script. The runuser
command can be utilized at the command line, too, so isn’t limited to script use, despite the fact that it’s the most popular means for scripts.
Dave can’t listing the “mary.txt” report as a result of it’s in Mary’s house listing and he doesn’t have get admission to.
cat /house/maryq/mary.txt
Podemos espiar dentro do arquivo usando runuser
, Contudo. o -
A opção (login) inicia um novo shell com um ambiente muito próximo do ambiente de shell que Mary teria se eles realmente estivessem logados. -c
(comando) é seguida pelo comando que queremos executar.
sudo runuser - maryq -c 'cat mary.txt'
Practice que o comando não precisa do caminho completo para o arquivo. Podemos referenciar o arquivo da mesma forma que Mary faria, em relação ao seu diretório inicial.
Como usuário Dave, criaremos um script chamado “run-maryq.sh” com este texto:
#!/bin/bash runuser -l maryq -c 'cat mary.txt'
Vamos torná-lo executável:
chmod +x run-maryq.sh
Vamos ver o que acontece quando tentamos executá-lo.
./run-maryq.sh
o runuser
O comando reclama porque está sendo executado por um usuário comum. Vamos executá-lo novamente com sudo
.
sudo ./run-maryq.sh
Isso funciona como gostaríamos, e como se a própria Mary tivesse lançado o roteiro.
Qual Usar?
Na linha de comando, não há muito o que escolher entre eles. Mas como você tem que usar sudo
com runuser
de qualquer forma, você também pode usar sudo
sozinho.
Mas em um roteiro, runuser
é o comando preferido.
RELACIONADO: 10 comandos básicos do Linux para iniciantes
Fonte da Notícia: www.howtogeek.com