如果我想限制对secret
共享计算机上的文件夹的访问,我真的需要chmod
对文件夹进行递归吗
chmod -R g=,o= secret
或者chmod
文件夹就足够了?
chmod g=,o= secret
实际区别是什么?
答案1
对于目录,“读取”权限允许您列出内容,“执行”权限允许您遍历目录以打开其子目录之一(文件或子目录)。因此,如果您删除:
- 只有读取权限,人们仍然可以通过猜测子目录的名称来访问子目录
- 只需执行标志,人们仍然可以列出内容的名称,即使他们无法访问它们,这仍然可以揭示
- 对目录具有读取和执行权限,其下的任何内容都将变得无法访问,并且您不需要进行递归更改。
当然,如果您进行了递归更改,则意外的非递归重置对顶级目录的访问权限所产生的后果会较小。
答案2
不言而喻,如果您两天前创建了一个文件(具有公开可读模式),而昨天有人阅读了该文件或复制了它,那么您今天就无法将该文件设为私有。
xenoid 说(有点简单)如果您从目录中删除组和其他权限(今天,现在),“其下方的所有内容都将无法访问,并且您无需进行递归更改。”我同意,如果您chmod
适当地管理您的(顶级)目录,那么除了您自己1之外 ,将来没有人能够进入它(即从现在开始)。但是有一些问题。
硬链接
还记得你两天前创建的文件吗?假设你的对手昨天对该文件进行了硬链接(而不是复制它)。如果你chmod
只访问你的(顶级)目录,那么该文件将继续具有你在创建它时分配的公开可读权限,因此坏人将来仍然能够读取它 — (可能)即使你随后对其进行了修改。如果你执行递归chmod
,这将确保文件的权限,
这会影响链接。 坏人仍然可以ls -l
对其进行操作,因此他们可以看到你何时更改它以及它有多大,但他们无法再次读取它。
工作目录
假设在你的secret
目录下有一个 plans
目录,并且它也是公开可读的。假设五分钟前,坏人打开了一个终端窗口并说
cd /home/clemisch/secret/plans
现在,在您执行chmod
on后secret
,坏人的工作目录仍是 /home/clemisch/secret/plans
,他们可以继续列出该目录并访问那里的文件,可能永远如此。当然,一旦他们转到cd
其他地方,或关闭该窗口,或注销,或重新启动计算机,他们就会失去访问权限。
如果您执行递归chmod
,这将确保所有文件和所有目录的权限,从而导致擅自访问者立即失去访问权限。
如果机器是一台仅通过控制台访问的个人计算机,那么这可能不是一个很大的风险。但是,如果坏人可能 在后台留下了一个screen
或 会话,那么他们就可以使用这种攻击。而且,如果机器支持 (或其他远程访问;甚至 FTP 也足够了),就可以使用这种攻击。tmux
ssh
人为错误
正如 xenoid 在他们的回答中指出的那样:如果你今天做了一个递归chmod
,secret
然后后天你不小心
chmod
(只)将顶级目录返回到 755,那么你仍然会受到今天递归的保护chmod
——下面的所有文件和目录secret
仍然无法读取。(当然,如果你创建一个新的明天,如果您将文件添加到目录中secret
,并允许其公开可读,则当您打开目录的权限时,它将被公开secret
。但无论今天的是否chmod
是递归的,情况都是如此。)
马祖基制造一条评论,“我相信cp
带有权限。”我不确定他们的意思,但请考虑这种情况。您想diff
在两个文件之间执行:
secret/plans/the/quick/brown/fox/file1
secret/jumps/over/the/lazy/dog/file2
但你不确定这些文件到底在哪里,所以必须四处寻找。你可能会想这样做
cd plans
cd the/quick # looking for file1
cd brown/fox # found it!
cp file1 /tmp
cd ../../../../..
cd jumps/over
cd the # looking for file2
cd lazy/dog # found it!
diff /tmp/file1 file2
如果您这样做,那么/tmp/file1
就会得到同样的保护— — 所以这是今天secret/plans/the/quick/brown/fox/file1
进行递归的另一个原因。chmod
还有一件事
如果坏人五分钟前打开了你的一个秘密文件,并一直保持打开状态,他们将来就能够阅读它——潜在即使你修改了它。好消息是,这是一个有点棘手的攻击——在你执行之前,坏人必须对此进行一些思考chmod
。坏消息是,这种攻击很难防御——递归 chmod 不会有帮助。__________
1
,当然还有特权用户/进程
PS您可以稍微缩短命令:
chmod go=
相当于。(当然,chmod g=,o=
这并不会使递归更快。)chmod
答案3
递归chmod
也会影响所有子目录和文件夹,而不仅仅是文件夹本身。
.:
total 16
drwxrwxr-x 4 mazunki mazunki 4096 april 15 11:42 .
drwxr-xr-x 35 mazunki mazunki 4096 april 15 11:42 ..
d--------- 3 mazunki mazunki 4096 april 15 11:46 a
d--------- 2 mazunki mazunki 4096 april 15 11:42 b
./a:
total 12
d--------- 3 mazunki mazunki 4096 april 15 11:46 .
drwxrwxr-x 4 mazunki mazunki 4096 april 15 11:42 ..
-----w---- 1 mazunki mazunki 0 april 15 11:42 a
dr-xr-xr-x 2 root root 4096 april 15 11:46 aa
-----w---- 1 mazunki mazunki 0 april 15 11:42 b
./a/aa:
total 8
dr-xr-xr-x 2 root root 4096 april 15 11:46 .
d--------- 3 mazunki mazunki 4096 april 15 11:46 ..
./b:
total 8
d--------- 2 mazunki mazunki 4096 april 15 11:42 .
drwxrwxr-x 4 mazunki mazunki 4096 april 15 11:42 ..
-----w---- 1 mazunki mazunki 0 april 15 11:42 a
-----w---- 1 mazunki mazunki 0 april 15 11:42 b
[] ~:~/test ▶
[] ~:~/test ▶
[] ~:~/test ▶ sudo chmod -R +w a
[] ~:~/test ▶
[] ~:~/test ▶
[] ~:~/test ▶ sudo ls -alR
.:
total 16
drwxrwxr-x 4 mazunki mazunki 4096 april 15 11:42 .
drwxr-xr-x 35 mazunki mazunki 4096 april 15 11:42 ..
d-w------- 3 mazunki mazunki 4096 april 15 11:46 a
d--------- 2 mazunki mazunki 4096 april 15 11:42 b
./a:
total 12
d-w------- 3 mazunki mazunki 4096 april 15 11:46 .
drwxrwxr-x 4 mazunki mazunki 4096 april 15 11:42 ..
--w--w---- 1 mazunki mazunki 0 april 15 11:42 a
drwxr-xr-x 2 root root 4096 april 15 11:46 aa
--w--w---- 1 mazunki mazunki 0 april 15 11:42 b
./a/aa:
total 8
drwxr-xr-x 2 root root 4096 april 15 11:46 .
d-w------- 3 mazunki mazunki 4096 april 15 11:46 ..
./b:
total 8
d--------- 2 mazunki mazunki 4096 april 15 11:42 .
drwxrwxr-x 4 mazunki mazunki 4096 april 15 11:42 ..
-----w---- 1 mazunki mazunki 0 april 15 11:42 a
-----w---- 1 mazunki mazunki 0 april 15 11:42 b
如果您没有明确授予访问权限.
,您将无法读取该文件夹的内容。
[] ~:~/test ▶ ls -l
total 8
drwxr-xr-x 3 mazunki mazunki 4096 april 15 11:46 a
d--------- 2 mazunki mazunki 4096 april 15 11:42 b
[] ~:~/test ▶
[] ~:~/test ▶
[] ~:~/test ▶ sudo chmod +xxx b
[] ~:~/test ▶ cd b
[] ~:~/test/b ▶ ls
ls: cannot open directory '.': Permission denied
[] ~:~/test/b ▶ sudo chmod +xxx .
[] ~:~/test/b ▶ ls
ls: cannot open directory '.': Permission denied
[] ~:~/test/b ▶ sudo chmod +rrr .
[] ~:~/test/b ▶ ls
a b
[] ~:~/test/b ▶
同样,除非您明确指定,否则您将无法cd
进入该文件夹的子目录+x
。