Группа процессов работающих под управлением одного пользователя в астра линукс это

Обновлено: 06.07.2024

Я использую Ubuntu Linux, но данная команда работает в различных дистрибутивах Linux. Поскольку в Linux все имеется файлом, то такая система позволяет регулировать доступ к любому действию в этой операторной системе с помощью установки прав доступа на файлы. Но еще при создании Linux, разработчики постигнули, что этого явно недостаточно. В операционных системах семейства Linux у пользователя имеется основная группа, а также определённое количество дополнительных групп. Это удачное, стратегически обмысленное решение. Понимание групп, к каким принадлежит пользователь в Ubuntu очень важно — т.к. дает понимание того, к каким файлам user имеет доступ. Пользователи и группы пользователей используются на GNU/Linux для управления доступом — то имеется, для управления доступом к системным файлам, каталогам и переферии. Linux предлагает относительно несложные и грубые механизмы контроля доступа по умолчанию.

Список групп пользователя Linux

Вы сможете посмотреть список групп пользователя Linux двумя основными способами. Это команда id, какую мы уже разбирали в статье о том, как узнать id пользователя Linux, и команда groups. Чтобы вывести всю данные о пользователе, используйте id:

Все группы, созданные в системе, находятся в файле /etc/group. Посмотрев содержание этого файла, вы можете узнать список групп linux, которые уже есть в вашей системе. И вы станете удивлены.

Если вы не введете имя пользователя, по умолчанию будет применено ваше имя. К примеру:

frame@ubuntuServ:$ groups
frame adm dialout cdrom floppy audio dip video plugdev lpadmin scanner admin fuse

Вы вдобавок можете проверить какие группы принадлежат другому пользователю, включая root:

frame@ubuntuServ:$ groups root
root : root fuse

Помимо стандартных root и users, здесь есть еще пару десятков групп. Это группы, сделанные программами, для управления доступом этих программ к общим ресурсам. Каждая группа позволяет чтение или запись определенного файла или каталога системы, тем самым регулируя полномочия юзера, а следовательно, и процесса, запущенного от этого пользователя. Здесь можно считать, что пользователь — это одно и то же что процесс, поэтому что у процесса все полномочия пользователя, от которого он запущен.

Просмотреть список всех групп в Linux

Когда вы хотите просмотреть список всех групп в вашей системе, вы можете использовать бригаду getent:

Этот вывод также покажет вам, какие учетные записи юзеров являются членами групп.

Добавление пользователя в Linux

Добавление пользователя осуществляется при поддержки команды useradd. Пример использоания:

sudo useradd vasyapupkin

Управление группами юзера в Linux

Управлять группами можно и с помощью графического интерфейса. В KDE есть программа Kuser умышленно предназначенная для этого, в Gnome это выполняется с помощью настроек системы. Кроме того, в известных дистрибутивах есть отдельные инструменты, такие как YaST в OpenSUSE или Настройки Ubuntu. Но с графичным интерфейсом я думаю вы разберетесь. А мы рассмотрим управление группами linux через терминал. Для начала разберемся с файлами, а уже потом с пользователями.

При создании файла ему назначается основная группа юзера который его создал. Это просто например:

Здесь вы можете видеть, что владелец всех папок sergiy и группа также sergiy. Правильно, так как эти пользователи были созданы мной. Но давайте пойдем дальше:

Модифицирование первичной группы пользователя в Linux

Хотя учетная запись пользователя может быть долею нескольких групп, одна из групп всегда является «основной группой», а остальные представляются «вторичными группами». Файлы и папки, созданные пользователем, будут соответствовать первичной команде.

Чтобы изменить основную группу, которой назначен пользователь, запустите бригаду usermod, заменив groupname на имя группы, которую вы хотите сделать основной и username на имя переписной записи пользователя.

usermod -g groupname username

Обратите внимание на -g здесь. При использовании маленькой буквы g вы назначаете основную группу. Когда вы используете верхний регистр -G, как указано реке, вы назначаете новую вторичную группу.

Как видите, всё очень просто. Вы можете дословно с помощью одной команды посмотреть группы пользователей Linux, причём не только для нынешного пользователя, а для всех, кто вас интересует. Если у вас остались вопросы, спрашивайте в комментариях!

Одним из основных применений сигналов при интерактивной работе пользователя в системе является механизм управления «заданиями», которыми пользуются командные интерпретаторы и подобные интерактивные программы, например lftp.

Сеансы и группы процессов Linux: управление заданиями

Для удобства управления процессами при помощи сигналов они объединяются в группы и сеансы (см. credentials), проиллюстрированные в листинге ниже при помощи команды ps атрибутами PGID (process group identifier) и SID (session identifier).

Процесс (создавший группу), чей идентификатор PID совпадает с идентификатором PGID, группы, носит название лидера группы.

Только одна группа сеанса, называемая «терминальной» TGPID, является группой «переднего» (foreground) фона, остальные группы сеанса являются группами «заднего» (background) фона.

Командный интерпретатор формирует свои задания «заднего» О или «переднего» фона ©, Помещая процессы заданий в соответствующие группы. Механизм управления заданиями всегда посылает «терминальные» сигналы ^C SIGINT, ^\SIGQUIT всем процессам текущей «терминальной» группы.

