即使我拥有组权限,为什么也会收到“权限被拒绝”错误?

即使我拥有组权限,为什么也会收到“权限被拒绝”错误?

我正在尝试在 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都是。我认为这没有任何意义,并且将权限更改为不起作用。775755775

另外,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-directorychmod -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 递归/会破坏您的操作系统(实际上,在/目录或系统目录上递归任何内容都是危险的)

  • 像这样设置权限批量并不是一个好的安全实践

相关内容