Em dias de muito movimento, eu gostaria de correr
$ ./configure && make && sudo make install && halt
à noite e vá para a cama, esperando que o aplicativo seja instalado automaticamente. Mas o que vejo no dia seguinte é a tela em que o sudo me pede a senha. Então, como eu poderia executar o sudo com senha em uma linha de comando ou existe algum outro método para fazer isso?
halt
executar como root.sudo
tem um tempo limite de 15 minutos? Não foi possível executar, digamos,sudo ls
ou algo semelhante, digitar sua senha e executar o comando acima,sudo
ainda com privilégios ativos? (Eu não posso testar isso no momento, caso contrário, eu postaria isso como uma resposta.) #sudo
é configurável. Pessoas preocupadas com a segurança (também conhecidas como paranóicas, como eu) definem o valor como zero ... :-)Respostas:
Sim, use o
-S
comutador que lê a senha de STDIN:Portanto, para o seu caso, seria assim:
é claro, substitua
<password>
pela sua senha.fonte
Você pode substituir sua linha de comando por esta:
$sudo su
$./configure && make && make install && halt
Você será solicitado a fornecer sua senha imediatamente, e o restante dos comandos será executado como superusuário.
fonte
sudo sh -c "./configure && make && make install && halt"
Várias das outras soluções têm a desvantagem de serem executadas desnecessariamente
./configure
emake
como raiz.Isso é um pouco complicado, mas deve funcionar:
Observe o uso de aspas duplas para permitir
$USER
a expansão pelo shell (não raiz).Também posso adicionar um
sleep 60
antes dohalt
comando. Às vezes, faço coisas assim, esperando que o comando seja executado por um longo tempo, mas algo dá errado e termina imediatamente; asleep
deixa-me matar o comando antes de o sistema é desligado. Ou você pode usarshutdown
com um argumento de tempo.fonte
Você também pode configurar o sudo com
visudo
para permitir que o usuário use make como sudo sem senha.fonte
Defina HISTIGNORE como " sudo -S "
Em seguida, passe sua senha com segurança para o sudo:
"HISTIGNORE" significa não salvar este comando no histórico. Esse é o histórico na memória ou no arquivo "~ / .bash_history".
Por exemplo, o abaixo irá canalizar sua senha com segurança para o comando sudo, sem manter um histórico da sua senha.
"-S" significa usar stdin para a senha,
"-K" significa ignorar credenciais em cache para forçar o sudo a sempre perguntar. Isso é para um comportamento consistente.
A desvantagem do método acima é que, se você quiser ver os comandos executados no histórico posteriormente, eles não estarão lá. Outro método é atualizar o cache de credenciais de autenticação do sudo (o padrão é ativado com tempo limite de 5 minutos) e, em seguida, execute o sudo separadamente. Mas a desvantagem disso é que você precisará estar ciente do cache de 5 minutos.
Por exemplo:
Nota: Eu executei um sudo antes de cada comando para garantir que o cache do sudo seja atualizado, pois o padrão é 5 minutos. Sim, whoami não deve demorar 5 minutos, mas acho que é melhor executá-lo antes de cada comando para garantir a consistência. Você também pode colocar "export HISTIGNORE = ' sudo -S'"no seu arquivo ~ / .bashrc e carregue-o com". ~ / .bashrc "ou faça logoff e faça o login. No entanto, estou pensando em usá-lo para fins de script, por isso vou mantê-lo no topo de todos os meus scripts para obter melhores práticas de segurança. Definindo" echo "" | sudo -S -v "para uma variável também pode ser uma boa idéia; basta executar a variável antes de cada comando que precise de privilégios de root, consulte o comentário de Janar. O comentário de John T" também deve incluir o parâmetro "-k" , como se você executasse "sudo -S" sem "-k" e o cache de autenticação sudo já possua suas credenciais (e ainda é válido, o cache de autenticação sudo padrão é de 5 minutos), o bash executará sua senha como um comando, que é ruim.
fonte
Observe que eu descobri que o método não funciona em uma versão mais antiga do sudo, especificamente "Sudo version 1.6.7p5":
Onde, como esse método, funciona em versões mais antigas e novas, sudo:
fonte
Você também pode fazer isso:
fonte
Se você quiser ter mais cuidado, poderá criar um script, alterar as permissões do arquivo para que apenas o root possa ler e editar e, em seguida, apenas executá-lo.
Exemplo:
1) Crie um arquivo:
2) Cole isso e salve:
3) Torne executável:
4) Altere as permissões do arquivo para que somente o root possa lê-lo e editá-lo:
5) Execute:
Apreciar ;-)
fonte
Configurar o sudo dessa forma é perigoso se alguém perceber que o sudo não requer senha na sua conta. A menos que você saiba o que está fazendo, não faça isso. Já tive isso no meu programa local de treinamento A + com o meu computador experimental muitas vezes ... -_-
O que John T. disse parece bom, exceto que ainda existe o risco de encontrar a senha no histórico do shell. O que CarlF disse soa melhor, mas se um comando falhar, o computador ainda estará executando com privilégios de superusuário.
fonte
Pessoalmente, faço o mesmo que John T respondeu em 9 de novembro de 2009 às 2:47. Também melhorei o meu de acordo com a orientação da resposta dele, obrigado.
A diferença é que eu costumo fazer uso de variáveis, algo como:
Dessa forma, eu posso facilmente usar a minha variável em vez do sudo,
Isso é bastante útil em alguns scripts mais longos. Uso-os principalmente para computadores pessoais de outras pessoas, que tenho que manter.
Eu também recomendo prestar atenção em:
fonte
O problema está resolvido. Por exemplo, para a raiz do usuário:
fonte