Погодин Евгений — ИТ Заметки
🐧Linux Обновлено 28.10.2026

Linux для админа Windows 04. Файловая система, диски и права доступа

Note

Материал сверен с официальной документацией (Ubuntu Server, man-страницы и документация проектов; ссылки — в конце статьи). Примеры вывода — иллюстрации: на вашем сервере значения и формат могут отличаться. Перед работой на боевом сервере проверьте команды на тестовой машине.

В Windows диски различают по буквам, а доступ к файлам задают списками NTFS на вкладке «Безопасность». В Linux всё проще и жёстче: единое дерево каталогов, три класса пользователей (владелец, группа, остальные) и три права (чтение, запись, выполнение). Из этой статьи вы узнаете:

  • какие каталоги нужны при работе с дисками и службами;
  • как подключить диск, в том числе постоянно, не рискуя загрузкой;
  • как устроены пользователи и группы;
  • как читать и менять права: chmod, chown, umask, специальные биты;
  • как писать правила sudo и править их через visudo.

Читайте по порядку; разделы про LVM (Logical Volume Manager), ACL (Access Control List) и setuid при первом чтении можно пропустить.

В Windows В Linux
Диски C:, D: одно дерево от /; диск подключается в каталог (точка монтирования)
Управление дисками, Get-Disk, Get-Volume lsblk, df -h, blkid
Буква или папка для тома mount и строка в /etc/fstab
Локальные пользователи и группы файлы /etc/passwd, /etc/group, /etc/shadow; adduser, usermod
SID числовые идентификаторы UID и GID
Вкладка «Безопасность», icacls ls -l, chmod, chown, getfacl, setfacl
Разрешения «Чтение», «Запись», «Чтение и выполнение» три права r, w, x для трёх классов; смена прав и владельца — отдельные команды

Что нужно знать заранее

Диски и fstab пробуйте на виртуальной машине или отдельном компьютере (в WSL они, как правило, не отрабатываются); опасные команды статьи выполняйте только на тестовой машине.

Дерево каталогов: что ещё нужно знать

Основные каталоги (/etc, /home, /var, /usr, /opt, /srv, /tmp, /dev и другие) перечислены в статье 01. Расположение файлов описывает стандарт FHS (Filesystem Hierarchy Standard), которому следует и Ubuntu. Для работы с дисками и службами понадобятся ещё несколько каталогов:

Каталог Что хранит Аналог в Windows
/boot ядро и файлы загрузчика раздел загрузки
/run данные работающей системы с момента загрузки; очищаются при загрузке —
/sys виртуальная файловая система: сведения об устройствах, драйверах и ядре; на диске её нет —
/var/lib состояние программ и служб: данные, которые они меняют в работе C:\ProgramData
/var/tmp временные файлы, переживающие перезагрузку; /tmp по FHS рекомендуется очищать при загрузке %TEMP%

Практическое правило: свою конфигурацию кладите в /etc/имя, стороннюю программу в /opt/имя, данные службы в /srv/имя (веб-серверы Ubuntu по традиции используют /var/www). Каталоги /bin, /sbin и /lib в современных дистрибутивах, как правило, символические ссылки на каталоги внутри /usr; проверьте командой ls -ld /bin.

Диски, разделы и точки монтирования

Диск в Linux — это файл устройства в /dev. Обычные диски называются sda, sdb и так далее в порядке обнаружения, разделы — sda1, sda2; диски NVMe (Non-Volatile Memory Express, быстрые накопители) — nvme0n1, их разделы — nvme0n1p1. Порядок обнаружения может измениться (после добавления диска sdb способен стать sdc), поэтому в настройках указывают не имя, а UUID (Universally Unique Identifier) — идентификатор файловой системы.

Обзор даёт lsblk (права root не нужны), а lsblk -f добавляет типы файловых систем и UUID. Пример вывода:

