【发布时间】:2024-01-07 00:31:01
【问题描述】:
我正在为 Linux 游戏创建安装脚本。作为安装的一部分,我将游戏可执行文件的 suid 权限更改为“游戏”组,这样游戏即使在普通用户运行时也可以更新高分文件。
现在我的 Makefile.am 看起来像这样:
AUTOMAKE_OPTIONS = foreign
SUBDIRS = src man
install-exec-hook:
chgrp games @bindir@/xjump
chmod +s @bindir@/xjump
mkdir -p @localstatedir@/xjump
touch @localstatedir@/xjump/record
chmod 660 @localstatedir@/xjump/record
chgrp games @localstatedir@/xjump/record
我遇到的问题是 chgrp 命令需要管理权限。如果我使用sudo make install 在全球范围内安装游戏,那么它一切正常,但如果我将前缀更改为我的主目录中的某个位置并尝试执行常规make install,它会由于 chgrp 而失败
chgrp: changing group of ‘/home/hugo/Desktop/aaa/bin/xjump’: Operation not permitted
由于游戏的本地安装版本只有一个玩家,我真的不需要做 chgrp 的事情。有没有办法检测makefile是否在没有root权限的情况下运行并跳过权限更改?或者我应该在我的配置脚本中添加一个配置标志,而不是尝试自动修复这个权限问题?
【问题讨论】:
-
是的,chgrp 需要 root 权限。否则,您可以通过“给”他们一堆文件并超出其磁盘配额来对组或用户进行简单的 DoS 攻击。只有 root 可以以任意方式放弃文件。或者愚蠢的系统黑客,比如创建一个你拥有的 suid 二进制文件,chown/chgrp-ing 到 root/wheel,然后完全颠覆系统。
-
我的问题是,如果我为单个用户安装,则不需要 chgrp。因此,在这种情况下,我希望安装脚本不需要像现在这样的 root。
-
如果只是针对单个用户,为什么要更改组呢?将分数文件放入用户的主目录中,作为用户拥有/分组。
-
它并不总是针对单个用户。我希望选择全局或本地安装。
标签: linux sh file-permissions autoconf chgrp