Solaris 서버에 user1
로그인하고 다른 사용자(예 sruser
: id 사용) 로 전환한 su -
다음 id 프로세스를 시작한다고 가정합니다 X
. 그런 다음 다른 사용자가 user2
로그인하여 sruser
동일한 모드로 전환하고 해당 ID의 프로세스를 시작합니다 Y
. (여러 사용자가 동시에 로그인하고 전환할 수 있습니다 sruser
.)
X
Y
위의 시나리오에서 ID와 실제 사용자 의 진행 상황을 추적할 수 있는 방법이 있습니까 user1
?user2
프로세스를 원래 사용자까지 어떻게 추적합니까?
답변1
프로세스 트리를 생성하는 명령이 있습니다. 'ps'는 'fu' 옵션을 사용합니다. Sun에는 ptree가 있는 것 같습니다.
답변2
표준적인 방법은 없으며 제가 아는 한 솔라리스에는 방법이 없습니다. "조상" 사용자를 찾는 신뢰할 수 있는 방법이 있다면 루트가 모든 것을 할 수 있는 일반적인 UNIX 보안 모델은 더 이상 유지되지 않을 것입니다.
각 프로세스의 상위 프로세스를 재귀적으로 확인할 수 있습니다. (경고, 테스트되지 않은 스크립트입니다.)
pid=$1 pids=$pid user=
while pid=$(ps -o ppid= $pid); do
user=$(ps -o ruser= $pid)
case $user in
0|root) :;;
*) break;;
esac
done
echo $user
그러나 이것이 어떤 결과를 보장하는 것은 아닙니다. 아마도 상위 프로세스의 상위 프로세스가 종료되었을 수 있습니다.
프로세스가 실행 중인 터미널을 확인 ps -o tty= $pid
하고( ) 해당 터미널에 마지막으로 로그인한 사람이 누구인지 확인할 수 있습니다( who
, last
). 그러나 이는 단지 암시적일 뿐입니다. 루트는 모든 터미널에서 프로세스를 시작할 수 있습니다.
user1이 실행되면 무엇을 볼 수 있을까요 su user2 -c 'su user1 -c …'
? 운영 체제가 프로세스와 관련된 커널 데이터 구조에서 지속적인 인증 체인을 추적한다고 생각할 수 있지만 이는 일반적인 UNIX 보안 모델과는 거리가 멀습니다.