admin-lab@lnx1:~$ lsblk -o NAME,SIZE,TYPE,FSTYPE,UUID,MOUNTPOINTS
NAME    SIZE TYPE FSTYPE UUID                                 MOUNTPOINTS
sda      40G disk
├─sda1  512M part vfat   A1B2-C3D4                            /boot/efi
└─sda2 39.5G part ext4   b81d5f90-2c3e-4a7b-8d16-5e9f0a4c7d23 /
sdb     100G disk
└─sdb1  100G part ext4   3f2a9c1e-7b4d-4e68-9a15-0c6d2e8b1f47 /srv/data

Свободное место на подключённых файловых системах показывает df -h, размер каталога — du -sh. Пример вывода:

admin-lab@lnx1:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           392M  1.1M  391M   1% /run
/dev/sda2        38G  5.6G   31G  16% /
/dev/sda1       511M  6.1M  505M   2% /boot/efi
/dev/sdb1        98G  180M   93G   1% /srv/data
admin-lab@lnx1:~$ sudo du -sh /var/log
128M    /var/log

df считает по файловой системе, du — по файлам внутри каталога.

Подключение вручную

Точка монтирования — обычный каталог. После подключения содержимое каталога, лежавшее там раньше, становится невидимым, пока том подключён.

Warning

Новый чистый диск сначала размечают (fdisk, parted), потом создают файловую систему (mkfs.ext4). Обе операции уничтожают данные на выбранном устройстве, а ошибка в имени (sdb вместо sdc) стирает чужой диск; эти шаги в статью не входят.

Упражнениям этого раздела и раздела про fstab нужен второй чистый диск, размеченный и отформатированный заранее (на тестовой виртуальной машине добавьте виртуальный диск). Если его нет, просто прочитайте разделы: имена и UUID в примерах вымышленные, подставляйте свои из lsblk -f.

admin-lab@lnx1:~$ sudo mkdir -p /srv/data
admin-lab@lnx1:~$ sudo mount /dev/sdb1 /srv/data
admin-lab@lnx1:~$ findmnt /srv/data
TARGET    SOURCE    FSTYPE OPTIONS
/srv/data /dev/sdb1 ext4   rw,relatime
admin-lab@lnx1:~$ sudo umount /srv/data

Команда отключения называется umount (без «n»). Если том занят (открыты файлы или вы стоите в этом каталоге), отключение завершится ошибкой. После перезагрузки такое подключение исчезнет.

Файловые системы

ext4 — распространённая журналируемая файловая система Linux, XFS — высокопроизводительная журналируемая для больших файлов и томов. vfat — FAT32 (на ней обычно системный раздел EFI для загрузки UEFI), tmpfs живёт в памяти. NTFS подключается драйвером ядра ntfs3 (тип ntfs3) или ntfs-3g; владельца и права по умолчанию задают опциями uid=, gid= и umask= (см. документацию ядра ntfs3).

Постоянное подключение: /etc/fstab

В /etc/fstab записано, что и куда подключать при загрузке: шесть полей в строке, разделитель — пробелы или табуляция.

# <устройство> <каталог> <тип> <опции> <dump> <pass>
UUID=3f2a9c1e-7b4d-4e68-9a15-0c6d2e8b1f47 /srv/data ext4 defaults,nofail 0 2
  • Устройство. Лучше UUID=: имя /dev/sdb1 может измениться.
  • Каталог. Точка монтирования; она должна существовать.
  • Тип и опции. ext4, xfs и так далее; обычно defaults, а nofail разрешает загрузке продолжаться без тома.
  • dump и pass. Для dump ставьте 0; pass задаёт порядок проверки fsck (проверка файловой системы) при загрузке: 1 для корневой, 2 для остальных, 0 — не проверять.

Warning

Ошибка в fstab может остановить загрузку: без nofail systemd считает том обязательным (с nofail — желательным, но тогда без диска служба может писать в пустой каталог на системном диске). В Ubuntu у root нет пароля, а аварийная оболочка systemd запрашивает пароль root, поэтому она может не открыться. Выручат режим recovery в меню загрузчика GRUB (GRand Unified Bootloader) или загрузка с установочного образа, а на виртуальной машине — снимок (контрольная точка) до правки. В recovery корневой раздел подключён только для чтения: перед правкой fstab выполните mount -o remount,rw /. Заранее проверьте на тестовой машине, как у вас входят в аварийный режим.

Безопасный порядок:

sudo cp -a /etc/fstab /etc/fstab.bak
lsblk -f
sudo mkdir -p /srv/data
sudo nano /etc/fstab
sudo systemctl daemon-reload
sudo findmnt --verify --verbose
sudo mount -a
findmnt /srv/data

Сначала копия файла и UUID из lsblk -f, затем правка. daemon-reload заставляет systemd перечитать файл (о systemd — в статье 06); без него findmnt --verify напомнит об этом предупреждением. Эта команда проверяет разбор строк и пригодность записей: в конце вывода должна быть строка Success, no errors or warnings detected. Строки [W] (предупреждение) и [E] (ошибка) разберите до перезагрузки: опечатка в UUID даёт только [W], а код возврата предупреждения не учитывает.

mount -a подключает всё, что ещё не подключено, но для строки с nofail молчит, если устройство не найдено. Поэтому настоящая проверка — последняя команда: findmnt /srv/data должна показать ваше устройство. Пустой вывод значит, что том не подключён: не перезагружайтесь, а исправьте строку. Вернуть прежний файл можно командой sudo cp /etc/fstab.bak /etc/fstab.

Note

LVM объединяет диски в группу томов, из которой нарезают логические тома; такой том расширяют командой lvextend. Установщик Ubuntu Server умеет ставить систему на LVM. Перед изменением томов делайте резервную копию.

Пользователи и группы

В Windows локальные учётные записи хранятся в базе SAM (Security Accounts Manager) и управляются оснасткой «Локальные пользователи и группы». В Linux это обычные текстовые файлы:

Файл Что хранит Кто читает
/etc/passwd учётные записи: имя, UID, основная группа, домашний каталог, оболочка все
/etc/group группы и их члены все
/etc/shadow хеши паролей и сроки действия только root

Примеры строк из этих файлов:

# /etc/passwd
admin-lab:x:1000:1000:admin-lab:/home/admin-lab:/bin/bash
# /etc/group
sudo:x:27:admin-lab
# /etc/shadow
admin-lab:<ХЕШ>:20752:0:99999:7:::

В /etc/passwd семь полей (имя:пароль:UID:GID:комментарий:домашний каталог:оболочка), и x на месте пароля значит, что хеш лежит в /etc/shadow. В /etc/group четыре поля (имя:пароль:GID:члены), в /etc/shadow девять; ! в начале хеша означает заблокированный пароль. Вручную эти файлы не правят.

UID и GID (User ID, Group ID) — числовые идентификаторы пользователя и группы, по роли близкие к SID. Диапазоны: 0–99 — предустановленные системные записи (root имеет UID 0), 100–999 — записи служб, от 1000 — обычные пользователи; 65534 — nobody. Кто вы и в каких группах состоите, показывает id. Пример вывода:

admin-lab@lnx1:~$ id
uid=1000(admin-lab) gid=1000(admin-lab) groups=1000(admin-lab),27(sudo)

В Ubuntu учётными записями удобнее управлять через adduser: это дружелюбная надстройка над useradd, groupadd и usermod. Она создаёт домашний каталог из шаблона /etc/skel и личную группу пользователя; права домашнего каталога — 0750 (для Ubuntu 21.10 и новее). Ниже шаблоны команд; реальные имена подставим в практике в конце статьи.

sudo adduser <ПОЛЬЗОВАТЕЛЬ>
sudo addgroup <ГРУППА>
sudo adduser <ПОЛЬЗОВАТЕЛЬ> <ГРУППА>
sudo usermod -aG <ГРУППА> <ПОЛЬЗОВАТЕЛЬ>

Третья команда добавляет существующего пользователя в существующую группу, четвёртая делает то же через usermod. Опция -a обязательна: без неё -G заменит весь список дополнительных групп. Новые группы получают только вновь запущенные процессы, поэтому пользователю нужно перезайти. Пароль задаёт sudo passwd <ПОЛЬЗОВАТЕЛЬ>.

  • sudo passwd -l <ПОЛЬЗОВАТЕЛЬ> блокирует пароль, но не учётную запись: вход по ключу SSH остаётся. Чтобы отключить запись целиком, выполните sudo usermod --expiredate 1 <ПОЛЬЗОВАТЕЛЬ> и проверьте ~/.ssh/authorized_keys.
  • sudo deluser <ПОЛЬЗОВАТЕЛЬ> не удаляет домашний каталог: опция --remove-home удалит и его, а --backup сначала сохранит архив. Оставленный каталог опасен: новый пользователь с тем же UID получит к нему доступ.

