Sid linux что это

Обновлено: 05.07.2024

Перед администраторами иногда встают задачи интеграции Linux серверов и рабочих станций в среду домена Active Directory. Обычно требуется:
1. Предоставить доступ к сервисам на Linux сервере пользователям домена.
2. Пустить на Linux сервер администраторов под своими доменными учётными данными.
3. Настроить вход на Linux рабочую станцию для пользователей домена, причём желательно, чтобы они могли при этом вкусить все прелести SSO (Я, например, не очень люблю часто вводить свой длинный-предлинный пароль).

Обычно для предоставления Linux системе пользователей и групп из домена Active Directory используют winbind либо настраивают библиотеки nss для работы с контроллером домена Active Directory по LDAP протоколу. Но сегодня мы пойдём иным путём: будем использовать PowerBroker Identity Services (Продукт известен также под именем Likewise).

Установка.


Содержимое пакета устанавливается в /opt/pbis. Также в системе появляется новый runscript lwsmd, который собственно запускает агента PBIS.
В систему добавляется модуль PAM pap_lsass.so.
Утилиты (большей частью консольные), необходимые для функционирования PBIS, а также облегчающие жизнь администратору размещаются в /opt/pbis/bin

Ввод в домен.


Перед вводом в домен следует убедиться, что контроллеры домена доступы и доменные имена корректно разворачиваются в ip. (Иначе следует настроить resolv.conf)
Для ввода в домен предназначены две команды: /opt/pbis/bin/domainjoin-cli и /opt/pbis/bin/domainjoin-gui. Одна из них работает в командной строке, вторая использует libgtk для отображения графического интерфеса.
Для ввода в домен потребуется указать: имя домена, логин и пароль доменного пользователя с правами для ввода ПК в домен, контейнер для размещения объекта компьютера в домене — всё то же самое, что и при вводе в домен windows ПК.

После ввода в домен потребуется перезагрузка.
Обратите внимание — PBIS умеет работать с сайтами Active Directory. Клиент PBIS будет работать с контроллерами того сайта, в котором он находится!

После перезагрузки.

После перезагрузки и id, и getent выдадут вам пользователей и группы домена (национальные символы обрабатываются корректно. Пробелы заменяются на символ "^").
В доменной DNS зоне появится запись с именем вашего ПК.
Не спешите входить от имени доменного пользователя. Сначала имеет смысл (но вовсе не обязательно) настроить PBIS.

Одно из отличий Enterprise версии — возможность управлять этими настройками через GPO.
Стоит обратить внимание на HomeDirPrefix, HomeDirTemplate.
Я также сразу задал «RequireMembershipOf» — только пользователи, члены групп или SID из этого списка могут авторизоваться на компьютеры.
Описание каждого параметра можно получить, например так:

Значение параметра устанавливается например так:


Обратите внимание — PBIS не использует атрибуты SFU либо иные другие атрибуты Acrive Directory для получения loginShell пользователя, а также его uid и gid.
loginShell для доменных пользователей задаётся в настройках PBIS, причём установка различных loginShell различным пользователям — возможна только в Enterprise версии.
uid формируется как хэш SID пользователя.
gid — как хэш SID primaryGroup пользователя.
Таким образом на двух ПК пользователь получит всегда одинаковые uid и gid.

Теперь можно входить в систему от имени доменного пользователя. После входа доменного пользователя обратите внимание на вывод klist — PBIS получит для пользователя необходимые билеты kerberos. После этого можно безпроблемно обращаться к ресурсам на windows ПК (Главное, чтобы используемое ПО поддерживало GSSAPI). Например: теперь я без дополнительных запросов паролей (и пароль мой нигде не сохранён!) открываю любые smb ресурсы домена в Dolphin. Также Firefox (при настройке network.negotiate-auth.trusted-uris) позволяет использовать SSO при доступе к Web-порталам с доменной авторизацией (естественно если SSO настроена на сервере)

А как же SSO при доступе к ресурсам на Linux ПК?

Можно и так! PBIS заполняет /etc/krb5.keytab и поддерживает его актуальным. Поэтому серверное ПО с поддержкой GSSAPI может быть сконфигурировано для SSO.
Например, для доступа к серверу по ssh, в конфигурационный файл /etc/ssh/sshd_config (путь в вашей системе может отличаться)
И при подключении указать доменное имя компьютера (присутствующее в его SPN — иначе билет kerberos не сможет быть выписан)
UsePAM yes

