我已经创建了一个 shell 脚本来启动一个server
程序。
startup.sh start
当执行上述命令时,它将尝试启动server
as adminuser
。为了实现这一点,我的脚本是这样写的。
SUBIT="su - adminuser -c "
SERVER_BOX_COMMAND_A="Server"
##############
# Function to start cluster
function start(){
$SUBIT "$SERVER_BOX_COMMAND_A"
}
当我执行命令时,它会要求输入密码。还有其他方法可以做到这一点,这样它就不会要求输入密码了。
我在 jboss 提供的 Jboss 启动脚本中看到了这种行为。该脚本将用户更改为jboss
,然后启动 jboss 服务器。我希望我的脚本也能以同样的方式运行。
答案1
除非我遗漏了什么,否则你所要求的东西是不可能的。
jboss 脚本旨在
- 以 root 身份启动
- 切换到权限较低的 jboss 用户
但你要问的是
- 以非特权用户身份启动
- 切换到admin/root,更多的特权。
这就是为什么你会总是无论您尝试什么命令,都需要密码。
您的服务器需要提升权限有什么特殊原因吗?
答案2
如果你是root,只需使用须藤:
$1 sudo -u adminuser startup.sh start
答案3
与 JBoss 类似,您可以在运行命令之前检查您是否是目标用户。
TARGET_USER='adminuser'
SUBIT="su - adminuser -c "
SERVER_BOX_COMMAND_A="Server"
##############
# Function to start cluster
function start(){
if [[ `whoami` == "$TARGET_USER" ]]
then
$SERVER_BOX_COMMAND_A
else
$SUBIT "$SERVER_BOX_COMMAND_A"
fi
}
答案4
您始终可以使用 setuid 位。将文件所有者设为要以该用户身份运行脚本的用户,然后将脚本设为 setuid。
请注意,这可能存在安全风险,因此请确保用户仅具有所需的权限。毕竟,非特权用户可以运行该脚本,对吧?
编辑:不要让脚本设置用户权限。您的 jboss 示例是一个放弃权限的程序,而不是脚本。