dhclient para usuários normais (não-root)

2

Chamar o dhclient como root funciona lindamente na minha máquina debian. No entanto, gostaria de permitir que alguns usuários executem o dhclient também. Até agora, eu tentei estes dois exemplos:

Exemplo 1: quando um usuário normal chama

user@box:~$ dhclient

..., o resultado é:

bash: dhclient: command not found

Exemplo 2: também tentei

user@box:~$ /sbin/dhclient

... e tem

[...]

can't create /var/lib/dhcp3/dhclient.leases: Permission denied
SIOCSIFADDR: Permission denied
SIOCSIFFLAGS: Permission denied
SIOCSIFFLAGS: Permission denied
Open a socket for LPF: Operation not permitted

Agora ... tenho a sensação de que não é uma boa idéia (ou iria funcionar) chmod todo o diretório / sbin para acesso de usuário, nem parece ser elegante para chmod tudo o que o dhclient reclama no segundo exemplo acima. Qual é a melhor e mais segura maneira de atacar esse problema?

    
por zebonaut 19.12.2012 / 22:42

2 respostas

5

Instale e use sudo . É a maneira mais sadia de fazer essas coisas. dhclient realmente precisa de privilégios de root, não há como fugir disso.

Permite que usuários específicos executem um único comando com privilégios de root. Isso pode ser configurado em um arquivo /etc/sudoers como este (edite usando visudo ):

Cmnd_Alias     DHCP = /usr/sbin/dhclient
User_Alias     DCHPUSERS = millert, mikef, dowdy

DCHPUSERS      ALL = NOPASSWD: DHCP

Acima é apenas uma maneira de configurar o sudo. Se você tiver muitos usuários para administrar assim, sugiro usar um grupo de usuários local em vez de especificar usuários individuais.

    
por 19.12.2012 / 22:53
4

Eu sei que isso já foi respondido, mas encontrei essa pergunta ao pesquisar e a resposta proposta não era apropriada para o meu caso.

Eu consegui rodar o dhcpd como um usuário normal, atribuindo capacidades especiais ao binário do dhcpd:

sudo setcap CAP_NET_BIND_SERVICE,CAP_NET_RAW=+ep $(which dhcpd)

Veja uma pequena descrição dos recursos atribuídos:

CAP_NET_BIND_SERVICE allows binding ports lower than 1024
CAP_NET_RAW allows using RAW and Packet sockets and address binding (for LPF socket).

veja man capabilities para uma descrição estendida. Mais tarde consegui executar o dhcpd da seguinte forma:

Triglav-Control-Engine-1v1% sudo setcap CAP_NET_BIND_SERVICE,CAP_NET_RAW=+ep $(which dhcpd)
Triglav-Control-Engine-1v1% dhcpd -4 -f -d -s 169.254.13.1 -cf dhcpd.conf -lf leases
Internet Systems Consortium DHCP Server 4.3.4
Copyright 2004-2016 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: dhcpd.conf
Database file: /home/roosemberth/.config/dhcpd/leases
PID file: /var/run/dhcpd.pid
Source compiled to use binary-leases
Wrote 0 leases to leases file.

Listening on LPF/enp0s31f6/<MAC>/169.254.13.0/24
Sending on   LPF/enp0s31f6/<MAC>/169.254.13.0/24
Sending on   Socket/fallback/fallback-net
Can't create PID file /var/run/dhcpd.pid: Permission denied.
Server starting service.
DHCPDISCOVER from 50:7b:9d:af:e8:59 via enp0s31f6
    
por 07.08.2016 / 14:29