[ad_1]
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 foi iniciado por uma pessoa.
A propriedade de um processo define algumas das capacidades e do 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.
Executar um comando ou script como outro usuário pode ser útil porque os arquivos criados pelo processo serão de propriedade do usuário correspondente.
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 ‘super’. Por isso, sudo
é muitas vezes erroneamente pensado para representar superusuário faz. Mas isso é apenas jargão preguiçoso. na verdade significa usuário substituto fazer.
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 o que 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 um script como se fossem 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 com 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 name:" $0 echo "Working directory:" $(pwd) echo "Script running as user:" $(whoami)
Imprime o nome do script, que se encontra no $0
Variável ambiental. então use pwd
para imprimir o diretório de trabalho. Por fim, use o whoami
comando para imprimir o nome do usuário que iniciou o script. ou quem é acho liberou o roteiro.
Copie o texto do script em um editor e salve-o como “another-user.sh” no diretório inicial de uma conta de usuário diferente.
Precisaremos tornar o script executável. Nós usaremos o chmod
encomendar e usar +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
Somos 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.
Conforme esperado, Dave não consegue executar o script.
/home/maryq/other-user.sh
Se Dave tiver privilégios de root, você pode tentar executar o script como root, usando sudo
.
sudo /home/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
por padrão, use root. Se quisermos executar o comando como Mary, precisamos passar o nome da conta de usuário dela para o sudo
domínio.
sudo -u maryq /home/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”. Bom echo
algum texto e redirecionar a saída para um arquivo chamado “mary.txt”.
#!/bin/bash echo "Script name:" $0 echo "Working directory:" $(pwd) echo "Script running as user:" $(whoami) echo "This is going into a file in /home/maryq/" > /home/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 o 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 a própria Mary tivesse escolhido o roteiro.
RELACIONADO: Como usar o comando chmod no Linux
El comando runuser
Podrías usar el sudo -u
comandos que hemos usado hasta ahora dentro de un script, pero hay otro comando, runuser
, que está diseñado para ejecutar procesos como un usuario diferente desde scripts internos. Maneja mejor el código de retorno del proceso iniciado y tiene menos gastos generales que sudo
.
los runuser
el comando debe ser ejecutado por root, pero eso se logra ejecutando todo el script como root. No necesitas usar sudo
dentro del guión. los runuser
El comando también se puede usar en la línea de comandos, por lo que no está restringido al uso de secuencias de comandos, aunque es el método preferido para las secuencias de comandos.
Dave no puede listar el archivo “mary.txt” porque está en el directorio de inicio de Mary y no tiene acceso.
cat /home/maryq/mary.txt
Podemos olhar dentro do arquivo usando runuser
, porém. a -
A opção (login) inicia um novo shell com um ambiente muito semelhante ao ambiente shell que Mary teria se tivesse realmente conectado. a -c
A opção (comando) é seguida pelo comando que queremos executar.
sudo runuser - maryq -c 'cat mary.txt'
Observe que o comando não precisa do caminho completo para o arquivo. Podemos nos referir ao arquivo da mesma forma que Mary faria, em relação ao seu diretório pessoal.
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
a runuser
o comando reclama porque está sendo executado por um usuário normal. Vamos executá-lo novamente com sudo
.
sudo ./run-maryq.sh
Isso funciona como gostaríamos, e como se Mary tivesse apresentado o roteiro ela mesma.
Qual usar?
Na linha de comando, não há muito o que escolher entre eles. Mas como você usa sudo
com runuser
de qualquer forma, você também pode usar sudo
por si mesmo.
Mas em um roteiro, runuser
é o comando preferido.
RELACIONADO: 10 comandos básicos do Linux para iniciantes
[ad_2]