Права доступа: rwx

Первая колонка ls -l — это тип файла и девять символов прав. Пример вывода:

-rw-r----- 1 admin-lab team 2150 Oct 28 10:18 report.csv
drwxrws--- 2 root      team 4096 Oct 28 11:05 share

У report.csv тип - (файл): владелец читает и пишет (rw-), группа читает (r--), остальные не имеют доступа (---). share — каталог (d).

Права делятся на три класса: владелец (u), группа (g) и остальные (o). Применяется один подходящий класс: если вы владелец, действуют только права владельца, даже когда у группы их больше. Root проверки прав обходит.

Право Для файла Для каталога
r читать содержимое видеть список имён
w изменять содержимое создавать, переименовывать и удалять записи (вместе с x)
x запускать как программу входить в каталог и обращаться к файлам по имени

Удаление файла определяется правом w на каталог, а не на сам файл.

Каждому праву соответствует число: r=4, w=2, x=1. Сумма даёт цифру класса, три цифры — режим:

Режим Запись Типичное применение
644 rw-r--r-- обычный файл, читаемый всеми
600 rw------- личные секреты, например закрытый ключ
640 rw-r----- файл для владельца и группы
755 rwxr-xr-x программа или каталог для всех
750 rwxr-x--- каталог для владельца и группы
700 rwx------ личный каталог, например ~/.ssh

chmod, chown, chgrp

chmod меняет режим: числом (chmod 640 файл) или буквами [ugoa][+-=][rwxX]: + добавляет, - убирает, = задаёт точно.

admin-lab@lnx1:~$ touch backup.sh
admin-lab@lnx1:~$ ls -l backup.sh
-rw-rw-r-- 1 admin-lab admin-lab 0 Oct 28 10:15 backup.sh
admin-lab@lnx1:~$ chmod u+x backup.sh
admin-lab@lnx1:~$ ls -l backup.sh
-rwxrw-r-- 1 admin-lab admin-lab 0 Oct 28 10:15 backup.sh
admin-lab@lnx1:~$ chmod 750 backup.sh
admin-lab@lnx1:~$ ls -l backup.sh
-rwxr-x--- 1 admin-lab admin-lab 0 Oct 28 10:15 backup.sh

Тестовый файл потом удалите: rm backup.sh. Для каталога со вложенным содержимым нужна рекурсия -R, но обычным файлам выполнение не нужно, а каталогам нужно: X добавляет его только каталогам и файлам, у которых оно уже есть, так что chmod -R g+rX /srv/share безопаснее одного режима для всего.

chown меняет владельца, chgrp — группу; запись владелец:группа задаёт обоих. Менять владельца обычно можно только с sudo. Каталог и группа из примера появятся в практике ниже.

sudo chown admin-lab:team /srv/share   # владелец и группа
sudo chgrp team /srv/share             # только группа

Warning

chown -R и chmod -R по ошибке на /, /etc или /home ломают систему, и откатить это нечем. Указывайте абсолютные пути, сначала проверяйте pwd и ls. Защита от рекурсии по / (--preserve-root) у chmod и chown по умолчанию выключена.

umask: права новых файлов

Новый файл начинает с режима 666, а каталог с 777; umask убирает из них биты, записанные в маске. Маска 022 даёт файлам 644, каталогам 755; 002 — 664 и 775; 027 — 640 и 750; 077 — 600 и 700. Текущую маску показывает umask. Для root она обычно 0022, а у пользователя с личной группой (как admin-lab) в Ubuntu — 0002: группа пишет в новые файлы. umask 027 действует до конца сеанса; постоянное значение для входа задаёт параметр UMASK в /etc/login.defs.

