세션이 "su"로 실행되고 있는지 확인

세션이 "su"로 실행되고 있는지 확인

현재 쉘 세션이 로그인 세션 내에서 실행되고 있는지 확인하려고 합니다 su.

이 상황을 테스트하는 가장 좋은 방법은 무엇입니까?

답변1

logname명령을 봅니다 . logname은 utmp 로그에서 제공한 대로 제어 터미널에 로그인한 사용자의 사용자 이름을 인쇄합니다.

tk-mbp:~ tkennedy$ id -g -rn
staff
tk-mbp:~ tkennedy$ id -u -rn
tkennedy
tk-mbp:~ tkennedy$ logname
tkennedy
tk-mbp:~ tkennedy$ su -
Password:
tk-mbp:~ root# id -g -rn
wheel
tk-mbp:~ root# id -u -rn
root
tk-mbp:~ root# logname
tkennedy

이 예는 Mac OS X에서 가져온 것이므로 명령 사용은 id다른 운영 체제와 다를 수 있지만 로그 이름 사용은 Mac OS 간에 일관됩니다.

logname을 사용하면 명령에 의해 반환된 사용자가 다음과 같다고 가정할 수 있습니다 id.아니요반환된 사용자와 동일 logname하면 현재 셸 세션은 su, sudo 또는 셸에서 권한 변경을 허용하는 다른 도구에서 실행되고 있습니다.

답변2

현재 쉘이 실행되는지 테스트하려면 다음을 수행하십시오 su.

[ "$(ps -o comm= $PPID)" = "su" ]

su로그인 후 사용자가 호출하는지 여부를 테스트하려면 많은(전부는 아님) 시스템에서 LOGNAME(일반적으로 초기 로그인 시 설정) USER또는 (현재 사용자를 식별함)과 id -un비교할 수 있습니다. 이는 LOGNAME쉽게 속일 수 있습니다(환경 변수임). 그러나 다른 솔루션의 경우에도 마찬가지입니다(예: 모든 솔루션은 ln -s /bin/su ~/sh; ~/sh프로세스 이름에 따라 숨겨집니다).su

답변3

내가 연결한 솔루션 중 하나는 다음과 같습니다.

pstree -p $$ | 
grep -oP '[r]oot su .*(\w+)' |
sed -n -E 's/.* ([[:alnum:]]+)$/\1/p'`

나무현재 쉘 프로세스 PID($$)의 조상 트리를 나열하려면 -p 플래그를 사용하십시오.

grep"root su"가 포함된 행을 찾습니다. (저는 grep 프로세스 자체를 반환하지 않기 위해 [r] 트릭을 사용합니다.)

sed결과를 정리하고 줄 끝에 현재 사용자 이름만 인쇄합니다. (부모 프로세스의 사용자를 출력한다면 더 도움이 될 것입니다.)

관련 정보