(PBIS предоставляет модуль для PAM в том числе)
Также логично будет добавить директиву «AllowGroups» и указать через пробел доменные группы, пользователям которых вы намерены дать доступ к ssh серверу.

На клиентском Linux ПК в конфигурацию клиента ssh достаточно включить:

Естественно на клиентском Linux компьютере должен быть настроен kerberos. Простейший способ выполнить это условие — так же ввести клиентский компьютер в домен и работать от имени доменного пользователя.


На клиентском Windows ПК (члене домена) при использовании Putty следует в свойствах SSH соединения установить флаг «Attempt GSSAPI authentification (SSH-2 only)» (В разных версиях этот пункт называется по-разному).

Также в секции Connection --> Data можно поставить переключатель в позицию «Use system username»

Если вы намереваетесь организовать таким образом ssh доступ администраторов к linux серверам — хорошей идеей будет запретить на них вход root по ssh и добавить linux-администраторов (а ещё лучше их доменную группу) в файл sudoers.

Это не единственные сценарии применения PBIS. если статья покажется Вам интересной — в следующей напишу как организовать samba файловый сервер в домене для доменных пользователей без winbind.

  1. Хорошую повторяемость (сравните последовательность действий этой статье с инструкцией по настройке winbind)
  2. Кэширование данных из каталога (доменный пользователь может войти на ПК, когда домен не доступен, если его учётные данные в кэше)
  3. Для PBIS не требуется формирование в каталоге AD дополнительных атрибутов пользователя
  4. PBIS понимает сайты AD и работает с контроллерами своего сайта.
  5. Большую безопасность (samba создаёт учётку компьютера с не истекающим паролем)
  6. В платной версии (если возникнет такая необходимость) PBIS агент управляем через GPO (хотя это можно и вычеркнуть. если вы не намерены её покупать)

UPD 2 Пришла обратная связь от пользователя sdemon72. Возможно кому-то будет полезно.

После этого все сработало на ура! Буду очень благодарен, если внесете эти дополнения в статью, т.к. в поиске по сабжу она выпадает в первых строках. Оставлять комментарии я не могу (запрещает сайт), поэтому пишу вам лично.

С уважением, Дмитрий

