Como saber se um determinado utilizador tem permissões de leitura e/ou gravação permissões para um determinado caminho

StackOverflow https://stackoverflow.com//questions/10675873

Pergunta

Devo começar por dizer que eu me considero um utilizador proficiente.Mas hoje eu tive a necessidade de se automatizar este e ficou perplexo.

Vamos supor que eu sou raiz, e, como tal, eu sou capaz de atravessar todo o sistema de arquivos, mas eu não consigo executar o comando "sudo" ou "su".

Eu tenho um determinado usuário e um determinado caminho.

Como posso verificar, através da CLI, se o usuário será capaz de ler e/ou escrever para o caminho?

Eu sei que isto parece fácil, mas tenha em mente que:

  • Não somos, nem podemos ser, o usuário.
  • Não podemos confiar apenas no final permissões de diretório, as permissões mais o caminho pode estar bloqueando o acesso para o diretório final.
  • Não podemos confiar apenas no diretório, as permissões do grupo ou, na era dos herdadas grupos.

Eu estou supondo que isso não pode ser feito através de qualquer comando, e eu preciso, primeiro, reunir todos os grupos de usuário e, em seguida, atravessar toda a hierarquia do caminho, verifique as permissões de leitura ao longo de todo o caminho e, em seguida, leitura e gravação para o diretório final.Soa terrivelmente caro, porém.

Foi útil?

Solução

Tag-me um script de guru!

check_access() {
  checked_file=$1
  target_user=$2
  result=PASS

  groups=`id -G $target_user | sed -e 's| | -o -group |g' -e 's|^|\\( -group |' -e 's|$| \\)|'`

  while [ $checked_file != / ]; do 
    find $checked_file -maxdepth 0 \
      -type f \( \
        \( -user $target_user -perm 0400 \) \
        -o \( $groups -perm 0040 \) \
        -o -perm 0004 \
      \) -o -type d \( \
        \( -user $target_user -perm 0100 \) \
        -o \( $groups -perm 0010 \) \
        -o -perm 0001 \
      \) >/dev/null 2>&1 || result=FAIL
    checked_file=`dirname $checked_file`
  done
  echo $result
}

Outras dicas

Eu realmente não pode fornecer uma resposta completa, e eu não posso adicionar nada de substancial para suas próprias idéias, exceto, talvez, esta:

Eu suspeito que uma abordagem geral para a verificação efetiva de direitos de acesso não existe, simplesmente porque os direitos de acesso dependem fortemente o sistema de arquivos subjacente(s).Por exemplo, verificar os direitos de acesso funciona de forma bastante diferente em sistemas de arquivos que usa o padrão do Unix rwx sinalizadores (e.g.Linux ext2, ext3) do que com sistemas de arquivos que oferecem suporte a ACLs (como O XFS ou NTFS).

Pode haver vários ferramentas de linha de comando que fazer o que você quer fazer para específicos tipos de sistema de arquivos.(Analogia:ferramentas como o fsck, mkfs podem existir por tipo de sistema de arquivo.)

Especialmente com sistemas operacionais UNIX-like, onde todos os tipos de sistemas de arquivos podem ser montados em uma grande estrutura de diretório, assumindo apenas uma permissões específicas mecanismo pode levar a problemas.

Se você construir a sua própria solução para este problema, pensar sobre o fato e, em seguida, decidir exatamente o que o direito de acesso mecanismo(s) que você deseja suporte.(Eu não tenho certeza, mas eu poderia imaginar que o Unix / POSIX especificação prescreve o rwx direitos de acesso bandeiras como mínimo que qualquer Unix deve suportar.)

a melhor maneira é para validar através do próprio usuário:

if sudo su - $user_to_check -c "[[ -r $path_to_check ]]"
then echo "$user_to_check can read $path_to_check"
else echo "$user_to_check can not read $path_to_check"
fi
if sudo su - $user_to_check -c "[[ -w $path_to_check ]]"
then echo "$user_to_check can write $path_to_check"
else echo "$user_to_check can not write $path_to_check"
fi

ls -l <file-name or dir-name>

Suponha que você deseja verificar as permissões para o diretório de uploads.Entrar ls -l uploads O resultado será como este

total 20
drwxrwxr-x 2 tomcat ec2-user 4096 Nov  5 04:21 deals
drwxrwxr-x 2 tomcat ec2-user 4096 Nov  5 04:25 gallery-images
drwxrwxr-x 3 tomcat ec2-user 4096 Nov  5 04:25 hotels
drwxrwxr-x 3 tomcat ec2-user 4096 Nov  5 04:28 rooms
drwxrwxr-x 3 tomcat ec2-user 4096 Nov  5 04:32 temp
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top