Como executar um comando que requer permissão de root sem sudo?

5

Estou tentando executar traceroute -d sendo autenticado como um usuário "padrão" com sudo privileges. No entanto, se eu executar sudo traceroute -d , ele será executado pelo usuário root , então estou pensando como posso executá-lo como usuário padrão.  Eu tentei várias maneiras de fazer o usuário basicamente um super usuário (aka root), mas sem sucesso.

A única coisa que funcionou foi alterar o ID do uid e do grupo para 0 em / etc / passwd, mas isso muda a identidade do usuário para "root". Por exemplo. se eu rodar whoami eu recebo "root" em vez do nome de usuário "padrão".

A razão pela qual eu preciso disso é que eu tenho algum roteamento de rede baseado no --uid-owner e agora estou tentando depurá-lo, mas não faz sentido rodar com sudo b / c seria executar como usuário "root" que possui outros roteiros.

    
por Me Mi 09.12.2014 / 16:17

1 resposta

4

traceroute não precisa ser executado como root ; só precisa da capacidade CAP_NET_ADMIN . Assim, você pode definir isso como recurso de arquivo para o arquivo e, em seguida, traceroute sempre terá esse recurso (para todos os usuários), se seu kernel suportar recursos de arquivo e nenhum Módulo de Segurança do Linux (SELinux, AppArmor) estiver bloqueando:

setcap CAP_NET_ADMIN+ep /usr/sbin/traceroute

Enquanto traceroute estiver em execução, você poderá ver seus recursos com pscap . Isso não afeta o UID / EUID do processo.

Eu não sei como fazer isso, mas a AFAIK também é possível usar o AppArmor (e provavelmente o SELinux) para executar um processo com certos recursos. A tarefa principal é, obviamente, limitar as capacidades disponíveis.

    
por 09.12.2014 / 18:27

Tags