프로세스를 원래 사용자까지 추적하는 방법은 무엇입니까?

프로세스를 원래 사용자까지 추적하는 방법은 무엇입니까?

Solaris 서버에 user1로그인하고 다른 사용자(예 sruser: id 사용) 로 전환한 su -다음 id 프로세스를 시작한다고 가정합니다 X. 그런 다음 다른 사용자가 user2로그인하여 sruser동일한 모드로 전환하고 해당 ID의 프로세스를 시작합니다 Y. (여러 사용자가 동시에 로그인하고 전환할 수 있습니다 sruser.)

XY위의 시나리오에서 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 보안 모델과는 거리가 멀습니다.

관련 정보