Процеси UNIX

UNIX є багатозадачною операційною системою. Це означає, що одночасно може бути запущена більш ніж одна програма. Кожна програма, що працює у певний момент часу, називається процесом. Кожна команда, яку ви запускаєте, породжує хоч би один процес. Є кілька системних процесів, запущених постійно і підтримують функціональність системи.

У кожного процесу є унікальний номер, званий process ID, або PID, і, як і файлів, у кожного процесу є власник і група. Інформація про власника та групу процесу використовується для визначення того, які файли та пристрої можуть бути відкриті процесом з урахуванням прав на файли, про які йшлося раніше. Також більшість процесів мають батьківський процес. Наприклад, при запуску команд з оболонки оболонка є процесом і будь-яка запущена команда також є процесом. Для кожного запущеного таким шляхом процесу оболонка буде батьківським процесом. Винятком із цього правила є спеціальний процес, званий init. init завжди перший процес, його PID завжди дорівнює 1. init запускається автоматично ядром під час завантаження.

Життєвий цикл процесу

Для запуску програм у UNIX використовуються два системні виклики – fork() та exec().

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

Після fork() дочірній процес найчастіше виконує системний виклик exec(), що завантажує в простір процесу нову програму (саме так, і тільки так, UNIX виконується запуск програми в окремому процесі). Так, перший (нульовий) процес UNIX(ядро системи) створює свою копію, щоб запустити init (процес з P>

При завершенні роботи програма (дочірній процес) виконує системний виклик exit(), причому батьківський процес за допомогою системного виклику wait() (або waitpid()) повинен очистити таблиці планувальника процесів від інформації про свій дочірній процес. Якщо цього не відбувається і батьківський процес завершується, не викликавши wait() для всіх своїх дочірніх процесів, в системі виникають зомбі (zombie), що є записами в таблицях планувальника процесів. Очистити операційну систему від зомбі можна лише за допомогою перезавантаження.

Запуск команд у консолі у фоновому режимі

Для запуску завдань у фоновому режимі використовується спеціальний символ &, що вказує шеллу, що програма, що запускається, повинна виконуватися на задньому плані (background):

$find/-name '*.gz' & $ opera &

Типи процесів

Процеси в UNIX можна розділити на такі типи:

  • Системні (vmdaemon, pagezero, bufdaemon, syncer)
  • Демони/сервіси (usbd, httpd, sshd)
  • Інтерактивні/прикладні процеси (ls, sh, fsck...)
  • Процес init

Команди моніторингу процесів

Атрибути процесу

  • PID – Ідентифікатор процесу
  • PPID (ключ j в ps) – Ідентифікатор батьківського процесу
  • TTY (стовпець TT в ps) - Контрольний (керуючий) термінал
  • RUID, EUID (ключи alw в ps) – Реальний та ефективний (діючий) UID
  • RGID, EGID (ключи alw в ps) – Реальний та ефективний (діючий) GID

Базові механізми взаємодії програм у UNIX

  • Перенаправлення потоків введення/виводу
  • Змінні оточення
  • Коди завершення
  • Сигнали
  • Міжпроцесні взаємодії (IPC- InterProcess Communications):
  • unix- та мережеві сокети
  • пам'ять, що розділяється
  • іменовані канали

Система безпеки UNIX

Розрахована на багато користувачів середовище передбачає наявність механізму регулювання прав доступу до будь-якого ресурсу в системі. Існує три типи прав доступу: на читання, запис та виконання. Права згруповані три по три, відповідно читання/запис/виконання для власника/групи/всіх інших. Чисельне уявлення:

Опція -l команди ls використовується для отримання докладного лістингу каталогу, що включає колонку з інформацією про права на файл для власника, групи та інших. Наприклад, команда ls -l у довільному каталозі може вивести таке:

% ls -l total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12 :31 іншийфайл -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt .

Ось як виглядає перша колонка виведення ls -l:

Каталоги також файли. До них застосовні самі права на читання, запис і виконання. Щоправда, у разі " виконання " має дещо інший сенс. Коли каталог позначений як "здійсненний", це означає, що можна "зайти" до нього (за допомогою команди cd, change directory). Це також означає, що в даному каталозі можна отримати доступ до файлів, імена яких відомі (звісно, ​​якщо власні права на файл дозволяють такий доступ).

Якщо ж потрібно отримати список файлів у деякому каталозі, права доступу на нього мають включати доступ на читання. Для того, щоб видалити з каталогу будь-який файл, ім'я якого відомо, на цей каталог повинні бути надані права на запис та виконання. Існують і інші права доступу, але вони зазвичай використовуються в особливих випадках, наприклад, SUID(Set UID) та SGID (Set GID) -біт на виконувані файли та sticky-біт на каталоги.

Символічні позначення прав

Символічні позначки, які називаються символічними виразами, використовують літери замість вісімкових значень для призначення прав на файли та каталоги. Символічні вирази використовують синтаксис (хто) (дія) (права), де існують такі значення:

(хто) u Користувач (User) (хто) g Група (Group) (хто) o Інші (Other) (хто) a Всі (All, 'world') (дія ) + Додавання прав (дія) - Видалення прав (дія) = Явна установка прав (права) r Читання (Read) (права) w Запис (Write) (права) ) x Виконання (Execute) (права) t Sticky біт (права) s SUID або SGID

Ці значення використовуються командою chmod(1) як і раніше, але з літерами. Наприклад, ви можете використовувати наступну команду для заборони доступу інших користувачів до FILE:

Для зміни більш ніж одного набору прав можна застосувати список, розділений комами. Наприклад, наступна команда видалить права групи та 'всіх інших' на запис у FILE, а потім додасть права на виконання для всіх:

% chmod go-w,a+x FILE

Керування маскою доступу

Команда umask

Для керування правами доступу нових файлів використовується команда umask. Запущена без параметрів, вона показує поточну маску, а з параметром – встановлює вказане значення. Біти, присутні в масці, будуть відсутні (замасковані) у правах доступу створеного файлу.

Команда chmod

] # chmod 640 file1 [hostX:

Керування атрибутами власників файлу

Команда chown

Команда chown змінює власника файлу. Тільки суперкористувач (U >

Командаchgrp

Як випливає із назви, команда chgrp дозволяє змінювати групу файлів. При цьому користувач повинен належати цільовій групі і бути власником файлу або бути суперкористувачем.

Підвищення привілеїв користувачів

Команди з setu >$passwd

Команда su

] # pw usermod uX -G wheel [hostX:

] # cat /etc/group . wheel:*:0:root,uX

Підключаємося непривілейованим користувачем, що входить до групи wheel

Пакет sudo

] # pkg_add /usr/ports/packages/All/sudo.tbz [hostX:

] # visudo . %wheel ALL = (ALL) ALL userX ALL = NOPASSWD: mount /cdrom .