我有一个在虚拟机 vm 中运行 centos 的 Windows 系统。
我有一个在 Windows 中共享的目录,并从 Centos 挂载,在 fstab 中,如下所示:
//<ip address>/head_build /mnt/company-build cifs user,uid=0,gid=0,rw,auto,exec,suid,username=uname,password=pword,iocharset=utf8 0 0
在子文件夹中,我有一个脚本。如果我尝试运行它,我会收到错误'bad interpreter'
,我相信可以使用 dos2unix 修复该错误。
但是,我似乎无法对这个脚本做任何事情。dos2unix 说Failed to open output temp file: Permission denied
。
chmod 和 chown 也说权限被拒绝。lsattr 说'Inappropriate ioctl for device while reading flags'
。
编辑: 我在 centos 机器上以 root 身份登录。windows 中的共享文件夹已授予所有人执行所有操作的权限(来自 mount 的用户对 windows 中的文件夹也有权限)。
编辑2: 我尝试添加 file_mode=777、dir_mode=777(如评论中所建议),以及 umask=777 和 noperm(认为可以这样做),但没有成功。
编辑3: 与 S19N 交流后,我同意问题似乎出在挂载的服务器端,即 Windows。但共享文件夹拥有我能想到的所有权限。是否有一些秘诀可以从 cifs 挂载到 Windows 来获取执行权限?
编辑4:calcs
这是我在 Windows 上共享的目录的 输出:
c:\company\builds\head>cacls build
c:\company\builds\head\build computer-name\uname:(OI)(CI)F
BUILTIN\Administrators:F
BUILTIN\Administrators:(OI)(CI)(IO)F
NT AUTHORITY\SYSTEM:F
NT AUTHORITY\SYSTEM:(OI)(CI)(IO)F
Everyone:(OI)(CI)F
这似乎表明,此文件夹在安装时将允许所有权限。
编辑5:
根据 Jim 的评论,我net session
在 Windows 框上检查了我从挂载点连接的内容。当我尝试使用 uname 帐户(我用于挂载的帐户)运行 net session 命令时,我被拒绝访问。
当我使用时run as administrator
,我可以看到我正在使用 uname 帐户访问挂载。我禁用了 uname 帐户上的 UAC(UAC 是 Windows 7 中的系统,它会询问您是否要允许某些操作继续进行)。这实际上允许 uname 帐户net session
无错误地运行。
但是,uname 帐户仍然无法从挂载处执行任何操作:touch: cannot touch 'test': Permission denied
编辑6: 我刚刚在 Windows 上激活了真正的管理员帐户(如上所述这里),并将其用作挂载用户。以为这样就行了。但仍然从挂载内部获得拒绝权限。
一时兴起,我也尝试从管理员帐户运行虚拟机。同样的问题。
谢谢!
答案1
从 Linux 来看,文件(和父目录)的权限是什么样的?
尝试添加file_mode=777
和dir_mode=777
到您的选项:如果服务器不支持 CIFS Unix 扩展,这将覆盖默认文件模式或目录的默认模式。
另外:你尝试过吗bash <script>
?