Программа-конспект курса
"Администрирование Linux"



Занятие 1: Краткое введение в Unix и Linux

Занятие 2: Инсталляция Linux
  1. Создание дискет
  2. Загрузка инсталлятора
  3. Выбор метода инсталляции (CD-ROM, NFS, FTP, HDD, SMB)
  4. Настройка сети
  5. Разбивка жесткого диска
  6. Выбор пакетов
  7. Инсталляция
  8. Настройка видео
  9. Настройка мыши, принтера, временной зоны
  10. Выбор запускаемых при старте системы демонов
  11. Пароль root
  12. Настройка LILO
Упражнения: установка системы

Занятие 3: X-Window: основы, часть 1
  1. Краткое введение: что такое X, разные названия, история.
  2. Основные понятия и концепции:
    • Архитектура клиент-сервер (задом наперед!)
    • Многоплатформность
    • Функции X-сервера
    • Имя X-сервера
    • Window Manager
  3. Запуск: startx, xinit, X, xdm
  4. Ограничение доступа: xhost
  5. Ключики, общие для всех программ
  6. Цвета
Список полезных программ с краткими характеристиками

Занятие 4: X-Window: основы, часть 2; настройка X-сервера
  1. Особенности программ на основе Athena Widgets (FocusFollowsMouse; смысл ScrollBar'ов; скроллинг в xterm)
  2. Шрифты:
    • Полное имя шрифта (-fndry-fmly-...)
    • Шаблоны
    • Псевдонимы (aliases)
    • Ключ "-fn" Программы для работы со шрифтами:
      • xfd
      • xfontsel
      • xlsfonts
  3. Ресурсы:
    • Иерархия окон
    • Свойства объектов -- ресурсы
    • Ссылка на ресурс -- Class.parent...parent.object.resource
    • Шаблоны: спецификация с "*"; имена классов
    • Откуда берутся ресурсы:
      1. Из X-сервера
      2. Из /usr/X11R6/lib/X11/app-defaults/PROGRAMCLASS
      3. Из значений по умолчанию, зашитых в программу
    • Ключик "-xrm"
    • Программы для работы с ресурсами:
      • xrdb
      • editres (Commands|Get Tree, Show Resource Box)
  4. Настройка X-сервера (/etc/X11/XF86Config)
    • FontPath
    • Section "Monitor" -- параметры монитора (V/H refresh, Modeline); файл /usr/X11R6/lib/X11/doc/Monitors
    • Section "Device" -- опции (power_saver, clocks)
    • Section "Screen":
      • ссылки на Monitor, Device
      • Subsection "Display" -- глубина цвета, видеорежимы, виртуальный экран
Упражнения:
  1. Прочитать в X(1) описание ключа "-geometry", и запустить "oclock" так, чтобы часы были прозрачными, и имели ширину 100 и высоту 60 точек, и при этом располагались бы в правом нижнем углу экрана.
  2. Сменить "-fn" шрифт в xterm.
  3. Сменить "-xrm '*fontList: xxx'" шрифт в Netscape
  4. Сменить шрифт во всех меню Netscape /usr/doc/netscape-communicator-4.05/Netscape.ad
  5. То же через editres "руками".
  6. X-сервер: сделать так, чтобы по шаблону -*-*...* брался русский шрифт.
  7. Отключить эмуляцию третьей кнопки мыши.
  8. Сменить разрешение с 1024*768 на 800*600.
  9. Сменить глубину цвета по умолчанию с 16бит/пиксел на 32.


Занятие 5: X-Window: настройка
  1. Процесс запуска X Window
    - startx (скрипт)
       -> xinit
           -> /etc/X11/xinit/xinitrc (скрипт)
               -> /etc/X11/xinit/Xclients (скрипт)
                   -> (xclock,xeyes...)
                      Window Manager:
                      {afterstep,AnotherLevel,fvwm95,fvwm,twm}
            
  2. Window Manager (см. man fvwm2)
    • Функции wm:
      • Декорирование окон
      • Перемещение/изменение размера/закрытие и др. операции над окнами
      • Переключение между окнами (мышью, Alt-Tab, etc.)
      • Меню
      • Виртуальный десктоп
      • Привязка некоторых функций к клавиатуре/мыши
    • Разные wm:
      WM Файл(ы) конфигурации
      twm /usr/X11R6/lib/X11/twm/system.twmrc
      olwm $HOME/.openwin-menu $OPENWINHOME/lib/openwin-menu $OPENWINHOME/lib/app-defaults/Olwm
      fvwm /etc/X11/fvwm/system.fvwmrc
      fvwm2 /etc/X11/fvwm2/system.fvwm2rc
      AnotherLevel /etc/X11/AnotherLevel/fvwm2rc.m4
      AfterStep /usr/share/afterstep/wmconfig.conf
  3. xdm
    • Функции xdm -- менеджмент дисплеев
      • Локальное приглашение Login:
      • Для удаленных дисплеев (X -query ...)
      • Управление авторизацией
    • Настройка -- /etc/X11/xdm/xdm-config
      • Доступ
      • Ресурсы
      • Декорация
Упражнения:
  1. Убрать с экрана глаза и часы (xclock, xeyes -- упражнение на Xclients).
  2. Сделать так, чтобы xeyes запускались из стартового файла Window Manager'а.
  3. Сделать так, чтобы глаза были с заголовком (упражнение на стили окон Window Manager'а).
  4. Поменять в Window Manager'е цвета меню и заголовков окон, шрифты в заголовках окон на русский (простейшая проверка: зайти netscape'ом на www.nsu.ru).
  5. Добавить Netscape в основное меню.
  6. Ограничение доступа к xdm: разрешить доступ со всех машин, кроме соседней.
  7. Оформление login screen'а xdm: сменить пингвина (на фото Н.С.Диканского, взятое с www.nsu.ru ;), поменять надписи "Class-NN.private.net" и "Red Hat Linux".


Занятие 6: Программирование на shell
  1. Вступление: многие задачи выполняются не бинарными программами, а script-языками. Достоинства такого подхода (быстрота отладки, переносимость).
  2. Замечание об исполнении программ: Если у файла стоит атрибут "eXecutable", то он считается программой. Ядро пытается распознать, какого формата эта программа: a.out, ELF, Java etc. Если формат не распознан, то программа считается скриптом. Если первая строчка начинается с "#!", то в ней указан интерпретатор; причем должно указываться полное имя (/usr/bin/perl, а не просто perl); можно указывать и ключики интерпретатору. Иначе считается, что это shell-скрипт.
  3. Какие бывают script-языки и зачем они нужны:
    Имя Программа Применение
    shell /bin/sh Основной язык системы, в т.ч. initscripts
    perl /usr/bin/perl Более сложные скрипты, со стр. данных
    awk /bin/awk Мощнее shell, но проще perl
    sed /bin/sed Скорее не язык, а фильтр
    Tcl/Tk /usr/bin/wish Оконные интерфейсы
    python /usr/bin/python RedHat использует вместо Tcl/Tk
    expect /usr/bin/expect Приспособлен для мультизадачности
  4. Какие бывают shell:
    • Клон sh:
      • bsh, bash -- Bourne shell
      • ksh -- Korn shell
      • zsh -- GNU, объединяет достоинства bsh и ksh и умеет много чего еще
    • Csh: csh, tcsh -- дрянь!
  5. Сам shell почти ничего не умеет -- большинство команд внешние
  6. Как на нем пишут:
    • просто -- последовательность команд, на разных строках или через ";"
    • переменные: определение (V=xxx); использование ($V, ${V}), экспорт (export V, exportV=...)
    • Кавычение: \, ", '
    • параметры
    • перенаправление В/В (redirection): >file, >>file, <file, <<word, 2>file, 2>&1, >f1 >f2, ``, $(команда)
    • exit status -- от последней команды, exit N
    • конвейеры (pipelines): cmd&, cmd1|cmd2, cmd1||cmd2, cmd1&&cmd2, (cmd1; cmd2)
    • сложные команды:
      • if усл
        then
          команды
        {elif усл
          команды}
        [else
          команды
        ]
        fi
        
      • repeat выраж
        do
          команды
        done
        
      • while/until условие
        do
          команды
        done
        
      • for имя in список
        do
          команды
        done
        
      • case -- смотрите man/info
      • aliases
      • функции: function name() {}, return
      • условия: test усл, [ усл ], true, false
    • шаблоны (*,?,[]): они расширяются shell'ом, остальное прочитать самим
  7. Где брать информацию: man bash, man zsh, info zsh


Занятие 7: Инсталляция программ
  1. Инсталляция и поддержание системы при помощи менеджера пакетов.
    • Зачем надо (сравнить с Dos/Win3.1/Win95):
        - Унифицированное администрирование разных пакетов.
        - Зависимости между пакетами, непротиворечивость файлов.
    • Какие они в разных ОС:
      • Solaris: pkgadd, pkgrm, pkginfo, ... (pkg*)
      • IRIX: inst, swmgr, versions
      • FreeBSD: pkg_add, pkg_delete, pkg_info
      • Linux:
        ДистрибутивКоманды Расширение
        Slackware setup/pkgtool .tgz
        Debian dpkg .deb
        RedHat rpm .rpm
    • RPM:
      • Базовая информация:
        • именование пакетов: имя-версия.подверсия....arch.rpm, .src.rpm
        • что есть в пакете: файлы, информация (summary), pre- и post-install скрипты.
        • виды файлов: все, доки в /usr/doc/пакет + man, конфиги
      • Функции: установка, удаление, информация, создание пакетов.
      • Установка: rpm -i pkg, rpm -Uvh pkg. Замечание об одновременной установке нескольких связанных пакетов.
      • Удаление: rpm -e
      • Верификация: rpm -V
      • Запросы: rpm -q
        Желаемое действие Команда
        Информация: rpm -qi пакет
        Список файлов: rpm -ql пакет
        Кому принадлежит: rpm -qf файл
        "А как там это называлось...": rpm -qal|grep -i имя
        Неинсталлированный пакет: rpm -qp файл.rpm
        Чего он требует: rpm -qR {пакет | -p файл.rpm}
  2. Инсталляция из файла .tar.gz/.tgz -- варианты
  3. Инсталляция из исходных текстов
    • tar: tar -xf файл.tar, gzip -d файл, gzip -dc файл.tar.gz|tar -xf -
    • варианты: cc "руками", скрипт, make
    • make:
      • формат Makefile:
        • правила (.c.o)
        • зависимости (file.o: file.c)
        • команды (file: file.c\ngcc -o file file.c)
        • макросы (MACRO=zzzz; $(MACRO))
        • замечание про <TAB> в командах
        • замечание про способности GNU make
        • замечание: при просто "make" берется первая "цель" (обычно all)
      • "make config" / "./configure" / "make платформа" / "make -f платформа.mk"
      • make install, make -n
    • замечание про Imakefile/xmkmf
    • замечание про квази-X-программы (emacs, fte, etc.)
    • patch
Упражнения:
  1. Заменить (при помощи rpm) netscape-communicator 4.05 на 4.07
  2. Установить nedit из .tar.gz
  3. Установить xroach из исходников
  4. Установить fte из исходников.


Занятие 8: Конфигурирование ядра
  1. Обязательное правило: всегда оставлять работающую копию ядра. Т.е. перед внесением изменений обязательно скопировать рабочее ядро в другой файл, и сделать раздел в /etc/lilo.conf со ссылкой на него.
  2. Устройство ядра: стартовый код, системные вызовы, драйверы (устройств, файловых систем, сетевых протоколов).
  3. Модули -- зачем (минимизация объема, одно ядро на много конфигураций), как это работает (при обращении к устройству ядро (точнее, kerneld) подгружает драйвер.
  4. Настройка: make {config,menuconfig,xconfig}.
    • правило 1: выходить только [Save and Exit], но никогда не [Quit Without Saving].
    • правило 2: на большинстве машин все будет работать без изменений.
    • правило 3: никогда не трогать того, чего не знаешь.
    • на большинство опций есть [Help]
    • в директории Documentation/ неплохая документация, чтобы найти нужное, полезен grep
    • общие замечания:
      1. большинство драйверов/протоколов могут быть сконфигурированы как "в ядро" (y), так и модулем (m).
      2. есть "зависимости" опций: если выключить National Language Support, то нельзя включить MSDOS и ISO9660.
  5. Компиляция:
    • после конфигурирования надо сказать "make dep; make clean"
    • когда эта команда отработает, сказать "make zImage"
    • затем надо сказать "make modules"
    • замечание: компилировать лучше без X, т.к. это быстрее.
  6. Копирование:
    • ядро: "make install"
    • модули: "make modules_install"
  7. Настройка lilo:
    • если все готово, то просто сказать "lilo"
    • как заранее сделать копию:
      1. Зайти в /boot
      2. Скопировать ядро: cp vmlinuz vmlinuz.old
      3. Отредактировать /etc/lilo.conf: скопировать секцию, начинающуюся со строки "image=/boot/vmlinuz-2.0.34", заменить в ней "vmlinuz-2.0.34" на "vmlinuz.old", и заменить метку на "old".
Упражнения:
  1. Изменить конфигурацию так, чтобы стоял процессор "Pentium", и поддержка SCSI была бы выключена.
  2. Откомпилировать ядро.
  3. Сконфигурировать lilo, сделав копию ядра, и инсталлировать новое ядро.
  4. Загрузиться и убедиться, что все работает (конкретнее -- сделать telnet на sky).
  5. Далее до конца занятия -- читать Help'ы ко всем пунктам конфигурации.


Занятие 9: Работа с пользователями
  1. Создание пользователя
    • где он определяется и "существует"
      • /etc/passwd: user:password:uid:gid:GECOS:homedir:shell
      • /etc/group
      • /home/user
      • /var/spool/mail/user
    • как его делать
      • usercfg/linuxconf - интерактивно, "красиво"
      • useradd - для скриптов
      • замечание про /etc/skel
  2. Установление лимитов
    • вступление: зачем это надо, что это, команды ulimit (bash,zsh) и limit (tcsh,zsh), soft-лимиты и hard-лимиты
    • несколько слов о стартовых скриптах: что в них бывает, разные подвиды (zshenv -- всегда, zprofile -- при login, и т.д.)
    • про zsh: /etc/zshenv
    • /etc/login.defs
  3. Установление дисковой квоты
    • общая идея: зачем это; soft, hard, grace
    • несколько слов про /etc/fstab:
      device mount_point fstype options dump fsckseq
    • общая процедура:
      • добавить usrquota в fstab
      • touch /quota.user
      • quotacheck /
      • edquota user....
    • подробности в /usr/doc/HOWTO/mini/Quota
Упражнения:
  1. Сделать так, чтобы для usercfg и useradd shell по умолчанию был бы /bin/zsh
  2. Сделать пользователя test (для опытов)
  3. Сделать всем пользователям лимит datasize=30M, descriptors=50
  4. Включить квоты, и поставить test'у 5M soft, 2M hard
  5. "Задача-максимум": написать скрипт, который добавляет указанного пользователя, с одной из указанных групп (students, teachers, admins), создавая его home-директорию в /home/GROUP/user, и ставя ему дисковую квоту если он teacher или student. При добавлении проверять, что пользователя с таким именем еще не существует, и что в имени только a-z0-9, и что оно начинается с буквы. Пример вызова: myadduser vasya teachers.


Занятие 10: Настройка простейших сетевых сервисов
  1. Сетевые адреса: символьные (host.subdomain.domain), IP, сетевые маски.
  2. "Сеть для домохозяйки": протоколы TCP и UDP (надежный/датаграммный), порты, файл /etc/services. Сокеты: обычные, слушающие. Команда netstat.
  3. Простейшая диагностика сети: команды ping и traceroute, их ограниченность.
  4. Виды демонов-серверов: самостоятельные (примеры: apache, smbd); inetd'шные (примеры: ftp, telnet).
  5. Inetd: зачем он нужен (1: упрощает написание серверов, беря на себя задачи по слушанию сети, 2: висит один процесс, а остальные запускаются по мере надобности). Файл конфигурации /etc/inetd.conf:
    service_name sock_type proto flags user server_path args
    /etc/services  |         |     |     |    |           |
    stream/dgram---+         |     |     |    |           |
    tcp/udp     -------------+     |     |    |           |
    wait/nowait -------------------+     |    |           |
    username    -------------------------+    |           |
    /usr/sbin/..------------------------------+           |
    параметры   ------------------------------------------+
    
    Имена серверов часто начинаются на in. (INetd). kill -HUP pid-of-inetd заставляет перечитать .conf.
  6. tcpd: зачем он нужен, как вставляется. Конфигурирование: /etc/hosts.allow, /etc/hosts.deny.
  7. Протоколирование: /var/log/, /var/log/secure.
  8. rsh, rlogin: зачем нужны, как настраивать (~/.rhosts). Замечание об именах пользователей. Замечание о /etc/hosts.equiv, не использовать его никогда!
  1. Темы, которые не были рассказаны:
    • Безопасность, ssh
    • Файловые системы, NFS, dump/restore
    • Руссификация
    • Запуск/остановка системы (процесс init)
    • ВременнОе исполнение (at, cron)
    • Взаимодействие с dos/windows (vfat, dosemu)
    • Конфигурирование сети
    • Печать
    • Конфигурирование сетевых серверов:
      • ftpd,
      • httpd (Apache)
      • почта (sendmail, pop3)
      • DNS
      • samba
Упражнения:
  1. Сделать пользователя для опытов.
  2. Отключить запросы finger'у в виде "finger @host".
  3. Отключить identd (проверив сперва, что он работает (при помощи ftp)).
  4. Настроить "подопытному" пользователю .rhosts так, чтобы он мог входить с localhost и соседней машины, но не с самой машины.
  5. Настроить tcpd так, чтобы допускался вход по rlogin/rsh/telnet только со своей машины,а все остальные сервисы только с машин своего ряда.

Copyright © 1998 Дмитрий Болховитянов