Determine o dono da sessão de um processo

4

Estou tentando implementar uma maneira de determinar qual usuário é o proprietário da sessão de algum processo, de maneira que seja o mais compatível possível com plataformas diferentes.

No Linux, posso rastrear o processo seguindo o link /proc/PID/fd/0 -> /dev/pts/31 e procurando quem é o proprietário deste terminal no arquivo utmp. Como faço isso, digamos, no AIX 6.1? /proc/PID/fd contém arquivos char e não links simbólicos como o Linux também ... Qual é a estrutura exata de uma única entrada no arquivo utmp no AIX 6.1? Tentei lê-lo usando 7.1 [ link estruturas utmp, mas isso não se encaixa no padrão.

    
por netikras 28.12.2014 / 01:22

3 respostas

1

Talvez eu tenha simplificado demais, mas, você pode fazer isso?

ps -p <pid> -F tty

Aqui está um exemplo:

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

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

Veja como você pode determinar para permitir ou negar acesso a um processo específico:

Você primeiro determina quem é o proprietário do processo e qual dispositivo de pts o iniciou usando:

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

Então você verifica o dono do dispositivo pts / X, assim:

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

Se o proprietário de / dev / pts / X for o mesmo que o proprietário do processo, o processo foi iniciado pelo usuário de login e você concederá acesso, se o proprietário do dispositivo / dev / pts / X não for o mesmo que o proprietário do processo, então você nega o acesso.

    
por 17.04.2015 / 04:40
1

Se houver pts, estou assumindo que é interativa, ou seja, pseudo terminal como pts anexados. Eu estou usando isso no meu bash auditor em servidores, ele vai te dar nome de usuário, mesmo se o usuário fez sudo su - para mudar para a raiz, por exemplo.

stat -c %U $(tty)
  1. Obter tty nome, por exemplo, /dev/pts/0
  2. Usando stat, obtenha o nome do proprietário do arquivo

Depois que o shell expande $(tty) , parece que está abaixo

stat -c %U /dev/pts/0

Se você fosse para ls -l /dev/pts , poderia ver os proprietários de todos os pseudo terminais.

    
por 14.07.2017 / 14:35
0

Estranho, não foi devidamente respondido antes.

#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);
}

É portátil entre U * x e evita o utmp. Tarde, mas pode ajudar os outros.

Se você precisar do nome de usuário:

#include <pwd.h>
...
printf("%s\n", getpwuid(sb.st_uid)->pw_name);
    
por 22.10.2016 / 04:30