Кто может войти в систему и что ему разрешено: учётные записи, группы и права на файлы в Windows и Linux
rwx в Linux, в том числе числомlusrmgr.msc и secpol.msc есть в выпусках Windows Pro и для образования, в Домашней — только PowerShell.Защита в ОС строится на трёх шагах:
| Шаг | Вопрос | Как |
|---|---|---|
| Идентификация | Кто ты? | Имя учётной записи |
| Аутентификация | Докажи | Пароль, PIN, отпечаток, смарт-карта, ключ SSH |
| Авторизация | Что тебе можно? | Права на файлы, членство в группах, политики |
После входа ОС выдаёт процессам пользователя маркер доступа — «пропуск», где записаны пользователь и его группы. При каждой попытке открыть файл ядро сверяет пропуск со списком прав файла. Поэтому новое членство в группе начинает действовать только после повторного входа: старый пропуск уже выдан.
Главный принцип — наименьших привилегий: каждому ровно те права, что нужны для работы. Бухгалтер не должен быть администратором, служба — работать под администратором, а сам администратор — сидеть в браузере с правами администратора.
Учётные записи Windows бывают локальные (живут на этом компьютере), учётные записи Майкрософт (вход через интернет-аккаунт) и доменные (хранятся на сервере Active Directory, вход на любой компьютер организации). В курсе — локальные.
Внутри Windows пользователей и группы различают не по имени, а по SID (security identifier) — уникальному номеру:
PS> whoami
PC-01\student
PS> whoami /user
Сведения о пользователе
----------------
Пользователь SID
================== ============================================
PC-01\student S-1-5-21-80783211-4193847507-1556117297-1002
PS> whoami /groups /fo csv | ConvertFrom-Csv | Where-Object Группа -match "^BUILTIN|^Обязательная метка" | Select-Object Группа, SID
Группа SID
------ ---
BUILTIN\Администраторы S-1-5-32-544
BUILTIN\Пользователи S-1-5-32-545
Обязательная метка\Высокий обязательный уровень S-1-16-12288
SID пользователя: S-1-5-21-… — идентификатор этого компьютера (одинаков у всех его локальных учётных записей), а последнее число (RID) — номер записи. У встроенных записей RID постоянные:
PS> Get-LocalUser -Name Администратор, Гость | Select-Object Name, Enabled, SID
Name Enabled SID
---- ------- ---
Администратор False S-1-5-21-80783211-4193847507-1556117297-500
Гость False S-1-5-21-80783211-4193847507-1556117297-501
PS> Get-LocalGroup -Name Администраторы, Пользователи | Select-Object Name, SID
Name SID
---- ---
Администраторы S-1-5-32-544
Пользователи S-1-5-32-545
Администратор — всегда 500, Гость — 501, обычные пользователи — от 1000. У встроенных групп SID одинаковы на всех компьютерах мира: Администраторы — S-1-5-32-544, Пользователи — S-1-5-32-545. Встроенные Администратор и Гость в Windows 11 отключены (Enabled False): администратором работает пользователь, созданный при установке и включённый в группу Администраторы.
Почему важен SID: права на файлы записаны по SID. Переименуйте пользователя — права сохранятся. Удалите и создайте заново с тем же именем — это будет другой SID, и все прежние права потеряются: в списке прав останется «неизвестная учётная запись» с голым SID.
Права выдают группам, а не людям: пришёл новый бухгалтер — добавили в группу «Бухгалтерия», ушёл — убрали; права на десятки папок менять не нужно. Создадим двух сотрудников и группу бухгалтерии:
PS> $pw = Read-Host "Пароль" -AsSecureString
PS> New-LocalUser os-ivan -Password $pw -FullName "Иван Петров" -Description "бухгалтерия" | Out-Null
PS> New-LocalUser os-petr -Password $pw -FullName "Пётр Сидоров" -Description "склад" | Out-Null
PS> New-LocalGroup os-buh -Description "Бухгалтерия" | Out-Null
PS> Add-LocalGroupMember os-buh -Member os-ivan
PS> Get-LocalGroupMember os-buh
ObjectClass Name PrincipalSource
----------- ---- ---------------
Пользователь PC-01\os-ivan Local
PS> Get-LocalUser os-* | Select-Object Name, FullName, SID
Name FullName SID
---- -------- ---
os-ivan Иван Петров S-1-5-21-80783211-4193847507-1556117297-1014
os-petr Пётр Сидоров S-1-5-21-80783211-4193847507-1556117297-1015
Read-Host -AsSecureString спрашивает пароль, не показывая его на экране и не оставляя в истории команд. В графике то же делают Win+R → lusrmgr.msc (Локальные пользователи и группы) или Параметры → Учётные записи → Другие пользователи. В cmd — net user и net localgroup.
У каждого файла и папки NTFS есть список управления доступом — ACL. Каждая запись в нём (ACE) — «кому, что, разрешить или запретить». Основные права и их обозначения в icacls:
| Право | icacls | Что даёт |
|---|---|---|
| Полный доступ | F | Всё, включая смену прав и владельца |
| Изменение | M | Читать, писать, создавать, удалять |
| Чтение и выполнение | RX | Открывать файлы, запускать программы, смотреть папки |
| Чтение | R | Открывать файлы и смотреть содержимое папок |
| Запись | W | Создавать файлы, дописывать |
Права наследуются: новая папка получает права родительской. Флажки наследования в icacls: (I) — запись унаследована, (OI) — перейдёт к файлам внутри, (CI) — к вложенным папкам, (IO) — действует только на вложенные, не на саму папку. Новая папка buh:
PS> icacls buh
buh BUILTIN\Администраторы:(I)(OI)(CI)(F)
NT AUTHORITY\СИСТЕМА:(I)(OI)(CI)(F)
BUILTIN\Пользователи:(I)(OI)(CI)(RX)
NT AUTHORITY\Прошедшие проверку:(I)(M)
NT AUTHORITY\Прошедшие проверку:(I)(OI)(CI)(IO)(M)
Успешно обработано 1 файлов; не удалось обработать 0 файлов
Все записи унаследованные. Пользователи могут читать, «Прошедшие проверку» (любой вошедший) — даже изменять. Для папки бухгалтерии это не годится. Отключим наследование (/inheritance:r — убрать унаследованные записи) и выдадим права явно: администраторам — полный доступ, группе бухгалтерии — изменение:
PS> icacls buh /inheritance:r
обработанный файл: buh
Успешно обработано 1 файлов; не удалось обработать 0 файлов
PS> icacls buh /grant "Администраторы:(OI)(CI)F" "os-buh:(OI)(CI)M"
обработанный файл: buh
Успешно обработано 1 файлов; не удалось обработать 0 файлов
PS> icacls buh
buh PC-01\os-buh:(OI)(CI)(M)
BUILTIN\Администраторы:(OI)(CI)(F)
Успешно обработано 1 файлов; не удалось обработать 0 файлов
Теперь проверим, как это работает, — войдём от имени каждого сотрудника. На своей ВМ это делают через Пуск → выход → вход другим пользователем или командой runas /user:os-ivan powershell, которая открывает окно PowerShell от имени другого пользователя:
PS> # от имени os-ivan
PS> Set-Content buh\отчёт.txt "баланс за октябрь"; Get-Content buh\отчёт.txt
баланс за октябрь
PS> # от имени os-petr
PS> Get-Content buh\отчёт.txt
Get-Content : Отказано в доступе
Get-Content : Не удается найти путь "C:\Users\student\os\buh\отчёт.txt", так как он не существует.
PS> # от имени os-petr
PS> Set-Content buh\склад.txt "остатки"
Set-Content : Отказано в доступе по пути "C:\Users\student\os\buh\склад.txt".
Иван (член os-buh) создал и прочитал файл. Пётр не может ни прочитать, ни создать: у него нет прав даже на просмотр папки. Вторая строка ошибки у Петра — следствие первой: не видя папку, PowerShell не может найти в ней файл.
Как Windows считает права:
Запреты коварны. Запретим Ивану запись в отчёт — казалось бы, читать он сможет:
PS> icacls buh\отчёт.txt /deny "os-ivan:(W)"
обработанный файл: buh\отчёт.txt
Успешно обработано 1 файлов; не удалось обработать 0 файлов
PS> icacls buh\отчёт.txt
buh\отчёт.txt PC-01\os-ivan:(DENY)(W)
PC-01\os-buh:(I)(M)
BUILTIN\Администраторы:(I)(F)
Успешно обработано 1 файлов; не удалось обработать 0 файлов
PS> # от имени os-ivan
PS> Get-Content buh\отчёт.txt
Get-Content : Отказано в доступе по пути "C:\Users\student\os\buh\отчёт.txt".
PS> # от имени os-ivan
PS> Add-Content buh\отчёт.txt "исправление"
Add-Content : Отказано в доступе по пути "C:\Users\student\os\buh\отчёт.txt".
Иван потерял и чтение! Право W в icacls — это набор, в который входит служебное право SYNCHRONIZE, а без него Windows не открывает файл вообще. Правильно — запретить только запись данных (WD) и дозапись (AD):
PS> icacls buh\отчёт.txt /remove:d os-ivan
обработанный файл: buh\отчёт.txt
Успешно обработано 1 файлов; не удалось обработать 0 файлов
PS> icacls buh\отчёт.txt /deny "os-ivan:(WD,AD)"
обработанный файл: buh\отчёт.txt
Успешно обработано 1 файлов; не удалось обработать 0 файлов
PS> # от имени os-ivan
PS> Get-Content buh\отчёт.txt
баланс за октябрь
PS> # от имени os-ivan
PS> Add-Content buh\отчёт.txt "исправление"
Add-Content : Отказано в доступе по пути "C:\Users\student\os\buh\отчёт.txt".
Вывод: запреты используют редко и точечно, а доступ строят на разрешениях для групп. Что получится у конкретного человека, показывает Свойства папки → Безопасность → Дополнительно → Действующие разрешения.
Контроль учётных записей (UAC) — даже администратор работает с урезанным пропуском, как обычный пользователь. Когда программе нужны права администратора, Windows спрашивает подтверждение, и только тогда программа получает полный пропуск. Так вредоносная программа, запущенная из браузера, не получит права администратора молча.
В пропуске это видно по уровню целостности: обычные программы работают на среднем уровне, повышенные — на высоком. В выводе whoami /groups выше — «Высокий обязательный уровень»: команды курса выполнялись в терминале администратора. Процесс среднего уровня не может изменить процесс или объект высокого, даже если пользователь тот же.
PS> Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System | Select-Object EnableLUA, ConsentPromptBehaviorAdmin
EnableLUA ConsentPromptBehaviorAdmin
--------- --------------------------
1 5
EnableLUA = 1 — UAC включён; ConsentPromptBehaviorAdmin = 5 — значение по умолчанию: спрашивать согласия администратора для программ, кроме подписанных компонентов Windows. Настройка — Панель управления → Учётные записи пользователей → Изменить параметры контроля учётных записей. Отключать UAC нельзя: вместе с ним пропадает защита.
Требования к паролям задают локальные политики безопасности: Win+R → secpol.msc → Политики учётных записей. Посмотреть их можно командой net accounts:
PS> net accounts
Принудительный выход по истечении времени через: Никогда
Минимальный срок действия пароля (дней): 0
Максимальный срок действия пароля (дней): 42
Минимальная длина пароля: 0
Хранение неповторяющихся паролей: Нет
Блокировка после ошибок ввода пароля: 10
Длительность блокировки (минут): 10
Сброс счетчика блокировок через (минут): 10
Роль компьютера: РАБОЧАЯ СТАНЦИЯ
Команда выполнена успешно.
Минимальная длина пароля 0 — пароль может быть пустым или «1». Это значение по умолчанию у локальных записей, и в организации его меняют первым делом: длина от 12 символов, блокировка после 5–10 неудачных попыток, чтобы пароль нельзя было подобрать перебором. Изменить можно в secpol.msc или командой net accounts /minpwlen:12 в терминале администратора. В домене те же политики задаются централизованно групповыми политиками.
Шифрование диска. Права NTFS защищают файлы, пока работает Windows. Если вынуть диск и подключить к другому компьютеру, права не помогут — их просто никто не проверит. От этого защищает полное шифрование тома BitLocker (Windows Pro): ключ хранится в микросхеме TPM, и без загрузки «своей» Windows диск не прочитать. Обязательно сохраните ключ восстановления — без него при замене платы или сбое TPM данные потеряны навсегда. Состояние — manage-bde -status. В Linux то же делает LUKS: его предлагает установщик Debian при разметке («Авто — использовать весь диск с зашифрованным LVM»).
В Linux пользователь — номер UID, группа — GID. Администратор — пользователь root с UID 0: ему разрешено всё. Обычные пользователи выполняют команды администратора через sudo, если они в группе sudo:
$ id
uid=1000(student) gid=1000(student) группы=1000(student),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),101(netdev),108(docker)
$ grep -E "^(root|padmin):" /etc/passwd
root:x:0:0:root:/root:/bin/bash
student:x:1000:1000:student,,,:/home/student:/bin/bash
$ getent group sudo
sudo:x:27:student
$ ls -l /etc/passwd /etc/shadow
-rw-r--r-- 1 root root 1632 окт 14 22:20 /etc/passwd
-rw-r----- 1 root shadow 916 окт 14 22:20 /etc/shadow
Строка /etc/passwd: имя, x (пароль хранится не здесь), UID, GID, полное имя, домашний каталог, оболочка. Хэши паролей лежат в /etc/shadow, который читают только root и группа shadow. Пользователей создают sudo adduser имя, в группу добавляют sudo usermod -aG группа имя, пароль меняют passwd, владельца файла — sudo chown пользователь:группа файл.
Права файла — три тройки rwx: для владельца, для группы, для остальных. Первый символ — тип: - файл, d каталог, l ссылка:
$ echo "баланс за октябрь" > report.txt
$ ls -l report.txt
-rw-rw-r-- 1 student student 33 окт 31 10:45 report.txt
$ stat -c "%A %a %U %G %n" report.txt
-rw-rw-r-- 664 student student report.txt
Права записывают и числом: r = 4, w = 2, x = 1, сумма по каждой тройке. 664 = rw- (4+2), rw- (4+2), r-- (4). Меняет права chmod — числом или буквами (u владелец, g группа, o остальные, +, -, =):
$ chmod 600 report.txt; ls -l report.txt
-rw------- 1 student student 33 окт 31 10:45 report.txt
$ chmod u-r report.txt; cat report.txt
cat: report.txt: Отказано в доступе
$ chmod u=rw,g=r,o= report.txt; ls -l report.txt
-rw-r----- 1 student student 33 окт 31 10:45 report.txt
$ chmod 644 report.txt; ls -l report.txt
-rw-r--r-- 1 student student 33 окт 31 10:45 report.txt
Владелец сам убрал у себя право чтения — и не может прочитать свой файл. Но вернуть право он может: менять права разрешено владельцу независимо от rwx.
У каталогов смысл прав другой: r — видеть список имён, w — создавать и удалять файлы внутри, x — входить в каталог и обращаться к файлам по имени:
$ mkdir docs; echo текст > docs/a.txt; chmod 600 docs/a.txt
$ chmod 600 docs; ls docs; cat docs/a.txt
a.txt
cat: docs/a.txt: Отказано в доступе
$ chmod 700 docs; ls -l docs
итого 4
-rw------- 1 student student 11 окт 31 10:45 a.txt
С правами 600 (нет x) имена в каталоге видны, а открыть файл нельзя. Поэтому каталогам ставят 755 или 700, а не 644.
Права новых файлов задаёт umask — какие права убрать из полных: у файлов полные — 666, у каталогов — 777. При umask 002 файлы получают 664, каталоги 775:
$ umask
0002
$ touch new.txt; mkdir newdir; ls -ld new.txt newdir
drwxrwxr-x 2 student student 40 окт 31 10:45 newdir
-rw-rw-r-- 1 student student 0 окт 31 10:45 new.txt
Особые биты:
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 118168 апр 19 2025 /usr/bin/passwd
$ ls -ld /tmp
drwxrwxrwt 202 root root 10560 окт 31 10:45 /tmp
s вместо x у владельца — SUID: программа выполняется с правами владельца файла, а не того, кто её запустил. Так обычный пользователь программой passwd меняет свой пароль в /etc/shadow, куда сам писать не может. t у /tmp — sticky bit: писать в каталог могут все, но удалить файл — только его владелец.
| Windows | Linux | |
|---|---|---|
| Администратор | Группа Администраторы, повышение через UAC | root (UID 0), sudo |
| Идентификатор | SID | UID, GID |
| Права | ACL: много записей, наследование, запреты | rwx для владельца, группы, остальных; ACL — дополнительно (setfacl) |
| Команды | New-LocalUser, icacls | adduser, chmod, chown |
| Политика паролей | secpol.msc, net accounts | /etc/login.defs, PAM |
(W) в запрете ломает и чтение — запрещают (WD,AD)net accountsrwx для владельца, группы, остальных, числом 4-2-1; у каталога x — вход; SUID и sticky bit