Um script de exemplo pode ser o seguinte:
#!/bin/bash
sudo su
ls /root
Ao usar ./test.sh
como usuário normal, execute ls
como superusuário e saia, ele alterna para o root; e quando eu sair, ele executa ls /root
como o usuário normal.
Alguém pode me falar sobre o mecanismo?
sudo su
faz meus olhos doerem.sudo -s
?sudo su
porque estou mais acostumado com as opções dosu
que com as opçõessudo
. Conheço bem as opções do sudo, mas posso digitar as opções mais rapidamente. Mas sim, acho que isso significa que não conheço o sudo o suficiente.sudo -i
é semelhante asu -
quandosudo -s
opera comosu
(sem o traço)Respostas:
Os comandos em um script são executados um por um, independentemente. O próprio Script como o pai de todos os comandos do script é outro processo independente e o comando su não o altera e não pode ser alterado para root: o comando su cria um novo processo com privilégios de root.
Após a conclusão do comando su, o processo pai, ainda em execução como o mesmo usuário, executará o restante do script.
O que você deseja fazer é escrever um script de wrapper. Os comandos privilegiados vão para o script principal, por exemplo
~/main.sh
O script do wrapper chama o script principal com permissões de root, assim
Para iniciar esse processo, você executa o wrapper, que, por sua vez, inicia o script principal após alternar o usuário para o usuário raiz.
Essa técnica de invólucro pode ser usada para transformar o script em um invólucro. Basicamente, verifique se está sendo executado como root; caso contrário, use "su" para se reiniciar.
$ 0 é uma maneira prática de fazer um script se referir a si mesmo, e o comando whoami pode nos dizer quem somos (somos root?)
Portanto, o script principal com o invólucro interno se torna
Observe o uso de exec. Significa "substituir este programa por", que efetivamente encerra sua execução e inicia o novo programa, lançado por su, com root, para executar a partir do topo. A instância de substituição é "root", portanto, não executa o lado direito do ||
fonte
Use o seguinte no script.
O código entre o bloco HERE será executado como root.
fonte
sudo su
está chamando dois programas. Usesudo -s <<HEREDOC
ousu user <<HEREDOC
... Estúpido limite de 5 minutos.Sem mais argumentos
su
, o shell de login será executado como root. É o que a primeira linha do seu script realmente faz. Quando você sair, o fechamento do shell de login, su retornos e seu script continua a execução, isto é, com a segunda linha:ls /root
. Eu acho que você pode simplesmentesudo ls /root
fazer o que quiser.fonte
ls
, mas isso é apenas uma amostra. Na verdade, preciso fazer muito mais coisas com privilégios de root :-) Então, prefiro a resposta do @ Ankit.Depois de acionar
sudo su
um novo processo com a eficáciauserid (euid=EUID)
de superusuário bifurcado, temos um novo bash sendo executado em diferentes IDs de processo(pid=PID)
associados ao mesmo terminal(tname=TTY)
.Explicação
Suponha que, após o disparo,
ps -A | grep bash
você tenha21460 pts/2 00:00:00 bash
como saída. Agora, quando você executa os./test.sh
dois comandossudo su
els /root
será colocado no spoolPID 21460
. Após a execução, quando você tiverroot
como usuário ativo atingidops -A | grep bash
novamente, você notará um novo bash sendo executadoPID say, 21570
. Sair deroot bash
irá matar o bash recém-bifurcado, revertendouser's bash
e, portanto, executa o comando em spoolls /root
antes de liberar o prompt.fonte