Различия между версиями 7 и 8
Версия 7 от 2008-07-26 18:35:24
Размер: 9925
Редактор: MaximByshevskiKonopko
Комментарий:
Версия 8 от 2008-07-26 18:56:39
Размер: 18355
Редактор: MaximByshevskiKonopko
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 2: Строка 2:
Как кому разрешать и запрещать делать разные вещи. Дело вот в чём: ещё в линуксе обычный пользователь достаточно сильно поражён в правах. Говоря простым языком, он может изменять файлы в своём каталоге и свои файлы в /tmp. Ещё он может часть файлов читать, но не больше. Поскольку такова практика работы в linux, то почти любая программа должна работать от лица обычного пользователя, и тут не имеем проблем, свойственных Windows.
Как кому разрешать и запрещать делать разные вещи. Дело вот в чём: в линуксе обычный пользователь достаточно сильно поражён в правах. Говоря простым языком, он может изменять файлы в своём каталоге и свои файлы в /tmp. Ещё он может часть файлов читать, но не больше. Поскольку такова практика работы в linux, то почти любая программа должна работать от лица обычного пользователя, и тут не имеем проблем, свойственных Windows.
Строка 6: Строка 7:
 * Чтение. Ознчает, что файл можно читать.  * Чтение. Означает, что файл можно читать.
Строка 10: Строка 11:
ls -l выведет права, количество имён у файла, пользователь, группу, размер, время изменения и имя файла. Первый символ в правах значает тип файла (- у обычных файлов, d у каталогов, другие символы у специальных файлов). Посмотри ls -l /bin/ | head. Можно увидеть, что файлы исполняемые.

Создадим файл MyExecutable с простым скриптом и ппробуем запустить его. Узреем, что отказано в доступе. Если скажем ls -l MyExecutable, то увидим, что у него нет бита исполнения. Если скажем chmod +x MyExecutable, то исполнение файла станет возможным. После того, как мы скажем chmod -r MyExecutable, то мы не сможем читать, но сможем писать: echo 'echo \'Hello?\' ' > MyExecutable.

Как работает эта программа? Как работают бинарные, понятно, а как она Hello вывела? Наверное, её выполнил shell. Он её выполнил, птому что он указан в первой строчке файла, после #!. По умолчанию используется (для текствых файлов, у которых эта первая строчка не указана) /bin/sh.

Более хитро три вида доступа устроено применительно к каталогам. Каталог это такой список файлов, где хранится имя файла и соответствующий ему индексный дескриптор. Когда мы обращаемся к файлу по имени, то мы неявно производим поиск по этой таблице соответствий, чтобы узнать, откуда с диска брть файл. Итак, права:
ls -l выведет права, количество имён у файла, пользователь, группу, размер, время изменения и имя файла. Первый символ в правах обозначает тип файла (- у обычных файлов, d у каталогов, другие символы у специальных файлов). Посмотри ls -l /bin/ | head. Можно увидеть, что файлы исполняемые.
{{{
$ ls -l /bin/ | head
итого 5204
-rwxr-xr-x 1 root root 2852 Ноя 23 2007 arch
lrwxrwxrwx 1 root root 4 Июл 15 21:23 awk -> gawk
-rwxr-xr-x 1 root root 13004 Май 22 2007 basename
-rwxr-xr-x 1 root root 470980 Окт 5 2007 bash
lrwxrwxrwx 1 root root 4 Июл 15 21:23 bash2 -> bash
lrwxrwxrwx 1 root root 5 Июл 15 21:22 bunzip2 -> bzip2
lrwxrwxrwx 1 root root 5 Июл 15 21:22 bzcat -> bzip2
-rwxr-xr-x 1 root root 30360 Май 18 2007 bzip2
-rwxr-xr-x 1 root root 22008 Май 18 2007 bzip2recover
}}}

