18355
Комментарий:
|
18874
|
Удаления помечены так. | Добавления помечены так. |
Строка 2: | Строка 2: |
Как кому разрешать и запрещать делать разные вещи. Дело вот в чём: в линуксе обычный пользователь достаточно сильно поражён в правах. Говоря простым языком, он может изменять файлы в своём каталоге и свои файлы в /tmp. Ещё он может часть файлов читать, но не больше. Поскольку такова практика работы в linux, то почти любая программа должна работать от лица обычного пользователя, и тут не имеем проблем, свойственных Windows. Есть три вида доступа: * Чтение. Означает, что файл можно читать. * Запись. Означает, что файл можно изменять. * Использование, исполнение. Означает, что файл можно исполнять. ls -l выведет права, количество имён у файла, пользователь, группу, размер, время изменения и имя файла. Первый символ в правах обозначает тип файла (- у обычных файлов, d у каталогов, другие символы у специальных файлов). Посмотри ls -l /bin/ | head. Можно увидеть, что файлы исполняемые. |
== Права доступа == В Linux, по умолчанию, обычный пользователь имеет право делать все что угодно с файлами в своём каталоге, работать с своими файлами в каталоге /tmp, и читать некоторые файлы в других местах, но не более того. Это специфика учитывается при создании приложений, и практически любая программа под Linux может работать будучи запущенной обычным пользователем. Рассмотрим подробнее систему прав доступа Linux. Права назначаются для каждого файла и каталога. Каталог рассматривается как файл в котором хранится список файлов и некая дополнительная информация. Существуют три вида доступа: * Чтение; * Запись; * Использование.Для файлов доступ на использование означает возможность исполнения файла, для каталога --- возможность получить доступ к файлу в каталоге. Увидеть назначенные права можно при помощи команды {{{ls -l <имя файла>}}}. При использовании этой команды кроме имени и прав доступа будут показаны: количество имен файла, владелец, группа, размер,и время последнего изменения. Первый символ в строке прав обозначает тип файла: {{{-}}} для обычных файлов, {{{d}}} для каталогов. Для специальных файлов могут использоваться другие символы. Пример: |
Строка 22: | Строка 28: |
-rwxr-xr-x 1 root root 30360 Май 18 2007 bzip2 | -rwxr-xr-x 1 root root 30360 Май 18 2007 bzip2 |
Строка 26: | Строка 32: |
Создадим файл MyExecutable с простым скриптом и ппробуем запустить его. | Как и следовало ожидать, к файлам в каталоге /bin есть доступ на использование, то есть, исполнение. Попробуем создать исполняемый файл и запустить его: |
Строка 34: | Строка 42: |
Узреем, что отказано в доступе. Если скажем ls -l MyExecutable, то увидим, что у него нет бита исполнения. | При попытке исполнить только что созданный файл получаем ошибку --- отказано в доступе. При помощи ls -l проверим права доступа к файлу: |
Строка 39: | Строка 48: |
Если скажем chmod +x MyExecutable, то исполнение файла станет возможным. | Как видно, права на исполнение файла ни у кого нет. Чтобы сделать возможным использование файла выполним команду {{{chmod +x MyExecutable}}} |
Строка 47: | Строка 57: |
После того, как мы скажем chmod -r MyExecutable, то мы не сможем читать, но сможем писать: | Если выполнить {{{chmod -r MyExecutable}}}, то чтение файла станет невозможным. Доступ на запись при этом сохранится. |
Строка 62: | Строка 73: |
}}} Как работает эта программа? Как работают бинарные, понятно, а как она Hello вывела? Наверное, её выполнил shell. Он её выполнил, потому что он указан в первой строчке файла, после #!. По умолчанию используется (для текствых файлов, у которых эта первая строчка не указана) /bin/sh. Более хитро три вида доступа устроено применительно к каталогам. Каталог это такой список файлов, где хранится имя файла и соответствующий ему индексный дескриптор. Когда мы обращаемся к файлу по имени, то мы неявно производим поиск по этой таблице соответствий, чтобы узнать, откуда с диска брать файл. Итак, права: * Чтение из каталога --- доступ к списку файлов * Запись в каталог --- изменить список файлов * Использование каталога --- возможность получить доступ к файлу в каталоге По принципу прав --x делаются директории с именами файлов, известных только избранным. Теперь разберёмся с ограничением доступа. Вопрос: кто записывает файл, читает из файла? Вовсе не пользователь, как об этом некоторые думают, а процесс. Вся работа системы состоит в том, что процессы что-то делают с файлами. В каждый момент времени выполняется много процессов. Команда ps показывает список процессов, по умолчанию, привязанных к текущей консоли, -e --- все процессы, -f --- более полная информация. |
}}} ##вот этот абзац не очень понятно при чем тут. наверно его куда нибудь в немного другое место надо. Выше рассмотрен пример не бинарной программы. Такие программы выполняет интерпретатор, указанный в первой строке файла с исходным кодом после комбинации символов {{{#!}}}. В вышеописанном случае был указан shell. По умолчанию для исполнения текстовых файлов используется /bin/sh. === Процессы === Работа системы по сути заключается в том, что процессы производят некоторые действия с файлами. Увидеть список запущенных процессов можно используя команду {{{ps}}}. По умолчанию {{{ps}}} показывает список процессов, запущенных из соответствующей консоли. Увидеть все процессы позволяет опция {{{-e}}}. При помощи опции {{{-f}}} можно узнать более подробную информацию. |
Строка 82: | Строка 86: |
$ ps -ef UID PID PPID C STIME TTY TIME CMD |
$ ps -ef UID PID PPID C STIME TTY TIME CMD |
Строка 123: | Строка 127: |
root 3414 3310 0 10:29 ? 00:00:00 -:0 | root 3414 3310 0 10:29 ? 00:00:00 -:0 |
Строка 142: | Строка 146: |
george 3962 1 0 10:34 ? 00:00:03 xfwm4 | george 3962 1 0 10:34 ? 00:00:03 xfwm4 |
Строка 149: | Строка 153: |
root 3977 3807 0 10:34 tty1 00:00:00 -bash | root 3977 3807 0 10:34 tty1 00:00:00 -bash |
Строка 156: | Строка 160: |
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 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 |
Строка 167: | Строка 171: |
Каждому процессу соответствует идентификатор процесса. Среди процессов есть куски ядра, зарегистрированные как процессы (имена таких процессов взяты в квадратные скобки; они существуют для того, чтобы ядру можно было посылать сигналы). Процессы порождают друг друга, поэтому в выдаче указан не только идентификатор процесса, но и его папы. Если родительский процесс умер, а сын живёт, то их усыновляет init. Программы могут обмениваться разным способами, один из них --- сигналы. В программе kill -l приведён список всех сигналов, поддерживаемых ОС. {{{ $ kill -l |
Каждый процессор имеет идентификатор (pid). Новые процессы порождаются существующими, поэтому в информации о процессе указывается также идентификатор родителя(ppid). Если процесс завершается, то родителем его дочерних поцессов становится init. Некоторые части ядра системы также зарегистрированы как процессы. Такие процессы указываются в квадратных скобках. Это сделано для того, чтобы предоставить возможность общаться с ядром посредством сигналов. Сигналы --- это один из способов межпроцессного взаимодействия. Список доступных сигналов показывается по команде {{{kill -l}}}. {{{ $ kill -l |
Строка 189: | Строка 193: |
С данного терминала можно запускать много процессов, но только один может занимать терминал --- foreground-процесс (по вводу один, по выводу много). Для запуска процесса в фоне нужно дописать в конце команды &. Если процесс в фоне, то можно его перевести в fg и убить, или сказать ps -H, посмотреть номер процесса и убить ненужный. |
С одного терминала можно запустить несколько процессов, но только один из них, так называемый foreground процесс, будет иметь доступ к вводу с терминала и выпонять в интерактивном режиме. Остальные порцессы должны работать в фоновом режиме (имея возможность выводить данные на терминал, но не получать их оттуда). Для запуска процесса в фоновом режиме необходимо в конце команды дописать {{{&}}}}. Фоновый процесс можно сделать интерактивным при помощи команды fg или же завершить, используя ps -H чтобы узнать идентификатор нужного процесса, и {{{kill}}} непосрпедственно для завершения. === Ограничение прав доступа === |
Строка 193: | Строка 197: |
Строка 198: | Строка 201: |
В такой дихотомии есть слабое звено, с которым часто приходится сталкиваться во время совместной работы --- если надо, чтобы одни имели доступ, а другие --- не имели. Для этого существует множественный субъект, группа пользователей. Для того, чтобы вводить соотношение между несколькими пользователями вместе и файлом, вводится понятие группа. Что такое группа? У каждого файла прописан не только пользователь, но и группа. Например, ls -ld /etc/tcb. | В такой дихотомии есть слабое звено, с которым часто приходится сталкиваться во время совместной работы --- если надо, чтобы одни имели доступ, а другие --- не имели. Для этого существует множественный субъект, группа пользователей. Для того, чтобы вводить соотношение между несколькими пользователями вместе и файлом, вводится понятие группа. Что такое группа? У каждого файла прописан не только пользователь, но и группа. Например, ls -ld /etc/tcb. |
Строка 204: | Строка 208: |
Строка 208: | Строка 213: |
Процессы, права доступа
Права доступа
В Linux, по умолчанию, обычный пользователь имеет право делать все что угодно с файлами в своём каталоге, работать с своими файлами в каталоге /tmp, и читать некоторые файлы в других местах, но не более того. Это специфика учитывается при создании приложений, и практически любая программа под Linux может работать будучи запущенной обычным пользователем.
Рассмотрим подробнее систему прав доступа Linux.
Права назначаются для каждого файла и каталога. Каталог рассматривается как файл в котором хранится список файлов и некая дополнительная информация.
Существуют три вида доступа:
- Чтение;
- Запись;
- Использование.Для файлов доступ на использование означает возможность исполнения файла, для каталога --- возможность получить доступ к файлу в каталоге.
Увидеть назначенные права можно при помощи команды ls -l <имя файла>. При использовании этой команды кроме имени и прав доступа будут показаны: количество имен файла, владелец, группа, размер,и время последнего изменения. Первый символ в строке прав обозначает тип файла: - для обычных файлов, d для каталогов. Для специальных файлов могут использоваться другие символы.
Пример:
$ 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
Как и следовало ожидать, к файлам в каталоге /bin есть доступ на использование, то есть, исполнение.
Попробуем создать исполняемый файл и запустить его:
$ cat > MyExecutable #!/bin/sh echo "Hello!" $ ./MyExecutable bash: ./MyExecutable: Отказано в доступе
При попытке исполнить только что созданный файл получаем ошибку --- отказано в доступе. При помощи ls -l проверим права доступа к файлу:
$ 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?
Выше рассмотрен пример не бинарной программы. Такие программы выполняет интерпретатор, указанный в первой строке файла с исходным кодом после комбинации символов #!. В вышеописанном случае был указан shell. По умолчанию для исполнения текстовых файлов используется /bin/sh.
Процессы
Работа системы по сути заключается в том, что процессы производят некоторые действия с файлами. Увидеть список запущенных процессов можно используя команду ps. По умолчанию 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
Каждый процессор имеет идентификатор (pid). Новые процессы порождаются существующими, поэтому в информации о процессе указывается также идентификатор родителя(ppid). Если процесс завершается, то родителем его дочерних поцессов становится 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 чтобы узнать идентификатор нужного процесса, и kill непосрпедственно для завершения.
Ограничение прав доступа
Почему групп прав три штуки? Работа происходит следующим образом: после логина запускается логин шелл. Этому первому процессу присваивается 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 |
20 |
1 |
1 |
1 |
|
1 |
|
|