Чи може процес мати власника? Що це означає?


9

Ми можемо визначити власника процесу за допомогою psкоманди. Чи означає це, що інші користувачі не можуть запустити / вбити / відновити цей процес?

Відповіді:


18

Прочитайте облікові дані (7) , вилки (2) , execve (2) . Система вилки виклику є способом створюються процеси (сьогодні, forkчасто реалізуються з клоном (2) , але ви можете бачити , що в якості деталей реалізації). Exec системного виклику шлях виконувані запускаються програми. Пам’ятайте, що все робиться за допомогою певного процесу з деякими системними дзвінками (переліченими в syscalls (2) ). Найперший процес ( init або systemd ) ядро ​​почав магічно під час завантаження. Інші процеси були запущені виделкою (2). Сучасні ядра Linux іноді - але рідко - запускають магічно кілька спеціальних процесів (наприклад /sbin/hotplug) або ниток ядра (наприклад kworker, kswapd....).

Так, так, кожен процес (і кожен файл) має власника (технічно uid , невелике невід'ємне число) та групу (gid). 0 uid призначений для root та має додаткові дозволи.

Читайте також про setuid (та setreuid (2) ...) Це складно.

це означає, що інший власник не може запустити цей процес?

Процес вже запущений (але він може працювати в режимі очікування або очікувати), тому ніхто не може запустити його знову. Не плутайте процес (щось динамічне) з програмою (виконуваний файл , часто у форматі ELF ), що працює всередині нього.

Дана програма (наприклад /bin/bash) може бути виконана в декількох процесах. Багато виконуваних файлів залишаються на вашому диску, не маючи (в даний момент часу) жодних процесів, що їх запускають.

В Linux, proc (5) дуже корисно запитувати ядро ​​про стан процесів. Спробуйте для прикладів cat /proc/$$/statusі cat /proc/self/maps. Див. Також pgrep (1) , ps (1) , top (1) .

Кожен процес має власний віртуальний адресний простір , власну таблицю дескрипторів файлів , власну робочу директорію (і часто кілька потоків , див. Pthreads (7) ) тощо тощо

чи означає це, що інші власники не можуть запустити / вбити / відновити цей процес?

Запуск процесу не має сенсу (він вже запущений). Однак виконуваний процес pid 1234 доступний як /proc/1234/exesymlink, і ви можете використовувати це для execve (2) - але ви, мабуть, не повинні -. Правила дозволу execveзастосовуються.

Для вбивства (2) процесу, ви, як правило, повинні мати однаковий uid. Однак документація говорить:

  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. 

Щоб зупинити процес, використовуйте сигнал SIGSTOP(або SIGTSTP), який використовується для функції kill (2) . Дивіться сигнал (7) .

Щоб відновити зупинений процес, використовуйте SIGCONTсигнал.


4

Власник зазвичай є користувачем, який запустив цей процес. Команда може виконуватися іншими користувачами, але це був би інший процес.

це означає, що інший власник не може запустити цей процес?

Іншого власника немає. Не плутайте програми (виконувані файли) та процеси (запущені програми).

Чи означає це, що інші власники не можуть запустити / вбити / відновити цей процес?

Один власник уже запустив процес. Якщо ви маєте на увазі інших користувачів , а не власників, це залежить.

Корінь, тобто користувач, що uidдорівнює 0, має повну потужність. Інші користувачі, які поділяють те саме, uidє, з точки зору ОС, тим же самим користувачем, тому теж мають повну владу на процес.

Користувачі з іншим uid не зможуть вбити / зупинити / відновити процес, якщо тільки їм не дозволяється перейти до власника або root права через sudoабо подібну команду, або в меншій мірі, якщо вони пов'язані з цим процесом від їх ієрархії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.