GrabDuck

Что нужно знать сисадмину о UNIX-like мире?

:

Этот список я составил, чтобы давать на него ссылку коллегам, спрашивающим "а что нужно изучить, чтобы начать разбираться в Linux (или FreeBSD) на крутом уровне?". Я постарался охватить максимально широкий круг минимально необходимых навыков и знаний, обладая которыми системный администратор сможет самостоятельно разобраться в практически любой задаче, связанной с администрированием UNIX-like операционных систем и всего того, что их окружает.

Данный список не должен восприниматься как "минимальный набор, без которого в бой нельзя" - на полное его освоение может уйти значительное время, от нескольких месяцев до года, в зависимости от начального уровня и рвения обучающегося.

Там, где это было возможно без вреда для группировки пунктов, я сортировал их от простого к сложному. В сущности, изучать пункты списка можно именно в той последовательности, в которой они приведены.

Дополнения приветствуются.

Набор базовых навыков и знаний о мире UNIX-like для системного администратора

POSIX и другие стандарты и базовые сущности

  • man, man sections
  • PCRE, BRE/ERE
  • UNIX timestamp, tzdata, leap seconds
  • posix shell (signals, exit codes, pid, kill)
  • locales
  • runlevels
  • UNIX sockets

Работа с файловой системой

  • ОС Linux: структура каталогов, что где лежит и почему
  • ОС Linux: типичные места расположения лог-файлов, pid-файлов
  • файловая система: inode, stat, манипуляции временем изменения файла
  • монтирование файловых систем, fstab, ro/rw режимы, noexec, noatime
  • последствия неправильного размонтирования файловых систем, fsck
  • жесткие и символические ссылки, разыменовывание файлов, восстановление удаленного файла
  • монтирование iso-образов
  • монтирование cifs/smb шар

Работа с блочными устройствами

  • файловая система devfs: логические абстракции, разница/схожесть устройств и файлов
  • блочные устройства null и zero
  • блочные устройства random и urandom
  • работа с dd: бэкап MBR, уничтожение информации на дисках, низкоуровневый перенос разделов
  • создание ISO-образов, создание загрузочных флешек

Разграничение пользовательского доступа

  • файловая система: права доступа и их изменение (chmod, chown)
  • системные пользователи и группы (uid, gid, umask)
  • суперпользователь: зачем нужен, что может, когда не нужно им пользоваться
  • создание/удаление пользователей, создание/удаление групп, присвоение групп
  • сброс пароля пользователю, принуждение пользователя к смене своего пароля
  • работа с sudo, настройка sudoers
  • setuid bit

Общие навыки работы в командной строке

  • физические/виртуальные консоли, безопасность при работе в физической консоли
  • sysrq
  • login shell, interactive shell, shebang
  • cat, echo
  • environment и работа с переменными, export, env
  • работа с файлами (создание/удаление/перенос/копирование), файловые маски
  • работа с логикой (логические и бинарные операторы and, or, xor, not)
  • стандартные потоки данных, их подавление и перенаправления, pipeline
  • ^z, bg/fg, nohup
  • bash: рекурсивный поиск по хистори, дополнение команд
  • шорткаты: ^l, ^d, ^w, ^k, esc+backspace, работа с буфером обмена в консоли, скроллинг
  • терминальные мультиплексоры: screen, tmux
  • nice, renice
  • cron/crontab/periodic
  • способы выключить/ребутнуть машину вежливо/немедленно, shutdown в определенное время

Инструменты командной строки

  • find: находить файлы по имени, типу, по дате создания/модификации, по совокупности параметров
  • grep: поиск файлов по содержимому, поиск строк, содержащихся/не содержащихся в файле/потоке
  • vi/vim: редактировать файлы, искать и заменять в них куски текста
  • sed: массовая замена строк в файлах
  • awk: манипуляции со столбцами в лог-файлах
  • циклы, перебор, jot
  • more/less, head/tail, cut
  • diff
  • хэш-функции (md5, sha(1|256|512))
  • top, ps, df, du, who, id
  • iconv

Работа с ядром

  • версионирование ядра Linux
  • пересборка/обновление ядра
  • динамически загружаемые модули
  • strace/ptrace (ktrace, dtrace)