Для смены терминальной группы используется сигнал № 20 SIGTSTP (terminal stop signal), также отсылаемый всем процессам «терминальной» группы при получении драйвером терминала управляющего символа ^Z (SUB), генерируемого клавишами Ctrl+Z.

Обработчик сигнала SIGTSTP по умолчанию приостанавливает процессы, и управление возвращается к командному интерпретатору ©, группа которого, становится «терминальной». При помощи встроенных команд fg (foreground), bg (background) можно продолжить (SIGCONT) выполнение указанного задания (всех процессов .его группы) на «переднем» или «заднем» фоне, а при помощи команды jobs -l получить список всех заданий вместе с номерами их групп процессов.

$ dd tf=/dev/zero of=/dev/null &

$ ps jf

$ man dd

Ctrl+Z
[2]+ Остановлено man dd

$ ps jf
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND

3094 3099 3099 3099 pts/0 3310 Ss 1000 0:00 bash
3099 3181 3181 3099 pts/0 3310 R 1000 4:48 \_ dd if=/dev/zero of=
3099 193 3193 3099 pts/0 3310 T 1000 0:00 \_ man dd
3193 3203 3193 3099 pts/0 3310 T 1000 0:00 | \_ pager -s
3099 3310 3310 3099 pts/0 3310 R+ 1000 0:00 \_ ps jf

$ fg %1

dd if=/dev/zero of=/dev/null

^Z
[1]+ Остановлено dd if=/dev/zero of=/dev/null

$ ps f

PID TTY STAT TIME COMMAND
3099 pts/0 Ss 0:00 bash
3181 pts/0 T 26:44 \_ dd if=/dev/zero of=/dev/null
3193 pts/0 T 0:00 \_ man dd
3203 pts/0 T 0:00 | \_ pager -s
3937 pts/0 R+ 0:00 \_ ps f

$ bg 1

[1]+ dd if=/dev/zero of=/dev/null &

$ jobs
[1]+ Остановлено ddif=/dev/zero of=/dev/null

$ fg
dd if=/dev/zero of=/dev/null |
^C11771330744+0 записей получено

11771330743+0 записей отправлено
скопировано 6026921340416 байт (6,0 ТВ), 8400,83 с, 717 МВ/с

Кроме переключения группы «переднего» фона, механизм управления заданиями координирует «совместный» доступ процессов к управляющему терминалу. При «одновременном» вводе информации с одного терминала несколькими процессами результат оказывается непредсказуем, т, к. нет возможности предугадать порядок и объемы считываемой информации.

Поэтому ввод (input) разрешен только процессам группы «переднего» фона, а группа формируется так, что только один из них в реальности будет производить чтение.

Процессам группы «заднего» фона ввод запрещен, а любые попытки подавляются при помощи сигнала SIGTTIN (terminal stop on input signal), доставка которого, приводит к приостановке процесса.

В примере из листинга ниже при составлении текста письма посредством команды mail ее процесс был временно приостановлен при помощи ^Z и SIGTSTP для получения доступа к командному интерпретатору.

Попытка продолжить в выполнение задания mail на «заднем» фоне не увенчалась успехом, т. к. была подавлена за чтение терминала. Продолжение задания на «переднем» фоне дает возможность закончить ввод текста, письма и завершить ввод управляющим символом ^Z (EOT).

Приостановка при вводе из заднего фона (SIGTTIN)

$ which schedtool

$ dpkg -S /usr/bin/schedtool

$ bg

$ jobs -l
[1]+ 12025 Остановлено (ввод с терминала)

$ ps fj

^D

Настроечный флаг драйвера терминала tostop (terminal output stop) позволяет запретить вывод из заднего фона так же, как и ввод. При запрещенном выводе из заднего фона все попытки будут подавляться сигналом SIGTTOU (terminal stop on output signal), приостанавливающим процесс. В листинге ниже проиллюстрировано действие сигнала SIGTTOU при включении настроечного флага tostop посредством команды stty.

Приостановка при выводе из заднего фона (SIGTTOU)

$ stty tostop

$ ps f

PID TTY STAT TIME COMMAND
32535 pts/1 S 0:00 -bash
356 pts/1 T 0:00 \_ find / -type f -size 0
360 pts/1 R+ 0:00 \_ ps f

Основа распределения прав доступа в операционной системе Linux лежит на понятии пользователь. Пользователю-владельцу файла выдаются определенные полномочия для работы с ним, а именно на чтение, запись и выполнение. Также отдельно устанавливаются полномочия на чтение, запись и выполнение для всех остальных пользователей. Поскольку в Linux все есть файлом, то такая система позволяет регулировать доступ к любому действию в этой операционной системе с помощью установки прав доступа на файлы. Но еще при создании Linux, разработчики поняли, что этого явно недостаточно.

Поэтому и были придуманы группы пользователей. Пользователи могут объединяться в группы, чтобы уже группам выдавать нужные полномочия на доступ к тем или иным файлам, а соответственно и действиям. В этой статье мы рассмотрим группы пользователей в Linux, рассмотрим зачем они нужны, как добавить пользователя в группу и управлять группами.