UPD 3: Почему бесплатную версию PBIS не получится применить в большой компании
В бесплатной версии работает только один алгоритм генерации UNIX iD (uid и gid) по SID доменного пользователя. Так вот он не обеспечивает уникальности
этих идентификаторов. Когда у вас очень старый домен или просто много пользователей очень высок риск, что два и более пользователя получат одинаковые идентификаторы в системе с OpenPBIS. В платной версии есть возможность выбора между алгоритмами генерации id, но она стоит значительно дороже аналогичного продукта от Quest Software ;(.

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

Debian sid (unstable)

Выбор операционной системы debian может показаться необычным, поскольку ее разработчики не являются большими любителями экспериментов с "bleeding edge software". Для наиболее используемых, стабильных версий debian, выпускаются пакеты обновления программного обеспечения, исправляющие обнаруженные ошибки в процессе работы. Это означает что у вас не будет особых проблем с рабочим софтом, но зачастую в ущерб его актуальности. Для экспериментов с debian, используются две ветви программного обеспечения с различными уровнями стабильности. Первая называется debian testing. Пакеты внутри нее замораживаются в определенном состоянии по расписанию чтобы в скором будущем стать следующей стабильной версией debian. Вторая ветка называется sid, или unstable. Как следует из названия, программное обеспечение внутри нее обновляется регулярно, если точно, каждые 6 часов. Sid и unstable это ровно одно и то-же, sid - кодовое имя релиза, unstable - класс релиза. Несмотря на свое название, ветка debian sid является все таки достаточно надежный. Ее отличительной чертой является то, что большая часть стабильности системы лежит на совести разработчиков конкретного программного обеспечения. Например исправление ошибок найденных в пакете Firefox, будет возложено на Mozilla, а в ветках testing или stable пакеты будут дорабатываться самостоятельно, командой разработчиков debian linux. Для установки debian sid потребуется некоторое знание менеджера пакетов debian. Разработчики debian не предоставляют для sid установочный диск, вместо этого вам необходимо получить и установить debian unstable, или обновить используемую в настоящее время версию системы. Обновление лучше делать с версии debian testing, чтобы сделать процесс более плавным. Так вам придется обновить меньшее количество компонентов debian чем при обновлении с ветки stable. Если вам нравится работать с debian linux и вас устраивают его возможности, но есть желание изучить нововведения системы и поэкспериментировать с ней, читайте:

Как получить и установить Debian unstable

OpenSUSE Tumbleweed

Если вам нравится гибкость и удобство использования операционной системы OpenSUSE linux,и кроме того вы хотите использовать преимущества нового программного обеспечения, вам может пригодится Tumbleweed. Данная операционная система linux является одной из немногих, которая использует так называемый "плавающий релиз" ( rolling release ), оставаясь при этом все такой-же простой в использовании. Версия OpenSUSE Tumbleweed основывается на проекте Factory. Factory является основной базой для разработки программного обеспечения OpenSUSE, как для tumbleweed так и для последующих стабильных релизов. Пакеты в репозитарии Factory никогда не замораживаются, находясь в постоянной разработке. В связи с этим работоспособность программ из репозитария Factory, не гарантируется. После прохождения обязательного автоматического тестирования OpenQA, пакеты попадают на зеркала для скачивания и публикуются в OpenSUSE Tumbleweed, с периодичностью один-два раза в неделю. В отличие от Debian Sid, OpenSUSE tumbleweed имеет более официальную поддержку. По крайней мере, для данного релиза существует подходящий установочный диск. Несмотря на то что разработка в Factory ведется постоянно, данная операционная система очень современна, в некоторых случаях даже больше чем Debian Unstable. Есть несколько вариантов

как получить и установить OpenSUSE tumbleweed

Fedora Rawhide

Дистрибутивы операционных систем OpenSUSE и Fedora это две стороны одной монеты. Они поддерживаются конкурирующими компаниями, SUSE и RedHat соответственно. Вполне логично, что у них обоих есть своя версия операционной системы. Для операционной системы Fedora linux нестабильный выпуск называется Rawhide. Он разработан как для тестирования нового программного обеспечения и исправления различных ошибок, так и для пользователей которые хотят на собственном опыте ознакомиться с последними нововведениями данной версии linux. Пакеты в Fedora Rawhide обновляются каждый день, причем новые версии программ выкладываются очень быстро. Это не означает что дистрибутив Fedora Rawhide является совсем непригодным для использования. Целью разработчиков является предоставить программное обеспечение доступное на данный момент. Как и OpenSUSE с рабочим столом KDE, Fedora может похваться своим первоклассным рабочим столом GNOME. Если вы его фанат, Rawhide станет отличным способом тестирования новейших возможностей GNOME. Например, GNOME 3.24 имеет встроенную альтернативу Redshift, которая поможет вам заснуть. Если предпочитаемый вами дистрибутив linux, это Fedora, и вы хотите попробовать новые возможности, представленные в последних версиях программ, читайте

Как получить и установить Fedora Rawhide

Gentoo unstable

Хоть Gentoo и является "rolling release" системой, по умолчанию она остается достаточно стабильной и надежной. Операционная система Gentoo linux больше сфокусирована на гибкости, чем на стремлении предоставить самые последние версии программного обеспечения. Это связано с тем что большинство программ компилируются в самой системе gentoo, а не скачиваются извне. Gentoo поддерживает стабильную и нестабильную системы, по умолчанию, нестабильная отключена. Поскольку установка и настройка gentoo подразумевает довольно много ручной работы, и имеет репутацию достаточно сложной в использовании системой, она не подходит людям слабо знакомым с linux. Плюс, поскольку многие программы требуют компиляции, их обновление может отнять довольно значительное время. С другой стороны, то что большинство программ нужно компилировать, позволяет значительно урезать операционную систему, гораздо больше чем другие linux системы. Например можно выключить не используемый вами функционал gentoo, тем самым увеличив ее производительность. Gentoo позволяет довольно легко сочерать стабильные и нестабильные пакеты одновременно. вы сами можете решать какого уровня стабильности будут те или иные части операционной системы. Например в дистрибутиве Fedora не рекомендуется смешивать стабильные пакеты с пакетами из Rawhide. Если вы готовы потратить силы и время на изучение и компиляцию необходимого вам программного обеспечения, Gentoo вас не разочарует.

Arch linux testing

Как и Gentoo, Arch Linux известна достаточно сложным процессом установки. Загрузочный диск системы Arch Linux предоставляет в ваше распоряжение терминал с несколькими инструментами, необходимыми для старта установки. Наряду с OpenSUSE, операционная система Arch Linux по умолчанию предоставляет самые последние версии программного обеспечения, оставаясь при этом в максимально рабочем состоянии. Философия Arch Linux подразумевает, что пользователь должен приложить чуть больше усилий по настройке операционной системы, нежели в других linux системах. Например в Debian большинство системных служб запускается автоматически, в Arch linux их сначала нужно включить вручную. Arch Linux имеет две ветки релизов, stable и testing. При установке обновлений из stable репозитария, вы получаете стабильные версии программного обеспечения. Если-же вы желаете попробовать что-то более продвинутое но менее стабильное, все это вас ожидает в репозитарии testing. Кроме всего прочего, Arch Linux имеет так называемый "Arch User Repository". По большому счету, это огромная коллекция пакетов, которые делают установку программного обеспечения не из официальных источников Arch быстрой и легкой. Если вам нравится собственноручное управление вашей linux системой, и нравится использовать преимущества нового программного обеспечения, Arch linux является вполне жизнеспособным вариантом. В качестве альтернативного решения, вы всегда можете обратиться к операционным системам построенным на базе Arch linux, таким как Manjaro.

компьютер AD

Сколько у компьютера SID-ов?

О том, что такое SID у пользователя, я уже рассказывал. SID - это уникальное имя (буквенно-цифровая символьная строка), которое используется для идентификации объекта, такого как пользователь или компьютер в сети систем NT. Windows предоставляет или запрещает доступ и права доступа к ресурсам на основе ACL, которые используют SID для уникальной идентификации компьютеров и их членства в группах. Когда компьютер запрашивает доступ к ресурсу, его ACL проверяет SID компьютера, чтобы определить, разрешено ли этому компьютеру выполнять это действие или нет. Схематично выглядит вот так.

Схема формирования SID Windows

Существует два типа SID у компьютера:

  • Первый тип, это когда рабочая станция или сервер не являются членом домена Active Directory
  • Второй тип, это когда компьютер входит в домен Active Directory

Первым делом я выведу имя компьютера, через команду hostname. В моем примере, это W10-CL01.

Далее я выведу локальный SID компьютера, через утилиту PsGetSid:

В итоге я получил SID for W10-CL01\w10-cl01:S-1-5-21-7706586-876249769-275126362. Обратите внимание, что перед идентификатором безопасности идет имя компьютера, это сразу говорит, что он локальный.

И команда указанная выше, показывает вам доменный SID рабочей станции. SID for ROOT\w10-cl01$:S-1-5-21-233550040-578987154-4094747311-1602. Обратите внимание, что перед идентификаторам идет имя домена ROOT\.

два sid компьютера

Нюансы идентификаторов безопасности на рабочих станциях

Предположим, что вы клонируете нужную вам виртуальную машину или хост. Если вы не обезличиваете систему, с помощью Sysprep, то у вас все полученные клоны систем, будут иметь один локальный SID компьютера. Если мы говорим про окружение в виде рабочей группы в локальной сети, то ни каких проблем с доступом или конфликтом с доступом к ресурсам вы не увидите. Но вот в случае с доменным SID, такое не получится, он должен быть уникальным в пределах Active Directory, в противном случае, у вас будут конфликты между двумя объектами. Убедитесь, что после клонирования и обезличивания у вас разные SID, полученные от мастера RID.

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

Методы определения сида компьютера

  • Первый метод я вам уже показал. он заключается в использовании утилиты PsGetSid
  • Второй метод, это использование командной строки, с помощью утилиты dsquery. Получать мы таким методом будем доменный SID у сервера или рабочей станции:
dsquery * - Filter "(name=Имя компьютера)" - attr objectSID

dsquery computer - name "Имя компьютер" | dsget computer - SID

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

В противном случае вы получите ошибку "dsquery" не является внутренней или внешней

получение SID компьютера с помощью dsquery

  • Через скриптик VBS. Вы копируете код представленный ниже или скачиваете уже готовый файл у меня, только лишь потом отредактировав его и изменив имя на свое. После чего у вас будет запрошен локальный SID компьютера. Напоминаю, что у всех встроенных групп или учетных записей, начало их идентификатора безопасности состоит из полного SID компьютера с добавлением своего дополнительного номера.

Запрос локального SID компьютера-01

Запрос локального SID компьютера-02

  • Куда же без PowerShell в нем можно делать, что угодно. Вот пример кода дающего локальный идентификатор безопасности у рабочей станции:
function get-sid
Param ( $DSIdentity )
$ID = new-object System.Security.Principal.NTAccount($DSIdentity)
return $ID.Translate( [System.Security.Principal.SecurityIdentifier] ).toString()
>
$admin = get-sid "Администратор"
$admin.SubString(0, $admin.Length - 4)

тут так же будет запрошен SID учетной записи "Администратор". Если компьютер доменный, то нам поможет командлет Get-ADComputer. Запускаем оснастку PowerShell и вводим команду:

Get-ADComputer -identity "W10-CL01" -Properties "SID" | FL SID

Get-ADComputer W10-CL01 -prop sid

SID через PowerShell

Как видите методов очень много. Видел я метод и получения сида из реестра Windows, в ветке

Сигналы в Unix указывают ядру, что надо прервать нормальное планирование процесса и завершить/остановить его, или, вместо продолжения выполнения процесса с места остановки, выполнить функцию - обработчик сигнала, и лишь затем продолжить выполнение основного кода.

Сигналы, предназначенные процессу, создаются (отправляются) в нескольких ситуациях: при аппаратных сбоях, при срабатывании особого таймера, при обработке спецсимволов (Ctrl C, Ctrl Z) драйвером управляющего терминала, с помощью системного вызова kill(). В зависимости от причины, отправляются сигналы разных типов. Тип сигнала обозначается целым числом (номером). В Linux сигналы нумеруются от 1 до 64. Сигнал может быть отправлен отдельной нити процесса, процессу в целом или группе процессов.

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

Между отправкой сигнала и его доставкой проходит некоторое непредсказуемое время, поскольку, обычно, сигналы обрабатываются (доставляются) при выходе из системных вызовов или в тот момент, когда планировщик назначает процесс на выполнение. Исключением является доставка сигнала SIGKILL остановленным процессам. Для большинства сигналов можно явно приостановить доставку с помощью установки маски блокирования доставки sigprocmask() , и, в случае необходимости, удалить сигнал без обработки с помощью sigwait() .

Сигналы SIGKILL и SIGSTOP не могут быть заблокированы или проигнорированы и на них нельзя установить свой обработчик.

Действия по умолчанию:

  • SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU - остановка процесса
  • SIGCONT - запуск остановленного процесса
  • SIGCHLD - игнорируется
  • SIGQUIT, SIGILL, SIGTRAP, SIGABRT, SIGFPE, SIGSEGV - сохранение дампа памяти и завершение (Linux)
  • остальные - завершение процесса

Сигнал, маска, обработчик

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

Традиционно, при отправке процессу нескольких однотипных обычных сигналов, обработчик будет вызван лишь раз. Начиная с POSIX 1003.1, кроме обычных сигналов, поддерживаются сигналы реального времени, для которых создаётся очередь недоставленных сигналов, которая кроме номера сигнала, содержит значение (целое или адрес), которое уникально для каждого экземпляра сигнала.

Примеры использования сигналов

SIGKILL, SIGTERM, SIGINT, SIGHUP - завершение процесса. SIGKILL - не может быть проигнорирован, остальные могут. SIGTERM - оповещение служб о завершении работы ОС, SIGINT - завершение программы по нажатию Ctrl C, SIGHUP - оповещение программ, запущенных через модемное соединение, об обрыве связи (в настоящее время практически не используется).

SIGILL, SIGFPE, SIGBUS, SIGSEGV - аппаратный сбой. SIGILL - недопустимая инструкция CPU, SIGFPE - ошибка вычислений с плавающей точкой (деление на ноль), SIGBUS - физический сбой памяти, SIGSEGV - попытка доступа к несуществующим (защищенным) адресам памяти.

SIGSTOP, SIGCONT - приостановка и продолжение выполнения процесса

SIGPIPE - попытка записи в канал или сокет, у которого нет читателя

SIGCHLD - оповещение о завершении дочернего процесса.

Список сигналов

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

В Linux используется 64 сигнала. Список можно посмотреть в терминале командой kill -l

Posix.1-1990

Источник - man 7 signal

int kill(pid_t pid, int signum);

Для отправка сигнала необходимо, чтобы uid или euid текущего процесса был равен 0 или совпадал с uid процесса получателя.

Получатель сигнала зависит от величины и знака параметра pid :

  • pid > 0 - сигнал отправляется конкретному процессу
  • pid == 0 - сигнал отправляется всем членам группы
  • pid == -1 - сигнал отправляется всем процессам кроме init (в Linux'е еще кроме себя)
  • pid < -1 - сигнал отправляется группе с номером -pid

Если signum == 0 - сигнал не посылается, но делается проверка прав на посылку сигнала и формируются код ответа и errno.

int sigqueue(pid_t pid, int sig, const union sigval value);

Отправка сигнала текущему процессу. Эквивалент kill(getpid(),signum);

Убирает из маски сигналов сигнала SIGABRT и отправляет его текущему процессу . Если сигнал перехватывается или игнорируется, то после возвращения из обработчика abort() завершает программу. Выхода из функции abort() не предусмотрено. Единственный способ продолжить выполнение - не выходить из обработчика сигнала.

Отправка сигнала SIGALRM себе через time секунд. Возвращает 0 если ранее alarm не был установлен или число секунд остававшихся до срабатывания предыдущего alarma. Таймер управляющий alarm'ами один. Соответственно установка нового alarm'а отменяет старый. Параметр time==0 позволяет получить оставшееся до alarm'а время без установки нового.

Установка реакции на сигнал через функцию signal() не до конца стандартизована и сохраняется для совместимости с историческими версиями Unix. Не рекомендуется к использованию. В стандарте POSIX signal() заменен на вызов sigaction(), сохраняющий для совместимости эмуляцию поведения signal().

sighandler - адрес функции обработчика void sighandler(int) или один из двух макросов: SIG_DFL (обработчик по умолчанию) или SIG_IGN (игнорирование сигнала).

signal(. ) возвращает предыдущее значение обработчика или SIG_ERR в случае ошибки.

В Linux и SysV при вызове sighandler обработчик сбрасывается в SIG_DFL и возможна доставка нового сигнала во время работы sighandler . Такое поведение заставляет первой строкой в sighandler восстанавливать себя в качестве обработчика сигнала, и, даже в этом случае, не гарантирует от вызова обработчика по умолчанию. В BSD системах сброс не происходит, доставка новых сигнала блокируется до выхода из sighandler .

Параметры для установки обработчика сигнала через sigaction()

Данные, передаваемые в обработчик сигнала sa_sigaction()

В Linux структура siginfo_t содержит больше полей, но они служат для совместимости и не заполняются.

Все функции блокирования сигналов работают с маской сигналов типа sigset_t. В Linux это 64 бита, т.е. два слова в 32х разрядной архитектуре или одно в 64х разрядной. Выставленный бит в маске сигналов означает, что доставка сигнала с соответствующим номером будет заблокирована. Сигналы SIGKILL и SIGSTOP заблокировать нельзя.

Манипулирование маской

Параметр how определяет операцию над текущей маской. Значения SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK.

Проверка наличия заблокированных сигналов

Очистка заблокированных сигналов

sigwait ожидает блокировки какого-либо из сигналов, указанных в маске, удаляет этот сигнал и возвращает его номер в параметр sig . Если реализация сигналов предусматривает очередь сигналов, то удаляется только один элемент из очереди.

Управляющий терминал, сеанс, группы

Для организации диалоговой работы пользователей в Unix вводится понятие терминальной сессии. С точки зрения пользователя - это процесс работы с текстовым терминалом с момента ввода имени и пароля и до выхода из системы командой logout ( exit , нажатие ^D в пустой строке). Во время терминальной сессии может быть запущено несколько программ, которые будут параллельно выполнятся в фоновом режиме и между которыми можно переключаться в диалоговом режиме. После завершения терминальной сессии возможно принудительное завершение всех запущенных в ней фоновых процессов.

С точки зрения ядра - терминальная сессия - это группа процессов, имеющих один идентификатор сеанса sid. С идентификатором sid связан драйвер управляющего терминала, доступный всем членам сеанса как файл символьного устройства /dev/tty. Для каждого сеанса существует свой /dev/tty. Управляющий терминал взаимодействует с процессами сеанса с помощью отправки сигналов.

Группа процессов

Группа процессов - инструмент для доставки сигнала нескольким процессам, а также способ арбитража при доступе к терминалу. Идентификатор группы pgid равен pid создавшего её процесса - лидера группы. Процесс может переходить из группы в группу внутри одного сеанса.

Сеанс

Сеанс - средство для контроля путем посылки сигналов над несколькими группами процессов со стороны терминального драйвера. Как правило соответствует диалоговой пользовательской сессии. Идентификатор сеанса sid равняется идентификатору pid, создавшего его процесса - лидера сеанса. Одновременно с сеансом создаётся новая группа с pgid равным pid лидера сеанса. Поскольку переход группы из сеанса в сеанс невозможен, то создающий сеанс процесс не может быть лидером группы.

Создание собственного сеанса рекомендуется начать с fork, чтобы гарантировать, что процесс не является лидером группы.

Фоновая группа сеанса

Процессы в фоновой группе выполняются до тех пор, пока не попытаются осуществить чтение или запись через файловый дескриптор управляющего терминала. В этот момент они получают сигнал SIGTTIN или SIGTTOU соответственно. Действие по умолчанию для данного сигнала - приостановка выполнения процесса.

как узнать sid пользователя windows

Что такое Sid windows

Давайте для начала с вами выясним определение SID или Security Identifier > это идентификатор безопасности, который используется в семействе операционных систем Windows для идентификации объекта:

  • Группа безопасности
  • Пользователь
  • Компьютер
  • Организационная единица
  • Принтер

SID во время создания объекта, присваивается ему , в домене Active Directory за это отвечает мастер роль RID. В рамках домена, каждый SID должен быть уникален, в отличии от имени, так как Ивановых Иванов Ивановичей, может быть много, а вот отличаться они будут логином и SID. Для операционной системы Windows, важнее сиды объектов, она же их использует и для контроля прав доступа на различные корпоративные ресурсы:

  • Папки и файлы
  • Принтеры
  • Доступ к внешним ресурсам

Структура SID

Давайте разбираться из каких частей состоит Security IDentifier.

Структура SID

По мимо этого, в любой ос Windows существуют встроенные или BuiltIn группы и учетные записи, например администратор или гость, в каждой ос виндоус они имеют одинаковые SID значения. Посмотреть вы их можете в оснастке Управление компьютером.

Как узнать sid пользователя windows в домене-2

Сделаны они для того, что если у вас нет Active Directory, то вы могли бы администрировать данные системы с помощью них. Все SID для данных учетных записей находятся в локальной базе данных Windows, под названием Security Account Manager или SAM. Все сиды пользователей домена лежат в базе Active Directory в файле NTDS.dit.

База Security Account Manager

Давайте посмотрим за, что отвечает Security Account Manager:

  • Сопоставление имен с SID и обратно, некий такой DNS для учетных записей
  • Проверяет пароли, авторизовывает (принимает участие в процессе входа пользователей в ОС)
  • Ведет статистику, кто последний входил, количество входов, кто сколько раз ввел не тот пароль, короче аудит
  • Контролирует политика паролей учетных записей, в случае чего может блокировать учетные записи.
  • Ведет учет, кто в какие группы входит
  • Производит защиты самого себя
  • Дает программный интерфейс для управления базой учетных записей

Хранится SAM (Security Account Manager) в реестре Windows. Как открыть реестр windows, я уже описывал не однократно, переходим в ветку.

Если вы кликните правым кликом и из контекстного меню выберете Разрешения, то обнаружите, что права доступа есть только у системы, а вот у администраторов локальной станции их нет, но при желании можно их получить, это лишний механизм защиты, так как можно вытащить хэши учетных записей и попытаться их взломать.

Как узнать sid пользователя windows в домене-3

SAM это библиотека samsrv.dll, которая работает в Windows в виде процесса lsass.exe, увидеть это можно в диспетчере задач.

Security Account Manager

1 способ узнать sid пользователя, команда WMIC

Для примера я все буду показывать на своей рабочей станции с установленной в ней Windows Server 2012 R2, станция принадлежит домену Active Directory. Первый метод, это использование старого, доброго WMIC инструментария (Windows Management Instrumentation). Все, что вам нужно, это знать имя пользователя, точнее его логин. Чтобы посмотреть список локальных пользователей введите команду

На выходе вы получите список локальных пользователей.

способ узнать sid пользователя, команда WMIC

Чтобы выяснить все логины доменных пользователей вводим команду

Я вам это уже рассказывал в заметке Как узнать имена учетных записей Администраторов домена. На выходе получите, что то такое

Как узнать sid пользователя windows в домене-3

Далее зная логин все просто вводим

Как видите все работает.

Как узнать sid пользователя windows в домене-4

Можно наоборот по SID узнать логин пользователя, потребуется это в тех случаях, когда например в списках доступа у вас видится сид, и вы хотите узнать кому он принадлежал.

wmic useraccount where sid="S-1-5-21-2071342971-2054724104-2057240633-1001" get name

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

wmic useraccount where (name="Администратор" and domain="%computername%") get sid

Для доменной структуры

wmic useraccount where (name="Администратор" and domain="aetp") get sid

способ узнать sid пользователя, команда WMIC-2

Получить логин по SID аналогично предыдущей команду.

wmic useraccount where (sid="S-1-5-21-613421863-3366779934-4260147692-500" and domain="aetp") get name

2 способ узнать sid пользователя, команда Whoami

Тоже довольно старенькая команда из cmd.exe. Вводим

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

способ узнать sid пользователя, команда Whoami

Если ввести Whoami /logonid, то можно получить logonid, выглядит он вот так S-1-5-5-0-595920

Если ввести ключ /all, то вы увидите, все sid локальных (bultin) групп и пользователей

способ узнать sid пользователя, команда Whoami-2

Так же вы увидите сведения о привилегиях.

способ узнать sid пользователя, команда Whoami-3

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

3 способ узнать sid пользователя, ADUC и ADSIedit

В третьем способе мы воспользуемся средствами графического интерфейса, а точнее самой оснастке Active Directory пользователи и компьютеры. В ней есть встроенный механизм называется редактор атрибутов Active Directory. Открываем вкладку Вид и ставим галку Дополнительные параметры, да забыл отметить нужно быть членом группы Администраторы схемы.

узнать sid пользователя, ADUC и ADSIedit-1

После чего заходим в свойства учетной записи, вкладка Редактор атрибутов и находим там поле objectSid.

узнать sid пользователя, ADUC и ADSIedit-2

Так же SID можно посмотреть и во встроенной оснастке ADSIedit, подключаетесь там к контексту именования имен и заходите в свойства нужной учетной записи.

узнать sid пользователя, ADUC и ADSIedit-4

Да чуть не забыл в Windows Server 2012 R2 есть такое средство как Центр администрирования Active Directory, ищите там нужную учетную запись и в ней находите пункт SID.

узнать sid пользователя, ADUC и ADSIedit-3

4 способ узнать sid пользователя, утилита PsGetSid

Есть такая замечательная утилита от Microsoft од названием PsGetSid.

Когда вы скачаете и разархивируете файл, вы получите папку с большим набором утилит, среди них будет PsGetSid.

узнать sid пользователя, утилита PsGetSid-1

смысл у данной утилиты очень простой, она входит в состав Sysinternals и умеет получать SID пользователя по его имени и наоборот, умеет получать как локальных пользователей, так и доменных.

Вводим команду psgetsid имя компьютера\логин учетки

и наоборот, выясним имя по SID:

узнать sid пользователя, утилита PsGetSid-2

5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount

Пятым методом будет использование в powershell класса System.Security.Principal.NTAccount. Для домена Active Directory.


$objUser = New-Object System.Security.Principal.NTAccount("домен", "логин учетки")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

sid wmi powershell

Для локального пользователя команда будет такой.

$objUser = New-Object System.Security.Principal.NTAccount("логин")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

sid wmi powershell-2


Обратная ситуация получаем по SID имя пользователя
$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-21-613421863-3366779934-4260147692-1312")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value

6 способ узнать sid пользователя, Get-ADUser

Снова воспользуемся командлетами powershell Get-ADUser. вводим команду для получения SID доменного пользователя.

получить наоборот логин по sid

узнать sid пользователя, Get-ADUser

Как массово определить SID пользователя

Все описанные выше методы хороши, когда вам нужно найти SID для одного или двух пользователей, а как быть если у вас это пачка логинов. Например мне это нужно было при предоставлении прав. Предположим, что у меня есть текстовый файл со списком логинов, каждый на новой строке. Мне нужно для каждого определить его Security Identifier.

Файл со списком пользователей домена

В этом нам поможет скрипт PowerShell. Откройте ISE.

foreach ($line in (Get-Content $users_file))
$username = ($Line -split "\\")[1]
$user = Get-ADUser $username -Server "DC4.root.pyatilistnik.org"

$Result = [ordered]@ user = $line
SID = $user.SID
>

New-Object PSObject -Property $Result
>

На выходе будет удобный список, при желании можно все экспортировать в csv или txt файл.

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