如果我想限制secret
对共享计算机上文件夹的访问,我真的需要chmod
对该文件夹进行递归吗
chmod -R g=,o= secret
还是chmod
在文件夹上就足够了?
chmod g=,o= secret
有什么实际区别?
如果我想限制secret
对共享计算机上文件夹的访问,我真的需要chmod
对该文件夹进行递归吗
chmod -R g=,o= secret
还是chmod
在文件夹上就足够了?
chmod g=,o= secret
有什么实际区别?
对于目录,“读取”访问权限让您列出内容,“执行”访问权限让您遍历目录以打开其子目录(文件或子目录)之一。所以如果你删除:
当然,如果您进行递归更改,则对顶层目录的访问权限进行意外的非递归重置会产生较小的后果。
不言而喻,如果您在两天前创建了一个文件(使用公开可读模式),并且昨天有人阅读了该文件或制作了一份副本,那么您今天无法将该文件设为私有。
xenoid 说(有点简单),如果你从你的目录中删除组和其他权限(今天,现在),“它下面的任何东西都变得无法访问,你不需要进行递归更改。” 我同意,如果您
chmod
的(顶级)目录适当,将来(即从现在开始),除了您自己1之外,没有人 能够进入它。但是有一些陷阱。硬链接
还记得您两天前创建的那个文件吗?假设您的对手昨天建立了到该文件的硬链接(而不是复制它)。如果您
chmod
只有您的(顶级)目录,那么该文件将继续拥有您在创建它时分配的公开可读权限,因此坏人将来仍然可以读取它——(可能)即使你随后修改它。如果您执行递归chmod
,那将保护文件的权限, 这将影响链接。 坏人仍然可以对其进行操作ls -l
,因此他们将能够看到您何时更改它以及它有多大,但他们将无法再次阅读它。工作目录
假设在你的
secret
目录下,有一个plans
目录,而且它也是公开可读的。假设五分钟前,坏人打开了一个终端窗口并说现在,在您执行
chmod
on之后secret
,坏人的工作目录仍然存在/home/clemisch/secret/plans
,他们可以继续列出该目录并访问那里的文件,可能永远如此。当然,一旦他们cd
在别处,或者关闭那个窗口,或者注销,或者机器重新启动,那么他们就失去了访问权限。如果您执行递归
chmod
,这将确保所有文件和所有目录的权限,导致擅自占地者立即失去访问权限。如果机器是一台只能通过控制台访问的个人计算机,这可能不是一个很大的风险。但是,如果坏人可能在后台留下了一个
screen
或tmux
会话,那么他们就可以使用这种攻击。而且,如果机器支持ssh
(或其他远程访问;可能甚至 FTP 就足够了),就可以使用这种攻击。人为错误
正如 xenoid 在他们的回答中指出的那样:如果你
chmod
在secret
今天进行递归,然后在后天你不小心chmod
(只)将顶级目录返回到 755,那么你仍然会受到今天递归的保护chmod
- 所有文件和下的目录secret
仍然不可读。(当然,如果你明天新建一个文件secret
,并且你允许它是公开可读的,那么当你打开目录的权限时,它就会暴露出来secret
。但是无论今天是否chmod
递归都是如此。 )mazunki发表评论,“我相信
cp
有权限。” 我不确定他们的意思,但考虑一下这种情况。你想diff
在两个文件之间做一个:secret/plans/the/quick/brown/fox/file1
secret/jumps/over/the/lazy/dog/file2
但是您不确定这些文件的确切位置,您必须四处寻找才能找到它们。你可能会想做
如果你这样做, then
/tmp/file1
将具有与相同的保护secret/plans/the/quick/brown/fox/file1
- 所以这是chmod
今天进行递归的另一个原因。还有一件事
如果坏人在五分钟前打开了你的一个秘密文件,并且一直保持打开状态,他们将来就可以读取它——即使你修改了它也有可能。好消息是,这是一个执行起来有点棘手的攻击——坏人必须在你执行
chmod
. 坏消息是这种攻击很难防御——递归 chmod 无济于事。__________
1,当然还有特权用户/进程
PS 你可以稍微缩短你的命令:
chmod go=
相当于chmod g=,o=
. (当然,这不会使递归chmod
更快。)递归
chmod
也会影响所有子目录和文件夹,而不仅仅是文件夹本身。如果您没有明确授予对 的访问权限
.
,您将无法读取该文件夹的内容。同样,除非您明确表示,否则您将无法
cd
进入所述文件夹的子目录+x
。