6

Я создал сценарий оболочки для запуска server программы.

startup.sh  start

Когда вышеуказанная команда будет выполнена, она попытается запустить server как 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. Я хотел, чтобы мой сценарий вел себя так же.

4 ответа4

3

Если вы root, просто используйте sudo:

$1 sudo -u adminuser startup.sh start
1

Если я что-то упустил, то, что вы просите, невозможно.

Скрипт jboss предназначен для

  1. Начать с правами root
  2. Переключиться на пользователя jboss, у которого меньше привилегий

Но то, что вы спрашиваете,

  1. Начать как непривилегированный пользователь
  2. Переключитесь на admin/root, который имеет больше привилегий.

Вот почему вам всегда будет нужен пароль, независимо от того, какую команду вы пытаетесь выполнить.

Есть ли какая-то конкретная причина, по которой вашему серверу нужны повышенные привилегии?

1

Как и 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
}
0

Вы всегда можете использовать бит setuid. Сделайте владельца файла тем пользователем, от которого вы хотите запустить скрипт, а затем установите setuid вашего скрипта.

Обратите внимание, что это может быть угрозой безопасности, поэтому убедитесь, что у пользователя есть только необходимые разрешения. В конце концов, непривилегированный пользователь может запустить этот скрипт, верно?

РЕДАКТИРОВАТЬ: не делать сценарии setuid. Ваш пример jboss - это программа, которая отбрасывает привилегии, а не скрипт.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .