Linux: файловая система, пользователи, права
↑ Этап 1 · Фундамент: Linux, Bash, сети
Зачем это на собесе
Linux — основа любого DevOps-стека. Проверяют, уверенно ли вы ориентируетесь в файловой системе и правах, а не знание команд наизусть.
Структура файловой системы (FHS)
| Каталог | Назначение |
|---|---|
/ | корень, единое дерево (нет дисков C:) |
/etc | конфигурация системы и сервисов |
/var | изменяемые данные: /var/log, /var/lib, /var/spool |
/home, /root | домашние каталоги |
/usr, /bin, /sbin, /lib | программы и библиотеки |
/opt | стороннее ПО |
/tmp, /run | временные файлы, PID-файлы, сокеты (tmpfs) |
/proc, /sys, /dev | виртуальные ФС: процессы, ядро, устройства |
/mnt, /media | точки монтирования |
Всё есть файл: устройства (/dev/sda), сокеты, каналы, информация о процессах (/proc/<pid>/).
Навигация и работа с файлами
pwd; ls -lah; cd /var/log; cd -
cp -a src/ dst/ # копировать с сохранением прав и времени
mv a b; rm -rf dir/ # осторожно с rm -rf
mkdir -p a/b/c
ln -s /opt/app-1.2 /opt/app # символическая ссылка; ln без -s — жёсткая
stat file; file file; du -sh *; tree -L 2Жёсткая и символическая ссылки: жёсткая — ещё одно имя того же inode (не пересекает ФС, не для каталогов); символическая — файл с путём к цели (может «висеть»).
Пользователи и группы
/etc/passwd(пользователи, UID, shell),/etc/shadow(хэши паролей, только root),/etc/group;- UID 0 — root; системные пользователи (UID < 1000) без shell для сервисов.
id; whoami; groups
sudo useradd -m -s /bin/bash -G docker deploy
sudo usermod -aG sudo deploy
sudo passwd -l user # блокировка
sudo userdel -r userПрава доступа
-rwxr-xr-- 1 deploy app 4096 Sep 30 12:00 run.sh
│└┬┘└┬┘└┬┘
│ │ │ └─ others: r--
│ │ └──── group: r-x
│ └─────── owner: rwx
└───────── тип файла: - файл, d каталог, l ссылка| Право | Для файла | Для каталога |
|---|---|---|
r (4) | читать | список содержимого |
w (2) | изменять | создавать/удалять файлы внутри |
x (1) | запускать | входить (cd), доступ к содержимому |
chmod 750 run.sh; chmod u+x,g-w file; chmod -R go-rwx ~/.ssh
chown deploy:app run.sh; chown -R www-data: /var/www
umask 022 # маска по умолчанию: файлы 644, каталоги 755Специальные биты: setuid (4xxx, запуск от владельца, например passwd), setgid (2xxx, наследование группы каталога), sticky (1xxx, в каталоге удалять только своё: /tmp). ACL: setfacl -m u:alice:rwx dir, getfacl. chattr +i file — неизменяемый файл.
Типичные ошибки
chmod 777«чтобы заработало» — дыра в безопасности;- SSH-ключи с правами шире
600— ssh их отвергает (~/.ssh—700); - у сервиса нет
xна родительском каталоге — «Permission denied» при наличии прав на сам файл; - запуск приложений под root.
Вопросы с ответами
Чем жёсткая ссылка отличается от символической?
Жёсткая — другое имя того же inode, работает внутри одной ФС, остаётся при удалении оригинала. Символическая — отдельный файл-указатель на путь, может ссылаться на другую ФС и «ломаться».
Что означает право x на каталоге?
Возможность входить в каталог и обращаться к его содержимому по имени. Без него нельзя открыть файл внутри, даже зная имя.
Что делает sticky bit на /tmp?
Пользователи могут удалять и переименовывать только свои файлы, даже если каталог доступен всем на запись.