我是文件夹的所有者但无法访问它

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在文件夹上运行了。

我已经跑到chownroot 和chgrproot,然后又回到 user1。

root 可以下降并进入文件夹并打开文件。

用户 1 不能。

关于这里发生了什么的任何线索?

Eli*_*gan 6

这是权限问题,而不是所有权问题。

您向我们展示的权限中明显缺少执行权限(缩写x并出现在 中的-位置rw-)。

目录的执行权限与常规文件的工作非常不同。对于目录,执行权限提供进入目录的能力(即进入目录cd,或在文件管理器中打开它)。它们还提供了尝试访问目录中文件的能力(尽管这是否会成功还取决于其他权限,有时包括正在访问的文件的权限)。

root能够进入目录,因为它并没有像通常那样真正受到权限的约束。在许多方面,运行的命令和应用程序root将尝试尊重权限以遵守用户的意愿。但root有权对任何文件或目录执行任何操作(操作系统能够执行的操作)。在rootshell 中,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为您做这件事。

如果您有兴趣以数字方式设置执行权限,请记住,对于您添加的每个数字(从零开始):

  • 4 供阅读。
  • 2 为写。
  • 1 为执行。

例如,如果您希望每个人都能够读取和执行,some-file但只有所有者能够写入,您可以使用:

chmod 755 some-file
Run Code Online (Sandbox Code Playgroud)

我推荐社区文档中的 FilePermissions,以进一步阅读 Ubuntu 中的文件权限,包括可执行位及其对文件夹的特殊含义。