我正在尝试为游戏服务器创建一个 Web 界面。
我有一个用户/组“gameserver”,它有游戏文件和配置(不是 sudoer)。还有一个用户/组“www-data”,你们都知道它是用于 Web 应用程序的。
现在,不幸的是,我看到有人发帖要求或建议将 www-data 添加到“sudo”组,以允许其修改其他地方的文件。出于安全原因,这是一种非常糟糕的做法。
我想启用 www-data 来修改没有“root”权限的用户“gameserver”的文件/文件夹内的文件。
据我所知,有几种方法可以做到这一点:
- 将文件/文件夹权限更改为全局读/写。
- 将文件/文件夹组所有权更改为“www-data”。
- 将用户“www-data”添加到组“gameserver”。
前两种方法需要更改每个新建文件或文件夹的权限或所有权。因此,最后一种方法似乎是最可行的。但是,执行后:
usermod -a -G gameserver www-data
将用户“www-data”添加到组“gameserver”后,我无法再通过 SSH 连接到用户“gameserver”。并出现错误:
Permission denied (publickey).
这篇文章似乎也有类似的问题:将用户添加到组后出现 SSH 管道中断错误
但并没有真正解决问题。
为什么将另一个用户添加到我的用户组会阻止我通过 SSH 访问我的用户?我该如何解决这个问题?
请注意,“www-data”确实能够写入属于用户“gameserver”的文件。
为了扭转这种影响,我通过 SSH 访问“root”并执行:
gpasswd -d www-data gameserver
从组“gameserver”中删除用户“www-data”
编辑01:
正如 Ryan Babchishin 在第一条评论中指出的那样,它对他来说很有效。我尝试在另一台服务器上使用,它有效。这个问题目前只出现在 OVH 服务器上。他们表示,他们正在使用自定义内核来应对之前的一个问题,当时我无法使用 SystemV 命令来启动、停止或重新启动服务。我现在提交了另一张票。但仍然不明白这与 Linux 权限有什么关系。
答案1
上的权限是什么~gameserver/.ssh/authorized_keys
?如果它们是组可写的,SSH 服务器将拒绝使用它们,因为目标用户以外的人可以添加任意密钥。我可以用 让我的家用电脑拒绝接受我的密钥对chmod g+w .ssh/authorized_keys
。
现在,就你的情况而言,你还没有更改权限位(大概),但也许你的自定义内核,或者只是与我的计算机使用的不同的 sshd 实现,只要组中没有其他用户,就会接受组可写密钥?那么如果你做拥有像 664 这样奇怪的权限,sshd 会接受登录,直到您更改组成员身份。这有点牵强,但听起来有点可信。