Разные каверзные ситуации и особенности для админа
Разные каверзные ситуации и особенности для админа
-
du pathпоказывает, что занято 70%, аdf -s path- что свободно 0. Почему?- вариант 1: какой-то процесс пишет в удалённый файл (обычно syslog). Выяснить
кто это можно выполнив
lsof | grep deletedилиfuser pathили угадав. Проблема решается перезапуском нужного сервиса или посылкой сигнала, который заставляет процесс переоткрыть файл. - вариант 2: где-то под path (чаще всего это
/) в подкаталог (например/mnt) примонтировано нечто. И всё, что было в/mntтеперь недоступно, но место занимает. Типичный пример - делаем бекапы на сетевой диск, в какой-то момент диск не монтируется, но бекап делается (и сжирает всё). После перезагрузки диск монтируется, а то, что было на диске в этой точке теперь скрыто. - вариант 3: кончились inode, проверить -
df -i.
- вариант 1: какой-то процесс пишет в удалённый файл (обычно syslog). Выяснить
кто это можно выполнив
- сменил права на
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/chmodgetfacl /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
- это alias
- как сделать, чтобы вместо
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?