Что такое группы?

Как я уже сказал группы в Linux появились еще в самом начале разработки этой операционной системы. Они были разработаны для того, чтобы расширить возможности управления правами. Разберем небольшой пример, возьмем организацию в которой есть только один компьютер, у нас есть администраторы и пользователи. У каждого человека свой аккаунт на нашем компьютере. Администраторы могут настраивать систему, пользователям же лучше не давать воли, чтобы что-то не сломали. Поэтому администраторы объединяются в группу admin, и ей дается доступ ко всему оборудованию, реально же ко всем файлам в каталоге dev, а пользователи, объеденные в группу users, и этой группе дается возможность читать и записывать файлы в общий каталог, с помощью которого они могут обмениваться результатами своей работы. Мы могли бы назначать права для каждого пользователя отдельно разрешая ему доступ к тому или иному файлу, но это слишком неудобно. Поэтому и были придуманы группы. Говорите, да ничего, можно назначить? Ну а теперь представьте что наши пользователи - это процессы. Вот тут вся краса групп выходит на передний план, группы используются не столько для обеспечения доступа для пользователей, сколько для управления правами программ, особенно их доступом к оборудованию. Для сервисов создаются отдельные группы и пользователь, от имени которого запущен он, сервис может состоять в нескольких группах, что обеспечивает ему доступ к определенным ресурсам.

А теперь давайте рассмотрим как посмотреть группы linux.

Группы в Linux

Все группы, созданные в системе, находятся в файле /etc/group. Посмотрев содержимое этого файла, вы можете узнать список групп linux, которые уже есть в вашей системе. И вы будете удивлены.

groups

Кроме стандартных root и users, здесь есть еще пару десятков групп. Это группы, созданные программами, для управления доступом этих программ к общим ресурсам. Каждая группа разрешает чтение или запись определенного файла или каталога системы, тем самым регулируя полномочия пользователя, а следовательно, и процесса, запущенного от этого пользователя. Здесь можно считать, что пользователь - это одно и то же что процесс, потому что у процесса все полномочия пользователя, от которого он запущен.

Давайте подробнее рассмотрим каждую из групп, чтобы лучше понимать зачем они нужны:

Теперь, когда вы знаете зачем использовать группы в linux и какие они есть по умолчанию, рассмотрим управление группами LInux.

Управление группами Linux

Управлять группами можно и с помощью графического интерфейса. В KDE есть программа Kuser специально предназначенная для этого, в Gnome это выполняется с помощью настроек системы. Кроме того, в популярных дистрибутивах есть отдельные инструменты, такие как YaST в OpenSUSE или Настройки Ubuntu. Но с графическим интерфейсом я думаю вы разберетесь. А мы рассмотрим управление группами linux через терминал. Сначала разберемся с файлами, а уже потом с пользователями.

При создании файла ему назначается основная группа пользователя который его создал. Это просто например:

groups1

Здесь вы можете видеть, что владелец всех папок sergiy и группа тоже sergiy. Правильно, так как эти пользователи были созданы мной. Но давайте пойдем дальше:

groups2

Здесь мы видим что дисковым устройствам sd* назначена группа disk, а это все значит, что пользователь, состоящий в этой группе, может получить к ним доступ. Или еще пример:

groups4

Все как мы рассматривали в предыдущем пункте. Но эти группы могут быть не только установлены системой, но и вы сами вручную можете менять группы файлов для этого есть команда chgrp:

chgrp имя_группы имя_файла

Например создадим файл test:

И изменим для него группу:

groups5

Теперь этот файл смогут прочитать все пользователи из группы adm.

Если вы хотите создать группу linux, это можно сделать командой newgrp:

sudo groupadd test

С пользователями ситуация немного сложнее. Пользователь имеет основную группу, она указывается при создании, а также несколько дополнительных. Основная группа отличается от обычных тем, что все файлы в домашнем каталоге пользователя имеют эту группу, и при ее смене, группа этих каталогов тоже поменяется. Также именно эту группу получают все файлы созданные пользователем. Дополнительные группы нужны, чтобы мы могли разрешить пользователям доступ к разным ресурсам добавив его в эти группы в linux.

Управление группами Linux для пользователя выполняется с помощью команды usermod. Рассмотрим ее синтаксис и опции:

$ usermod опции имя_пользователя

  • -G - дополнительные группы, в которые нужно добавить пользователя
  • -g изменить основную группу для пользователя
  • -R удалить пользователя из группы.

Добавить пользователя в группу можно командой usermod:

sudo usermod -a -G имя_группы имя_пользователя

Можно добавить пользователя в группу linux временно, командой newgrp. Откроется новая оболочка, и в ней пользователь будет иметь нужные полномочия, но после закрытия все вернется как было:

sudo newgrp имя_группы

Для примера давайте добавим нашего пользователя в группу disk, чтобы иметь прямой доступ к жестким дискам без команды sudo:

sudo usermod -G -a disk sergiy

Теперь вы можете монтировать диски без команды sudo:

mount /dev/sda1 /mnt

Посмотреть группы linux, в которых состоит пользователь можно командой:

groups6

Также можно использовать команду id. В первом случае мы просто видим список групп linux, во втором дополнительно указанны id группы и пользователя. Чтобы включить пользователя в группу Linux, для основной группы используется опция -g:

sudo usermod -g test sergiy

Теперь все каталоги в домашней папке пользователя имеют группу test. Удалить пользователя из группы в linux можно той же командой с опцией R:

sudo usermod -R группа пользователь

Ну и наконец, удалить группу Linux можно командой:

sudo delgroup имя_группы

Выводы

Как видите, группы пользователей Linux не такое уж сложное дело. Вы можете в несколько команд добавить пользователя в группу linux или дать ему полномочия на доступ к определенным ресурсам. Если вы надумали изменять группы для системных устройств, тут все не так просто, но в этом вопросе вам поможет статья про правила udev в linux. Теперь управление группами Linux вам не кажется таким сложным. Если остались вопросы, пишите в комментариях!

1.Основные задачи администрирования ASTRA LINUX SE.

В общем случае процесс администрирования ОС на базе проекта Debian GNU/Linux (в том числе ASTRA LINUX SE) включает решение следующих основных задач:

  1. администрирование учётных записей пользователей и групп с целью организации многопользовательской работы ASTRA LINUX SE и реализации управления доступом процессов (субъект-сессий, функционирующих от имени учётных записей пользователей) к файлам, каталогам и другим объектам доступа ASTRA LINUX SE (сущностям);
  2. администрирование процессов с целью оптимизации распределения между ними ресурсов компьютера;
  3. администрирования запоминающих и периферийных устройств с целью контроля имеющихся в составе компьютера устройств и управления динамически подключаемыми устройствами.
  4. В случае включения компьютера с ASTRA LINUX SE в сетевую среду и его функционирования в составе домена сетевой инфраструктуры Astra Linux Directory (ALD) перечень задач дополняется задачами администрирования сети и доменной инфраструктуры. Эти задачи будут подробно рассмотрены в следующих лекциях.

2. Администрирование учётных записей пользователей и групп.

Отправной точкой реализации управления доступом в ASTRA LINUX SE являлось унаследованное от ОС семейства Linux дискреционное управление доступом. Поэтому, несмотря на то, что в настоящее время в ASTRA LINUX SE используются мандатные управление доступом и контроль целостности, а в перспективе ролевое управление доступом, целесообразно рассмотреть основные элементы дискреционного управления доступом, не утратившие своей актуальности в современных релизах ASTRA LINUX SE.

Дискреционное управление доступом в ОС семейства Linux базируется на понятии владения (использовании права доступа владения) файлом, каталогом, процессом (сущностями и субъект-сессиями). Так в файловых системах семейства extfs, которые по умолчанию используются в ASTRA LINUX SE, для каждого файла или каталога обязательно задана учётная запись пользователя — их владелец. Процесс, функционирующий от имени такой учётной записи-владельца сущности, имеет право изменять дискреционные права доступа к ней, например назначать их учётным записям других пользователей ASTRA LINUX SE на основе стандарта POSIX ACL .

Access Control List или ACL — список контроля доступа, который определяет, кто или что может получать доступ к конкретному объекту, и какие именно операции разрешено или запрещено этому субъекту проводить над объектом. Списки контроля доступа являются основой систем с избирательным управлением доступа.

Для оптимизации и облегчения администрирования дискреционного управления доступом в случаях, когда к одним и тем же файлам или каталогам требуется установить одинаковые права доступа более чем для одной учётной записи пользователя, в ASTRA LINUX SE применяются группы учётных записей пользователей. В результате для файлов и каталогов владельцем (обладателем к ним правом доступа владения) может быть задана группа. При этом для них остаются владельцами и соответствующие учётные записи пользователей. В перспективе при реализации в ASTRA LINUX SE ролевого управления доступом вместо учётных записей пользователей и групп владельцами будут задаваться роли или административные роли.

Таким образом, при управлении доступом в ASTRA LINUX SE, в том числе дискреционным, администрируют следующие его элементы:

  • учётные записи пользователей (account);
  • группы (логические объединения учётных записей пользователей с равными дискреционными правами доступа);
  • права доступа к файлам, каталогам, другим объектам доступа (сущностям и субъект-сессиям);
  • режимы доступа, обеспечивающие возможность учета ряда особенностей управления доступом.

Утилиты администрирования учётных записей пользователей и групп реализованы в пакете Shadow Suite.


Кроме них для этого используется ряд системных файлов, которые конфигурируются администратором системы. Такие файлы в рамках МРОСЛ ДП -модели рассматриваются как сущности, параметрически ассоциированные с учётными записями пользователей.

Основой для задания учётных записей пользователей и групп являются их идентификаторы:

  • uid (User ID) — число, уникально идентифицирующее учётную запись пользователя в ASTRA LINUX SE;
  • gid (Group ID) — число, уникально идентифицирующее группу пользователей ASTRA LINUX SE.