Работа с приложениями

  • общее понимание инфраструктуры приложений: shared libraries, зависимости, dependency hell, статическая сборка
  • установка, обновление и удаление пакетов с помощью пакетного менеджера
  • какой файл будет исполнен при запуске в консоли commandname?
  • разрешение конкретному пользователю запускать конкретные команды через sudo
  • установка (downgrade) пакетов версии более старой, чем доступна в пакетном менеджере
  • сборка из исходных кодов (например, поставить из исходников php 5.2 на систему с установленным в виде пакета php 5.(3|4|5)
  • патчи: просмотр изменений, применение, создание
  • самостоятельная сборка пакетов, бэкпортирование

Теория и протоколы

  • TCP/IP triple handshake (tcpdump), SYN-flood атаки
  • UDP spoofing
  • как работает DNS (dig), DNS-amplification атаки
  • как работает HTTP 1.0/1.1 (telnet)
  • как работают SMTP, POP, IMAP (telnet)
  • DNSSEC, SPF, DKIM

Работа с сетью и удаленный доступ

  • диагностика: ping, arping, traceroute, mtr
  • ssh: создание (ssh-keygen) и распространение (ssh-copy-id) ключей, авторизация по ключам, основные ключи командной строки (-2, -4, -i), удалённое исполнение кода, проброс stdin/out, ssh-agent, autossh
  • scp: передача файлов через ssh в обе стороны, основные ключи командной строки (-С, -с)
  • туннелирование (ключи -R, -L), socks-proxy, проброс ssh-agent
  • proxy-серверы (HTTP(S), SOCKS)
  • TOR
  • VPN (openvpn, ipsec)
  • проброс X-сервера
  • vnc
  • доступ на windows-машины с unix-машин

Работа с архивами

  • уметь создавать и распаковывать .tar, .tar.(gzip|bzip2), .zip, .rar
  • уметь распаковывать не весь архив, а только нужную его часть

Безопасность

  • способы передачи паролей и другой конфиденциальной информации по открытым каналам связи
  • HTTPS и SSL сертификаты: теория, виды сертификатов, отличия SSL и TLS
  • знаменитые уязвимости openssl и bash
  • gnupg - шифрование файлов, проверка подписей, реализация pgp для электронной почты

Немного разработки

  • VCS: subversion, git
  • семантическое версионирование
  • управление конфигурациями и деплой: Salt, Chef, Capistrano
  • HTML и CSS на базовом уровне
  • синтаксис разметки: wiki, markdown
  • sh/bash для написания скриптов с простой логикой
  • python/perl/ruby/php для высокоуровневых задач
  • SQL для работы с большими порциями нормализованных данных
  • блок-схемы для визуализации алгоритмов

Веб

  • apache 1.x/2.x, ngnix/lighttpd, проксирующие схемы с несколькими веб-серверами
  • php как модуль, как cgi/fcgi, php-fpm
  • HTTP-flood атаки, атака медленного чтения
  • чем опасны frame/iframe в HTML
  • XSS/CSRF
  • SQL injections
  • MITM, HSTS

Железо

  • общие представления о серверных платформах: rack unit, многопроцессорные системы, блейд-системы, внутренние интерфейсы (соединения)
  • RAM: registered/unregistered, ECC, ранки (ранги)
  • HDD: SATA/SCSI/SAS
  • SSD: TRIM (discard)
  • software RAID / hardware RAID
  • iKVM/IPMI/BMC
  • диагностика и выявление аппаратных сбоев для RAM и HDD
  • общие представления об устройстве машинного зала ЦОДа, схемах электропитания (АВР/ДГУ/ИБП), технике безопасности при работе в серверной
  • электрика: виды и назначение заземления, закон Ома, активная/реактивная нагрузка, расчет энергопотребления

Коммуникация

  • базовый технический английский для чтения документации и материалов в интернете
  • базовый технический английский для задавания вопросов и составления баг-репортов в интернете
  • ознакомиться с документом How To Ask Questions The Smart Way
  • теория работы со списками рассылок
  • минимум по одному вопросу, возникающему в процессе (само)обучения, задать и решить с помощью maillist, с помощью stackexchange

Ссылки