Создадим файл MyExecutable с простым скриптом и ппробуем запустить его.
{{{
$ cat > MyExecutable
#!/bin/sh
echo "Hello!"
$ ./MyExecutable
bash: ./MyExecutable: Отказано в доступе
}}}
Узреем, что отказано в доступе. Если скажем ls -l MyExecutable, то увидим, что у него нет бита исполнения.
{{{
$ ls -l MyExecutable
-rw-r--r-- 1 george george 24 Июл 18 16:29 MyExecutable
}}}
Если скажем chmod +x MyExecutable, то исполнение файла станет возможным.
{{{
chmod +x MyExecutable
$ ls -l MyExecutable
-rwxr-xr-x 1 george george 24 Июл 18 16:29 MyExecutable
$ ./MyExecutable
Hello!
}}}
После того, как мы скажем chmod -r MyExecutable, то мы не сможем читать, но сможем писать:
{{{
$ chmod -r MyExecutable
$ cat MyExecutable
cat: MyExecutable: Отказано в доступе
$ ls -l MyExecutable
--wx--x--x 1 george george 24 Июл 18 16:29 MyExecutable
$ ./MyExecutable
/bin/sh: ./MyExecutable: Отказано в доступе
$ cat >> MyExecutable
echo "Hello?"
$ chmod +r MyExecutable
$ ./MyExecutable
Hello!
Hello?
}}}

Как работает эта программа? Как работают бинарные, понятно, а как она Hello вывела? Наверное, её выполнил shell. Он её выполнил, потому что он указан в первой строчке файла, после #!. По умолчанию используется (для текствых файлов, у которых эта первая строчка не указана) /bin/sh.

