msm*_*ith 4 permissions command-line directory
我有一个文件夹,里面有我关于系统的笔记。
我以用户 1 登录
cd masternotes
产生:
bash: cd: mastersnotes: permission denied
Run Code Online (Sandbox Code Playgroud)
whoami
产生: user1
ls -l
产生:
drw-rw-rw-. 2 user1 user1 4096 Mar 26 20:47 masternotes
Run Code Online (Sandbox Code Playgroud)
ls -l
目录内产生:
-rw-rw-rw-. 7 user1 user1 345 Oct 7 2006 crontab
-rw-rw-rw-. 7 user1 user1 348 Oct 7 2006 crontab~
-rw-rw-rw-. 7 user1 user1 3702 Oct 7 2006 grep_usage.txt
-rw-rw-rw-. 7 user1 user1 91868 Oct 7 2006 lvm-layout-10-14-03.tif
-rw-rw-rw-. 7 user1 user1 30 Oct 7 2006 mysql
-rw-rw-rw-. 7 user1 user1 35764 Oct 7 2006 notes
Run Code Online (Sandbox Code Playgroud)
我已经chmod -R 666 masternotes
在文件夹上运行了。
我已经跑到chown
root 和chgrp
root,然后又回到 user1。
root 可以下降并进入文件夹并打开文件。
用户 1 不能。
关于这里发生了什么的任何线索?
这是权限问题,而不是所有权问题。
您向我们展示的权限中明显缺少执行权限(缩写x
并出现在 中的-
位置rw-
)。
目录的执行权限与常规文件的工作非常不同。对于目录,执行权限提供进入目录的能力(即进入目录cd
,或在文件管理器中打开它)。它们还提供了尝试访问目录中文件的能力(尽管这是否会成功还取决于其他权限,有时包括正在访问的文件的权限)。
root
能够进入目录,因为它并没有像通常那样真正受到权限的约束。在许多方面,运行的命令和应用程序root
将尝试尊重权限以遵守用户的意愿。但root
有权对任何文件或目录执行任何操作(操作系统能够执行的操作)。在root
shell 中,cd
进入一个没有任何执行权限的目录会成功。
问题的解决方法是运行:
chmod u+x masternotes
Run Code Online (Sandbox Code Playgroud)
这给予 ( +
)目录上masternotes
( u
) 可执行权限( ) 的所有者x
。
然后,您将能够以普通用户的身份进入该目录并尝试访问该目录中的文件。
如果您希望其组所有者的成员也能够执行此操作,则可以改为运行以下命令:
chmod ug+x masternotes
Run Code Online (Sandbox Code Playgroud)
但您可能是特定于用户的组(拥有该文件夹)的唯一成员。
在chmod
这里命令并没有需要运行作为root
--IT是故意的,我不包括sudo
在任命令。您拥有该文件夹,因此您可以自己更改其权限——您不需要root
为您做这件事。
如果您有兴趣以数字方式设置执行权限,请记住,对于您添加的每个数字(从零开始):
例如,如果您希望每个人都能够读取和执行,some-file
但只有所有者能够写入,您可以使用:
chmod 755 some-file
Run Code Online (Sandbox Code Playgroud)
我推荐社区文档中的 FilePermissions,以进一步阅读 Ubuntu 中的文件权限,包括可执行位及其对文件夹的特殊含义。