Eu preciso editar /etc/sudoers
um script para adicionar / remover coisas das listas brancas.
Supondo que eu tenha um comando que funcionaria em um arquivo normal, como poderia aplicá-lo /etc/sudoers
?
Posso copiá-lo e modificá-lo e, em seguida, visudo
substituir o original pela cópia modificada? Fornecendo meu próprio script no $EDITOR
?
Ou posso apenas usar os mesmos bloqueios e cp
?
A questão é mais sobre problemas potenciais do que apenas encontrar algo que funcione.
echo "$USER ALL=NOPASSWD:/usr/bin/rsync" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/rsync')
.echo "$CONFIGLINE" | (EDITOR="tee -a" visudo)
-a
sinalizador paraEDITOR="tee"
: ele acrescentará uma linha ao arquivo, não apenas sobrescreverá a primeira linha. Eu não percebi a diferença no início e não consegui descobrir uma maneira de acrescentar. Espero encontrar algumas pessoas em algum momento apontando isso diretamente ;-)Use visudo para isso com um editor personalizado. Isso resolve todas as condições de corrida e problemas de "hack" com a solução de Brian.
Este script adicionará a linha "# Dummy change to sudoers" ao final de sudoers. Sem hacks e sem condições de corrida.
Versão anotada que explica como isso realmente funciona:
fonte
--enable-env-editor
, caso contrário, ele só usará respeitar a variável do editor se ela fizer parte de um pequeno conjunto de valores conhecidos.sudo -E
do primeiro comando.Você deve fazer suas edições em um arquivo temporário e, em seguida, usar visudo -c -f sudoers.temp para confirmar que as alterações são válidas e copiá-lo por cima de / etc / sudoers
fonte
No Debian e seus derivados, você pode inserir um script personalizado no
/etc/sudoers.d/
diretório, com direitos0440
- para obter mais informações, consulte /etc/sudoers.d/README .Isso pode ajudar.
fonte
visudo é suposto ser a interface humana para edição
/etc/sudoers
. Você pode conseguir o mesmo substituindo o arquivo diretamente, mas deve ter cuidado com a edição simultânea e a validação de sintaxe. Cuidado com asr--r-----
permissões.fonte
Se você
sudo
permite a adição de entradas/etc/sudoers.d
, pode usar esta resposta por @ dragon788:https://superuser.com/a/1027257/26022
Basicamente, você usa
visudo
para verificar o arquivo antes de copiá-lo/etc/sudoers.d
, para ter certeza de que não está quebrandosudo
para ninguém.Isso verifica e retorna sucesso (0) se for válido, então você pode usá-lo com
if
,&&
e outras operações de script booleana. Depois de validar, basta copiá-lo para/etc/sudoers.d
e ele deve funcionar. Certifique-se de que é propriedade do root e não pode ser escrito por outro.fonte
Configure um editor personalizado. Basicamente, será um script que aceita o nome do arquivo (neste caso /etc/sudoers.tmp) e o modifica e salva no local. Então você pode simplesmente escrever nesse arquivo. Quando terminar, saia do script, e o visudo se encarregará de modificar o arquivo sudoers real para você.
fonte
#!/bin/sh; echo "# my changes to sudoers" >> $1; exit 0
Parece funcionar para mim.Muitas respostas, trabalhei com sudo por yonks, mas não tive a necessidade de automatizar a configuração até agora. Usei uma combinação de algumas das respostas acima, escrevendo minha linha de configuração no local de inclusão /etc/sudoers.d para não ter que modificar o arquivo sudoers principal e, em seguida, verifiquei a sintaxe desse arquivo, exemplo simples abaixo:
Escreva sua linha em um arquivo de inclusão sudoers:
Verifique se o arquivo sudoers inclui o aprovado nas verificações de sintaxe visudo:
fonte
Apenas para adicionar mais uma opção às respostas acima, se a condição de corrida não for uma preocupação importante, o seguinte comando pode ser usado para evitar a cópia manual de um arquivo modificado para
/etc/sudoers
Isso garantirá que o novo arquivo seja validado e instalado corretamente com a atualização de permissões.
Observe que, se houver um erro no
/tmp/sudoers.new
arquivo,visudo
será solicitada a entrada do usuário, portanto, é aconselhável verificarvisudo -c -f /tmp/sudoers.new
primeiro.fonte
Acho que a solução mais direta é:
Crie um script addudoers.sh
e chame-o com os usuários que deseja adicioná-lo como:
Para obter a explicação completa, consulte esta resposta: Adicionando usuários a sudoers por meio de script de shell
Saudações!
fonte
Tente repetir. Você tem que executá-lo em um subshell, entretanto. Exemplo:
sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/sudoers"
fonte
Isso funcionou para mim com base no que outros postaram aqui. Quando eu usasse o script de outras pessoas, ele abriria visudo para mim, mas não faria a edição. Isso fez a edição necessária para permitir que todos os usuários, incluindo usuários padrão, instalassem o java 7u17 para safari / firefox.
Isso adicionou% everyone blah blah blah ao final do arquivo sudoers. Tive que executar o script assim.
Boa sorte: D
fonte