Более хитро три вида доступа устроено применительно к каталогам. Каталог это такой список файлов, где хранится имя файла и соответствующий ему индексный дескриптор. Когда мы обращаемся к файлу по имени, то мы неявно производим поиск по этой таблице соответствий, чтобы узнать, откуда с диска брать файл. Итак, права:
Строка 22: Строка 72:
По принципу прав --1 делаются директории с именами файлов, известых только избранным. По принципу прав --x делаются директории с именами файлов, известных только избранным.
Строка 26: Строка 76:
Вопрос: кто записывает файл, читает из файла? Вовсе не пользователь, как об этом некоторые думают, а процесс. Вся работа системы состоит в том, что процессы что-то делают с файлами. В каждый момент времени выполняется много процессов. Команда ps показывает список процессв, по умолчанию, привязанных к текущей консоли, -e --- все процессы, -f --- более полная информация. Каждому прцессу сответствует идентификатор процесса. Прцессы в квадратных скобках --- куски ядра, зарегистрированные как процессы (для того, чтобы им можно было посылать сингалы). Процессы порождают друг друга, поэтому в выдаче указан не только идентификатор процесса, но и его папы. Если родительский процесс умер, а сын живёт, то их усыновляет init. Вопрос: кто записывает файл, читает из файла? Вовсе не пользователь, как об этом некоторые думают, а процесс. Вся работа системы состоит в том, что процессы что-то делают с файлами. В каждый момент времени выполняется много процессов. Команда ps показывает список процессов, по умолчанию, привязанных к текущей консоли, -e --- все процессы, -f --- более полная информация.
{{{
$ ps
  PID TTY TIME CMD
 4753 pts/2 00:00:00 bash
 6155 pts/2 00:00:00 ps
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:28 ? 00:00:00 init [5]
root 2 1 0 10:28 ? 00:00:00 [migration/0]
root 3 1 0 10:28 ? 00:00:00 [ksoftirqd/0]
root 4 1 0 10:28 ? 00:00:00 [watchdog/0]
root 5 1 0 10:28 ? 00:00:00 [events/0]
root 6 1 0 10:28 ? 00:00:00 [khelper]
root 7 1 0 10:28 ? 00:00:00 [kthread]
root 10 7 0 10:28 ? 00:00:00 [kblockd/0]
root 11 7 0 10:28 ? 00:00:00 [kacpid]
root 92 7 0 10:28 ? 00:00:00 [cqueue/0]
root 93 7 0 10:28 ? 00:00:00 [kseriod]
root 132 7 0 10:28 ? 00:00:00 [pdflush]
root 133 7 0 10:28 ? 00:00:00 [pdflush]
root 134 7 0 10:28 ? 00:00:00 [kswapd0]
root 135 7 0 10:28 ? 00:00:00 [aio/0]
root 635 7 0 10:28 ? 00:00:00 [kjournald]
root 733 1 0 10:28 ? 00:00:00 /sbin/udevd --daemon
root 953 7 0 10:28 ? 00:00:00 [khubd]
root 1039 7 0 10:28 ? 00:00:00 [kgameportd]
root 1052 7 0 10:28 ? 00:00:00 [kpsmoused]
root 2448 1 0 10:29 ? 00:00:00 /sbin/auditd
root 2450 2448 0 10:29 ? 00:00:00 /sbin/audispd
root 2451 7 0 10:29 ? 00:00:00 [kauditd]
rpc 2481 1 0 10:29 ? 00:00:00 /sbin/portmap -l
syslogd 2607 1 0 10:29 ? 00:00:00 /sbin/syslogd -u syslogd -j /v
klogd 2636 1 0 10:29 ? 00:00:00 /sbin/klogd -c 1 -x -u klogd -
100 2938 1 0 10:29 ? 00:00:00 /usr/bin/dbus-daemon --system
root 2990 1 0 10:29 ? 00:00:00 /usr/sbin/acpid
110 3030 1 0 10:29 ? 00:00:00 /usr/sbin/hald
root 3031 3030 0 10:29 ? 00:00:00 hald-runner
root 3036 3031 0 10:29 ? 00:00:00 hald-addon-input: Listening on
110 3044 3031 0 10:29 ? 00:00:00 hald-addon-acpi: listening on
root 3049 3031 0 10:29 ? 00:00:01 hald-addon-storage: polling /d
root 3186 1 0 10:29 ? 00:00:00 /usr/sbin/gpm -m /dev/psaux -t
root 3216 1 0 10:29 ? 00:00:00 /usr/sbin/crond
root 3270 1 0 10:29 ? 00:00:00 /usr/sbin/atieventsd
root 3299 1 0 10:29 ? 00:00:00 /usr/sbin/rundm /dev/tty1 /dev
root 3310 3299 0 10:29 ? 00:00:00 xdm -nodaemon
root 3401 3310 3 10:29 tty7 00:13:21 X -nolisten tcp -auth /etc/X11
root 3414 3310 0 10:29 ? 00:00:00 -:0
root 3415 1 0 10:29 ? 00:00:00 /usr/sbin/cupsd
dhcpd 3471 1 0 10:29 ? 00:00:00 /usr/sbin/dhcpd
root 3733 1 0 10:29 ? 00:00:00 /usr/libexec/postfix/master
postfix 3750 3733 0 10:29 ? 00:00:00 qmgr -l -t fifo -u -c
root 3807 1 0 10:29 tty1 00:00:00 /bin/login
root 3808 1 0 10:29 tty2 00:00:00 /sbin/mingetty tty2
root 3809 1 0 10:29 tty3 00:00:00 /sbin/mingetty tty3
root 3810 1 0 10:29 tty4 00:00:00 /sbin/mingetty tty4
root 3811 1 0 10:29 tty5 00:00:00 /sbin/mingetty tty5
root 3812 1 0 10:29 tty6 00:00:00 /sbin/mingetty tty6
george 3836 3414 0 10:34 ? 00:00:00 /bin/sh /etc/xdg/xfce4/xinitrc
george 3888 1 0 10:34 ? 00:00:00 /usr/bin/dbus-launch --sh-synt
george 3889 1 0 10:34 ? 00:00:00 /usr/bin/dbus-daemon --fork --
george 3892 1 0 10:34 ? 00:00:00 ssh-agent -u
george 3952 3836 0 10:34 ? 00:00:00 /bin/sh /etc/xdg/xfce4/xinitrc
george 3953 3952 0 10:34 ? 00:00:00 xscreensaver -no-splash
george 3956 3836 0 10:34 ? 00:00:00 /usr/bin/xfce4-session
george 3960 1 0 10:34 ? 00:00:02 xfce-mcs-manager
george 3962 1 0 10:34 ? 00:00:03 xfwm4
george 3964 1 0 10:34 ? 00:00:15 xfce4-panel
george 3966 1 0 10:34 ? 00:00:00 Thunar --daemon
george 3968 1 0 10:34 ? 00:00:00 /usr/lib/gam_server
george 3970 1 0 10:34 ? 00:00:03 xfdesktop
george 3972 3964 0 10:34 ? 00:00:02 /usr/lib/xfce4/panel-plugins/x
george 3973 3964 0 10:34 ? 00:00:00 /usr/lib/xfce4/panel-plugins/x
root 3977 3807 0 10:34 tty1 00:00:00 -bash
george 4090 1 0 10:41 ? 00:00:00 /bin/sh /usr/bin/xbrowser /usr
george 4096 4090 0 10:41 ? 00:00:00 /bin/sh /usr/lib/firefox/run-m
george 4101 4096 0 10:41 ? 00:02:19 /usr/lib/firefox/firefox-bin /
george 4107 1 0 10:42 ? 00:00:00 /usr/lib/gconfd-2 14
george 4143 1 0 10:53 ? 00:00:09 /usr/bin/Terminal
george 4144 4143 0 10:53 ? 00:00:00 gnome-pty-helper
george 4146 4143 0 10:53 pts/0 00:00:00 bash
george 4273 4143 0 12:49 pts/1 00:00:00 bash
george 4311 4273 0 13:15 pts/1 00:00:00 bash
george 4751 4311 0 14:52 pts/1 00:00:00 script -t 5.script
george 4752 4751 0 14:52 pts/1 00:00:00 script -t 5.script
george 4753 4752 0 14:52 pts/2 00:00:00 bash -i
postfix 4909 3733 0 15:29 ? 00:00:00 pickup -l -t fifo -u -c
george 6013 1 0 15:51 ? 00:00:00 xbindkeys
george 6162 4753 0 16:41 pts/2 00:00:00 ps -ef
}}}