Специальные биты

  • setuid (4000). Исполняемый файл запускается с правами владельца, а не запустившего. В списке это s на месте x владельца: -rwsr-xr-x. Ошибка в такой программе с владельцем root даёт злоумышленнику root, поэтому ставьте этот бит только по необходимости.
  • setgid (2000) на каталоге. Новые файлы получают группу каталога, а не основную группу создателя; подкаталоги наследуют бит. Режим 2770 выглядит как drwxrws---. Это основа общего каталога для команды.
  • sticky (1000) на каталоге. Удалять и переименовывать файл может только его владелец, владелец каталога и root. Так устроен /tmp: drwxrwxrwt.

Чем это отличается от NTFS

NTFS хранит список записей ACE (Access Control Entry) с любыми пользователями и группами, умеет явный запрет (icacls /deny) и наследование. В классической модели Linux одна запись на три класса, явного запрета и наследования нет: новый файл получает режим из umask создателя, а группу каталога — только при setgid.

Когда трёх классов мало, есть ACL (списки управления доступом POSIX): setfacl -m u:имя:rx путь добавляет запись для пользователя, getfacl путь показывает список, а ls -l отмечает такой файл знаком +. Если команд нет, установите пакет acl. Эффективные права групп и именованных пользователей ограничивает маска; подробности — в man acl.

sudo и visudo

Как работает sudo и почему у root нет пароля, рассказано в статье 01. Здесь — правила и их безопасная правка; что вам разрешено, покажет sudo -l.

Правила лежат в /etc/sudoers и в каталоге /etc/sudoers.d/: файлы каталога читаются в лексическом порядке, а имена с точкой или ~ пропускаются. Правьте их только командой visudo: она блокирует файл от параллельной правки и по умолчанию не сохранит его при синтаксической ошибке, а предложит снова править (e) или выйти без сохранения (x). В классическом visudo есть ещё вариант Q (сохранить с ошибкой): не выбирайте его. Обычный редактор может лишить вас sudo, а root без пароля не поможет.

Строка правила читается как «кто где = (от чьего имени) что». Дадим группе helpdesk перезапуск одной службы:

%helpdesk ALL=(root) /usr/bin/systemctl restart nginx

Знак % обозначает группу, ALL — любой хост; команда указана с полным путём, а аргументы должны совпасть точно.

Команда visudo -f откроет редактор (какой — зависит от настройки системы: в nano сохраняют Ctrl+O и Enter, выходят Ctrl+X; в vi — Esc, затем ZZ или :wq сохраняют и выходят, а :q! выходит без сохранения, см. статью 03). Введите одну строку правила и сохраните файл. Группы helpdesk у вас нет, поэтому правило ничего не разрешает: оно нужно для тренировки.

admin-lab@lnx1:~$ sudo visudo -f /etc/sudoers.d/helpdesk
admin-lab@lnx1:~$ sudo chmod 0440 /etc/sudoers.d/helpdesk
admin-lab@lnx1:~$ sudo visudo -c
admin-lab@lnx1:~$ ls -l /etc/sudoers.d/helpdesk
-r--r----- 1 root root 54 Oct 28 11:30 /etc/sudoers.d/helpdesk

Правило потом удалите: sudo rm /etc/sudoers.d/helpdesk. Помните о минимуме привилегий: давайте конкретные команды, а не ALL, не используйте NOPASSWD: ALL и не разрешайте через sudo редакторы и программы, умеющие запускать оболочку (например, less): это равносильно root.

Note

В Ubuntu 24.04 LTS sudo классический (sudo.ws), а с 25.10, и значит в 26.04 LTS, по умолчанию — Rust-реализация sudo-rs (сводка изменений — в статье 01). Типовые сценарии работают так же, но запрос пароля выглядит иначе ([sudo: authenticate] Password:), а запись ввода-вывода и sudoreplay не поддерживаются. Параметры sudoers для sudo-rs описаны в man sudoers-rs; классический sudo остаётся с суффиксом .ws (visudo.ws). Команды ls, chmod, chown, stat и другие в 26.04 по умолчанию из uutils; опции в статье описаны для GNU-версии и, как правило, те же (подробнее — в статье 03).

