Como posso permitir que um usuário edite um arquivo de sistema específico normalmente restrito ao root?

8

Estou tentando gravar em /etc/network/interfaces com um usuário que não tenha privilégios de root.

O motivo para querer gravar isso seria permitir que o usuário defina um IP estático, já que estou executando um servidor somente de linha de comando. Que permissão preciso dar ao usuário em etc/sudoers ?

Eu não quero que o usuário tenha permissões de root completas. Apenas capacidade de editar este arquivo.

    
por Keith 31.07.2014 / 16:52

2 respostas

25

Em vez de usar sudo , basta definir uma ACL no arquivo:

$ ls -l /var/tmp/foo
-rw-rw---- 1 root root 4 Jul 31 15:26 /var/tmp/foo
$ sudo setfacl -m u:white:rw /var/tmp/foo
$ whoami
white
$ cat /var/tmp/foo
bar

Agora, o arquivo pertence a 'root', mas o usuário 'branco' pode ler e gravar nele. O usuário 'branco' agora pode usar seu editor favorito para editar o arquivo.

    
por Jeff White 31.07.2014 / 21:31
8

Prepare um script que faça a edição desejada, por exemplo, um script que grave o arquivo correto com o IP estático (o que colocar neste script está fora do escopo deste Q & amp; A). Vamos chamar esse script /root/set_static_ip . (1)

Edite /etc/sudoers (2) (com visudo é melhor, verifica se há sanidade, é muito difícil recuperar um sistema com um arquivo sudoers inválido, mesmo impossível from remote (3)), e adicione

user_name_to_authorize ALL=NOPASSWD: /root/set_static_ip 

Agora, esse usuário pode usar sudo /root/set_static_ip sem nenhuma senha solicitada e o script será executado com todos os privilégios; nenhum outro comando será permitido.

Se você quiser que o usuário simplesmente substitua um arquivo com o que quiser, o script pode ser simplesmente (chame-o /root/unsafe-overwrite-interface )

#! /bin/bash -e
#
cp /tmp/temp-iface.txt /etc/network/interfaces 
exit 0

... e diga ao usuário para editar /tmp/temp-iface.txt e depois executar sudo /root/unsafe-overwrite-interface --- habilitando-o em sudoers conforme especificado acima. Ou você pode adicionar o usuário a uma lista ACL e dar permissão de gravação no arquivo específico .

Mas observe que, se você não verificar o conteúdo do arquivo por segurança, haverá um intencional ou não intencional.

Notas de rodapé :

(1) este script deve ser o mais seguro possível. Verifique as entradas e assim por diante. Será executado com permissões completas.

(2) na instalação moderna do sudo, você pode adicionar um arquivo ao diretório /etc/sudoers.d/ que é melhor --- sobreviverá às atualizações.

(3) Eu normalmente mantenho um terminal com uma sessão raiz aberta ( sudo -i ) quando modifico o mecanismo sudoers, e um backup é útil.

    
por Rmano 31.07.2014 / 17:11