我正在尝试从 shell 执行一些位于我的数据分区上的脚本,但我遇到权限问题。
bash: /media/storage/ss/script.py: Permission denied
在运行之前,我提供了脚本执行权限:
chmod +x script.py
问题可能与我的 fstab 文件中的设置有关。我尝试编辑我的 /etc/fstab 设置。目前他们是:
UUID=F6C09DB5C09D7C95 /media/storage/ ntfs-3g uid=1000,gid=1000,umask=0022,auto,rw 0 0
但是,当我运行时,我看不到这些更新的 uid 和 gid:
编辑:
~$ stat /media/storage
输出:
File: /media/storage/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 804h/2052d Inode: 5 Links: 1
Access: (0777/drwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
那么如何更改 /etc/fstab 文件以对 ntfs 数据分区上的脚本具有执行权限?
- 编辑 -
~$ stat /media/storage/ss/script.py
输出:
File: /media/storage/ss/script.py
Size: 525 Blocks: 2 IO Block: 4096 regular file
Device: 804h/2052d Inode: 10208 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-03-13 13:17:31.980325600 +0000
Modify: 2019-03-13 13:14:11.690160100 +0000
Change: 2019-03-13 13:14:11.690160100 +0000
Birth: -
当我跑步时:
~$ head -n 1 /media/storage/ss/script.py
输出:
#! /usr/bin/env python
当我跑步时:
mount | grep /media/storage
输出:
/dev/sda4 on /media/storage type fuseblk (rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,allow_other,blksize=4096,user)
谢谢!
答案1
您已安装/media/storage
为noexec
.noexec
不允许在已安装的文件系统上执行任何二进制文件(请参阅 参考资料man 8 mount
)。
您必须exec
在fstab
.请注意,您的fstab
条目也缺少该defaults
选项(另请参阅man 5 fstab
)。你可能想要类似的东西
UUID=F6C09DB5C09D7C95 /media/storage/ ntfs-3g defaults,uid=1000,gid=1000,umask=0022 0 0
检查man 5 fstab
或man 8 mount
的含义defaults
。至少在我的系统上,它是一样的
rw,suid,dev,exec,auto,nouser,async
但这取决于文件系统。
如果您想在不更改您的情况下检查此项fstab
,请尝试
mount -o remount,exec /media/storage/
首先以/media/storage/
可执行权限重新安装并再次检查您的脚本。
答案2
我假设重新启动会根据编辑的 /etc/fstab 设置挂载数据分区。然而,情况似乎并非如此。
运行后:
sudo mount -a
问题解决了。现在我可以从 shell 在数据分区上执行脚本。
stat /media/storage 的结果现在是:
File: /media/storage
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 804h/2052d Inode: 5 Links: 1
Access: (0755/drwxr-xr-x) Uid: ( 1000/ floris) Gid: ( 1000/ floris)
我将尝试找出适当的 /etc/fstab 配置,但我的执行问题已解决。
答案3
当您尝试排除目录的可执行权限时?尝试对文件掩码 fmask=0111(fmask 仅适用于文件,不适用于目录)和目录掩码 dmask=0777(适用于目录)使用单独的值