Каждому процессу соответствует идентификатор процесса. Среди процессов есть куски ядра, зарегистрированные как процессы (имена таких процессов взяты в квадратные скобки; они существуют для того, чтобы ядру можно было посылать сигналы). Процессы порождают друг друга, поэтому в выдаче указан не только идентификатор процесса, но и его папы. Если родительский процесс умер, а сын живёт, то их усыновляет init.
Строка 29: Строка 170:

С данного терминала можно запускать много процессов, но только одна может занимать терминал --- foreground-процесс (по вводу один, по выводу много). Для запуска процесса в фоне ужно дописать в конце команды &. Если процесс в фоне, то можно его перевести в fg и убить, или сказать ps -H, посмотреть номер процесса и убить ненужный.
{{{
$ kill -l
 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
}}}

С данного терминала можно запускать много процессов, но только один может занимать терминал --- foreground-процесс (по вводу один, по выводу много). Для запуска процесса в фоне нужно дописать в конце команды &. Если процесс в фоне, то можно его перевести в fg и убить, или сказать ps -H, посмотреть номер процесса и убить ненужный.
Строка 34: Строка 194:
Работа происходит следующим образом: после логина запускается логин шелл. Этому первому процессу присваивается id процесса и ему присваивается некий идентификатор пользователя, котрый зарегистрировался в системе. Все процессы обязательно принадлежат какому-то пользователю. Пользователь определяется по номеру (UID). То есть текстовый или графический логин при логине лезет в базу пользователей, проверяет пароль, создаёт новый процесс, меняет ему UID и выполняет шелл. Все файлы также принадлежат какому-то пользователю. Возникает сразу дихотомия, связанная вот с чем --- чей процесс осуществляет доступ к файлу? Процесс у них одинаковый или разный? Получается две категории уровня доступа: первый урвень доступа u --- какие права имеет пользователь по отношению к своему файлу. Третье (o) --- определяет, какие права имеют прцессы других пользователей. В такой дихотомии есть слабое звено, с которым часто приходится сталкиваться во время совместной работы --- если надо, чтобы одни имели доступ, а другие --- не имели. Для этого существует множественный субъект, группа пользователей. Для того, чтобы вводить сотношение между несколькими пользователями вместе и файлом, вводится понятие группа. Что такое группа? У каждого файла прописан не только пользователь, но и группа. Например, ls -ld /etc/tcb. Любой пользователь может принадлежать любому количеству групп. Эта информация отчасти лежит в файле /etc/passwd (основная группа). Инф о других вхождениях в группы есть в /etc/group. Для того, чтобы узнать, у кого каой id, мжно воспользоваться командой id.

