定时任务

定时任务

我正在运行的服务器Debian 12没有启用访问权限(许多人建议如此)。我在服务器上root有一个其他用户特权帐户。admin

我有一个程序,它没有附带任何服务。

我已经unprivileged在服务器上创建了对文件系统具有有限访问权限的用户,并且没有sudo

我有一个应用程序unprivileged,我想unprivileged在启动时运行它。

我现在已经手动登录admin并运行screen,然后sudo su unprivileged首先更改用户,然后在屏幕内运行./program,然后Ctrl+A-D脱离屏幕以使其在后台运行。

我怀疑以这种方式运行应用程序是否安全,因为这似乎是潜在攻击者逃到更高权限 shell 的一种方式。这确实让我担心,因为这看起来像是一种黑客行为。

我该如何设置我的系统,以便能够./program在启动时以低权限unprivileged在后台运行?在这种情况下,还有其他我应该注意的“明显”设置吗?

答案1

定时任务

只有当你需要以与现在类似的方式与程序交互时,此解决方案才适合你。你可以将程序和屏幕放在crontab用户的屏幕上unprivileged,例如,

  1. 跑步sudo su -c 'crontab -e' unprivileged

  2. 添加一行:

    @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 日志。

  1. 将单元文件放置到/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
    
  2. 重新加载服务文件:sudo systemctl daemon-reload

  3. 开始您的新服务:sudo systemctl start unprivileged-program.service

  4. 检查程序是否运行正常,例如

    • sudo systemctl status unprivileged-program.service
    • sudo journalctl -u unprivileged-program
  5. 启用每次启动时启动的服务:
    sudo systemctl enable unprivileged-program.service

相关内容