Como executar um aplicativo usando o sudo sem uma senha?

40

... mas ainda é necessário para aplicativos que precisam de privilégios de administrador?

Para permitir o seguinte:

$ apache2ctl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

Para referência, vi essa configuração nas instâncias da e3 da amazônia

Qualquer ideia?

tutuca
fonte
Este é um ótimo tutorial sobre os fóruns que detalha a criação de um arquivo separado para especificar os programas que você costuma usar. E é uma boa ideia por razões de segurança.
Todd Partridge 'Gen2ly'

Respostas:

51

Você precisa editar o arquivo sudoers. Esteja ciente de que o sucesso oferece um sistema menos seguro e a falha pode quebrar o sudo. SEMPRE edite o arquivo sudoers com sudo visudo, pois o visudo verifica se há erros e não salvará o arquivo se houver algum.

É uma má idéia dar permissão a tudo para executar como root sem uma senha, para deixar passar o executável que você precisa (apache2ctl); anexe o seguinte na parte inferior do arquivo:

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

Você pode substituir o caminho para um executável por "ALL", se desejar, fornecendo um sudo completo sem senha.

Substitua YOURNAME pelo seu nome de usuário e pressione Ctrl+ Xpara salvar e sair. Se ocorreu um erro, ele oferecerá a reversão, edição ou salvamento de qualquer maneira.

Certifique-se de usar o caminho completo para um executável:
ie. /usr/bin/apache2ctlem vez de apenas apache2ctl. Isso é importante porque, sem declarar explicitamente o caminho, o sudo permitirá que qualquer programa chamado apachectl no caminho atual do usuário seja executado como root.

Mark Paskal
fonte
3
Observe que %YOURNAMEisso dará a permissão ao grupo nomeado como seu usuário, o que normalmente não é um problema, já que todo usuário normal possui um grupo com nome semelhante nos sistemas Ubuntu. Para dar permissão ao seu usuário, especifique YOURNAMEsem o%.
Daniel Werner
Existe uma maneira de ser mais restrutivo? (apenas algumas funções de executável)
3pic 04/04/2015
11
Post antigo, mas eu com certeza gostaria de concluir essa resposta, restringindo a entrada dos sudoers para um nome de host específico (se possível), e quer a determinados argumentos O para nenhum argumento em tudo (seguintes apache2ctl), assim: YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">. --- Em todos os casos, man 5 sudoersé a referência a que ir.
precisa saber é o seguinte
25

A resposta real para essa pergunta pode ser complicada porque o sudo é muito poderoso e pode ser configurado para fazer coisas legais. Isso é explicado detalhadamente na documentação .

A resposta curta é executada sudo visudoem um terminal. Se esta é a primeira vez que você executa o visudo, ele pergunta qual editor você prefere. O nano é geralmente considerado o mais fácil de usar, mas escolha o editor com o qual você se sinta mais confortável. Você precisará decidir a quem você deseja dar acesso; poderia ser ALLpara todos (a muito má ideia) , um usuário ou um grupo do sistema. Os grupos são prefixados com um sinal de%. Por exemplo, se você quisesse conceder steroid_usersprivilégios de root a todos os membros do grupo sem a necessidade de uma senha para todos os comandos, você adicionaria:

%steroid_users ALL=(ALL) NOPASSWD: ALL

até o final do arquivo, saia e salve o arquivo. Se tudo correr bem, e você for um membro do grupo steroid_users, poderá emitir sudo *some-command*sem precisar se preocupar em digitar sua senha.

Lembre-se de que qualquer pessoa que tenha acesso ao seu terminal enquanto estiver conectado - ou se você tiver uma configuração ssh para autenticação baseada em chave ou (ainda pior) tiver habilitado logins de sessão sem senha - acesso completo e sem restrições a todo o seu sistema. Se você tiver vários usuários no seu sistema ou se este for um servidor de arquivos, todos os arquivos dos usuários poderão estar em risco, pois o root poderá fazer qualquer coisa!

Além disso, se você cometer um erro, o visudo exibirá uma mensagem de erro e não salvará as alterações no arquivo. Isso ajudará a impedir a quebra completa do sudo. Você realmente deve ler a documentação . O Sudo foi projetado para fornecer aos usuários acesso suficiente para realizar seu trabalho sem a necessidade de expor todo o seu sistema. Pode ser vantajoso fornecer apenas acesso livre de senha para determinados comandos.

Eu espero que isso ajude.

Chris
fonte
Isso funcionou, eu peguei isso e depois usei o "sudo service sudo restart" em askubuntu.com/questions/192050/… e pude usar tudo isso na minha sessão ativa do Ubuntu. Impressionante!
Patrick
5

