• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mpeixoto

sudo

20 mensagens neste tópico

Existe maneira de ao invocar um comando com o sudo, indicar logo a password em vez de a inserir quando ele pede?

Nos comandos que depois perguntam se sim ou não pode-se fazer:

Yes | apt-get upgrade

E eu queria indicar também a password na mesma linha que invoco o comando. É possível?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

echo "password" | sudo -S ps xu

por exemplo. :)

Isso funciona mesmo?

Testei no Mac e não deu, e no Debian, com o su também não dá.

Mesmo que funcione, convém ter algum cuidado, pois provavelmente a password vai ficar acessível através do '.bash_history' (no mínimo, convém editar o ficheiro e apagá-la).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mpeixoto@mpeixoto-desktop:~$ echo ***** | sudo -S apt-get upgrade
[sudo] password for mpeixoto:
A Ler Listas de Pacotes... Pronto
Construindo Árvore de Dependências       
Reading state information... Pronto 
Os seguintes pacotes serão actualizados:
  bittorrent capplets-data eog evince evolution evolution-common
  evolution-data-server evolution-data-server-common evolution-plugins
  file-roller gcalctool gdm gedit gedit-common gnome-about gnome-cards-data
  gnome-control-center gnome-desktop-data gnome-games gnome-games-data
  gnome-menus gnome-panel gnome-panel-data gnome-session gtk2-engines
  gtkhtml3.14 hwdb-client-common hwdb-client-gnome libcamel1.2-10
  libebook1.2-9 libecal1.2-7 libedata-book1.2-2 libedata-cal1.2-6
  libedataserver1.2-9 libedataserverui1.2-8 libegroupwise1.2-13
  libexchange-storage1.2-3 libgnome-desktop-2 libgnome-menu2
  libgnome-window-settings1 libgnomeui-0 libgnomeui-common libgtkhtml3.14-19
  libgtksourceview2.0-0 libgtksourceview2.0-common libpanel-applet2-0
  libpango1.0-0 libpango1.0-common libqt3-mt libsmbclient libwnck-common
  libwnck22 linux-restricted-modules-2.6.22-14-generic
  linux-restricted-modules-common python-bittorrent python-gmenu samba-common
  smbclient sound-juicer
59 pacotes actualizados, 0 pacotes novos instalados, 0 a remover e 0 não actualizados.
É necessário fazer o download de 72,2MB de arquivos.
Depois de descompactar, 1409kB adicionais de espaço em disco serão utilizados.
Você deseja continuar [Y/n]? Abortado. 

Funcionar, funciona. O problema é que no apt-get upgrade ele aborta. Já tentei meter "Yes" por todo o comando, mas nada. Alguém sabe dar a volta ao gajo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Cria um .sh com isto:

echo "Y" | apt-get upgrade

E fazes:

echo "password" | sudo -S sh script.sh

Testei no Mac e não deu, e no Debian, com o su também não dá.

sudo != su.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para resolver o problema o problema do "Yes" penso que podes usar a opção '-y' no apt-get.

Testei no Mac e não deu, e no Debian, com o su também não dá.

sudo != su.

O facto do sudo ser diferente do su não implicava que lessem a password de forma diferente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se tiveres o 'expect' instalado, procura exemplos no disco ou no google e fazes um expect script rápidamente para resolver os 2 problemas (Y/N e a password) :-)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Testei no Mac e não deu, e no Debian, com o su também não dá.

sudo != su.

O facto do sudo ser diferente do su não implicava que lessem a password de forma diferente.

São programas diferentes, o sudo tem a flag -S para ler a password pelo stdin em vez de ser do terminal, coisa que o su não tem.
      -S  The -S (stdin) option causes sudo to read the password from the

          standard input instead of the terminal device.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em primeiro lugar o apt-get tem  uma opção especifica para fazer isso, não é preciso andar a inventar com a shell.

Em segundo lugar se queres fazer comandos repetidos com o sudo espaçados no tempo ao ponto de o sudo pedir-te a password, então mais vales pedir uma shell de root ao sudo. Podes fazer isso com o "sudo -s" e mantens o terminal aberto num desktop virtual à parte para não te incomodar nem te enganares.

Tal como disse o garmg, usar o except para criar um script para isso é uma opção, forçar o sudo a apanhar a password do stdin é outra. Mas na minha opinião meter passwords em plain text no sistema de ficheiros é muito má ideia (está provado históricamente). Por isso apesár de te terem dito várias soluções recomendo que uses a minha.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema é o seguinte, estou a desenvolver uma aplicação (em java) para usar nas minhas happyhours, e nessa aplicação quando chegar á hora inserida por mim, ele abre os programas escolhidos, (ex. amule,azureus), faz downloads de ficheiros(indico o url), e tambem queria inserir a opção de fazer as actualizações e instalar programas.

Uma opção é correr o programa como sudo, e assim não preciso de andar com passwords, mas tenho problemas de segurança, vou abrir as aplicações como o amule e azureus em root, e fazer downloads que possam ter "ficheiros estranhos",

Por isso preferia correr o programa em user normal, e poder executar o apt-get upgrade e o apt-get install, e para isso vou precisar do comando sudo e passwords.

Que opções tenho? o que é isso de except script?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em Java?

Isso é claramente um overkill, já pensaste em utilizar perl, python, ou ruby?

