Entenda o relacionamento entre sudo, sudoers e sudoers.d
Pessoal, utilizo o Ubuntu 12.04 e me deparei com uma situação em que o comando sudo retornou com a informação de que o usuário com o qual eu estava logado não estaria no grupo "sudoers".
Isto aconteceu e não sei exatamente o motivo, talvez por causa da atualização do sistema. Recorri às algumas orientações pela Internet, inclusive tutoriais de ajuda no Viva o Linux.
Como resolver este o problema?
Então, descobri que a partir do sudo versão 1.7.2p1-1, o padrão do arquivo /etc/sudoers havia sido modificado, e que a versão 1.8.5p2-1 estaria com bug (talvez esta seja a versão que eu tenha recebido na atualização).
A alteração inclui um diretório com o nome sudoers.d, e este diretório é relacionado no arquivo "sudoers" na linha 28, como segue:
# Includedir /etc/sudoers.d
A linha vem, por padrão, comentada. Ao descomentar esta linha, o sistema forçará o sudo para ler e analisar todos os arquivos no diretório /etc/sudoers.d.
Este diretório não deve terminar com '~' e/ou conter um '.', o que impediria a sua leitura.
Note que deve existir pelo menos um arquivo no diretório /etc/sudoers.d, e todos os arquivos deste diretório devem ter a permissão "0440".
Ou seja, se executado o comando ls -la, as permissões do arquivo aparecerão conforme o exemplo:
-r--r-----
É de suma importância que o diretório e seus arquivos sejam protegidos com a permissão "0440".
Entendi que a ideia é fazer as alterações necessárias para usuários "sudo" neste diretório, não tendo necessidade de alterar o arquivos "/etc/sudoers", mas tudo indica que o bug permanece.
Entretanto, não há necessidade de utilizarmos esse diretório "/etc/sudoers.d", você pode continuar atribuindo as permissões no próprio arquivo /etc/sudoers.
Resolvi meu problema da seguinte forma:
1. Entrei com usuário root, usando:
su - root
2. Digitei a senha de root, editei o arquivo /etc/sudoers, para estes casos utilizo o Nano, mas poderia ser utilizado o Vim ou o Vi e também o GEdit, vai da sua preferência.
3. Incluí no arquivo "/etc/sudoers", abaixo da linha que inicia com "root", o meu "login name", como no exemplo abaixo:
root ALL=(ALL:ALL) ALL
login_name ALL=(ALL:ALL) ALL
Desta forma, resolvi o caso.
Acredito que não seja somente importante resolver os problemas, mas também entendê-los.
[1] Comentário enviado por lcavalheiro em 19/09/2012 - 14:49h
Pra fazer isso com mais segurança você tem que usar o comando visudo, seja invocando-o como root (# visudo) ou com o sudo ($ sudo visudo). Editar diretamente o arquivo é gambiarra e das perigosas.
[2] Comentário enviado por bonilhasilvio em 19/09/2012 - 15:34h
lcavalheiro, obrigado pela contribuição. No meu caso o sudo estava sendo bloqueado, conforme citei no inicio do meu texto, por esse motivo é que utilizei o recurso indicado.
[5] Comentário enviado por bonilhasilvio em 19/09/2012 - 16:17h
lcavalheiro, vamos entender sua preocupação.
O arquivo "/etc/sodoers" é responsável para dar privilégio de root para outros usuários, obviamente é um arquivo de suma importância. O recurso "visudo" edita o "sodoers" criando um arquivo temporário. O "visudo" analisa esse arquivo temporário e se houver erro no script o usuário será informado desse erro antes de concluir definitivamente as alterações no arquivo "sodoers". Por esse motivo a melhor escolha seria o uso do "visudo". Fora isso, não há caroço, nem angu.
[6] Comentário enviado por albfneto em 23/09/2012 - 22:46h
apenas uma curiosidade minha de leigo, pq sou usuario de desktops meus apenas, mesmo na fac, não administro rede, nem intranet.
então meus sudoers , minhas senhas de root e user são só minhas, do meu micro,onde eu coloquei linux.
Para quem administra redes, e nenhum usuario comum terá uma senha de root.
não seria interessante que além de só editar com visudo, o arquivo sudoers seja escondido, hidden, para que ninguém tente editá-lo, ou ele fica só nos servidores, e não no terminais dos users normais?
e se o user normal fizer "sudo su"? não fica root?
[7] Comentário enviado por bonilhasilvio em 24/09/2012 - 12:02h
albfneto,
Não sei se entendi direito sua dúvida, mas vamos lá:
primeiro - o sudoers não está relacionado a um usuário e sim a um sistema.
segundo - o administrador de rede é um usuário que sabe a senha de root do servidor e das estações. Se temos somente desktop (desconectado de rede), pelo menos um usuário desse desktop deve ser o administrador do sistema, portanto deve ter senha de root. Em diversas distros a senha de root será a mesma do usuário que instalou o sistema. O usuário root pode criar outros usuários que não tenham privilégio de root e portanto não poderão usar o recurso "sudo".
terceiro - o sudoers é o módulo que determina quais usuários devem possuir os privilégios de usuário root ou recursos "sudo".
quarto - só poderão alterar o arquivo sudoers usuários que tenham privilégio de root, pois esse arquivo deve ser de propriedade do root e protegido com permissão "0440", ou seja, apenas para leitura. Não há necessidade de que seja um arquivo "hidden". Se for colocado como arquivo "hidden", muito provável que o usuário não consiga mais acessar com direitos de root. Se for o caso faça uma experiência em uma máquina virtual.
quinto: para se tornar usuário com permissões de root não basta digitar na linha de comando "sudo su", para isso precisa-se da senha de root.
OBS: Lembre-se que, por padrão, ao digitar a senha para sudo ela permanecerá ativa por 5 minutos.
Na dúvida leia o manual do "sudoers" https://www.sudo.ws/sudo/sudoers.man.html