Ocultar / não listar pastas não legíveis

3

Em um ambiente multiusuário usando o servidor Ubuntu 14.04 como uma unidade compartilhada

Todos os usuários se conectam via SFTP usando o Filezilla / WinSCP e são chroot para /home/company-folder/

Cada usuário também tem sua própria pasta pessoal em /home/company-folder/users/ . Por exemplo. /home/company-folder/users/username-1 , /home/company-folder/users/username-2 e assim por diante ...

Agora, username-1 pode ver outras pastas pessoais de usuários ( /home/company-folder/users/username-2 , /home/company-folder/users/username-3 , etc), ele não pode acessar outras pastas de usuários, mas pode vê-las listadas.

A pergunta é: o que posso fazer para que os usuários não possam ver o diretório pessoal um do outro em /home/company-folder/users/ ? Existe alguma maneira no Ubuntu-Linux para esconder pastas não legíveis?

Como em um sistema com mais de 100 usuários, não é conveniente que os usuários naveguem por toda a lista de pastas de usuários para encontrar sua pasta pessoal.

    
por berriop 17.12.2015 / 19:55

2 respostas

2

Em geral, não. Apenas a permissão dos diretórios (do seu ponto de vista) pai determina se seu conteúdo pode ser listado por um usuário específico. Isso inclui entradas de diretório, que este usuário não pode abrir / ler. O mecanismo para acesso SSH / SFTP é o mesmo das ferramentas locais, pois o servidor SSH / SFTP gera um subprocesso para cada sessão e altera a propriedade do subprocesso para o respectivo usuário, assim que ele é autenticado com êxito.

Considere o seguinte exemplo:

david@localhost:~$ ls -la /home
dr-xr-xr-x  1  root   root    80 Nov 10 09:05 .
drwxr-xr-x 23  root   root  4,0K Dec 17 11:09 ..
drwxr-xr-x  1 guest  guest   836 Sep  4 20:58 guest
drwxr-x---  1 david  users  4,2K Dec 14 22:07 david
drwx------  1  root   root   614 Nov 10 12:42 root

Como você pode ver, eu, david , posso listar o conteúdo de /home mesmo que eu não seja seu proprietário, pois todos podem lê-lo (consulte a máscara de permissão na frente da entrada . ). Eu posso listar o conteúdo de /home/guest pelo mesmo motivo. Também posso listar o conteúdo de /home/david , já que sou seu proprietário e o proprietário tem permissão de leitura. No entanto, não consigo listar o conteúdo de /home/root , pois não sou o proprietário nem ninguém, mas o proprietário leu as permissões nesse diretório:

david@localhost:~$ ls /home/root
ls: cannot open directory /home/root: Permission denied

Se alguém alterou a propriedade de /home para remover a permissão de leitura para não proprietários, não consegui listar o conteúdo de /home por mais tempo:

david@localhost:~$ sudo chmod o-r /home
david@localhost:~$ ls -ld /home
drwxr-x--x 2 root root 40 Dez 17 21:17 /home
david@localhost:~$ ls -l /home
ls: cannot open directory /home: Permission denied

No entanto, ainda posso percorrer /home e ler /home/david , porque a permissão de passagem (que é a semântica do bit de "execução" em diretórios) ainda está definida em /home (e / ):

david@localhost:~$ ls -l /home/david
total 732K
drwx------  1 david users 4,2K Dec 14 22:07 .
dr-xr-x--x  1 root  root    80 Nov 10 09:05 ..
drwx------  1 david users   60 Aug 24  2014 .adobe
-rw-------  1 david users   83 Dec  6 19:49 .bash_aliases
-rw-------  1 david users   66 May 12  2011 .bash_completion
-rw-------  1 david users  703 Nov 23 05:41 .bash_exports
[etc...]

Veja a resposta de Jakuje para uma possível abordagem alternativa ao seu objetivo subjacente.

    
por David Foerster 17.12.2015 / 21:24
1

Não sei como fazer o que você descreve, mas existe a opção -d para openssh sftp-server , que especifica o diretório inicial dos usuários, o que pode resolver seu problema sobre

  

[...] para percorrer toda a lista de pastas de usuários para encontrar sua pasta pessoal.

Se você especificar seu sftp-server , como:

Subsystem sftp internal-sftp -d /users/%u

(você precisa omitir /home/company-folder/ , já que você já está chrooted).

    
por Jakuje 17.12.2015 / 20:56