我知道有时我们可以这样做chmod 777
,这样我们就有一个完全可以访问、读取和写入的目录。但通常我更喜欢做一个sudo chown {myusername} {directory}
.
显然,chmod 777
留下了一个对任何人完全开放的目录,但是,与 相比,我的使用实践sudo chown ...
实际上是否为我的目录提供了保护chmod 777
?
答案1
chmod 777
意思是“任何人都可以做任何事情”。好吧,几乎任何事情 - 一些操作,例如更改时间和权限,都保留给所有者。但任何人都可以创建、删除或覆盖任何文件,因此没有保护。
我几乎可以保证,如果你跑步chmod 777
,你就做错了。如果您想共享文件并编辑彼此的文件,请设置修订控制系统并推送更改以共享它们。如果您只想将某些文件提供给其他人,请创建一个~/pub
目录并将您自己的文件放在那里。
答案2
chmod 777 foo
让任何有权访问您的盒子、访问该文件的人foo
。
chown user foo
仅授予该用户访问该文件的权限foo
。
如果您将这两种方法结合起来,那么任何有权访问您的盒子的人都可以访问该文件。
答案3
在许多情况下,获取目录所有权而不是将其权限更改为 777 的方法更安全。
默认权限
许多系统的默认 umask 为 022。当创建一个目录时,通常会从 777 中减去 umask 来计算新目录的权限,这意味着大多数系统上默认的目录权限是 755。这意味着默认情况下,只有一个目录的权限所有者可以在其中创建和删除文件。但不会阻止其他用户写入该目录中的文件。这种保护是由文件的权限提供的。您应该知道,如果用户对某个目录具有写入权限,但对该目录中的文件没有写入权限,则他们可以简单地删除该文件并替换它。
答案
总之,获取目录的所有权而不是将其权限更改为 777 将阻止其他用户添加、删除或替换该目录中的文件,但不会阻止用户读取该目录中的文件。
关于目录权限的说明
与文件权限相比,目录权限有点奇怪和不直观。可执行权限 ( 1
) 允许您检索目录中文件的元数据,包括文件的 inode。这意味着如果没有目录的执行权限,您无法仅知道文件的路径来读取该目录中的文件。读取权限 ( 4
) 允许您查看目录中的文件列表,但看不到其元数据。写权限 ( 2
) 允许您在目录中创建和删除文件。