以预定义用户身份运行 Linux 命令

以预定义用户身份运行 Linux 命令

我已经创建了一个 shell 脚本来启动一个server程序。

startup.sh  start

当执行上述命令时,它将尝试启动serveras 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 脚本旨在

  1. 以 root 身份启动
  2. 切换到权限较低的 jboss 用户

但你要问的是

  1. 以非特权用户身份启动
  2. 切换到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 示例是一个放弃权限的程序,而不是脚本。

相关内容