Um processo pode ter um proprietário? O que isso significa?

9

Podemos determinar o proprietário de um processo usando o pscomando Isso significa que outros usuários não podem executar / matar / retomar esse processo?

Naga Venkatesh Gavini
fonte

Respostas:

18

Leia credenciais (7) , fork (2) , execve (2) . A chamada do sistema fork é a maneira como os processos são criados (hoje, forkgeralmente é implementado com o clone (2), mas você pode ver isso como um detalhe da implementação). A chamada do sistema exec é a maneira como os programas executáveis são iniciados. Lembre-se de que tudo é feito a partir de algum processo com algumas chamadas do sistema (listadas em syscalls (2) ). O primeiro processo ( init ou systemd ) foi iniciado magicamente pelo kernel no momento da inicialização. Outros processos foram iniciados pelo fork (2). Os kernels modernos do Linux às vezes - mas raramente - iniciam magicamente alguns processos especiais (por exemplo /sbin/hotplug) ou threads do kernel (por exemplo kworker, kswapd....).

Então, sim, todo processo (e todo arquivo) tem algum proprietário (tecnicamente o uid , um pequeno número não negativo) e um grupo (o gid). O uid 0 é para root e tem permissões extras.

Leia também sobre setuid (e setreuid (2) ...) É complicado.

significa que o outro proprietário não pode executar esse processo?

Um processo está em execução (mas pode estar ocioso ou em espera), para que ninguém possa executá-lo novamente. Não confunda um processo (algo dinâmico) com o programa (um arquivo executável , geralmente no formato ELF ) em execução nele.

Um determinado programa (por exemplo /bin/bash) pode ser executado em vários processos. Muitos executáveis ​​permanecem no seu disco sem ter (em um determinado instante) nenhum processo executando-os.

No Linux, proc (5) é muito útil para consultar o kernel sobre o estado dos processos. Tente exemplos cat /proc/$$/statuse cat /proc/self/maps. Veja também pgrep (1) , ps (1) , parte superior (1) .

Cada processo tem seu próprio espaço de endereço virtual , sua própria tabela de descritores de arquivos , seu próprio diretório de trabalho ((e muitas vezes vários threads , consulte pthreads (7) ) etc etc ...

significa que outros proprietários não podem executar / matar / retomar esse processo?

A execução de um processo não faz nenhum sentido (ele está em execução). No entanto, o executável do processo do pid 1234 está disponível como o /proc/1234/exelink simbólico, e você pode usá-lo para execve (2) - mas provavelmente não deveria -. As regras de permissão para execvese aplicam.

Para matar (2) um processo, você geralmente deve ter o mesmo uid. No entanto, a documentação diz:

  For a process to have permission to send a signal, it must either be
   privileged (under Linux: have the CAP_KILL capability in the user
   namespace of the target process), or the real or effective user ID of
   the sending process must equal the real or saved set-user-ID of the
   target process.  In the case of SIGCONT, it suffices when the sending
   and receiving processes belong to the same session. 

Para parar um processo, use o sinal SIGSTOP(ou SIGTSTP) usado com kill (2) . Veja o sinal (7) .

Para retomar um processo parado, use o SIGCONTsinal.

Basile Starynkevitch
fonte
4

O proprietário geralmente é o usuário que iniciou esse processo. O comando pode ser executável por outros usuários, mas isso seria um processo diferente.

significa que o outro proprietário não pode executar esse processo?

Não há outro proprietário. Não confunda programas (arquivos executáveis) e processos (executando programas).

Isso significa que outros proprietários não podem executar / matar / retomar esse processo?

O único proprietário já iniciou o processo. Se você quer dizer outros usuários , não proprietários, isso depende.

Raiz, ou seja, um usuário uidigual a 0, tem poder total. Outros usuários que compartilham o mesmo uidsão, do ponto de vista do SO, o mesmo usuário, portanto, também têm todo o poder no processo.

Os usuários com um uid diferente não poderão interromper / interromper / retomar o processo, a menos que tenham permissão para mudar para o proprietário ou privilégio de root por meio de sudoum comando semelhante ou, em menor grau, se estiverem relacionados a esse processo da hierarquia deles.

jlliagre
fonte