使用Vagrant+VirtualBox运行VM时执行PhantomJS遇权限拒绝问题
解决Vagrant虚拟机中PhantomJS权限拒绝问题
在Vagrant+VirtualBox环境的虚拟机里,执行/usr/share/nginx/html/vendor/bin/phantomjs时碰到权限拒绝错误。就算给文件加了chmod 777权限,文件权限还是显示-rw-rw-rw-,根本加不上执行位。
核心原因
这种情况大多是Vagrant共享目录的挂载限制导致的:要是宿主机是Windows系统,它的文件系统不支持Unix的执行权限位,Vagrant默认挂载共享目录时会直接忽略执行权限的设置;另外也可能是SELinux的规则阻止了文件执行。
解决步骤
1. 修改Vagrantfile调整挂载参数
打开你的Vagrantfile,找到共享目录配置的config.vm.synced_folder这一行,加上mount_options参数强制开启执行权限:
config.vm.synced_folder "./本地目录路径", "/usr/share/nginx/html", mount_options: ["dmode=777", "fmode=777"]
dmode用来设置目录权限,fmode设置文件权限,这样挂载后目录和文件都会默认带执行权限。
改完之后重启虚拟机:
vagrant reload
2. 检查并关闭SELinux(第一种方法没用时试试)
先看SELinux是不是开启状态:
getenforce
要是输出是Enforcing,临时关闭它:
setenforce 0
要是想永久关闭,编辑/etc/selinux/config文件,把SELINUX=enforcing改成SELINUX=disabled,然后重启虚拟机就行。
3. 复制文件到非共享目录执行
要是不想改Vagrant配置,也可以把phantomjs复制到虚拟机本地目录(比如/tmp),再设置权限执行:
cp /usr/share/nginx/html/vendor/bin/phantomjs /tmp/ chmod 777 /tmp/phantomjs /tmp/phantomjs
内容的提问来源于stack exchange,提问作者anapap
相关产品推荐
相关产品推荐

