Verifique se existe um arquivo usando outro usuário (sudo -u)

2

Eu quero verificar se existe um arquivo [ -f /path/to/file ] usando outro usuário.

Então, eu adicionei:

USER1        ALL=(USER2)     /bin/mkdir, /usr/bin/git, /bin/echo

ao arquivo sudoers.

O problema é, quando tento executar

USER1:~$ sudo -u USER2 [ -f /path/to/file ] && echo "1"

Eu recebo o seguinte:

Sorry, user USER1 is not allowed to execute '/usr/bin/[ -f /path/to/file ]' as USER2 on localhost.

Então, a pergunta aqui é: Como eu habilito isso no arquivo sudoers?

Solução

Eu adicionei /usr/bin/test ao arquivo sudoers e, em vez de ir com isso:

USER1:~$ sudo -u USER2 [ -f /path/to/file ] && echo "1"

Eu realmente usei:

USER1:~$ sudo -u USER2 /usr/bin/test -f /path/to/file && echo "1"
    
por dmmd 20.06.2012 / 06:35

1 resposta

3

Você está tentando executar /usr/bin/[ , mas não deu permissão ao usuário. Existem duas maneiras de fazer isso.

O primeiro é permitir que o usuário execute /usr/bin/[ (que é o test programa). Isso permitiria ao usuário realizar qualquer tipo de teste em qualquer arquivo. Você também pode usar test em vez de [ , o que pode ser mais óbvio sobre o que está acontecendo.

USER1   ALL=(USER2) /bin/mkdir, /usr/bin/git, /bin/echo, /usr/bin/[, /usr/bin/test

E, em seguida, execute:

sudo -u USER2 [ -f /path/to/file ] && echo "1"

ou

sudo -u USER2 test -f /path/to/file && echo "1"

A segunda opção é escrever um script wrapper e permitir que o usuário execute isso. Por exemplo, com o seguinte em /usr/local/bin/exists :

#!/bin/sh
set -e
[ -f "$1" ]

E isso em /etc/sudoers :

USER1   ALL=(USER2) /bin/mkdir, /usr/bin/git, /bin/echo, /usr/local/bin/exists

O usuário pode executar:

sudo -u USER2 /usr/local/bin/exists /path/to/file && echo "1"
    
por 20.06.2012 / 06:48

Tags