프로세스 세션의 소유자 확인

프로세스 세션의 소유자 확인

가능한 가장 크로스 플랫폼 방식으로 어떤 사용자가 특정 프로세스 세션의 소유자인지 확인하는 방법을 구현하려고 합니다.

Linux에서는 /proc/PID/fd/0 -> /dev/pts/31링크를 따라가서 터미널을 소유한 utmp 파일을 보면 프로세스의 pty를 추적할 수 있습니다. 예를 들어, AIX 6.1에서는 이를 어떻게 수행합니까? /proc/PID/fdLinux와 같은 심볼릭 링크 대신 char 파일을 포함합니다. 또한 AIX 6.1의 utmp 파일에 있는 단일 항목의 정확한 구조는 무엇입니까? 7.1을 사용하여 읽어보세요 [http://www-01.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.files/utmp.h.htm]utmp 구조이지만 패턴에 실제로 맞지 않습니다.

답변1

pt가 있는 경우 대화형, 즉 첨부된 pt와 같은 의사 터미널이라고 가정합니다. 나는 이것을 서버의 bash 감사자에서 사용하고 있으며 sudo su -사용자가 루트로 전환하더라도 사용자 이름을 제공합니다.

stat -c %U $(tty)
  1. tty이름을 얻으십시오 ./dev/pts/0
  2. stat를 사용하여 파일 소유자 이름 얻기

쉘은 $(tty)다음과 같이 확장됩니다:

stat -c %U /dev/pts/0

원하는 경우 ls -l /dev/pts모든 의사 터미널의 소유자를 볼 수 있습니다.

답변2

제가 지나치게 단순화한 것일 수도 있지만, 이렇게 할 수 있나요?

ps -p <pid> -F tty

예는 다음과 같습니다.

$ ps -p 6947010
      PID    TTY  TIME CMD
  6947010  pts/0  0:00 ksh

$ ps -p 6947010 -F tty=
 pts/0

다음과 같은 방법으로 특정 프로세스에 대한 액세스를 허용할지 또는 거부할지 결정할 수 있습니다.

먼저, 다음을 사용하여 프로세스를 소유한 사람과 프로세스를 시작한 pts 장치를 확인할 수 있습니다.

$ ps -p <PID> -F tty=,user=
 pts/X  <username>

그런 다음 다음과 같이 pts/X 장치의 소유자를 확인하십시오.

$ ls -l /dev/pts/X
crw--w--w-    1 <username>  <group>     21,  0 Apr 18 13:27 /dev/pts/0

/dev/pts/X의 소유자가 프로세스 소유자와 동일한 경우 로그인한 사용자가 프로세스를 시작하고 /dev/pts/X 장치의 소유자가 프로세스 소유자와 다른 경우 액세스 권한을 부여합니다. 또는 액세스를 거부합니다.

답변3

이상하게도 이전에는 제대로 된 응답을 받지 못했습니다.

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>

int main(int argc, char **argv)
{
   struct stat     sb;
   stat(argv[1], &sb)
   printf("%d\n", sb.st_uid);
}

U*x 간에 이식 가능하며 utmp를 방지합니다. 늦었지만 다른 사람들에게 도움이 될 수 있습니다.

사용자 이름이 필요한 경우:

#include <pwd.h>
...
printf("%s\n", getpwuid(sb.st_uid)->pw_name);

관련 정보