我已将用户chroot
登录到目录,一切运行正常。但我希望该用户所在的组能够重新启动由 管理的单个进程supervisor
,但我不知道该怎么做。
我已将此行添加到/etc/sudoers
:
%mygroupname ALL = (root) NOPASSWD:/usr/bin/supervisorctl restart myprocessname
我将其复制/usr/bin/sudo
到环境中的相同路径chroot
。我还将其所有依赖项复制到相关位置(使用 找到ldd /usr/bin/sudo
)。
我了解到sudo
使用吨系统上的其他文件,我已将它们复制到环境中chroot
。但是,我现在陷入困境,无法克服这个错误。我错过了什么?
sudo
日志(为方便阅读,请换行):
Nov 10 20:29:04 sudo[3593] pam_setcred: Failure setting user credentials @
sudo_pam_begin_session()
/build/sudo-1bDJzQ/sudo-1.8.16/plugins/sudoers/auth/pam.c:274
Nov 10 20:29:04 sudo[3593] pam_open_session: Module is unknown @
sudo_pam_begin_session()
/build/sudo-1bDJzQ/sudo-1.8.16/plugins/sudoers/auth/pam.c:283
这首先是一个完全愚蠢的想法吗?
答案1
与其尝试将 sudo 二进制文件及其依赖项复制到 chroot 中,不如更容易地以 root 身份运行脚本,检查文件是否存在并重新启动该进程。
该脚本可能是这样的:
#!/bin/bash
restartfile="restartprocess"
while :
do
for user in /home/*
do
if [ -f $user/$restartfile ]
then
supervisorctl restart myprocessname
rm $user/$restartfile
fi
done
sleep 5 #Adjust file checking time interval
done
(这还假设用户被 chroot 到 /home 中的一个文件夹)
一旦此脚本以 root 身份运行,chrooted 用户只需运行以下命令之一即可restartprocess
在其主目录中创建一个空文件(名为)(您可以~/
在文件名前添加):
touch restartprocess
echo > restartprocess
> restartprocess
并且该进程将重新开始。