管理每个用户的 rc.d 初始化脚本

管理每个用户的 rc.d 初始化脚本

我想将 SysV 启动脚本委托给每个用户。

${HOME}/rc.d与 SysV init 类似,启动时使用 参数S启动的每项。服务器关闭时使用参数start启动的每项也一样。Kstop

我考虑过自己编写脚本,但也许已经有某种实现1 了。总之,它将是一个脚本,/etc/init.d/遍历所有用户并runparts以用户身份启动相关脚本。

这里的平台是 Linux(Debian 风格),但我认为该解决方案在各种类 Unix 平台之间具有很强的可移植性。

更新:

这里的重点是让用户能够创建自己的 init 脚本,这些脚本应在系统启动时代表他们启动。正如 Dan Carley 指出的那样,这些服务将无法访问任何系统资产(特权端口、系统日志等)。

1. 这样,我就不必过多考虑所有微妙的安全隐患,例如脚本超时……

答案1

您的问题基本上包含了答案……一个脚本,它将遍历每个用户主页的子目录,寻找可执行脚本。然后它 sudo -u user /export/home/user/scripts/scriptname.sh start。您无法控制脚本的作用,因此您需要信任您的用户。

坚持要求他们编写脚本以接受停止启动重启作为 $1 参数,并且他们不应使用已在 .profile、.cshrc 或 .bashrc 文件中设置的任何环境变量。该脚本实际上需要独立。

#!/usr/bin/bash

run_cmd {
cd /export/home
for HOMEDIR in *; do
  for SCRIPT in /export/home/$HOMEDIR/scripts/*;  do
     if [ -x $SCRIPT ]; then
       echo "$ACTION user $HOMEDIR's script $SCRIPT"
       sudo -u $HOMEDIR $SCRIPT $ACTION &
     fi
  done
done

}

case $1 in
    start) ACTION=start;
           run_cmd;;
    stop) ACTION=stop;
           run_cmd;;
    restart) ACTION=stop;
             run_cmd;
             sleep 60;
             ACTION=start;
             run_cmd;;
    *) echo "$1 not recognized as valid cmd";;
esac

exit 0

您需要根据您的环境、bash/homedirs 的位置等对其进行调整。

答案2

这里的重点是让用户能够创建自己的初始化脚本,这些脚本在系统启动时代表他们启动。

在大多数系统中,使用该实用程序已经可以实现这一点cron。只需指导您的用户执行以下操作:

  1. 运行命令crontab -e
  2. 添加如下行:

    @reboot /home/user/script argument

  3. 节省

更多信息:http://www.cyberciti.biz/faq/linux-execute-cron-job-after-system-reboot/

答案3

我不太清楚你想要实现什么,但对我来说,它听起来有点类似于 .profile 和 .bash_logout,它们是在用户启动 shell 或退出 shell 时执行的。

您的解决方案的不同之处在于,脚本是在用户登录或启动新 shell 时运行的,而不是在计算机启动时运行的。但我不得不承认,我不会让任何用户在启动时运行脚本……

答案4

我倾向于禁止脚本,并强制执行一个非常严格的简短的固定脚本和命令列表,用户可以在一个简单的列表文件中引用这些脚本和命令,该文件可以在启动时轻松验证。固定脚本将存储在一个公共位置,用户没有写入权限。列表文件将命名脚本或命令以及所需的任何参数。如果用户登录后需要,其中一个常用脚本将为用户提供停止/启动/重新启动处理。

所有这些疑虑的部分原因是出于安全考虑,但更多的是出于对启动过程中所发生事件的控制。我的意思是,你能想象如果你的用户“仅仅因为他们可以”而同时启动所有东西,那将是一场怎样的噩梦吗?更不用说编写糟糕的脚本了。

否则,如果您能找到解决这些问题的现成解决方案(这是您在问题中提到的一个标准),那就是可行的方法。

相关内容