Практика: общий каталог для команды

Выполните на тестовой машине: создадим пользователя, группу и каталог с setgid и проверим доступ.

admin-lab@lnx1:~$ sudo adduser --disabled-password --comment 'Test user' dev1
admin-lab@lnx1:~$ sudo addgroup team
admin-lab@lnx1:~$ sudo adduser dev1 team
admin-lab@lnx1:~$ sudo adduser admin-lab team
admin-lab@lnx1:~$ sudo mkdir /srv/share
admin-lab@lnx1:~$ sudo chgrp team /srv/share
admin-lab@lnx1:~$ sudo chmod 2770 /srv/share
admin-lab@lnx1:~$ ls -ld /srv/share
drwxrws--- 2 root team 4096 Oct 28 11:05 /srv/share

Завершите сеанс (Ctrl+D) и войдите снова, чтобы получить группу team, и проверьте её через id. Затем создайте файл и проверьте доступ от имени других пользователей:

admin-lab@lnx1:~$ touch /srv/share/a.txt
admin-lab@lnx1:~$ ls -l /srv/share
total 0
-rw-rw-r-- 1 admin-lab team 0 Oct 28 11:12 a.txt
admin-lab@lnx1:~$ sudo -u dev1 ls /srv/share
a.txt
admin-lab@lnx1:~$ sudo -u nobody ls /srv/share
ls: cannot open directory '/srv/share': Permission denied

Файл получил группу team (setgid) и права 664 (umask 002), поэтому dev1 его видит, а nobody нет. Текст ошибки зависит от версии ls. Уберите за собой:

sudo rm -r /srv/share
sudo deluser --remove-home dev1
sudo deluser admin-lab team
sudo delgroup team

Типичные ошибки и недоразумения

  • chmod 777 и chmod -R 777. Антипример: запись открыта любому локальному пользователю и любой скомпрометированной программе. Выясните, от чьего имени работает программа, и дайте доступ через группу (g+rwX) или ACL.
  • Рекурсивные chown -R и chmod -R не там. Один пропущенный каталог в пути, и права меняются у всей системы.
  • Права на ~/.ssh. Рекомендуется 700 для каталога и 600 для закрытых ключей и authorized_keys (клиент ssh не примет закрытый ключ, доступный другим). Если home, ~/.ssh или authorized_keys доступны другим на запись, SSH-сервер (sshd) по умолчанию (StrictModes yes) откажет во входе по ключу. Подробности — в статье 08.
  • Правка fstab без проверки. Имя устройства вместо UUID, нет nofail, пропущены findmnt --verify и findmnt /каталог — типичная причина незагрузившегося сервера.
  • usermod -G без -a. Пользователь теряет все прежние группы, в том числе sudo.
  • Блокировка пароля вместо отключения. passwd -l не мешает входу по ключу.
  • Ожидание запретов и наследования. Права каталога не передаются вложенным файлам, а явный запрет для одного пользователя возможен только через ACL.

Проверьте себя

  1. Что означает drwxr-x--- и какие права у остальных пользователей? Каталог (d): владелец может всё (rwx), группа читает и входит (r-x), остальные не имеют доступа (---). Режим 750.
  2. Какие права получат новый файл и новый каталог при umask 027? Файл 640 (rw-r-----), каталог 750 (rwxr-x---): маска убирает биты из 666 и 777.
  3. Вы добавили в /etc/fstab строку с nofail, выполнили mount -a и не увидели ошибок. Как убедиться, что том подключён? mount -a для строки с nofail молчит, если устройство не найдено. Проверьте findmnt /каталог: пустой вывод значит, что том не подключён.
  4. Как добавить пользователя в группу, не удалив его из остальных? sudo usermod -aG группа пользователь (обязательно с -a) или sudo adduser пользователь группа. Группа заработает после нового входа.
  5. Почему sudoers правят через visudo? Он блокирует файл, проверяет синтаксис и по умолчанию не сохраняет ошибочный вариант; иначе одна опечатка может лишить вас sudo.

Что дальше

Источники

Ещё по теме «Linux»