Таким образом, мы получаем не два уровня доступа, а три, второй триплет (g) определяет права доступа для группы.
Работа происходит следующим образом: после логина запускается логин шелл. Этому первому процессу присваивается id процесса и ему присваивается некий идентификатор пользователя, который зарегистрировался в системе. Все процессы обязательно принадлежат какому-то пользователю. Пользователь определяется по номеру (UID). То есть программа, обеспечивающая авторизацию пользователя в системе, при логине лезет в базу пользователей, проверяет пароль, создаёт новый процесс, меняет ему UID и выполняет (exec) в этом процессе шелл.

Все файлы также принадлежат какому-то пользователю. Сразу возникает вопрос --- как определять, какой процесс может иметь доступ к какому файлу? Интуитивно получается две категории уровня доступа: первый уровень доступа (u) --- какие права имеет процессы пользователя-владельца по отношению к файлу. Третье (o) --- определяет, какие права имеют процессы других пользователей.

В такой дихотомии есть слабое звено, с которым часто приходится сталкиваться во время совместной работы --- если надо, чтобы одни имели доступ, а другие --- не имели. Для этого существует множественный субъект, группа пользователей. Для того, чтобы вводить соотношение между несколькими пользователями вместе и файлом, вводится понятие группа. Что такое группа? У каждого файла прописан не только пользователь, но и группа. Например, ls -ld /etc/tcb.
{{{
$ ls -ld /etc/tcb
drwx--x--- 41 root shadow 4096 Июл 17 13:15 /etc/tcb
}}}
Любой пользователь может принадлежать любому количеству групп. Эта информация отчасти лежит в файле /etc/passwd (основная группа). Информация о других вхождениях в группы есть в /etc/group. Для того, чтобы узнать, у кого какой id, можно воспользоваться командой id.
{{{
$ id
uid=500(george) gid=500(george) группы=10(wheel),14(uucp),19(proc),22(cdrom),71(floppy),80(cdwriter),81(audio),83(radio),119(xgrp),422(camera),423(scanner),500(george)
}}}

Таким образом, мы получаем не два уровня доступа, а три, второй триплет rwx (g) определяет права доступа для группы.
Строка 44: Строка 217:
|| 13 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, [[Allena]], MaximByshevskiKonopko || || || || 18 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, [[Allena]], MaximByshevskiKonopko || || ||

Процессы, права доступа

Как кому разрешать и запрещать делать разные вещи. Дело вот в чём: в линуксе обычный пользователь достаточно сильно поражён в правах. Говоря простым языком, он может изменять файлы в своём каталоге и свои файлы в /tmp. Ещё он может часть файлов читать, но не больше. Поскольку такова практика работы в linux, то почти любая программа должна работать от лица обычного пользователя, и тут не имеем проблем, свойственных Windows.

Есть три вида доступа:

  • Чтение. Означает, что файл можно читать.
  • Запись. Означает, что файл можно изменять.
  • Использование, исполнение. Означает, что файл можно исполнять.

ls -l выведет права, количество имён у файла, пользователь, группу, размер, время изменения и имя файла. Первый символ в правах обозначает тип файла (- у обычных файлов, d у каталогов, другие символы у специальных файлов). Посмотри ls -l /bin/ | head. Можно увидеть, что файлы исполняемые.

$ ls -l /bin/ | head
итого 5204
-rwxr-xr-x 1 root root    2852 Ноя 23  2007 arch
lrwxrwxrwx 1 root root       4 Июл 15 21:23 awk -> gawk
-rwxr-xr-x 1 root root   13004 Май 22  2007 basename
-rwxr-xr-x 1 root root  470980 Окт  5  2007 bash
lrwxrwxrwx 1 root root       4 Июл 15 21:23 bash2 -> bash
lrwxrwxrwx 1 root root       5 Июл 15 21:22 bunzip2 -> bzip2
lrwxrwxrwx 1 root root       5 Июл 15 21:22 bzcat -> bzip2
-rwxr-xr-x 1 root root   30360 Май 18  2007 bzip2      
-rwxr-xr-x 1 root root   22008 Май 18  2007 bzip2recover

Создадим файл MyExecutable с простым скриптом и ппробуем запустить его.

$ cat > MyExecutable
#!/bin/sh
echo "Hello!"
$ ./MyExecutable
bash: ./MyExecutable: Отказано в доступе

