隐藏/不列出不可读的文件夹

在使用Ubuntu服务器14.04作为共享驱动器的多用户环境中

所有用户使用Filezilla / WinSCP通过SFTP连接,并且chroot到/home/company-folder/

每个用户在/home/company-folder/users/下都有自己的个人文件/home/company-folder/users/ 。 例如。 /home/company-folder/users/username-1/home/company-folder/users/username-2等等…

现在username-1可以看到其他用户的个人文件夹( /home/company-folder/users/username-2/home/company-folder/users/username-3等),他无法访问其他用户文件夹,但他可以看到他们列出了。

问题是:我能做什么,所以用户无法在/home/company-folder/users/下看到对方的个人目录? 无论如何在Ubuntu-Linux中隐藏不可读的文件夹?

由于在具有100多个用户的系统中不方便用户浏览整个用户文件夹列表以找到他的个人文件夹。

一般来说,没有。 只有(从您的角度来看) 目录的权限才能确定其内容是否可以由特定用户列出。 这包括该用户无法打开/读取的目录条目。 SSH / SFTP访问的机制与本地工具相同,因为SSH / SFTP服务器为每个会话生成一个子进程,并在成功进行身份validation后立即将子进程的所有权更改为相应的用户。

请考虑以下示例:

 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 

正如你所看到的,我, david ,可以列出/home的内容,即使我不是它的拥有者,因为每个人都可以阅读它(参见.条目前面的权限掩码)。 我可以出于同样的原因列出/home/guest的内容。 我还可以列出/home/david的内容,因为我是它的所有者,所有者已经获得了读取权限。 但是,我无法列出/home/root的内容,因为我不是所有者,除了所有者之外没有人拥有该目录的读取权限:

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

如果更改了/home的所有权以删除非所有者的读取权限,我无法再列出/home的内容:

 david@localhost:~$ sudo chmod or /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 

虽然,我仍然可以遍历/home并读取/home/david ,因为遍历权限(这是目录上“执行”位的语义)仍然设置在/home (和/ )上:

 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...] 

请参阅Jakuje的答案,了解可能的替代方法。

我不知道有什么方法可以做你所描述的,但是openssh sftp-server-d选项,它指定用户启动目录,这可以解决你的问题

[…]浏览整个用户文件夹列表以查找其个人文件夹。

如果指定sftp-server例如:

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

(你需要省略/home/company-folder/ ,因为你已经在那里chroot)。