我正在运行的服务器Debian 12
没有启用访问权限(许多人建议如此)。我在服务器上root
有一个其他用户特权帐户。admin
我有一个程序,它没有附带任何服务。
我已经unprivileged
在服务器上创建了对文件系统具有有限访问权限的用户,并且没有sudo
。
我有一个应用程序unprivileged
,我想unprivileged
在启动时运行它。
我现在已经手动登录admin
并运行screen
,然后sudo su unprivileged
首先更改用户,然后在屏幕内运行./program
,然后Ctrl+A-D
脱离屏幕以使其在后台运行。
我怀疑以这种方式运行应用程序是否安全,因为这似乎是潜在攻击者逃到更高权限 shell 的一种方式。这确实让我担心,因为这看起来像是一种黑客行为。
我该如何设置我的系统,以便能够./program
在启动时以低权限unprivileged
在后台运行?在这种情况下,还有其他我应该注意的“明显”设置吗?
答案1
定时任务
只有当你需要以与现在类似的方式与程序交互时,此解决方案才适合你。你可以将程序和屏幕放在crontab
用户的屏幕上unprivileged
,例如,
跑步
sudo su -c 'crontab -e' unprivileged
添加一行:
@reboot sleep 60 && /usr/bin/screen -d -m /home/unprivileged/program
在哪里,
@reboot
在启动时运行命令sleep 60 &&
60
在运行程序之前添加几秒的延迟/usr/bin/screen
将程序放入screen
终端多路复用器中-d -m
以分离模式启动屏幕(对系统启动脚本有用)/home/unprivileged/program
是实际程序的路径
这样, 和 都screen
以./program
用户身份运行,并且您可以通过以下方式与程序进行交互。
$ sudo su - unprivileged
$ screen -r
SystemD 服务
如果程序可以在后台运行而无需用户交互,这是最佳选择。该程序将作为服务运行。stdout 和 stderr 将发送到 SystemD 日志。
将单元文件放置到
/etc/systemd/system/unprivileged-program.service
,例如,[Unit] Description=Service for running program as user unpriviged [Service] Type=simple User=unprivileged WorkingDirectory=/home/unprivileged ExecStart=/home/unprivileged/program Restart=always [Install] WantedBy=multi-user.target
重新加载服务文件:
sudo systemctl daemon-reload
开始您的新服务:
sudo systemctl start unprivileged-program.service
检查程序是否运行正常,例如
sudo systemctl status unprivileged-program.service
sudo journalctl -u unprivileged-program
启用每次启动时启动的服务:
sudo systemctl enable unprivileged-program.service