我正在尝试在 Manjaro Linux 中运行一款名为“Dofus”的游戏。我已经用打包机安装了它,将其放在/opt/ankama
文件夹下。该文件夹的所有权(以及其中的每个文件)是 root 用户和 games 组。按照安装包的指示,我已将自己(用户familia
)添加到游戏组中(如果不这样做,“每次尝试运行更新程序时我都必须输入密码”)。
然而,当运行游戏时,它在输入我的密码(这不应该是必需的)后崩溃。检查日志,我遇到了一些错误,例如:
[29/08 20:44:07.114]{T001}INFO c/net/NetworkAccessManager.cpp L87 : Starting request GET http://dl.ak.ankama.com/updates/uc1/projects/dofus2/updates/check.9554275D
[29/08 20:44:07.291]{T001}INFO c/net/NetworkAccessManager.cpp L313 : Request GET http://dl.ak.ankama.com/updates/uc1/projects/dofus2/updates/check.9554275D Finished (status : 200)
[29/08 20:44:07.292]{T001}ERROR n/src/update/UpdateProcess.cpp L852 : Can not cache script data
所以,我怀疑权限被拒绝错误。启动后不久出现错误消息
这意味着“写入磁盘时发生错误 - 验证您是否有足够的权限和足够的磁盘空间”。
然后,经过一些研究,我发现了“auditd”,它可以记录文件夹中的文件访问。设置好后,查看哪些文件访问不成功,这是结果。
所有这些错误实际上都引用了一个唯一的文件 ,/opt/ankama/transition/transition
其中包含对 ( ) 的系统调用open
。该文件的权限是rwxrwxr-x
( 775
)。所以,我有 rwx 权限,但它给了我一个错误exit -13
,这是一个EACESS
错误(权限被拒绝)。
我已经尝试过重新启动计算机、登录和注销。他们都没有工作。
如果我将文件夹权限设置为familia:games
,它就可以毫无问题地运行,我什至不需要输入密码。不过,这样看来似乎不太对劲。即使我有读/写/执行权限,为什么我会收到“权限被拒绝”错误,有什么想法吗?
马克说过我可能需要路径前缀的所有目录中的 +x 权限。路径本身是/opt/ankama/transition/transition
.路径前缀的权限是:
/opt - drwxr-xr-x(755),所有权根:root
/opt/ankama - drwxr-xr-x(755),所有权根:游戏
/opt/ankama/transition - drwxrwxr-x(775),所有权根:游戏
然而,我注意到的一件事是,即使文件夹本身是 ,所有子文件夹/opt/ankama
都是。我认为这没有任何意义,并且将权限更改为不起作用。775
755
775
另外,Giel 建议我可以在我的系统上运行 AppArmor。然而,跑步# cat /sys/module/apparmor/parameters/enabled
给了我N
。
答案1
首先,当您将自己添加到组中时,更改不会立即应用。最简单的就是注销并重新登录。
然后是数据文件的写权限(正如一些评论中已经提到的)。然而,这些解决方案并不利于安全。
- 添加游戏组。不要将任何用户添加到该组。
- 使游戏可执行
chmod -R ugo+rX game-directory
- 仅向组授予写入权限,其他人不得使用
chmod -R ug+w,o-w game-directory
- 将游戏添加到组中
chgrp -R game-group game-directory
,chmod -R g+s game-directory
要不就addgroup game-group; chgrp -R game-group game-directory; chmod -R u=rwX,g=rwXs,o=rX game-directory
如果游戏需要更改权限,那么您可以执行相同的操作,但针对用户而不是组。 IE。
adduser game-owner; addgroup game-group; chown -R game-owner:game-group game-directory; chmod -R u=rwXs,g=rwXs,o=rX game-directory
答案2
目录需要设置 x 位(对于该位被视为搜索位的目录)才能打开。因此,我使用树,这样我就只能获取文件夹集,并避免将所有文件设置为可执行文件的噩梦(树的选项是 -d List directories only.
):
sudo tree -faid here_goes_your_directory xargs -L1 -I{} sudo chmod 755 "{}"
警告!!!你应该考虑到这一点:
在根目录或系统目录上使用 chmod 或 chown 递归
/
会破坏您的操作系统(实际上,在/
目录或系统目录上递归任何内容都是危险的)像这样设置权限批量并不是一个好的安全实践