我正在构建一个服务器,我的学生将能够在该服务器上上传他们的项目,这些项目是 Python+Flask Web 应用程序。当我添加新用户时,我会在 中添加一个新服务/etc/systemd/system/[username].service
,该服务会自动运行用户应用程序。
我希望允许每个用户启动、停止和重新启动自己的服务,但不允许其他人的服务。因此 Alice 可以执行 eg service Alice restart
,Bob 也可以执行service Bob restart
,但反之则不行。
这可能吗?
答案1
可以通过如下解决方法来实现:
/usr/local/bin
为每个用户创建一个 Bash 脚本(可执行) (<user>.sh
为了举例说明)。每个用户的脚本仅运行命令来重新启动该用户的服务,例如:
systemctl restart <user>
(如果您有创造力,您可以向该脚本添加不同的功能来启动、停止和重新启动所述服务。)向文件中添加
sudoers
每个用户仅运行自己的脚本的功能。这已完成像这样(在本# User
节下):# User <user> ALL=(ALL:ALL) NOPASSWD: /usr/local/bin/<user>.sh
现在每个用户都可以运行自己的服务/usr/local/bin/<user>.sh
而无需输入密码,这将重新启动他们的服务(或执行您允许脚本执行的任何操作)。
答案2
目前还无法按单位进行,但希望很快就能实现。https://gitlab.freedesktop.org/polkit/polkit/-/merge_requests/154已合并并发布