2012-01-20 3 views
7

내 우분투 워크 스테이션에서 가지고있는 Init 스크립트입니다. 루트가 아닌 다른 사용자로 명령을 실행해야하지만 어떻게 수행해야하는지에 대해 머리를 맞지 않습니다. sudo -u 또는 su newuser이 작동하지 않는 것 같습니다.init 스크립트에서 사용자 전환?

스크립트 :이 답변에 관심이 있기 때문에, 나는 여기에서 그것을 사용하는 방법을 설명합니다

su -l $MUSER -c "myCommand args..." 

업데이트 :

respawn 
console none 

start on runlevel [2345] 
stop on runlevel [06] 

script 
    su "anotherUser" -c ./myCommand 
end script 
+0

이 명령 유형을 "su -c '명령'different_user"로 사용하십시오. – vikky

+0

@Henrick이 아래 답변에서 지적했듯이 신출내기 스크립트는 ['setuid' 구성 스탠자]를 사용할 수 있습니다 (http://upstart.ubuntu.com)./cookbook/# setuid)를 사용하여 사용자를 설정합니다. – clayzermk1

답변

18

나는 이것을 사용합니다.

우리는 루트가 아닌 일반 리눅스 사용자로 서버를 실행합니다.

서비스, 고객, 단계

우리가 하나의 리눅스 OS에 여러 고객을위한 여러 서비스를 실행할 수있는이 방법 : 사용자 이름은 세 부분으로 포함되어 있습니다.

예 : 고객 "바"와 "P"의 foo_bar_p 서비스 "푸"여기에 생산을

을 의미 init 스크립트의 일부입니다. 초기화 스크립트는 루트로 또는 foo_bar_p 사용자로 실행할 수 있습니다 :

# /etc/init.d/foo_bar_p-celeryd 
# scriptname contains linux username 
SCRIPT_NAME=`basename "$0"` 
SYSTEM=${SCRIPT_NAME%*-celeryd} 

U=`id -nu` 

if [ ! $U == $SYSTEM ]; then 
    if [ $U == "root" ]; then 
     # use "-l (login)" to delete the environment variables of the calling shell. 
     exec su -l $SYSTEM -c "$0 [email protected]" 
    fi 
    echo "Script must be run from $SYSTEM or root. You are '$U'" 
    rc_exit 1 
fi 

# OK, now I am foo_bar_p 
cd 
. $HOME/.bashrc 
.... 
+0

환상적. 감사! – Industrial

+0

-l 스위치는 무엇을합니까 ?? – Henrik

+0

-l | --login 쉘을 로그인 쉘로 시작하는 방법. – Henrik

1

스와 아마 더 보편적 인 방법이지만,이 sudo를 몇 가지 일반적인 배포판도 가능합니다 :

sudo -u $MUSER $COMMAND $ARGS 

(단지 다시 읽 질문과 신출내기, 사용을 위해)

+0

'/ etc/rc.local'에서 이것을 시도했지만 Ubuntu 16.04에서는 작동하지 않습니다. 또한'su -l user -c/home/user/script'도 시도해 보았습니다. 어떤 제안? – beemaster

6

을하는 당신을 위해 작동하지 않습니다, 그러나 초기화 스크립트에서 나를 위해 일했다 몰랐어요 :

setuid myuser 
exec command args 
+0

니스! .bashrc, 프로필 및 그런 것들을로드합니까? –