Узреем, что отказано в доступе. Если скажем ls -l MyExecutable, то увидим, что у него нет бита исполнения.

$ ls -l MyExecutable
-rw-r--r-- 1 george george 24 Июл 18 16:29 MyExecutable

Если скажем chmod +x MyExecutable, то исполнение файла станет возможным.

chmod +x MyExecutable
$ ls -l MyExecutable
-rwxr-xr-x 1 george george 24 Июл 18 16:29 MyExecutable
$ ./MyExecutable
Hello!

После того, как мы скажем chmod -r MyExecutable, то мы не сможем читать, но сможем писать:

$ chmod -r MyExecutable
$ cat MyExecutable
cat: MyExecutable: Отказано в доступе
$ ls -l MyExecutable
--wx--x--x 1 george george 24 Июл 18 16:29 MyExecutable
$ ./MyExecutable
/bin/sh: ./MyExecutable: Отказано в доступе
$ cat >> MyExecutable
echo "Hello?"
$ chmod +r MyExecutable
$ ./MyExecutable
Hello!
Hello?

Как работает эта программа? Как работают бинарные, понятно, а как она Hello вывела? Наверное, её выполнил shell. Он её выполнил, потому что он указан в первой строчке файла, после #!. По умолчанию используется (для текствых файлов, у которых эта первая строчка не указана) /bin/sh.

Более хитро три вида доступа устроено применительно к каталогам. Каталог это такой список файлов, где хранится имя файла и соответствующий ему индексный дескриптор. Когда мы обращаемся к файлу по имени, то мы неявно производим поиск по этой таблице соответствий, чтобы узнать, откуда с диска брать файл. Итак, права:

  • Чтение из каталога --- доступ к списку файлов
  • Запись в каталог --- изменить список файлов
  • Использование каталога --- возможность получить доступ к файлу в каталоге

По принципу прав --x делаются директории с именами файлов, известных только избранным.

Теперь разберёмся с ограничением доступа.

Вопрос: кто записывает файл, читает из файла? Вовсе не пользователь, как об этом некоторые думают, а процесс. Вся работа системы состоит в том, что процессы что-то делают с файлами. В каждый момент времени выполняется много процессов. Команда ps показывает список процессов, по умолчанию, привязанных к текущей консоли, -e --- все процессы, -f --- более полная информация.

$ ps
  PID TTY          TIME CMD
 4753 pts/2    00:00:00 bash
 6155 pts/2    00:00:00 ps
