Vik*_*rón 4 linux su shell centos daemontools
使用 CentOs,我想以用户“培训”的身份运行脚本作为系统服务。我使用 daemontools 来监控进程,它需要一个以 root 身份运行并且没有 tty 标准的启动程序脚本。
下面我给出了我的五种不同尝试,但都失败了。
:
#!/bin/bash
exec >> /var/log/training_service.log 2>&1
setuidgid training training_command
Run Code Online (Sandbox Code Playgroud)
最后一行不够好,因为对于training_command,我们需要为trqaining 用户设置环境。
:
su - training -c 'training_command'
Run Code Online (Sandbox Code Playgroud)
这看起来像(以不同的用户身份运行 shell 脚本)但提供 ' standard in must be tty
' as su 确保 tty 存在以可能接受密码。我知道我可以通过修改 /etc/sudoers(a la https://superuser.com/questions/119376/bash-su-script-giving-an-error-standard-in-must-be-a- tty)但我不情愿并且不确定后果。
:
sudo -u training -i bash -c 'source $HOME/.bashrc; training_command'
Run Code Online (Sandbox Code Playgroud)
同一主题的变体:' sudo: sorry, you must have a tty to run sudo
'
:
runuser - training -c 'training_command'
Run Code Online (Sandbox Code Playgroud)
这个给runuser: cannot set groups: Connection refused
。我发现这个错误没有任何意义或解决办法。
:
ssh -p100 training@localhost 'source $HOME/.bashrc; training_command'
Run Code Online (Sandbox Code Playgroud)
这更像是一个表达绝望的笑话。即使这个失败Host key verification failed.
(主机密钥是 known_hosts 等)。
注意:如果我从根 shell 运行包装器脚本,所有 2,3,4 都可以正常工作。只有在系统服务监视器(daemontools)启动它时才会出现问题(我猜没有 tty 终端)。
我被困住了。这是很难实现的事情吗?
我感谢所有对最佳实践的洞察力和指导。
(这也已发布在超级用户上:https : //superuser.com/questions/434235/script-calling-script-as-other-user)
您将需要禁用for 中的requiretty
设置。通过以下方式添加以下行:/etc/sudoers
root
visudo
Defaults:root !requiretty
Run Code Online (Sandbox Code Playgroud)
您还需要以下行,/etc/sudoers
以便root
可以执行所有操作(默认情况下应启用此功能,但请检查以确保):
root ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)
然后您可以执行以下操作:
sudo -u training /path/to/training_command
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
50152 次 |
最近记录: |