Linux: файловая система, пользователи, права

↑ Этап 1 · Фундамент: Linux, Bash, сети

Желательно~4 мин чтенияУровень: junior

Зачем это на собесе

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.

Вопросы с ответами