Домой Бложек
en|ru

Разные каверзные ситуации и особенности для админа

Разные каверзные ситуации и особенности для админа

  • du path показывает, что занято 70%, а df -s path - что свободно 0. Почему?
    • вариант 1: какой-то процесс пишет в удалённый файл (обычно syslog). Выяснить кто это можно выполнив lsof | grep deleted или fuser path или угадав. Проблема решается перезапуском нужного сервиса или посылкой сигнала, который заставляет процесс переоткрыть файл.
    • вариант 2: где-то под path (чаще всего это /) в подкаталог (например /mnt) примонтировано нечто. И всё, что было в /mnt теперь недоступно, но место занимает. Типичный пример - делаем бекапы на сетевой диск, в какой-то момент диск не монтируется, но бекап делается (и сжирает всё). После перезагрузки диск монтируется, а то, что было на диске в этой точке теперь скрыто.
    • вариант 3: кончились inode, проверить - df -i.
  • сменил права на chmod, он теперь не запускается, как быть?
    • /lib/ld-linux.so[.2] /bin/chmod a+x /bin/chmod - самый простой вариант
    • cp /bin/ls /bin/ls.orig; cat /bin/chmod >/bin/ls; ls a+x /bin/chmod, ну и вернуть ls обратно
    • cp --attributes-only /bin/ls /bin/chmod
    • getfacl /bin/ls | setfacl --setfile =- /bin/chmod
  • нет возможности выполнить fork, но есть консоль с bash. Надо перегрузить сервер.
    • exec /sbin/reboot [-f]
    • echo 'b' > /proc/sysrq-trigger (echo - встроенная команда bash!)
  • вводим команду ls -1, но получаете всё равно вывод как у ls -l.
    • это alias ls='ls -l', можно сделать unalias, можно выполнять \ls -1
    • как вариант - это функция, тут вместо unalias надо делать unset -f
  • как сделать, чтобы вместо true выполнялся false?
    • переименовать, сделать каталог и в нём ссылку на false с именеи true и добавить в PATH в начале
    • сделать alias
    • выполнить hash -p /usr/bin/false true. Убрать - hash -d true
  • удалил файл, есть ли возможность восстановить? В каких случаях?
    • если файл открыт, то можно скопировать его из дескриптора в /proc/PID/fd/FD
    • выключить компьютер (или отключить фаловую систему) и найти файл командой testdisk или аналогичной
    • восстановить из резервной копии

Полезные программки

  • top / htop / iotop - кто съедает больше всего ресурсов
  • mpstat -P ALL 1 - статистика процессора
  • pidstat 1 - статистика по отдельным процессам, как top, но проще анализировать
  • iostat -xz 1 - статистика ввода-вывода
  • iftop - кто гоняет трафик (и куда/откуда)
  • vmstat - почти всё вместе взятое.
  • sar - тоже куча статистики по всему. Важно указать интервал, иначе будет пустой вывод. Самые полезные:
    • -n DEV = статистика по сетевым интерфейсам
    • -n TCP,ETCP = аналогично по TCP
    • -d = блочные устройства
    • --dev … = список устройств, а не все
    • -F = по файловым системам (только блочным! snap/proc и т.п. игнорируются атоматом)
    • -h = выводить мегабайты/гигабайты
    • -i file/-o file = читать/сохранять в бинарный файл
    • интервал и опционально число замеров - в конце. Например sar -w 1 4 = 4 замера CPU с интервало 1 сек.

Простые вопросы для админа

  • где хранятся конфиги? Логи?
  • зачем нужна sudo? Кто может её использовать? Как можно ограничить?
  • какие варианты есть, чтобы записать строку в файл?
  • что такое пакетный менеджер? Как устроены пакеты?
  • что такле MAC и IP? Разница между TCP, UDP и ICMP?
  • как работает traceroute?
  • что такое NAT и Proxy?
  • что такое DNS? Нужен ли он в локальной сети (локальная зона)?
  • что такое dhcp?
  • что такое load average, почему их три?
  • в чём отличие http от https?
  • как узнать pid процесса на сервере (например, nginx)?
  • что делает Ctrl-C в терминале? Как это происходит?
  • как запретить пользователю вход в систему? какие варианты, в чём их преимущества/недостатки?
  • что такое inode? Как его узнать для файла?
  • что такое ссылка? В чём разница между символической и жёсткой? Что будет, если удалить файл, на который указывает ссылка?
  • как искать файлы, смотреть процессы, сервисы?
  • как запустить/остановить сервис? Как запретить запускать сервис при старте? Совсем?
  • зачем использовать команду export?
  • что такое образ initrd?
  • зачем нужен файл /etc/shadow ?
  • Как принудить пользователя изменить пароль при регистрации?
  • Как узнать как завершилась последняя команда — успешно или нет?
  • Как узнать, какие модуля ядра загружены в ОС Linux?

sysrq - шпагралка

символ что делает
b reboot немедленно, не сбрасывая буферы
c system crash немедленно
d Показать какие локи в системе сейчас какие процессы держат
e Послать SIGTERM всем, кроме init
f Вызвать oom killer, если ничего не освободилось, то не вызывать панику
h Показать справку
i Послать SIGKILL всем, кроме init
j Разморозить все процессы, замороженные FIFREEZE ioctl
l Показать стек всех активных процессов
m Дамп памяти в консоль
p Дамп регистров и т.п.
s Синхронизировать все файловые системы
t Информация о всех процессах
u Перемонтировать все файловые системы в read-only
v Восстановить консоль framebuffer

Как отключать лишнее

auditctl -a never,task - отключаем аудит syscalls nospectre_v1 nospectre_v2 pti=off mds=off tsx_async_abort=off performance=good mitigations=off - опции, отключающие обход уязвимостей docker run --security-opt seccomp=unconfined ... - отключаем фильтр syscalls modprobe -rv ip_tables - убираем iptables

Отключам балансировку IRQ, тогда трафик будет всегда обрабатываться в одних и тех же очередях

systemctl stop irqbalance.service

export IRQS=($(grep eth0 /proc/interrupts | awk '{print $1}' | tr -d :))
for i in ${!IRQS[@]}; do echo $i > /proc/irq/${IRQS[i]}/smp_affinity_list; done;

Разное

systemd-cgld - неплохая замена ps, когда надо смотреть разбивку по cgroups. Можно найти подозрительные процессы.

Просто вопросы для интервью

  • What happens when you try to curl to website ?
  • What happens when you type ‘ls' in the console ?
  • What is the Load average?
  • What is the interrupt in linux? What types of interrupts you know (sync/async = internal/external, masked/non-masked)?
  • What is /proc filesystem?
  • What is the linux inodes?
en|ru
Домой Бложек
Nickname sergzhum is registered!