Você precisará editar o arquivo '/ etc / sudoers' (existe um comando 'visudo' para isso.) Para adicionar NOPASSWD antes da lista de comandos permitidos para o seu usuário ou grupo. Se o seu usuário estiver no grupo 'admin' - você precisará do seguinte:

%admin ALL=(ALL) NOPASSWD: ALL

Verifique https://help.ubuntu.com/community/Sudoers , btw.

korjjj
fonte
3

Você PODE adicionar o sinalizador nopasswd à lista de usuários, mas isso não elimina todas as perguntas feitas pelas senhas. Apenas o primeiro será solicitado.

  1. Editar sudoers: sudo visudo(É necessário usar o sudo. Este é um arquivo de administrador.)
  2. Adicione seu usuário com o sinalizador nopasswd após a Linha de administrador (no final). Por exemplo:
    cyrex ALL = NOPASSWD: ALLoucyrex ALL = (ALL) NOPASSWD: ALL
Luis Alvarado
fonte
2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

ou

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

Eu acho que isso faria isso.

Mas tenha cuidado ao remover senhas para o sudo.

Alex
fonte
2
Você deve especificar o caminho absoluto no primeiro exemplo, por razões de segurança - um usuário inescrupuloso pode alterar $ PATH e roubar o acesso root com um nome de comando não qualificado.
bgvaughan
0

Agora, a resposta simples! Não é possível estragar nada ou danificar sua instalação.

Basta digitar sua senha algumas vezes e nunca mais precisará digitá-la! Isso permitirá que você adicione uma conta de administrador local ao grupo "raiz", que não será comentado a partir de um modelo que permitirá privilégios de superusuário "raiz" ao grupo inteiro. Você pode ler minha preocupação / solução de segurança para este procedimento na parte posterior desta postagem.

% nome de usuário e é a variável global do seu nome de usuário (substitua-o pelo nome de usuário desejado)

Etapa 1: abra uma janela do terminal e digite " sudo usermod -a -G root %username%"

Etapa 2: copie / cole este ...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

Etapa 2 OU tipo

sudo nano /etc/pam.d/su`

Vá para a linha 19 e remova o "#" antes # auth sufficient pam_wheel.so trust(pode ser um número de linha diferente para alguns)

* O primeiro comando adiciona seu% username% ao grupo "root"

O segundo / terceiro comando permite que todos os membros do grupo "root" sejam superusuário sem uma senha, em vez de permitir apenas ao usuário "root" su privilégios de autenticação.


Nota final:

Não brinque com /etc/sudoers... Há muitas verificações / saldos pelos quais a autenticação 'su' deve passar. A autenticação de superusuário usa o mesmo procedimento pam.d de todas as outras autenticações de login. "/etc/security/access.conf" possui o layout para controle de acesso via comunicação tcp / ip (192.168.0.1) e por serviços de telnet (tty1 & tty2 & tty3 ... etc) Isso permite uma filtragem mais precisa por aplicativo via protocolo de transporte. Se a segurança é sua preocupação, ela deve ser direcionada a ameaças remotas / de código contra alguém que realmente toque seu computador quando você sair da sala !!!

Alimento para a paranóia (não digite este em apenas analisá-lo):

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^ Isso bloqueia o acesso ao console para qualquer pessoa que não seja membro do sistema ou raiz. Às vezes, os programas instalam nomes de usuário / grupos que são explorados!

Nathaniel F. Malm
fonte
2
Não é um especialista em segurança, mas parece um pouco contra-intuitivo. Você está desativando senhas de um grupo inteiro para permitir que um único usuário execute um aplicativo específico sem uma senha para evitar a "complexidade" de refinar o sudo para um aplicativo específico, certo? E tudo isso em um servidor público? O script desativou seus instintos básicos de sobrevivência? A segurança é COMPLEXA POR DESIGN. Lembre-se, é como uma cebola. Ele tem camadas e faz você chorar ... A perda de dados em servidores comprometidos é apenas parte da equação. Um hacker ataques primavera-embarque do seu sistema é igualmente grave, mas muitas vezes esquecido
hmayag
2
É contra-intuitivo e contra o senso comum: abrir todo o pote de cookies para um usuário que precisa apenas de um cookie é bastante irresponsável. Você adicionaria usuários à lista de sudoers e removeria a necessidade de inserir senhas em vez de editar os arquivos / arquivos do sudoers. "Se uma arma não é segura para crianças, não lhes dê um cânone." -me
John