2014-03-02 3 views
0

root로 실행해야하는 bash 쉘 스크립트가 있습니다. 사용자가이를 실행하면 루트 암호를 묻는 메시지가 표시되고 스크립트는 서브 쉘에서 재실행됩니다. ./$0 &bash su sudo 전에 원래 스크립트를 시작한 사용자 찾기

'John'이라는 사용자가 스크립트를 실행한다고 가정 해 보겠습니다. 루트 암호를 제공 한 후 스크립트는 루트로 다시 실행되지만 스크립트 자체에서 누가 원래 스크립트 (John)를 시작했는지 어떻게 알 수 있습니까? 지금 내가 나중에 참조 할 수있는 원래 시작 관리자로 파일을 버리고 있지만 이것은 추한 것입니다.

다른 옵션으로는 프로세스 목록을 사용하고 있지만 다시 한 번 훌륭한 솔루션이 있어야합니다.

GNU bash는 버전 4.2.45 (2) -release (x86_64에-슬랙웨어 - 리눅스 GNU)

답변

-1

이 ... 부모 프로세스의 소유자가 사용자 여야합니다 스크립트의 부모 프로세스 ID를 확인하는 사람들 파일을 실행했습니다.

은 PPID는 아마 당신이

echo $$ 

사용할 수 있습니다 얻으려면, 또는 당신은

who am i 
+1

'$$'은 스크립트의 소유자가 아닌 현재 쉘의 프로세스 ID입니다. 스크립트를 실행하는'sudo' 명령의 프로세스 ID가 필요합니다. – chepner

+0

까지 subshell 에코 $ $ 부모 쉘의 프로세스 ID를 반환합니다 기억 ... 나는이 순간에 이것을 확인하기 위해 리눅스 터미널에 액세스 할 수 없습니다 .. 아니면 에코 $ 할 수 있습니다 부모 프로세스 ID를 얻기위한 PPID –

+0

방금 ​​온라인 터미널에서 시도했습니다!/bin/bash; echo $$; (echo $$) .. 둘 다 같은 값을 반환했습니다. –

3

당신은 $SUDO_USER 변수를 사용할 수 있습니다 원래 사용자에게 반환 할 yoru bash는 스크립트에 아래의 코드를 includle를 시도 할 수 있습니다 .

#!/bin/bash 

echo $SUDO_USER 

출력

[[email protected]]$ ./sudo-print.sh 

[[email protected]]$ sudo ./sudo-print.sh 
user1 
0

파일과 실행에 사용 권한을 설정 SUID를 사용하여 시도. 운이 좋으면 실행 중에 UID를 유지할 수 있습니다. 그런 다음 UID를 훨씬 쉽게 긁을 수 있습니다.

관련 문제