Эти идентификаторы хранятся в следующих конфигурационных файлах, которые используется специальным процессом login, реализующим вход пользователя в ASTRA LINUX SE — его идентификацию и аутентификацию:

  • /etc/passwd — файл с данными об учётных записях пользователей;
  • /etc/group — файл с данными об учётных записях групп пользователей.

учётная запись каждого пользователя представляет одну строку в файле/etc/passwd. Таким образом, регистрация новой учётной записи пользователя в системе, фактически, является добавлением соответствующей строки в этот файл.


Добавим пользователя admin.

Откроем файл /etc/passwd в редакторе mc


Разделителем полей данных в строке, соответствующей учётной записи пользователя, является символ «:». В результате у администратора с помощью команды grep есть возможность фильтрации требуемых данных об учётной записи пользователя, которая состоит из следующих элементов:

• username — уникальное символьное имя, присваиваемое каждой учётной записи пользователя (при выборе имени могут использоваться буквы и цифры, а также знак подчёркивания и точка);

• uid — уникальный идентификатор учётной записи пользователя (представлен числом);

• gid — уникальный идентификатор первичной группы, в которую входит учётная запись пользователя (представлен числом);

• password — пароль, который может храниться в зашифрованном виде непосредственно в рассматриваемой строке (если вместо пароля задан символ «х»), то он хранится в доступном для чтения и записи только администратору системном файле /etc/shadow в зашифрованном виде);


• full name — полное имя учётной записи пользователя (например, пользователь с username равным sidor может иметь полное имя «Ivan Sidorov», а также в этом же элементе через запятую могут перечисляться дополнительные сведения о пользователе: домашний и рабочий номера телефонов, адрес и т.д.);

• home directory — домашний каталог учётной записи пользователя, находящийся в каталоге /home;

• login shell — командный интерпретатор (shell), который запускается при входе пользователя в ASTRA LINUX SE, по умолчанию это интерпретатор bash (/bin/bash).

Создание, удаление и изменение учётных записей пользователей осуществляется администратором (в рамках МРОСЛ ДП-модели ему соответствует доверенная субъект-сессия, обладающая соответствующими текущими специальными административными ролями) с использованием следующих приёмов:

• непосредственное редактирование файла /etc/passwd;

• с применением утилит из пакетов passwd и adduser;

• с активизацией из меню «Пользователи и группы» утилиты с графическим интерфейсом «Управление политикой безопасности».

В ASTRA LINUX SE получение идентификатора учётной записи пользователя (uid), а также других связанных с ним наборов параметров, возможно с помощью команд whoami, id, who. Для изменения пароля учётной записи пользователя используется команда passwd, которая проверяет заданные правила формирования пароля, например, его минимальную длину, или же создан ли он на основе предыдущего пароля.

Для корректного администрирования учётной записи пользователя (в том числе с добавлением при её создании в домашний каталог необходимых конфигурационных файлов) администратор может использовать команды adduser, useradd (создание), usermod (модификация параметров) и userdel (удаление). В рамках МРОСЛ ДП-модели этим командам соответствуют де-юре правила вида create_ user, set-user_labels и delete-user.

В то же время для администрирования учётных записей пользователей целесообразно использовать утилиту с графическим интерфейсом «Управление политикой безопасности» (утилиту flу-admin-smc), доступную из элемента «Настройки» главного пользовательского меню.



Добавление учётной записи пользователя также осуществляется администратором с использованием утилиты «Управление политикой безопасности».

