Um processo pode ter um dono? O que isso significa?

9

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

    
por Naga Venkatesh Gavini 12.11.2017 / 17:12

2 respostas

17

Leia credenciais (7) , fork(2) , execve (2) . A chamada do sistema bifurcado é a forma como os processos são criados (hoje, fork é frequentemente implementado com clone (2) mas você pode ver isso como um detalhe de implementação). A chamada do sistema exec é o caminho executável programas são iniciados. Lembre-se de que tudo é feito a partir de algum processo com algumas chamadas de 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 por fork (2) . Kernels Linux modernos às vezes - mas raramente - iniciam magicamente alguns processos especiais (por exemplo, /sbin/hotplug ) ou encadeamentos do kernel (por exemplo, kworker , kswapd ....).

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

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

does it mean the other owner cannot run that process?

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

Um determinado programa (por exemplo, /bin/bash ) pode ser executado em vários processos. Muitos executáveis ficam 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. Experimente os exemplos cat /proc/$$/status e cat /proc/self/maps . Veja também pgrep (1) , ps (1) , topo (1) .

Cada processo tem seu próprio espaço de endereço virtual , seu próprio descritor de arquivos tabela, seu próprio diretório de trabalho , (e frequentemente vários < href="https://en.wikipedia.org/wiki/Thread_(computing)"> tópicos , veja pthreads (7) ) etc etc ...

does it mean that other owners cannot run/kill/resume that process?

A execução de um processo não faz sentido (já está /proc/1234/exe , e você pode usá-lo para execve (2) - mas você provavelmente não deve -. As regras de permissão para execve se aplicam.

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

  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 sinal (7) .

Para retomar um processo parado, use o sinal SIGCONT .

    
por 12.11.2017 / 17:29
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.

does it mean the other owner cannot run that process?

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

Does it mean that other owners cannot run / kill / resume that process?

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 com uid igual a 0, tem poder total. Outros usuários compartilhando o mesmo uid são, do ponto de vista do sistema operacional, o mesmo usuário, portanto, também têm poder total no processo.

Usuários com uid diferente não poderão matar / interromper / retomar o processo, a menos que tenham permissão para alternar para o proprietário ou privilégio de raiz por meio de sudo ou comando semelhante ou, em menor grau, se eles estão relacionados a esse processo de sua hierarquia.

    
por 12.11.2017 / 17:20