Para que precisas de correr esses programas com privilégios de super utilizador? Isso parece-me uma péssima ideia no que toca a segurança.

NÃO FAÇAS ISSO DESSA FORMA!!!  É UM ERRO GRAVE!!!

Enquanto quiseres fazer isso dessa forma não te ajudo mais. Vai contra os meus princípios ajudar a fazer algo tão errado! Só as tarefas de administração de sistema é que devem ser feitas com permissões de super utilizador e nada mais!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é claramente um overkill, já pensaste em utilizar perl, python, ou ruby?

Já pensaste que ele pode não ter conhecimentos nessas linguagens?

Eu por exemplo não tenho e não ia estar a aprender só para fazer uma programa como esse.

mpeixoto em relação ao teu programa, o magician fez um do género em java pode ser que ele te dê uma dicas...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é claramente um overkill, já pensaste em utilizar perl, python, ou ruby?

Já pensaste que ele pode não ter conhecimentos nessas linguagens?

Eu por exemplo não tenho e não ia estar a aprender só para fazer uma programa como esse.

Falta saber é o que é mais difícil, aprender uma dessas linguagens, ou fazer conseguir fazer algo seguro em Java...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já pensaste que ele pode não ter conhecimentos nessas linguagens?

Eu por exemplo não tenho e não ia estar a aprender só para fazer uma programa como esse.

Eu aprendia. E caso ele fizesse o mesmo e tivesse dúvidas, temos secções no P@P para o ajudar. :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Já pensaste que ele pode não ter conhecimentos nessas linguagens?
Falta saber é o que é mais difícil, aprender uma dessas linguagens, ou fazer conseguir fazer algo seguro em Java...

Não é difícil, nem é demorado aprender a utilizar essas linguagens de programação, aliás essa é uma das características dessas linguagens de programação. Dominar em profundidade, demora mais algum tempo (principalmente o Perl), mas o Python e Ruby são muito simples. Em 5 minutos estás a usar qualquer uma destas linguagens, e para fazeres algo tão simples quanto este utilizador pretende, também não são precisos conhecimentos avançados.

Por exemplo, já fiz um protótipo de um web service em Ruby em menos de 5 minutos, e não sei programar em Ruby.

Resumindo, o know-how não é um obstáculo para a utilização destas linguagens.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok nisso podeis ter razão, mas acho que não é solução dizer a um determinado utilizador usar uma determinada linguagem... Se ele quer fazer em Java a opção é dele, mesmo que quisesse fazer isso em Assembly! :P;)

É que eu não me estou a ver usar uma linguagem que não conheço para fazer os meus projectos só porque a performance ou a segurança (nenhuma aplicação é totalmente segura) podem ser afectadas. De certeza que Java tem mecanismos para reduzir isso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ok nisso podeis ter razão, mas acho que não é solução dizer a um determinado utilizador usar uma determinada linguagem... Se ele quer fazer em Java a opção é dele,

Eu não o obriguei a fazer nada!

Eu fiz uma recomendação técnica. Ele aceita-a se quiser. Mas tal como ele tem o direito de escolhe o que quiser eu tenho o direito de recomendar, o que quiser, quando quiser.

Não percebo porque não teria eu de ter liberdade de expressão, apenas por ele ter liberdade de escolha.

As questões de segurança que mencionei, não têm nada a ver com a questão da linguagem linguagem, têm sim a ver com a hipótese de guardarem passwords em plain text e com o correr aplicações como super-utilizador de forma completamente desnecessária e contra todas as boas práticas de segurança.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em Java?

Isso é claramente um overkill, já pensaste em utilizar perl, python, ou ruby?

Para que precisas de correr esses programas com privilégios de super utilizador? Isso parece-me uma péssima ideia no que toca a segurança.

NÃO FAÇAS ISSO DESSA FORMA!!!  É UM ERRO GRAVE!!!

Enquanto quiseres fazer isso dessa forma não te ajudo mais. Vai contra os meus princípios ajudar a fazer algo tão errado! Só as tarefas de administração de sistema é que devem ser feitas com permissões de super utilizador e nada mais!!!

claramente não leste o que eu escrevi:

Uma opção é correr o programa como sudo, e assim não preciso de andar com passwords, mas tenho problemas de segurança, vou abrir as aplicações como o amule e azureus em root, e fazer downloads que possam ter "ficheiros estranhos",

Por isso preferia correr o programa em user normal, e poder executar o apt-get upgrade e o apt-get install, e para isso vou precisar do comando sudo e passwords.

Que opções tenho? o que é isso de except script?

Eu sei dos problemas de segurança, não disse que os implementei, simplesmente estou a perguntar se alguém conhece outras maneiras de fazer, falaram do except script, gostava que me explicasses como funciona.

Quanto a linguagem não estou a ver o problema de fazer em Java, se fizesse em VB e depois portasse pelo mono era muito mais fácil. Mas eu estou a fazer em Java. A aplicação já está praticamente feita, só falta agora escolher a maneira mais segura de executar o gestor de actualizações. 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que tu disseste leva a crer que tencionas/tencionavas fazer as coisas dessa forma.

O except é um programa (e também bibliotecas em várias linguagens de programação), que permite controlar aplicações interactivas que tenham a sua interface de utilizador num terminal.

Se quiseres saber mais sobre o except procura na documentação da tua linguagem de programação ou no google. Que dizer mais que isto é demais.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora