我的主目录包含“project”目录,其中包含“confidential”子目录,“confidential”包含一些文件。
我只是希望只有我能访问该文件夹,其他用户无法访问。
我运行了命令
Me:~ me$ chmod -R 700 project/confidential
Me:~ me$ su Bob
bob:/home/me/project$ ls
code confidential
这里向 Bob 显示了两个文件夹,但是,如果 Bob 尝试列出机密文件,他就无法访问它们。
那么,chmod 不会对其他用户隐藏该文件夹吗?我希望其他用户只能访问不保密的“代码”目录,我该如何隐藏它?
答案1
您当前的目录树类似于:
/home/me/project/
/home/me/project/code/
/home/me/project/confidential/
confidential
如果您希望其他用户能够找到并访问除 之外的任何目录,则不能隐藏目录confidential
。父目录 ( /home/me/project/
) 显然需要其他用户具有读取和执行权限,以便他们能够列出project
目录的内容并发现名为code
exits 的目录。因此,他们可以发现confidential
除了目录之外还存在另一个目录(称为 )code
。
要完全隐藏目录confidential
,您可以将其放入另一个子目录(例如/home/me/project/etc/
),并授予其(etc
目录)700 权限。这样,其他用户将看到该etc
目录,但无法更改或列出它(或其任何子目录)。因此confidential
目录将完全隐藏。
另一个选择可能是这样的:
chmod 711 /home/me/project/
chmod 700 /home/me/project/confidential/
这样,您就阻止其他用户读取project
目录的内容:ls -l /home/me/project/
将给出Permission denied
错误。但是,他们将能够更改目录project
或任何其他子目录他们知道它存在并列出它:ls /home/me/project/code
将会起作用,只要code
目录具有“正常”(755)权限。
但是,在此配置中,请注意其他用户可能能够运行以下命令的输出:
$ ls /home/me/project/confidential
ls: cannot open directory '/home/me/project/confidential': Permission denied
$ ls /home/me/project/other
ls: cannot access '/home/me/project/other': No such file or directory
因此,即使这个解决方案也可能不完美,因为其他用户可能能够确定隐藏目录的名称通过反复试验。