$ ps -ef                            
UID        PID  PPID  C STIME TTY          TIME CMD    
root         1     0  0 10:28 ?        00:00:00 init [5]
root         2     1  0 10:28 ?        00:00:00 [migration/0]
root         3     1  0 10:28 ?        00:00:00 [ksoftirqd/0]
root         4     1  0 10:28 ?        00:00:00 [watchdog/0]
root         5     1  0 10:28 ?        00:00:00 [events/0]
root         6     1  0 10:28 ?        00:00:00 [khelper]
root         7     1  0 10:28 ?        00:00:00 [kthread]
root        10     7  0 10:28 ?        00:00:00 [kblockd/0]
root        11     7  0 10:28 ?        00:00:00 [kacpid]
root        92     7  0 10:28 ?        00:00:00 [cqueue/0]
root        93     7  0 10:28 ?        00:00:00 [kseriod]
root       132     7  0 10:28 ?        00:00:00 [pdflush]
root       133     7  0 10:28 ?        00:00:00 [pdflush]
root       134     7  0 10:28 ?        00:00:00 [kswapd0]
root       135     7  0 10:28 ?        00:00:00 [aio/0]
root       635     7  0 10:28 ?        00:00:00 [kjournald]
root       733     1  0 10:28 ?        00:00:00 /sbin/udevd --daemon
root       953     7  0 10:28 ?        00:00:00 [khubd]
root      1039     7  0 10:28 ?        00:00:00 [kgameportd]
root      1052     7  0 10:28 ?        00:00:00 [kpsmoused]
root      2448     1  0 10:29 ?        00:00:00 /sbin/auditd
root      2450  2448  0 10:29 ?        00:00:00 /sbin/audispd
root      2451     7  0 10:29 ?        00:00:00 [kauditd]
rpc       2481     1  0 10:29 ?        00:00:00 /sbin/portmap -l
syslogd   2607     1  0 10:29 ?        00:00:00 /sbin/syslogd -u syslogd -j /v
klogd     2636     1  0 10:29 ?        00:00:00 /sbin/klogd -c 1 -x -u klogd -
100       2938     1  0 10:29 ?        00:00:00 /usr/bin/dbus-daemon --system
root      2990     1  0 10:29 ?        00:00:00 /usr/sbin/acpid
110       3030     1  0 10:29 ?        00:00:00 /usr/sbin/hald
root      3031  3030  0 10:29 ?        00:00:00 hald-runner
root      3036  3031  0 10:29 ?        00:00:00 hald-addon-input: Listening on
110       3044  3031  0 10:29 ?        00:00:00 hald-addon-acpi: listening on
root      3049  3031  0 10:29 ?        00:00:01 hald-addon-storage: polling /d
root      3186     1  0 10:29 ?        00:00:00 /usr/sbin/gpm -m /dev/psaux -t
root      3216     1  0 10:29 ?        00:00:00 /usr/sbin/crond
root      3270     1  0 10:29 ?        00:00:00 /usr/sbin/atieventsd
root      3299     1  0 10:29 ?        00:00:00 /usr/sbin/rundm /dev/tty1 /dev
root      3310  3299  0 10:29 ?        00:00:00 xdm -nodaemon
root      3401  3310  3 10:29 tty7     00:13:21 X -nolisten tcp -auth /etc/X11
root      3414  3310  0 10:29 ?        00:00:00 -:0    
root      3415     1  0 10:29 ?        00:00:00 /usr/sbin/cupsd
dhcpd     3471     1  0 10:29 ?        00:00:00 /usr/sbin/dhcpd
root      3733     1  0 10:29 ?        00:00:00 /usr/libexec/postfix/master
postfix   3750  3733  0 10:29 ?        00:00:00 qmgr -l -t fifo -u -c
root      3807     1  0 10:29 tty1     00:00:00 /bin/login
root      3808     1  0 10:29 tty2     00:00:00 /sbin/mingetty tty2
root      3809     1  0 10:29 tty3     00:00:00 /sbin/mingetty tty3
root      3810     1  0 10:29 tty4     00:00:00 /sbin/mingetty tty4
root      3811     1  0 10:29 tty5     00:00:00 /sbin/mingetty tty5
root      3812     1  0 10:29 tty6     00:00:00 /sbin/mingetty tty6
george    3836  3414  0 10:34 ?        00:00:00 /bin/sh /etc/xdg/xfce4/xinitrc
george    3888     1  0 10:34 ?        00:00:00 /usr/bin/dbus-launch --sh-synt
george    3889     1  0 10:34 ?        00:00:00 /usr/bin/dbus-daemon --fork --
george    3892     1  0 10:34 ?        00:00:00 ssh-agent -u
george    3952  3836  0 10:34 ?        00:00:00 /bin/sh /etc/xdg/xfce4/xinitrc
george    3953  3952  0 10:34 ?        00:00:00 xscreensaver -no-splash
george    3956  3836  0 10:34 ?        00:00:00 /usr/bin/xfce4-session
george    3960     1  0 10:34 ?        00:00:02 xfce-mcs-manager
george    3962     1  0 10:34 ?        00:00:03 xfwm4  
george    3964     1  0 10:34 ?        00:00:15 xfce4-panel
george    3966     1  0 10:34 ?        00:00:00 Thunar --daemon
george    3968     1  0 10:34 ?        00:00:00 /usr/lib/gam_server
george    3970     1  0 10:34 ?        00:00:03 xfdesktop
george    3972  3964  0 10:34 ?        00:00:02 /usr/lib/xfce4/panel-plugins/x
george    3973  3964  0 10:34 ?        00:00:00 /usr/lib/xfce4/panel-plugins/x
root      3977  3807  0 10:34 tty1     00:00:00 -bash  
george    4090     1  0 10:41 ?        00:00:00 /bin/sh /usr/bin/xbrowser /usr
george    4096  4090  0 10:41 ?        00:00:00 /bin/sh /usr/lib/firefox/run-m
george    4101  4096  0 10:41 ?        00:02:19 /usr/lib/firefox/firefox-bin /
george    4107     1  0 10:42 ?        00:00:00 /usr/lib/gconfd-2 14
george    4143     1  0 10:53 ?        00:00:09 /usr/bin/Terminal
george    4144  4143  0 10:53 ?        00:00:00 gnome-pty-helper
george    4146  4143  0 10:53 pts/0    00:00:00 bash   
george    4273  4143  0 12:49 pts/1    00:00:00 bash   
george    4311  4273  0 13:15 pts/1    00:00:00 bash   
george    4751  4311  0 14:52 pts/1    00:00:00 script -t 5.script
george    4752  4751  0 14:52 pts/1    00:00:00 script -t 5.script
george    4753  4752  0 14:52 pts/2    00:00:00 bash -i
postfix   4909  3733  0 15:29 ?        00:00:00 pickup -l -t fifo -u -c
george    6013     1  0 15:51 ?        00:00:00 xbindkeys
george    6162  4753  0 16:41 pts/2    00:00:00 ps -ef

