ext4 外部驱动器的权限问题

ext4 外部驱动器的权限问题

我在连接到服务器的外部硬盘驱动器的权限方面遇到了一个奇怪的错误。我想启用 Transmission 将种子下载到其文件夹中,但发现由于权限错误而无法创建目录。
我自己测试了它并验证了以 user 身份运行的守护进程transmission无法在它拥有的文件夹中创建目录第755章权限。
我以为这可能是一些奇怪的 inode 恶作剧,但fsck回来后一切正常,一切看起来都很正常。

matoro@matoro-server ~ $ ls -i /run/media/matoro/drive-data
total 40
43253761 drwxr-xr-x  5 matoro       matoro        4096 Apr 11  2017 backup
11796481 drwxr-xr-x  3 matoro       matoro        4096 Oct 28 22:40 iso
37568568 drwxr-xr-x  2 matoro       matoro        4096 Apr 23  2017 pending
42336296 drwxr-xr-x  3 matoro       matoro        4096 Oct 25 01:26 podcasts
38141969 drwxr-xr-x 39 matoro       matoro       12288 Sep 18 22:05 reading
37519377 drwxr-xr-x  3 transmission transmission  4096 Oct 30 17:10 seeding
37490784 drwxr-xr-x  4 matoro       matoro        4096 Oct 30 17:09 videos
42336292 drwxr-xr-x  3 matoro       matoro        4096 Oct 25 01:23 youtube
matoro@matoro-server ~ $ ls -ia /run/media/matoro/drive-data/seeding
total 912160
37519377 drwxr-xr-x  3 transmission transmission      4096 Oct 30 17:10  .
       2 drwxr-xr-x 11 matoro       matoro            4096 Nov  3 14:56  ..
37584902 drwxr-xr-x  3 transmission transmission      4096 Aug 10  2016 'some directory'
37488367 -rw-r--r--  1 transmission transmission 430297088 Aug 14  2016  some_file
matoro@matoro-server ~ $ sudo -u transmission mkdir -v /run/media/matoro/drive-data/seeding/test
mkdir: cannot create directory ‘/run/media/matoro/drive-data/seeding/test’: Permission denied

以下是相关的安装选项:

/dev/sdc3 on /run/media/matoro/drive-data type ext4 (rw,nosuid,nodev,noexec,noatime,data=ordered,uhelper=udisks2)

可能是什么原因造成的?会不会和ACL有关系?

答案1

mkdir命令必须遍历目录结构以查找现有目录/run/media/matoro/drive-data/seeding,然后向其中添加一个条目。所需的权限是:

  1. x许可/
  2. x许可/run
  3. x许可/run/media
  4. x许可/run/media/matoro
  5. x许可/run/media/matoro/drive-data
  6. wx许可/run/media/matoro/drive-data/seeding

(当然,它们都必须是目录,并且您正在创建的目录必须不存在)

我敢打赌你错过了其中之一(可能是 #4 或 #5)如果进程已经将/run/media/matoro/drive-data/seeding其作为当前目录(如果在进入目录后祖先目录权限发生更改,或者进程切换 uid,则可能会发生这种情况),那么mkdir test仅需要权限#6(w并且x在当前目录上),它就可以成功,而mkdir /run/media/matoro/drive-data/seeding/test需要所有x权限,即使它引用相同的位置。

当您使用绝对路径或具有多个组件的相对路径时,将对x您提到的每个祖先目录进行权限检查。

相关内容