我在连接到服务器的外部硬盘驱动器的权限方面遇到了一个奇怪的错误。我想启用 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
,然后向其中添加一个条目。所需的权限是:
x
许可/
x
许可/run
x
许可/run/media
x
许可/run/media/matoro
x
许可/run/media/matoro/drive-data
w
和x
许可/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
您提到的每个祖先目录进行权限检查。