Ubuntu 22.04下Poedit访问/var/www/html/目录.po文件时权限被拒的问题求助
问题描述
我在Ubuntu 22.04上安装了Poedit 3.3.1,想要访问/var/www/html/目录下的.po文件,但每次尝试都会弹出错误:
Error opening directory '/var': Permission Denied
我已经修改过/var目录的所有权,甚至给它设置了chmod 777权限,但问题依然存在。目前只能先把文件复制到桌面编辑,再复制回去。有没有办法让Poedit以管理员身份运行,或者彻底解决这个权限问题?
另外,我尝试用sudo poedit启动时,出现了以下错误:
mkdir: cannot create directory '/run/user/0': Permission denied Authorization required, but no authorization protocol specified 14:21:13: Error: Unable to initialize GTK+, is DISPLAY set properly?
看起来是UID相关的问题,我手动创建那个目录后,第一行错误消失了。不用sudo的话,Poedit能正常启动,没有任何错误或警告。
更新:sudo启动Poedit的问题已经解决,但访问/var/www/html/的权限问题仍然存在。
解决思路与方案
我来帮你梳理下这个问题,本质上是Ubuntu的权限机制和GUI程序运行权限的问题,给你几个安全且有效的解决方法:
将你的用户加入www-data组(推荐方案)
/var/www/html目录默认属于www-data用户组,把你的系统用户加入这个组,就能获得合法的访问权限,不用粗暴地开777(这会带来严重的安全风险)。执行以下命令:sudo usermod -aG www-data $USER执行完后注销再重新登录,让组权限生效,之后你就能直接用Poedit访问该目录下的.po文件了。
精细调整/var/www/html的权限
如果加入组后还是有问题,可以针对性调整目录和文件的权限,确保你有读取和编辑的权限:# 把目录所有者和组设置为www-data sudo chown -R www-data:www-data /var/www/html # 设置目录权限为755(所有者读写执行,组和其他读执行) sudo chmod -R 755 /var/www/html # 专门给.po文件设置644权限(所有者读写,组和其他读) sudo find /var/www/html -type f -name "*.po" -exec chmod 644 {} \;这样既保证了web服务的正常运行,又能让你顺利编辑.po文件。
关于sudo运行Poedit的注意事项
虽然你已经解决了sudo启动的问题,但还是不推荐用root身份运行GUI程序,这可能带来权限混乱和安全隐患。如果确实需要临时用管理员权限运行,可以先给root授权显示权限:xhost + sudo poedit用完后记得执行
xhost -收回权限,避免不必要的安全风险。
备注:内容来源于stack exchange,提问作者Khaldoun Nd

