错误日志
在 OpenMediaVault 中挂载了磁盘,并设置了一个用户主目录在这个磁盘中,执行一个权限为755
的 Shell 脚本时遇到问题:
bash: permission denied: ./xxx.sh
分析问题
OpenMediaVault 挂载磁盘默认会使用noexec
参数,即不允许执行,所以不管是脚本还是二进制文件即使有正确的权限也会提示没有权限。
解决方案
已挂载的磁盘
- 打开
/etc/openmediavault/config.xml
(OpenMediaVault 数据库文件),找到<fstab>
部分,如下所示:
<fstab>
...
<mntent>
<uuid>f767ee54-eb3a-44c5-b159-1840a289c84b</uuid>
<fsname>/dev/disk/by-label/VOLUME1</fsname>
<dir>/srv/dev-disk-by-label-VOLUME1</dir>
<type>ext4</type>
<opts>defaults,nofail,user_xattr,noexec,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,acl</opts>
<freq>0</freq>
<passno>2</passno>
<hidden>0</hidden>
</mntent>
</fstab>
- 删除
<opts>
行中的noexec
,如下所示:
<opts>defaults,nofail,user_xattr,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0,acl</opts>
- 保存退出,执行
omv-salt deploy run fstab
命令,使改动同步到/etc/fstab
文件中。也可以直接修改/etc/fstab
文件删除相关的noexec
字段。 - 最后重启,并检查是否生效。
新挂载的磁盘
TIPS: 官方在 2020 年 9 月 21 日发布的新版本中已不在使用noexec
选项。如果你已经更新到最新的版本,那么很大概率就不需要再进行以下操作了。
如果需要新挂载的磁盘也去掉noexec
选项,则需要编辑/etc/default/openmediavault
文件设置相关的环境变量。默认文件中并没有相关的环境变量,默认值是写在相关的 Web 界面源码中的,以下是默认采用noexec
的文件系统的环境变量:
OMV_FSTAB_MNTOPS_EXT2="defaults,nofail,user_xattr,noexec"
OMV_FSTAB_MNTOPS_EXT3="defaults,nofail,user_xattr,noexec,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0"
OMV_FSTAB_MNTOPS_EXT4="defaults,nofail,user_xattr,noexec,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0"
OMV_FSTAB_MNTOPS_JFS="defaults,nofail,noexec,usrquota,grpquota"
OMV_FSTAB_MNTOPS_XFS="defaults,nofail,noexec,usrquota,grpquota"
根据实际需求去掉noexec
字段写入到/etc/default/openmediavault
文件即可。
参考资料
Why drives are mounted with noexec option
Filesystem Environmental Variables
本文作者:P3TERX
本文链接:https://p3terx.com/archives/problems-and-solutions-encountered-in-using-openmediavault-1.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。