Localiza todos os diretórios, nos quais o usuário tem acesso para procurar e ecoar esses diretórios no shell

1

Eu preciso encontrar todos os diretórios, nos quais o usuário tem acesso para pesquisar (comando find ) e ecoar esses diretórios no shell. USER é lido do ksh.

por exemplo:

read user

Eu sei, se o usuário quiser usar find no diretório, o usuário deve ter "acesso de leitura" e "acesso de execução" para este diretório. Eu deveria verificar todos os diretórios para r e x access para usuário inserido.

    
por Alex Zern 29.03.2013 / 18:05

2 respostas

3

Eu não vou te dar o código exato, mas posso dar-lhe os passos para conseguir isso:

  • Encontre o proprietário do diretório. Se isso corresponder ao user para o qual você está pesquisando, verifique as permissões do proprietário nesse diretório. Se for r+x(5) ou r+w+x(7) , o usuário poderá pesquisar dentro desse diretório, caso contrário, não.

  • Se o proprietário do diretório não corresponder ao usuário, verifique o grupo do diretório e descubra se o user inserido pertence a esse grupo ou não. Se o usuário pertencer. Verifique as permissões do grupo nesse diretório. Se for r+x(5) ou r+w+x(7) , o usuário poderá pesquisar dentro desse diretório, caso contrário, não.

  • Se o user inserido não pertencer ao grupo do diretório, verifique as outras permissões nesse diretório. Se for r+x(5) ou r+w+x(7) , o usuário poderá pesquisar dentro desse diretório, caso contrário, não.

Acho que o algoritmo acima executará a tarefa desejada.

Editar:

Método 1:

Você pode usar o comando find para isso:

$ find / -maxdepth 1 -type d -perm -u=rx

Isto irá encontrar todos os diretórios dentro / até um nível com permissão do usuário como pelo menos (leia + executar).

Método 2:

$ stat <filename/directoryname>  | grep Access | head -1 | awk 'BEGIN{FS="[/)]"} {print $2}'  

Isso lhe dará as permissões na notação rwx (por exemplo, drwxr-xr-x)

$ stat <filename/directoryname>  | grep Access | head -1 | awk 'BEGIN{FS="[(/]"} {print $2}'

Isso lhe dará as permissões na notação 755 (por exemplo, 0755)

    
por 29.03.2013 / 18:31
0

Não tenho certeza se compreendi sua pergunta na forma atual.

Se você não se importa com um subdiretório com acesso de leitura sendo colocado em um diretório sem acesso de leitura, você pode simplesmente fazer:

find . -type d -perm -u+r

Se você quiser saber se um usuário específico tem acesso de leitura a um diretório, obtenha o (s) grupo (s) de que ele / ela é membro:

groups $userID

E faça:

find . -type d -group $groupID -perm -g+r
    
por 01.04.2014 / 17:15