Для безопасности ASTRA LINUX SE важна регулярная проверка корректности параметров учётных записей пользователей, для чего администратор может использовать команду pwck (от password check), которая проверяет целостность данных и правильность формата записей в файлах /etc/passwd и /etc/shadow, при этом проверяются:

    • корректность количества полей в записях этих файлов;
    • уникальность имён учётных записей пользователей;
    • уникальность идентификаторов учётных записей пользователей;
    • корректность принадлежности каждой учётной записи пользователя её первичной группе;
    • корректность пути к домашнему каталогу каждой учётной записи пользователя;
    • корректность сведений об используемом интерпретаторе по умолчанию.

    Исправление выявленных командой pwck ошибок администратор может осуществить с помощью команды usermod.

    Данные о каждой группе учётных записей пользователей находятся в системном файле /etc/group в строке формата «groupname: password:gid:other members», которая состоит из следующих элемента

    • groupname — имя группы;

    • password — пароль, установленный для группы;

    • gid — идентификатор группы (аналогичный полю gid в учётной записи пользователя);

    • other members — другие пользователи, входящие в состав группы.

    Как и в случае системного файла /etc/passwd право на запись в файл /etc/group (который является сущностью, параметрически ассоциированной с учётными записями доверенных и недоверенных пользователей) имеет только администратор, остальные пользователи могут только просматривать его содержимое.

    Пользователь может получить данные о своей принадлежности к группам с помощью команд id и groups. Администратор может создавать, удалять или изменять параметры групп учётных записей пользователей:

    • редактируя файлы /etc/group и /etc/gshadow (назначение последнего аналогично назначению файла /etc/shadow) командой gpasswd;

    • используя команды groupadd и groupdel;

    • изменяя параметры групп учётных записей пользователей командой groupmod;


    • используя утилиту «Управление политикой безопасности».

    Для проверки корректности параметров групп учётных запиcей пользователей используется аналогичная команде pwck команда grpck, которая анализирует данные файлов /etc/group и /etc/gshadow, дополнительно используя для этого данные из файла /etc/passwd. При этом проверяются:

    • корректность количества полей в записях этих файлов;

    • уникальность имён групп;

    • уникальность идентификаторов групп;

    • корректность состава учётных записей пользователей и администраторов каждой группы.

    Исправление выявленных командой grpck ошибок администратор может осуществить с помощью команды groupmod.

    Так как в перспективе на смену группам в ASTRA LINUX SE придут роли или административные роли, то в рамках МРОСЛ ДП-модели к командам администрирования групп учётных записей пользователей соответствуют де-юре правила вида grant_admin_rights, remove_admin_rights, create-role, delete_role, create_hard_link_role, delete_hard_link_role, rename_role, get_role_attr, set_role_labels.

    3.Администрирование процессов.

    Администратору ASTRA LINUX SE требуется контролировать и управлять выполнением совокупности процессов (доверенных или недоверенных субъект-сессий в рамках МРОСЛ ДП-модели), которые были запущены пользователями в рмчках своих сеансов, а также ядром ASTRA LINUX SE, системными и прикладными сервисами.


    Основной командой для мониторинга состояния процессов в ASTRA LINUX SE является команда ps. Запущенная без опций и аргументов команда ps выводит на экран список процессов, выполняемых на активном терминале (tty) или псевдотерминале (pts), при этом для каждого процесса указываются:

    • PID — идентификатор процесса, который присваивается при его г гарте из числа свободных PID в диапазоне значений от 0 до (2 32 – 1);
    • TTY— терминал (tty) или псевдотерминал (pts), в котором выполняется процесс;
    • TIME — время выполнения процесса процессором;
    • CMD — имя программы, соответствующей выполняющемуся процессу.

    Использование параметров с командой ps позволяет просмотреть более детальную информацию о процессах.


    Опции, отбирающие процессы для отчёта:

    -A : все процессы;

    -a : связанные с конкретным терминалом, кроме главных системных процессов сеанса, часто используемая опция;

    -N : отрицание выбора;

    -d : все процессы, кроме главных системных процессов сеанса;

    -e : все процессы;

    -f : расширение информации

    T : все процессы на конкретном терминале;

    a : процессы, связанные с текущим терминалом, а также процессы других пользователей;

    r : информация только о работающих процессах;

    x : процессы, отсоединённые от терминала.

    • R : процесс выполняется в данный момент
    • S : процесс ожидает (т.е. спит менее 20 секунд)
    • I : процесс бездействует (т.е. спит больше 20 секунд)
    • D : процесс ожидает ввода-вывода (или другого недолгого события), непрерываемый
    • Z : zombie или defunct процесс, то есть завершившийся процесс, код возврата которого пока не считан родителем
    • T : процесс остановлен
    • W : процесс в свопе
    • < : процесс в приоритетном режиме.
    • N : процесс в режиме низкого приоритета
    • L : real-time процесс, имеются страницы, заблокированные в памяти.
    • s : лидер сессии

    Прототипом команды ps, позволяющим моделировать получении данных о процессах (субъект-сессиях), в рамках МРОСЛ ДП-модели является де-юре правило вида get-subject-attr.

    Команда pstree дополняет команду ps, с её помощью можно отобразить дерево процессов, функционирующих на всех терминалах, в формате «предок-потомок». Это позволяет проследить, цепочку порождения исследуемого процесса и получить возможность корректного управления им (особенно это касается его завершения) с учётом его «родственных связей». Без использования параметров команда pstree выводит дерево процессов, где каждый процесс идентифицируется именем соответствующей ему программы.


    Команды ps и pstree позволяют получить сведения о запущенных процессах, отследить их текущее состояние и взаимосвязи друг с другом. Для того чтобы получать данные о процессах, собранные за некоторый интервал времени, используется команда top. Принцип ее работы основан на периодическом анализе обновлений таблицы процессов ASTRA LINUX SE, что позволяет отследить изменение их параметров.


    Информация, выводимая командой top, содержит общие данные о процессах и ресурсах ASTRA LINUX SE:

    • число пользовательских сеансов (user);
    • усреднённая загруженность ресурсов системы (load average);
    • общее число процессов (total task) и число процессов, находящихся в разных состояниях (running, sleeping, stopped и zombie);
    • загруженность процессора (%Cpu);
    • распределение оперативной памяти между процессами (KiB Mem);
    • используемые области подкачки страниц (KiB Swap).

    Кроме того, команда top выводит в терминал все данные, выдаваемые командой ps в режиме детализированного вывода.

    При работе в защищённой графической подсистеме Fly информацию, аналогичную выводимой командой top, можно получить с использованием графической утилиты «Системный монитор» меню Системные» главного меню.


    Дополнительно графическая утилита «Системный монитор» может осуществлять управление процессами, при этом доступны следующие функции:

    • остановки/возобновления работы процессов;

    • прерывания (для допускающих прерывания процессов);

    В ASTRA LINUX SE администратор может управлять запущенными процессами, передавая им сигналы с использованием команды kill (в рамках МРОСЛ ДП-модели ей соответствует де-юре правило вида delete_session). Процесс, получив сигнал, может отреагировать на него либо по умолчанию, заданному ядром ASTRA LINUX SE, либо использовать собственную функцию обработки сигнала. В основном сигналы команды kill предназначены для реализации различных режимов прерывания, завершения, приостановления или возобновления работы процессов. Команда killall является расширением команды kill и отличается от нее тем, что посылает сигналы всем процессам, запущенным при выполнении одной программы.

    Также администратор и пользователи ASTRA LINUX SE имеют возможность влиять (например, с помощью команды nice) на использование выполняющимися процессами ресурса времени центрального процессора путём изменения их приоритета, указывающего ядру ASTRA LINUX SE, где расположить процесс в общей очереди готовых к выполнению на центральном процессоре процессов.

    Процесс — это экземпляр запущенной программы. Всякий раз, когда в терминале выполняется какая-нибудь команда (например, команда pwd ), система создает/запускает новый процесс.

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

    В Linux существует три основных типа процессов:

    Как Linux идентифицирует процессы?

    Поскольку Linux является многопользовательской системой, разные пользователи могут запускать различные программы, при этом каждый запущенный экземпляр программы должен быть однозначно идентифицирован ядром.

    Родительские процессы — это процессы, которые во время своего выполнения создают другие процессы.

    Дочерние процессы — эти процессы, создаваемые другими процессами во время своего выполнения.

    Примечание: В любой момент времени в системе не существует двух процессов с одинаковым PID. Вновь создаваемому процессу может быть назначен ранее использованный свободный PID.

    Состояния процесса в Linux


    Рассмотрим основные состояния процесса:

    Выполнение — процесс либо запущен (текущий процесс в системе), либо готов к запуску (ожидает передачи на выполнение процессору).

    Ожидание — процесс ожидает наступления некоторого события (пользовательского ввода, сигнала от другого процесса и т.п.) или выделения системных ресурсов. Кроме того, ядро также различает два типа ожидающих процессов:

    прерываемые ожидающие процессы — могут быть прерваны сигналами;

    непрерываемые ожидающие процессы — процессы ожидают непосредственно на аппаратном уровне и не могут быть прерваны каким-либо событием/сигналом.

    Завершен — процесс был остановлен, как правило, путем получения сигнала штатного завершения работы exit().

    Как получить идентификатор (PID) процесса

    Для отображения идентификатора нужного вам процесса можно использовать команду pidof, например:

    $ pidof init
    $ pidof bash
    $ pidof systemd


    Примечание: На вышеприведенном скриншоте вы можете видеть, что процессу init назначен PID=1 , а процессу systemd — PID=881 , хотя системой инициализации в Debian является именно systemd. Детально о том, почему возникла такая путаница, читайте здесь.

    Чтобы вывести PID и PPID текущей оболочки, выполните:

    $ echo $$
    $ echo $PPID



    Запуск интерактивного процесса в Linux

    Как только вы выполните какую-нибудь команду или программу (например, firefox ), она создаст в системе соответствующий процесс. Вы можете запустить процесс переднего плана (он будет подключен к терминалу, ожидая пользовательского ввода) следующим образом:



    Запуск фонового процесса в Linux

    Запуск процесса в фоновом режиме полезен только для программ, которые не нуждаются в пользовательском вводе (через оболочку). Перевод задания в фоновый режим обычно выполняется, когда ожидается, что выполнение задания займет много времени.

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

    Чтобы запустить процесс в фоновом режиме, используйте символ & после имени запускаемой программы. В этом случае процесс не будет принимать пользовательский ввод, пока не переместится на передний план:




    Отслеживание активных процессов

    Существует несколько различных инструментов для просмотра/перечисления запущенных в системе процессов. Двумя традиционными и хорошо известными из них являются команды ps и top:

    Команда ps

    Отображает информацию об активных процессах в системе, как показано на следующем скриншоте:


    Для получения дополнительной информации о процессах, запущенных текущим пользователем, применяется опция -f :


    Столбцы, присутствующие в выводе команды ps , имеют следующие значения:

    UID — идентификатор пользователя, которому принадлежит процесс (тот, от чьего имени происходит выполнение).

    PID — идентификатор процесса.

    PPID — идентификатор родительского процесса.

    C — загрузка CPU процессом.

    STIME — время начала выполнения процесса.

    TTY — тип терминала, связанного с процессом.

    TIME — количество процессорного времени, потраченного на выполнение процесса.

    CMD — команда, запустившая этот процесс.

    Также можно отобразить информацию по конкретному процессу, используя команду ps -f [PID] , например:


    Есть и другие опции, которые можно использовать вместе с командой ps :

    -a — показывает информацию о процессах по всем пользователям;

    -x — показывает информацию о процессах без терминалов;

    -u — показывает дополнительную информацию о процессе по заданному UID или имени пользователя;

    -e — отображение расширенной информации.

    Если вы хотите вывести вообще всю информацию по всем процессам системы, то используйте команду ps –aux :


    Обратите внимание на выделенный заголовок. Команда ps поддерживает функцию сортировки процессов по соответствующим столбцам. Например, чтобы отсортировать список процессов по потреблению ресурсов процессора (в порядке возрастания), введите команду:

    $ ps -aux --sort=%cpu


    Если вы ходите выполнить сортировку по потреблению памяти (в порядке убывания), то добавьте к имени интересующего столбца знак минуса:

    $ ps -aux --sort=-%mem


    Еще один очень популярный пример использования команды ps — это объединение её и команды grep для поиска заданного процесса по его имени:

    $ ps -aux | grep bash



    Команда top

    Команда top отображает информацию о запущенных процессах в режиме реального времени:


    PID — идентификатор процесса.

    USER — пользователь, которому принадлежит процесс.

    PR — приоритет процесса на уровне ядра.

    NI — приоритет выполнения процесса от -20 до 19 .

    VIRT — общий объем (в килобайтах) виртуальной памяти (физическая память самого процесса; загруженные с диска файлы библиотек; память, совместно используемая с другими процессами и т.п.), используемой задачей в данный момент.

    RES — текущий объем (в килобайтах) физической памяти процесса.

    SHR — объем совместно используемой с другими процессами памяти.

    %CPU — процент используемых ресурсов процессора.

    %MEM — процент используемой памяти.

    TIME+ — количество процессорного времени, потраченного на выполнение процесса.

    COMMAND — имя процесса (команды).

    < — процесс с высоким приоритетом;

    N — процесс с низким приоритетом;

    l — многопоточный процесс;

    s — лидер сессии.

    Примечание: Все процессы объединены в сессии. Процессы, принадлежащие к одной сессии, определяются общим идентификатором сессии — идентификатором процесса, который создал эту сессию. Лидер сессии — это процесс, идентификатор сессии которого совпадает с его идентификаторами процесса и группы процессов.

    Команда glances

    Команда glances — это относительно новый инструмент мониторинга системы с расширенными функциями:

    Примечание: Если в вашей системе отсутствует данная утилита, то установить её можно с помощью следующих команд:

    $ yum install -y glances

    $ sudo apt-get update
    $ sudo apt-get install glances

    Управление процессами в Linux

    Также в Linux присутствуют некоторые команды для управления процессами:

    kill — посылает процессу сигнал завершения работы;

    pkill — завершает процесс по его имени;

    pgrep — ищет процесс по его имени (и, опционально, по имени запустившего его пользователя);

    killall — завершает все активные процессы.

    Ниже приведены несколько основных примеров их использования:

    $ pgrep -u diego firefox
    $ kill 6516
    $ pgrep -u diego firefox
    $ pgrep -u diego glances
    $ pkill glances
    $ pgrep -u diego glances



    Отправка сигналов процессам

    Основополагающим способом управления процессами в Linux является отправка им соответствующих сигналов. Для перечисления списка всех доступных сигналов, введите команду:


    Большинство сигналов предназначены для внутреннего использования системой или для программистов, когда они пишут код. Ниже приведены наиболее полезные сигналы:

    SIGHUP (1) — отправляется процессу, когда его управляющий терминал закрыт.

    SIGINT (2) — отправляется процессу управляющим терминалом, когда пользователь прерывает процесс нажатием клавиш Ctrl+C.

    SIGQUIT (3) — отправляется процессу, если пользователь посылает сигнал выхода Ctrl+D.

    SIGKILL (9) — этот сигнал немедленно завершает (убивает) процесс, и процесс не будет выполнять никаких операций очистки за собой.

    SIGTERM (15) — сигнал завершения программы (отправляется командой kill по умолчанию).

    SIGTSTP (20) — отправляется процессу управляющим терминалом с запросом на остановку; инициируется пользователем нажатием клавиш Ctrl+Z.

    Ниже приведены примеры команды kill для уничтожения приложения firefox с помощью PID, после его зависания:

    $ kill -SIGKILL 2275

    Чтобы убить приложение, используя его имя, применяются команды pkill или killall , например:

    Изменение приоритета процесса

    В системе Linux все активные процессы имеют определенный приоритет выполнения, задаваемый так называемым nice-значением. Процессы с более высоким приоритетом обычно получают больше процессорного времени, чем процессы с более низким приоритетом. Однако пользователь с root-правами может повлиять на это с помощью команд nice и renice.

    Узнать значение приоритета команды можно по выводу команды top (столбец NI):


    Используйте команду nice , чтобы задать NI-значение для запускаемого процесса. Имейте в виду, что обычные пользователи могут задавать данный параметр в диапазоне от 0 до 20 тем процессам, которыми они владеют. Только пользователь root может использовать отрицательные значения приоритета.

    Чем больше nice-значение, тем меньшим приоритетом будет обладать процесс. Например, вы можете задать приоритет для запускаемого процесса следующим образом:

    $ nice -n 10 firefox

    Чтобы изменить приоритет уже запущенного процесса, используйте команду renice следующим образом:

    $ renice +8 5547
    $ renice +8 1151

    На данный момент это всё! Если у вас есть какие-либо вопросы или дополнительные идеи, вы можете поделиться ими с нами с помощью комментариев.

    Читайте также: