UNIX процеси
UNIX е многозадачна операционна система. Това означава, че повече от една програма може да работи едновременно. Всяка програма, изпълнявана в даден момент от времето, се нарича процес. Всяка команда, която изпълнявате, ражда поне един процес. Има няколко системни процеса, изпълнявани през цялото време, които поддържат системата функционална.
Всеки процес има уникален номер, наречен идентификатор на процес или PID, и подобно на файловете, всеки процес има собственик и група. Информацията за собственика и групата на процеса се използва, за да се определи кои файлове и устройства могат да бъдат отворени от процеса, като се имат предвид разрешенията за файлове, обсъдени по-рано. Повечето процеси също имат родителски процес. Например, когато изпълнявате команди от обвивка, обвивката е процес и всяка команда, която се изпълнява, също е процес. За всеки процес, стартиран по този начин, обвивката ще бъде родителският процес. Изключение от това правило е специален процес, наречен init. init винаги е първият процес, неговият PID винаги е 1. init се стартира автоматично от ядрото по време на зареждане.
Жизнен цикъл на процеса
UNIX използва две системни извиквания за изпълнение на програми, fork() и exec().
fork() е системно извикване, което създава нов (дъщерен) процес, идентичен на този, който прави това извикване. След извикване на fork(), алгоритъмът обикновено се разклонява (родителският процес получава PID на дъщерния процес от fork(), а дъщерният получава нула).
След fork() дъщерният процес най-често изпълнява системното извикване exec(), което зарежда нова програма в пространството на процеса (точно така и само по този начин UNIX изпълнява програма в отделен процес). Така първият (нулев) UNIX процес(ядро) прави копие на себе си, за да стартира init (процес с P >
Когато програмата (дъщерен процес) приключи, тя изпълнява системното извикване exit(), докато родителският процес, използвайки системното извикване wait() (или waitpid()), трябва да изчисти таблиците на планировчика на процеси от информация за своя дъщерен процес. Ако това не се случи и родителският процес излезе, без да извика wait() на всички свои дъщерни процеси, в системата се създават зомбита, които са записи в таблиците на планировчика на процеси. Единственият начин да изчистите операционната система от зомбита е чрез рестартиране.
Изпълнение на команди в конзолата във фонов режим
За изпълнение на задачи във фонов режим се използва специалният символ &, който указва на обвивката, че стартираната програма трябва да работи във фонов режим:
$ find / -name '*.gz' & $opera &
Видове процеси
Процесите в UNIX могат да бъдат разделени на следните типове:
- Система (vmdaemon, pagezero, bufdaemon, syncer)
- Демони/услуги (usbd, httpd, sshd)
- Интерактивни/приложни процеси (ls, sh, fsck...)
- начален процес
Команди за наблюдение на процеса
Атрибути на процеса
- PID - ID на процеса
- PPID (ключ j в ps) – ID на родителския процес
- TTY (TT колона в ps) – Контролен (контролен) терминал
- RUID, EUID (alw ключове в ps) - Реален и ефективен (валиден) UID
- RGID, EGID (alw ключове в ps) - Реален и ефективен (валиден) GID
Основни механизми за програмно взаимодействие в UNIX
- Пренасочване на I/O потоци
- Променливи на средата
- Кодове за завършване
- Сигнали
- Междупроцесни комуникации (IPC– InterProcess Communications):
- unix и мрежови сокети
- споделена памет
- именувани тръби
UNIX система за сигурност
Многопотребителска среда предполага наличието на механизъм за регулиране на правата за достъп до всеки ресурс в системата. Има три вида права за достъп: четене, запис и изпълнение. Разрешенията са групирани три по три, съответно четене/запис/изпълнение за собственик/група/всички останали. Числено представяне:
Опцията -l на командата ls се използва за получаване на подробен списък на директория, включително колона с информация за разрешенията на файла за собственика, групата и всички останали. Например ls -l в произволна директория може да изведе следното:
% LS -L ОБЩО 530 -RW-R-R- 1 ROOT WHEEL 512 Sep 5 12:31 MyFile -rw-r-r- 1 Root Wheel 512 SEP 5 12:31 Otherfile -rw-r- 1 Root Wheel 7680 SP 5 12:31 Mail.txt .
Ето как изглежда първата колона на изхода ls -l:
Директориите също са файлове. Те имат едни и същи разрешения за четене, запис и изпълнение. Вярно е, че в този случай „изпълнението“ има малко по-различно значение. Когато дадена директория е маркирана като "изпълнима", това означава, че е възможно да се "промени" в нея (с помощта на командата cd, change directory). Това също означава, че в тази директория имате достъп до файлове, чиито имена са известни (разбира се, ако вашите собствени права върху файла позволяват такъв достъп).
Ако искате да получите списък с файлове в дадена директория, разрешенията за нея трябва да включват достъп за четене. За да изтриете всеки файл, чието име е известно от дадена директория, на тази директория трябва да се дадат разрешения за запис и изпълнение. Има и други права за достъп, но те обикновено се използват в специални случаи, например SUID(Задаване на UID) и SGID (Задаване на GID) бит за изпълними файлове и лепкав бит за директории.
Символи на правата
Символните обозначения, понякога наричани символни изрази, използват букви вместо осмични стойности, за да присвоят разрешения на файлове и директории. Символните изрази използват синтаксиса (кой) (действие) (права), където съществуват следните стойности:
(кой) u Потребител (Потребител) (кой) g Група (Група) (кой) o Други (Други) (кой) a Всички (Всички, 'свят') (действие) + Добавяне на права (действие) - Премахване на права (действие) = Изрично задаване на права (права) r Четене (Четене) (права) w Писане (Писане) (дясно) s) x Execute (права) t Sticky bit (права) s SUID или SGID
Тези стойности се използват от командата chmod(1) по същия начин както преди, но с букви. Например, можете да използвате следната команда, за да предотвратите достъпа на други потребители до FILE:
За да промените повече от един набор от права, можете да използвате списък, разделен със запетаи. Например следната команда ще премахне разрешенията за група и „всички“ за запис във FILE и след това ще добави разрешения за изпълнение за всички:
% chmod go-w,a+x ФАЙЛ
Управление на маска за достъп
Команда umask
Командата umask се използва за управление на разрешенията на новосъздадени файлове. Изпълнение без параметри, показва текущо зададената маска, а с параметър задава зададената стойност. Битовете, налични в маската, ще липсват (ще бъдат маскирани) в разрешенията на създадения файл.
chmod команда
] # chmod 640 file1 [hostX:
Управление на атрибутите на собственика на файла
chown команда
Командата chown променя собственика на файл. Само суперпотребител (U >
Екипchgrp
Както подсказва името, командата chgrp ви позволява да промените група файлове. В този случай потребителят трябва да принадлежи към целевата група и да е собственик на файла или да е суперпотребител.
Ескалация на потребителските привилегии
Команди със setu >$ passwd
su команда
] # pw usermod uX –G колело [hostX:
] # cat /etc/group . колело:*:0:root,uX
Свържете се като непривилегирован потребител в групата колела
sudo пакет
] # pkg_add /usr/ports/packages/All/sudo.tbz [hostX:
] # visudo . %wheel ALL = (ALL) ALL userX ALL = NOPASSWD: монтиране /cdrom .