Каждому процессу соответствует идентификатор процесса. Среди процессов есть куски ядра, зарегистрированные как процессы (имена таких процессов взяты в квадратные скобки; они существуют для того, чтобы ядру можно было посылать сигналы). Процессы порождают друг друга, поэтому в выдаче указан не только идентификатор процесса, но и его папы. Если родительский процесс умер, а сын живёт, то их усыновляет init.

Программы могут обмениваться разным способами, один из них --- сигналы. В программе kill -l приведён список всех сигналов, поддерживаемых ОС.

$ kill -l                           
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

С данного терминала можно запускать много процессов, но только один может занимать терминал --- foreground-процесс (по вводу один, по выводу много). Для запуска процесса в фоне нужно дописать в конце команды &. Если процесс в фоне, то можно его перевести в fg и убить, или сказать ps -H, посмотреть номер процесса и убить ненужный.

Почему групп прав три штуки?

Работа происходит следующим образом: после логина запускается логин шелл. Этому первому процессу присваивается id процесса и ему присваивается некий идентификатор пользователя, который зарегистрировался в системе. Все процессы обязательно принадлежат какому-то пользователю. Пользователь определяется по номеру (UID). То есть программа, обеспечивающая авторизацию пользователя в системе, при логине лезет в базу пользователей, проверяет пароль, создаёт новый процесс, меняет ему UID и выполняет (exec) в этом процессе шелл.

Все файлы также принадлежат какому-то пользователю. Сразу возникает вопрос --- как определять, какой процесс может иметь доступ к какому файлу? Интуитивно получается две категории уровня доступа: первый уровень доступа (u) --- какие права имеет процессы пользователя-владельца по отношению к файлу. Третье (o) --- определяет, какие права имеют процессы других пользователей.

В такой дихотомии есть слабое звено, с которым часто приходится сталкиваться во время совместной работы --- если надо, чтобы одни имели доступ, а другие --- не имели. Для этого существует множественный субъект, группа пользователей. Для того, чтобы вводить соотношение между несколькими пользователями вместе и файлом, вводится понятие группа. Что такое группа? У каждого файла прописан не только пользователь, но и группа. Например, ls -ld /etc/tcb.

$ ls -ld /etc/tcb
drwx--x--- 41 root shadow 4096 Июл 17 13:15 /etc/tcb

Любой пользователь может принадлежать любому количеству групп. Эта информация отчасти лежит в файле /etc/passwd (основная группа). Информация о других вхождениях в группы есть в /etc/group. Для того, чтобы узнать, у кого какой id, можно воспользоваться командой id.

$ id
uid=500(george) gid=500(george) группы=10(wheel),14(uucp),19(proc),22(cdrom),71(floppy),80(cdwriter),81(audio),83(radio),119(xgrp),422(camera),423(scanner),500(george)

Таким образом, мы получаем не два уровня доступа, а три, второй триплет rwx (g) определяет права доступа для группы.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

18

1

1

1

1

MaximByshevskiKonopko, Allena, MaximByshevskiKonopko


PspoClasses/080718/03Rights (последним исправлял пользователь MaximByshevskiKonopko 2008-10-09 21:43:18)