Пятая часть книги предназначена опытным пользователям. В ней мы будем напрямую (в обычном текстовом редакторе, без использования конфигураторов) изменять некоторые конфигурационные файлы системы, поэтому все, что вы будете делать (даже под моим руководством), вы будете делать на свой страх и риск. Фактор человеческой ошибки никто не исключал. Можете ошибиться вы, когда будете перепечатывать строки конфигурационных файлов из книги, могу ошибиться и я. Так что будьте предельно осторожны!
Глава 19
Настройка загрузчика GRUB2
19.1. Несколько слов о GRUB2
Загрузчик GRUB (GRand Unified Bootloader) считается более гибким и современным, чем LILO (Linux Loader). Благодаря иной схеме загрузки операционных систем GRUB понимает больше файловых систем, нежели LILO, а именно: FAT/FAT32, ext2, ext3, ReiserFS, XFS, BSDFS и др.
Но время не стоит на месте. В свое время загрузчик GRUB пришел на смену LILO, поскольку последний не поддерживал загрузки с разделов, начинающихся после 1024-го цилиндра. Об этой проблеме знает, наверное, каждый опытный Linux-пользователь — ведь всего несколько лет назад она была актуальной (пока все дистрибутивы не перешли на GRUB). Точно такая же участь постигла и GRUB — на его место пришел GRUB2, умеющий загружаться с разделов файловой системы ext4. А загрузка с ext4-разделов просто необходима современному дистрибутиву.
Дальнейшая разработка GRUB полностью прекращена, к нему выпускаются лишь патчи. Имеется и патч, добавляющий в GRUB загрузку с файловой системы ext4. Я проделал следующий эксперимент. В Ubuntu 9.10 по умолчанию установлен GRUB2. Я его удалил (с сохранением конфигурационных файлов), затем установил GRUB (имеющаяся в составе версии 9.10 версия GRUB как раз поддерживает ext4), создал вручную его конфигурационный файл и перезагрузил систему — она загрузилась без ошибок. Однако учитывая, что будущее все-таки за GRUB2, я вернул его обратно на заслуженное место.
Примечание
На скриншотах GRUB2, приведенных в этой книге, вы можете увидеть надпись GNU GRUB version 1.98. Так что же за версию GRUB мы рассматриваем — 1,98 или все-таки 2? Как выясняется, финальная версия GRUB2 до сих пор не вышла, и никто не знает, когда выйдет, но везде, в том числе и в репозиториях, эта версия называется GRUB2. Разработчики загрузчика специально применили нумерацию 1,98, чтобы показать, что пока это не финальная версия. А разработчики дистрибутивов начали ее активно использовать.
Но GRUB2 — не просто набор патчей для GRUB, это полностью новая разработка, созданная с «нуля». Именно поэтому у GRUB2 совершенно другой формат конфигурационного файла.
Примечание
В Ubuntu GRUB2 используется, начиная с версии 9.10 — не зря я упомянул ее ранее. И в этой версии Ubuntu, и в новой — 10.04 — имеется один небольшой «глюк», связанный с установкой тайм-аута выбора операционной системы. Чуть позже мы решим эту проблему, а пока приступим к рассмотрению конфигурационных файлов GRUB2.
19.2. Конфигурационные файлы загрузчика
В листинге 19.1 приведен основной конфигурационный файл GRUB2 — /boot/grub/grub.cfg. Он не поддается редактированию вручную. Для его создания используется утилита /usr/sbm/grub-mkconfig, которая генерирует этот конфигурационный файл на основе шаблонов, хранящихся в каталоге /etc/grub.d, и настроек из файла /etc/default/grub.
Если вы знакомы с синтаксисом bash, то наверняка заметили, что синтаксис grub.cfg уж очень напоминает синтаксис bash-сценариев. Как уже было отмечено ранее, параметры GRUB2 задаются в файле /etc/default/grub, а в файле grub.cfg описываются элементы меню загрузчика.
Рассмотрим описание элемента меню:
В кавычках после команды menuentry находится описание элемента меню — можете заменить этот текст на все, что вам больше понравится (в том числе и на русский текст — используя кодировку UTF-8). Далее следуют команды GRUB. Например, команда insmod ext2 загружает модуль ext2. Обратите внимание — это не модуль ядра Linux! Это модуль GRUB2, находящийся в каталоге /boot/grub (файл ext2.mod).
Команда set root устанавливает загрузочное устройство. Формат имени устройства такой же, как в GRUB. Обратите внимание — несмотря на использование в команде set root формата имени в стиле обычного GRUB, далее используются постоянные имена устройств:
root=UUID=34eaa635-ef0e-4d5c-8b61-3c22c767834b
В современных дистрибутивах в конфигурационных файлах загрузчика имен в стиле /dev/sd** вы больше не встретите, хотя их можно использовать, если вам так удобнее.
После служебного слова linux задается ядро (файл ядра) и параметры, которые будут переданы ядру. Служебное слово initrd указывает на файл initrd.
Теперь рассмотрим файл /etc/default/grub, содержащий параметры GRUB2 (листинг 19.2). Поскольку этот файл вы будете редактировать чаще, чем grub.cfg, то комментарии для большего удобства я перевел на русский язык.
После изменения файла /etc/default/grub не забудьте запустить команду update-grub для обновления файла /boot/grub/grub.cfg.
При редактировании конфигурации GRUB2 нужно придерживаться одной стратегии из двух возможных. Первая заключается в ручном редактировании файла grub.cfg — вы редактируете его вручную и больше не используете других программ вроде grub-mkconfig или update-grub. Вторая стратегия заключается в использовании вспомогательных программ, но тогда не нужно вручную редактировать файл grub.cfg, иначе при последующем изменении файла grub.cfg программами grub-mkconfig и/или update-grub все изменения, внесенные вручную, будут уничтожены.
Небольшая неясность имеется с командами grub-mkconfig и update-grub — когда и какую команду использовать? Конфигурационный файл grub.cfg строится на базе файлов из каталога /etc/grub.d и параметров из файла /etc/default/grub. Если вы изменили только файл /etc/default/grub, достаточно будет команды update-grub. А вот если вы изменили какой-то файл из каталога /etc/grub.d, то нужно вводить обе команды:
sudo grub-mkconfig
sudo update-grub
Надо отметить, что файлы из каталога /etc/grub.d приходится редактировать довольно редко, но все же приходится, чем мы и займемся в следующем разделе и в главе 25, когда будем устанавливать пароль загрузчика GRUB2.
19.3. Установка тайм-аута выбора операционной системы. Редактирование параметров ядра Linux
По умолчанию GRUB2 не отображает меню выбора операционной системы. Следовательно, вы не можете ни выбрать другую операционную систему (в том числе и Windows), ни изменить параметры ядра Linux, ни выбрать режим восстановления или режим тестирования памяти. Одним словом, такое поведение загрузчика создает определенные неудобства.
Чуть ранее было сказано, что для установки тайм-аута загрузчика нужно отредактировать следующие параметры:
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
# Таймаут (в секундах)
GRUB_TIMEOUT="10"
Все правильно, но в том случае, если бы GRUB2 в Ubuntu не содержал «глюка»!
Примечание
Вообще, «глюки» — это хорошо. Чем корявее будет Canonical делать свои дистрибутивы, тем больше будет работы у авторов книг и дистрибутивов на базе Ubuntu. Вы думаете, почему я создал свой дистрибутив Denix ( denix.dkws.org.ua )? Нет, не для того, чтобы гордо ткнуть себя в грудь — мол, я тоже могу сделать свой дистрибутив! А для того, чтобы после каждой установки Ubuntu пользователи могли не тратить свое личное время, часами настраивая операционную систему.
Например, чтобы побороть такое неадекватное поведение (а каким его еще назвать, если программа не реагирует на установку параметров из конфигурационного файла) загрузчика, мне пришлось потратить минут 15–20. К своему решению я пришел экспериментальным путем, поэтому не удивлюсь, если на каком-то форуме в Интернете вы найдете другое решение (не исключаю, может быть даже лучшее).
Итак, откройте ваш файл /etc/grub.d/30_os-prober:
sudo nano /etc/grub.d/30_os-prober
Найдите в нем строку:
if ["x${GRUB_HIDDEN_TIMEOUT}" = "x0"]
Далее все значения -1 во фрагменте кода, представленном в листинге 19.3, замените на 1. Строки, которые нуждаются в редактировании, выделены полужирным шрифтом. Изменять значение -1 в остальном коде, выходящем за рамки листинга 19.3, не нужно!
После внесения изменений сохраните файл и введите команды:
sudo grub-mkconfig
sudo update-grub
sudo reboot
Теперь после перезагрузки вы увидите меню GRUB2 (рис. 19.1). Для редактирования параметров ядра, которые передаются Linux, выделите загрузочную метку Linux и нажмите клавишу
Примечание
Если вы защитили загрузчик от редактирования параметров ядра (как это сделать, будет показано в главе 25), то получите требование ввести имя пользователя и пароль (рис. 19.2), после чего сможете отредактировать загрузочную метку (рис. 19.3).
В данном случае дополнительные параметры нужно вводить после параметра splash (строка параметров начинается после служебного слова linux). Кстати, если у вас проблемы с запуском Linux, то, чтобы увидеть больше диагностических сообщений, параметры quiet и splash лучше вообще удалить. Для возврата обратно в меню GRUB2, нажмите клавишу
Какие параметры ядра указать? Параметров ядра очень много, поэтому в табл. 19.1 собраны самые полезные.
19.4. Загрузка с ISO-образов
Предположим, вы скачали ISO-образ новой версии Ubuntu, но у вас нет «болванки», чтобы записать на нее образ и загрузиться с полученного диска. Могу вас обрадовать: «болванка» вам для этого не понадобится — GRUB2 умеет использовать ISO-образы в качестве загрузочных устройств. Просто пропишите ISO-образ в конфигурационном файле GRUB2 и перезагрузите компьютер. Новая загрузочная метка появится в меню GRUB2, и, если ее выбрать, система загрузится с ISO-образа.
Итак, создайте в каталоге /boot подкаталог iso (название, сами понимаете, может быть любым), загрузите в него ISO-образ дистрибутива. Теперь вам осталось лишь отредактировать конфигурационный файл /boot/grub/grub.cfg, добавив в него вот такую загрузочную запись (выделенный полужирным шрифтом текст нужно записать в одну строку):
menuentry "Ubuntu LiveCD" {
loopback loop /boot/iso/ubuntu.iso
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/boot/iso/Ubuntu.iso noeject noprompt —
initrd (loop)/casper/initrd.lz
}
Перезагружаемся и выбираем пункт меню Ubuntu LiveCD.
Глава 20
Служебные программы
20.1. Анализатор использования диска
Вместо консольной (текстовой) утилиты df (см. разд. 21.6.1) для анализа использования диска можно использовать графическую программу Приложения | Стандартные, Анализатор использования дисков (рис. 20.1). Программа эта удобнее не только тем, что показывает графическую диаграмму, она может просканировать всю файловую систему и показать, сколько места на диске занимает та или иная папка. Для этого нажмите кнопку с изображением жесткого диска на панели инструментов, и вы увидите объем каждой папки файловой системы (рис. 20.2).
Самая первая кнопка на панели инструментов — Сканировать домашнюю папку — позволяет просканировать ваш домашний каталог, а правее кнопки с изображением жесткого диска находятся две кнопки, позволяющие просканировать произвольную папку и удаленную папку.
Используя информацию анализатора дисков, вы можете определить, в какой папке имеются лишние файлы. Из рис. 20.2 видно, что каталог /var/cache занимает 453 Мбайт — это многовато для домашнего компьютера. Оказывается, 387 Мбайт из них занимает каталог /var/cache/apt/archives/archives (рис. 20.3).
В нем содержатся все DEB-пакеты, которые вы когда-либо устанавливали. Для экономии места на диске его можно очистить командой:
sudo rm /var/cache/apt/archives/*.deb
20.2. Системный монитор
Аналогично, для команды top в GNOME также есть графический аналог. Правда, возможности системного монитора (Система | Администрирование) значительно шире, чем у консольной команды top.
На вкладке Система (рис. 20.4) выводится общая информация о системе: версия дистрибутива, имя компьютера, тип процессора, объем оперативной памяти и т. д.
Вкладка Процессы (рис. 20.5) как раз и является аналогом top — она выводит запущенные процессы. Чтобы завершить тот или иной процесс (например, если он завис), нужно его выделить и нажать кнопку Завершить процесс.
На вкладке Ресурсы (рис. 20.6) выводится информация об использовании процессора, оперативной памяти и сети. Ubuntu довольно экономно использует системные ресурсы, посмотрите — использовано всего 219 Мбайт оперативной памяти.
Вкладка Файловые системы содержит информацию о смонтированных файловых системах. Из рис. 20.7 видно, что смонтирована корневая файловая система (/dev/sda1), флешка (/dev/sdb 1) и компакт-диск с дистрибутивом Ubuntu (Zdev/srQ).
20.3. Программа bum
Ранее в Ubuntu имелась программа Службы (в программной группе Система | Администрирование), позволяющая включать/отключать системные сервисы. В современных версиях Ubuntu такой программы нет. Зато можно установить программу Boot-Up Manager, которая даже лучше, чем имевшаяся программа Службы. Для установки программы откройте терминал и введите команду:
sudo apt-get install bum
Нужно отметить, что в отличие от других дистрибутивов, где по умолчанию включаются практически все установленные сервисы, в Ubuntu включаются лишь самые необходимые, поэтому вы не будете часто запускать bum (рис. 20.8), но знать о его существовании полезно.
Глава 21
Работа с консолью Linux
21.1. Консоль
Настоящий линуксоид должен уметь работать в консоли. Когда система Linux появилась, для диалога с ней существовала только консоль — командная строка, о графическом интерфейсе не было и речи. Знаете, почему UNIX и Linux отталкивали обычных пользователей? Потому что не было хорошего графического интерфейса. Поэтому в Linux работали одни профессионалы. Сейчас все изменилось — в Linux очень удобный графический интерфейс, который с удовольствием используют и профессионалы (дождались наконец-то!), забывая о командной строке. Наш дистрибутив вообще ориентирован на работу в графическом режиме, а в официальных руководствах, которые можно найти в Интернете, о консоли вообще не упоминается. А ведь она есть! В этой главе мы поговорим о том, как правильно работать в консоли. Совсем необязательно работать полностью в текстовом режиме, вы можете использовать материал данной главы для эффективной работы с терминалом — эмулятором консоли.
Обычные пользователи в консоль ни ногой — даже принципиально, мол, зачем в DOS возвращаться? Под «DOS» имеется в виду командная строка Linux. Да, ее вид не очень дружелюбен, но стоит вам поработать в консоли, и вы поймете все ее преимущества. Начнем с того, что командная строка Linux намного удобнее командной строки DOS — об этом мы еще поговорим. В консоли можно выполнять те же операции, что и в графическом режиме, причем все намного быстрее. Хотите бороздить просторы Интернета? Пожалуйста, но без картинок. Не так красиво, но зато сэкономите трафик. А на обмен электронными сообщениями это никак не влияет. В консоли также можно работать и с документами, правда, о графике тоже можно забыть. На старых компьютерах консоль позволяет эффективно использовать их ресурсы. Да, в графическом режиме на стареньком «Пентиуме» не поработаешь, зато в текстовом режиме его можно быстро превратить в очень полезный для всей сети компьютер — шлюз, через который его более мощные собратья будут получать доступ к Интернету.
Для переключения между консолями используются комбинации клавиш
Работа в консоли заключается во вводе нужной команды. Вы вводите команду (например, создания каталога, просмотра файла, вызова редактора и т. д.) и нажимаете клавишу
man имя_программы
Никак не можете вспомнить, как пишется та или иная команда? Если вы помните, хотя бы на какую букву она начинается, воспользуйтесь функцией автодополнения командной строки — введите первые буквы команды и нажмите клавишу
Вам не хочется писать (даже с автодополнением) длинные команды? Тогда можно создать псевдонимы команд. Для этого в файл. bash_profile добавьте строки вида:
alias псевдоним= 'команда'
Например,
alias cfg-net='system-config-network'
Для того чтобы изменения вступили в силу, выйдите из консоли (команда logout) и заново зарегистрируйтесь.
Пожалуй, для полноценной работы с консолью вам нужно знать еще одну команду — clear. Данная команда очищает консоль (терминал). Очень полезная команда, особенно, когда вы хотите все начать с «чистого листа».
Иногда бывает полезно результаты одной программы перенаправить другой программе или записать в файл. Предположим, что есть команда cmd, которая выводит очень много информации, — вы ее просто не успеваете прочитать. Тогда вывод этой программы можно перенаправить программе-просмотрщику, например, программе less, которая с помощью клавиш
cat big_file.txt | less
Вы хотите сохранить вывод программы в файл, чтобы передать потом кому-то по электронной почте? Тогда вам нужно с помощью символа > указать программе имя будущего файла:
команда > файл
Например,
dmesg > kernel.txt
Данная команда перенаправляет результаты работы программы dmesg, выводящей загрузочные сообщения ядра, в файл kemel.txt. При отсутствии файла kemel.txt он будет создан, при наличии — перезаписан. Если вы не хотите, чтобы kemel.txt был перезаписан, нужно использовать два символа >>:
dmesg >> kernel.txt
В этом случае вывод программы dmesg будет дописан в конец файла kemel.txt.
21.2. Команды
poweroff, halt, reboot, shutdown
С помощью меню GNOME можно легко завершить работу системы. Спрашивается, зачем нужно знать дополнительные команды для завершения работы системы? Хотя бы для того, чтобы настроить вашу систему на автоматическое выключение. Скажем, в 23:00. С помощью меню GNOME это сделать невозможно — кому-то ведь нужно будет вызвать команду меню. А вот с помощью упомянутых в этом разделе консольных команд задуманное воплотимо.
Команда reboot используется для перезагрузки системы. Для завершения работы системы служат команды halt и poweroff. Первая команда завершает работу системы, но не выключает ее питание. Вы увидите сообщение System is halted, свидетельствующее о возможности выключения питания. Данная команда предназначена для старых компьютеров, не поддерживающих расширенное управление питанием. Вторая (poweroff) завершает работу системы и выключает ее питание.
Самой «продвинутой» командой является команда shutdown — она позволяет завершить работу системы, перезагрузить систему, указать время завершения работы. Предположим, вы хотите уйти пораньше, но компьютер нужно выключить в 19:30 — вдруг некоторые пользователи задержались на работе, а вы выключите сервер — получится некрасиво. Вам поможет команда shutdown:
# shutdown — h 19:30 [сообщение]
Сообщение можно и не указывать — все равно Windows-пользователи его не увидят.
Если нужно завершить работу системы прямо сейчас, вместо времени укажите now:
# shutdown — h now
Для перезагрузки системы используется опция — r:
# shutdown — r now
Далее мы рассмотрим полезные команды Linux, которые пригодятся каждому пользователю.
21.3. Общие команды
21.3.1. Команда
arch
— вывод архитектуры компьютера
Команда arch поможет узнать тип аппаратной платформы, например: i386, i586, i686 и др.
Пример использования:
$ arch
i686
21.3.2. Команда
clear
— очистка экрана
Команда clear очищает экран при работе в консоли (терминале).
Пример использования:
$ clear
21.3.3. Команда
date
Команда date используется для вывода текущей даты. Эта команда может применяться также для установки даты, если запущена от имени администратора.
Пример использования:
$ date
# date 1705101707
Первая команда выводит дату, а вторая — устанавливает дату (при условии, что команда запущена от имени root) 17 мая (1705) 2010 года (10) и время 17:07. Как видите, установка даты осуществляется в формате ddMMyyhhmm (dd — число, MM — месяц, yy — год, hh — часы, mm — минуты).
Команда date может вывести дату в указанном вами формате. Для изучения форматов даты введите команду man date.
21.3.4. Команда
echo
Команда echo выводит текстовую строку, указанную в качестве аргумента, например:
$ echo "Hello world!"
Hello world!
Обычно данная команда используется в сценариях командного интерпретатора для вывода сообщений на экран.
21.3.5. Команда
exit
— выход из системы
Для завершения сеанса работы в системе (при условии, что вы работаете в консоли) нужно использовать команду exit. Если не завершить сеанс работы, кто угодно сможет работать в системе под вашим именем (понятно, что во время вашего отсутствия за компьютером).
21.3.6. Команда
man
— вывод справки
Команда man используется для получения справки о любой команде системы. Например, команда man ls выведет справку об использовании команды ls, которая выводит содержимое каталога. О том, как правильно использовать саму справочную систему, вам расскажет команда man man.
21.3.7. Команда
passwd
— изменение пароля
С этой командой мы уже знакомы. Она обеспечивает изменение пароля пользователя, который ее запустил. Суперпользователь root имеет право изменить пароль любого пользователя:
# passwd имя_пользователя
21.3.8. Команда
uptime
— информация о работе системы
Команда uptime (рис. 21.1) выводит статистическую информацию о работе системы: сколько времени прошло с момента последней перезагрузки (собственно, это и есть время «uptime»), сколько пользователей в данный момент подключено к системе и среднюю загрузку системы за последние 1, 5 и 15 минут.
21.3.9. Команда
users
— информация о пользователях
Команда выводит информацию о пользователях, подключенных к системе в данный момент. Из рис. 21.2 видно, что пользователь denis подключился к системе двумя способами: вошел и в консоли, и в графическом режиме (или по FTP, ssh, telnet — способы подключения к системе могут быть разные).
21.3.10. Команды
w, who
и
whoami
— информация о пользователях
Эти три родственные команды выводят следующую информацию (рис. 21.3):
□ команда w — список пользователей, подключенных к системе; виртуальный терминал, с которого работает пользователь; время входа в систему для каждого пользователя, статистику использования системы (IDLE — время простоя, JCPU — использование процессора), выполняемые каждым пользователем задачи;
□ команда who — список пользователей, подключенных к системе; время и дату входа каждого пользователя;
□ команда whoami — имя пользователя, который ввел команду.
21.4. Команды для работы с текстом
21.4.1. Команда
diff
— сравнение файлов
Команда используется для сравнения двух файлов. Формат вызова программы diff:
diff параметры файл1 файл2
В выводе программы отличающиеся строки помечаются символами > и <:
□ строка из первого файла помечается символом <;
□ строка из второго файла — символом >.
Самые полезные параметры программы diff приведены в табл. 21.1.
21.4.2. Команда
grep
— текстовый фильтр
Предположим, что у нас есть файл протокола /var/log/messages, и вы хотите вывести все сообщения, связанные с демоном pppd. Понятно, что вручную выделить все нужные сообщения будет довольно трудно. Но с помощью grep можно автоматизировать данную задачу:
cat /var/log/messages | grep ppp
Команда cat /var/log/messages передаст содержимое файла /var/log/messages на стандартный ввод команды grep, которая, в свою очередь, выделит строки, содержащие строку ppp.
Совет
Вообще-то, просматривать журналы удобнее с помощью команды tac , которая выводит строки файла в обратном порядке — ведь сообщения дописываются в конец журнала, следовательно, если выводить строки в обратном порядке, то сначала получим самые новые сообщения, а потом уже все остальные:
tac /var/log/messages | grep ppp
21.4.3. Команды
more
и
less
— постраничный вывод
Большой текстовый файл намного удобнее просматривать с помощью команд less или more. Программа less удобнее, чем more, если она есть в вашей системе:
tac /var/log/messages | grep ppp | less
21.4.4. Команды
head
и
tail
— вывод начала и хвоста файла
Команда head выводит первые десять строк файла, а tail — последние десять. Количество строк может регулироваться с помощью параметра — n.
Пример использования:
head — n 10 /var/log/messages tail — n 15 /var/log/messages
21.4.5. Команда
wc
— подсчет слов в файле
Команда wc используется:
□ для подсчета слов в текстовом файле:
wc /var/log/messages
□ для подсчета количества строк (если задан параметр -1):
wc — l /var/log/messages
□ для подсчета количества символов (параметр — c):
wc — c /var/log/messages
21.5. Команды для работы с Интернетом
21.5.1. Команда
ftp
— стандартный FTP-клиент
Для открытия соединения с любым FTP-сервером введите команду:
ftp <имя или адрес FTP-сервера>
Можно просто ввести команду ftp, а в ответ на приглашение ftp> ввести команду:
open <имя или адрес FTP-сервера>
Лично мне больше нравится первый вариант, поскольку он позволяет сэкономить время. При подключении к серверу вы сможете ввести имя пользователя и пароль:
[den@dhsilabs ~] $ ftp
ftp> open ftp.narod.ru
Connected to ftp.narod.ru .
220 ftp.narod.ru (Libra FTP daemon 0.17 20050906)
500 Unrecognized command AUTH
Name (ftp.narod.ru: den): den
331 Password required
Password:
230 Logged in, proceed
Remote system type is UNIX.
ftp>
Подключившись к серверу, вы можете ввести команду help, чтобы просмотреть список доступных команд. Для получения справки по той или иной команде введите help <имя_команды> (рис. 21.4).
Наиболее популярные команды приведены в табл. 21.2.
Кроме команды ftp, в Linux есть и другие текстовые FTP-клиенты, например, NcFTP (), lukemftp (ftp://ftp.netbsd.org/pub/NetBSD/ misc/lukemftp/), lftp () и др. Все эти FTP-клиенты не входят в состав дистрибутивов, их нужно устанавливать самостоятельно. Но стоит ли это делать — решать вам. Ведь все они подобны стандартному клиенту ftp и обладают двумя-тремя дополнительными функциями, которые, возможно, вам и не понадобятся. Например, NcFTP умеет докачивать файлы, а lftp — загружать одновременно несколько файлов. В любом случае вы можете изучить документацию по тому или иному FTP-клиенту (ее легко найти в Интернете), а потом решить, стоит его использовать или нет.
21.5.2. Команда
lynx
— текстовый браузер
Если графический режим недоступен (например, на сервере), а по сети побродить хочется, командой lynx можно вызвать текстовый браузер lynx. В Ubuntu программа lynx не устанавливается по умолчанию. Для ее установки нужно ввести команду:
sudo apt-get install lynx
В некоторых дистрибутивах вместо lynx используются браузеры links и elinks, но суть остается та же — просмотр страниц Интернета в текстовом режиме.
21.5.3. Команда
mutt
— чтение почты и отправка сообщений
Программа, вызываемая командой mutt, — это текстовый клиент для чтения и отправки почты. В отличие от стандартной команды mail, программа mutt — это полноценный почтовый клиент, поддерживающий MIME-кодирование, протоколы POP и ESMTP, SASL-аутентификацию, то есть все, что поддерживают современные графические клиенты. Программу mutt удобно использовать на серверах без графического интерфейса или когда вы удаленно подключаетесь к своей системе по ssh.
21.6. Команды системного администратора
21.6.1. Команды
free
и
df
— информация о системных ресурсах
Команда free выводит информацию об использовании оперативной и виртуальной памяти, а df — об использовании дискового пространства.
Из рис. 21.5 видно, что в системе установлено всего 512 Мбайт ОЗУ, из них почти все занято. На жестком диске /dev/sda1 11 Гбайт дискового пространства, из них свободно — 7 Гбайт. По умолчанию df выводит информацию об использовании дискового пространства в байтах. Это несколько неудобно, поэтому рекомендуется использовать ключ — h (рис. 21.6).
21.6.2. Команда
md5sum
— вычисление контрольного кода MD5
Для проверки подлинности некоторых файлов, передаваемых через Интернет, используется алгоритм MD5 (точнее, контрольный код, вычисленный с использованием этого алгоритма). Разработчик программы выкладывает в Интернете пакет с этой программой и на своем сайте публикует контрольный код. Вы скачиваете пакет и вычисляете его контрольный код. Если коды отличаются, то файл при передаче был поврежден (или это другая версия пакета, которая, возможно, была подложена злоумышленником с целью ввода вражеского кода в вашу систему).
Использовать программу нужно так:
md5sum файл
Глава 22
Командный интерпретатор bash
22.1. Что нужно знать о bash
bash — это наиболее часто использующаяся командная оболочка (командный интерпретатор) Linux. Основное предназначение bash — выполнение команд, введенных пользователем. Пользователь вводит команду, bash ищет программу, соответствующую команде, в каталогах, указанных в переменной окружения PATH. Если такая программа найдена, то bash запускает ее и передает ей введенные пользователем параметры. В противном случае выводится сообщение о невозможности выполнения команды.
Кроме bash существуют и другие оболочки: sh, csh, ksh, zsh и пр. Все командные оболочки, установленные в системе, прописаны в файле /etc/shells. Список оболочек может быть довольно длинным. В листинге 22.1 представлен файл /etc/shells дистрибутива Ubuntu 10.04 (установка по умолчанию).
Листинг 22.1. Файл /etc/shells дистрибутива Ubuntu 10.04
# /etc/shells: valid login shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
С точки зрения пользователя, указанные оболочки мало чем отличаются. И все они позволяют выполнять введенные пользователем команды. Но оболочки используются не только для выполнения команд, а еще и для автоматизации задач с помощью сценариев. Так вот, все эти оболочки отличаются синтаксисом языка описания сценариев. В этой главе мы поговорим о создании bash-сценариев, поскольку оболочка bash самая популярная.
При запуске оболочка bash выполняет сценарий. bashrc, находящийся в домашнем каталоге пользователя. В этом файле можно указать команды, которые нужно выполнить сразу после входа пользователя в систему. Данный файл не обязателен и может отсутствовать.
В файле. bash_history (тоже находится в домашнем каталоге) хранится история команд, введенных пользователем. Так что вы можете просмотреть свои же команды, которые вы накануне вводили.
22.2. Автоматизация задач с помощью bash
Представим, что нам нужно выполнить резервное копирование всех важных файлов, для чего создать архивы каталогов /etc, /home и /usr. Понятно, что понадобятся три команды вида:
tar — cvjf имя_архива. tar.bz2 каталог
Затем требуется записать все эти три файла на DVD с помощью любой программы для прожига DVD.
Если выполнять данную операцию раз в месяц (или хотя бы раз в неделю), то особого труда это не составит. Но представьте, что вам нужно делать это каждый день или даже несколько раз в день? Думаю, такая рутинная работа вам быстро надоест. А ведь можно написать сценарий, который сам будет создавать резервные копии и записывать их на DVD! Все, что от вас потребуется, — это вставить чистый DVD перед запуском сценария.
Можно пойти и иным путем. Написать сценарий, который будет делать резервные копии системных каталогов и записывать их на другой раздел жесткого диска. Ведь не секрет, что резервные копии делаются не только на случай сбоя системы, но и для защиты от некорректного изменения данных пользователем. Помню, как-то я удалил важную тему форума и попросил своего хостинг-провайдера сделать откат. Я был приятно удивлен, когда мне предоставили на выбор три резервные копии — осталось лишь выбрать наиболее подходящую. Не думаете же вы, что администраторы провайдера только и занимались тем, что три раза в день копировали домашние каталоги пользователей? Поэтому автоматизация — штука полезная, и любому администратору нужно знать, как автоматизировать свою рутинную работу.
22.3. Привет, мир!
По традиции напишем первый сценарий, выводящий всем известную фразу: «Привет, мир!» (Hello world!). Вся работа со сценариями выполняется обычно в консоли (или в терминале), но для редактирования сценариев вы можете использовать любимый графический редактор, например, kedit (листинг 22.2).
Листинг 22.2. Первый сценарий
#!/bin/bash
echo "Привет, мир!"
Первая строка нашего сценария — это указание, что он должен быть обработан программой /bin/bash. Обратите внимание — если между # и ! окажется пробел, то данная директива не сработает, поскольку будет воспринята как обычный комментарий. Комментарии начинаются, как вы уже догадались, с решетки:
# Комментарий
Вторая строка — это оператор echo, выводящий нашу строку. Сохраните сценарий под именем hello и введите команду:
$ chmod +x hello
Для запуска сценария введите команду:
./hello
На экране вы увидите строку:
Привет, мир!
Чтобы вводить для запуска сценария просто hello (без ./), сценарий нужно скопировать в каталог /usr/bin (точнее, в любой каталог из переменной окружения PATH):
# cp./hello /usr/bin
22.4. Использование переменных в собственных сценариях
В любом серьезном сценарии вы не обойдетесь без использования переменных. Переменные можно объявлять в любом месте сценария, но до места их первого применения. Рекомендуется объявлять переменные в самом начале сценария, чтобы потом не искать, где вы объявили ту или иную переменную.
Для объявления переменной используется следующая конструкция:
переменная=значение
Пример объявления переменной:
ADDRESS= www.dkws.org.ua
echo $ADDRESS
Обратите внимание на следующие моменты:
□ при объявлении переменной знак доллара не ставится, но он обязателен при использовании переменной;
□ при объявлении переменной не должно быть пробелов до и после знака =.
Значение для переменной указывать вручную не обязательно — его можно прочитать с клавиатуры:
read ADDRESS
или со стандартного вывода программы:
ADDRESS='hostname'
Чтение значения переменной с клавиатуры осуществляется с помощью инструкции read. При этом указывать символ доллара не нужно. Вторая команда устанавливает в качестве значения переменной ADDRESS вывод команды hostname.
В Linux часто используются переменные окружения. Это специальные переменные, содержащие служебные данные. Вот примеры некоторых часто используемых переменных окружения:
□ HOME — домашний каталог пользователя, который запустил сценарий;
□ RANDOM — случайное число в диапазоне от 0 до 32 767;
□ UID — ID пользователя, который запустил сценарий;
□ PWD — текущий каталог.
Для установки собственной переменной окружения используется команда export:
# присваиваем переменной значение
$ADDRESS= www.dkws.org.ua
# экспортируем переменную — делаем ее переменной окружения
# после этого переменная ADDRESS будет доступна в других сценариях export $ADDRESS
22.5. Передача параметров сценарию
Очень часто сценариям нужно передавать различные параметры, например, режим работы или имя файла/каталога. Для передачи параметров используются следующие специальные переменные:
□ $0 — содержит имя сценария;
□ $n — содержит значение параметра (n — номер параметра);
□ $# — позволяет узнать количество параметров, которые были переданы.
Рассмотрим небольшой пример обработки параметров сценария. Я понимаю, что конструкцию case-esac мы еще не рассматривали, но общий принцип должен быть понятен (листинг 22.3).
Думаю, приведенных комментариев достаточно, поэтому подробно рассматривать работу сценария из листинга 22.2 не будем.
22.6. Массивы и bash
Интерпретатор bash позволяет использовать массивы. Массивы объявляются подобно переменным. Вот пример объявления массива:
ARRAY[0]=1
ARRAY[1]=2
echo $ARRAY[0]
22.7. Циклы
Как и в любом языке программирования, в bash можно использовать циклы. Мы рассмотрим циклы for и while, хотя вообще в bash доступны также циклы until и select, но они применяются довольно редко.
Синтаксис цикла for выглядит так:
for переменная in список do
команды
done
В цикле при каждой итерации переменной будет присвоен очередной элемент списка, над которым будут выполнены указанные команды. Чтобы было понятнее, рассмотрим небольшой пример:
for n in 1 2 3;
do
echo $n;
done
Обратите внимание — список значений и список команд должны заканчиваться точкой с запятой.
Как и следовало ожидать, наш сценарий выведет на экран следующее:
1
2
3
Синтаксис цикла while выглядит немного иначе:
while условие
do
команды
done
Цикл while выполняется до тех пор, пока истинно заданное условие. Подробно об условиях мы поговорим в следующем разделе, а сейчас напишем аналог предыдущего цикла, то есть нам нужно вывести 1, 2 и 3, но с помощью while, а не for:
n=1
while [$n — lt 4]
do
echo "$n"
n=$(($n+1));
done
22.8. Условные операторы
В bash доступны два условных оператора — if и case. Синтаксис оператора if следующий:
Оператор if в bash работает аналогично оператору if в других языках программирования. Если истинно первое условие, то выполняется первый список команд, иначе — проверяется второе условие и т. д. Количество блоков elif, понятно, не ограничено.
Самая ответственная задача — это правильно составить условие. Условия записываются в квадратных скобках. Вот пример записи условий:
# переменная N = 10
[N==10]
# переменная N не равна 10
[N!=10]
Операции сравнения указываются не с помощью привычных знаков > или <, а с помощью следующих выражений:
□ — lt — меньше;
□ — gt — больше;
□ — le — меньше или равно;
□ — ge — больше или равно;
□ — eq — равно (используется вместо ==).
Применять данные выражения нужно следующим образом:
[переменная выражение значение | переменная]
Например:
# N меньше 10
[$N — lt 10]
# N меньше A
[$N — lt $A]
В квадратных скобках вы также можете задать выражения для проверки существования файла и каталога:
□ — e файл — условие истинно, если файл существует;
□ — d каталог — условие истинно, если каталог существует;
□ — x файл — условие истинно, если файл является исполнимым.
С оператором case мы уже немного знакомы, но сейчас рассмотрим его синтаксис подробнее:
case переменная in
значение_1) команды_1;;
…
значение_^ команды_N;;
*) команды_по_умолчанию;;
esac
Значение указанной переменной по очереди сравнивается с приведенными значениями (значение_1…, значение_N). Если есть совпадение, то будут выполнены команды, соответствующие значению. Если совпадений нет, то будут выполнены команды по умолчанию. Пример использования case был приведен в листинге 22.3.
Глава 23
Восстановление системы после сбоя
23.1. Локализация причины сбоя
Всему есть своя причина — сбой не происходит сам по себе. Причиной может стать либо ошибка программного обеспечения, либо отказ «железа». Исходя из этого, различают программные и аппаратные сбои. Последние можно смело назвать аппаратно-программными, поскольку из-за отказа аппаратуры довольно часто происходят программные сбои. Самый простой пример — отказ винчестера, вследствие которого программа не может записать или прочитать данные, и происходит программный сбой. При некорректной работе оперативной памяти происходят порой сложнообъяснимые ошибки программного обеспечения.
23.2. Программный сбой
Прежде всего, нужно выяснить и по возможности устранить причину сбоя. Если это сугубо программный сбой, то причины две: неправильная настройка программы (или системы) и ошибка программы.
23.2.1. Неправильная настройка программы или системы
Как работала система до сбоя? Встречался ли подобный сбой раньше? Если ничего такого ранее вы не наблюдали и система работала как швейцарские часики, значит, скорее всего, причина в неправильной ее настройке. Вспомните, какие файлы конфигурации вы изменяли (или какие параметры устанавливали с помощью графических конфигураторов). Просто по памяти восстановите исходные значения и перезапустите сервис или службу, ставшую причиной сбоя, — возможно, проблема решится. Рекомендуется перед каким-либо изменением, вносимым в файл конфигурации системы, делать его резервную копию. Потом вам же будет проще восстановить исходные значения. Можно рекомендовать и другой подход — закомментировать прежние директивы/значения файла конфигурации, а новые писать под ними. В случае вашей ошибки вы всегда сможете восстановить исходные значения.
23.2.2. Ошибка программы. Журналы системы
Когда причина ошибки в ваших действиях — это самый простой случай. Иногда бывает так, что система работала-работала, а на следующий день половина служб не запускается. В чем же причина? Тут вам поможет только чтение журналов системы, находящихся в каталоге /var/log:
□ /apache2/ — журналы Web-сервера Apache2;
□ /apt/ — журналы системы установки пакетов APT;
□ /clamav/ — журналы антивируса ClamAV;
□ /cups/ — журналы системы печати;
□ /gdm/ — журналы менеджера дисплея;
□ /installer/ — журналы программы установки;
□ /news/ — журналы NNTP-сервера и NNTP-клиентов;
□ /proftpd/ — журналы FTP-сервера;
□ /samba/ — протоколы Samba;
□ auth.log — журналы аутентификации (кто и когда входил в систему);
□ daemon.log — журналы для разных демонов (служб);
□ dmesg — загрузочные сообщения ядра;
□ dpkg.log — журналы программы dpkg;
□ kern.log — журналы сообщений ядра;
□ mail* — журналы почтовой службы;
□ messages — различные сообщения ядра (и в некоторых случаях — обычных программ);
□ mysql.log — протокол MySQL-сервера;
□ secure — журнал службы безопасности;
□ syslog — журнал демона syslog;
□ Xorg.0.log — журнал системы XFree86 (дисплей 0);
□ user.log — различные сообщения программ пользовательского уровня.
Протоколирование сообщений системы и программ ранее выполнялось двумя демонами: klogd и syslogd. В современных дистрибутивах (Ubuntu — не исключение) используется всего один демон протоколирования — rsyslogd.
Имена файлов журналов могут немного отличаться от перечисленных здесь, поскольку они зависят от настроек системы, в том числе и от настроек демона rsyslogd. Кроме того, в системе могут создаваться дополнительные файлы протоколов или даже каталоги, содержащие файлы протоколов, — повторюсь, все зависит от настроек системы. Чтобы узнать, какие файлы протоколов имеются в вашей системе, какие из них являются основными и для чего используются, откройте и изучите файлы конфигурации rsyslogd: /etc/rsyslog.conf и /etc/rsyslog.d/50-default.conf.
Однако в файлах конфигурации демона rsyslogd перечислены далеко не все файлы протоколов. Многие серверы ведут свои журналы, имена файлов которых вы можете узнать в файлах конфигурации того или иного сервера. Так, сообщения различных программ пользовательского уровня, т. е. обычных программ, возможно, запущенных с привилегиями root, протоколируются в файле /var/log/user.log.
В каком же журнале искать ошибку? Тут нужно исходить из принципа взаимоисключения: если у вас не работает Web-сервер Apache, то искать причину нужно в каталоге /var/log/apache2/, но никак не в файле /var/log/user.log.
23.3. Аппаратный сбой
Причиной аппаратного сбоя, как мы знаем, может стать или полный отказ устройства, или частичный отказ одного из его модулей, что свидетельствует о необходимости замены всего устройства. При полном отказе устройства результат виден невооруженным взглядом. Наиболее часто отказывают жесткие диски и оптические приводы (поскольку в их конструкции есть движущиеся механические детали), на втором месте — оперативная память, далее — видеокарты и прочие карты расширения. Самыми надежными остаются процессор и материнская плата. Хотя все относительно и определяется качеством устройства, которое напрямую зависит от производителя «железа». Не секрет, что вероятность отказа у «чистокровных» компьютеров от Intel и HP намного меньше, чем у собранного в подвале неизвестной компьютерной фирмой из тайваньских комплектующих.
Примечание
Да, так я и думал до того, как у меня появился «чистокровный» HP 6735s, у которого спустя полгода после покупки отказал правый динамик. В сервис я его так и не отнес, потому что ноутбук нужен каждый день, но где же хваленое качество HP?
23.3.1. Отказы жесткого диска
Причина отказа жесткого диска кроется в ненадежной электронике или некачественном носителе (магнитных дисках, на которых, собственно, и хранится информация). На самом деле, что конкретно в винчестере вышло из строя, — не так важно, все равно придется покупать новый, ведь неисправные практически не поддаются ремонту, особенно в кустарных условиях. Иногда можно еще восстановить информацию, но это нужно делать в лабораториях, оснащенных специальным оборудованием. Фирм, занимающихся восстановлением информации с винчестеров, немного, а их услуги стоят довольно дорого, поэтому, чтобы не пришлось платить двойную плату (за новый жесткий диск и за восстановление информации со старого), периодически делайте резервные копии. Для этого просто записывайте важные для вас данные на CD или DVD, а еще лучше — на внешние винчестеры USB (последние пока дорогие, но они и наболее удобные). Потом резервные копии лучше всего хранить в безопасном месте, скажем, в сейфе, если он есть.
Жесткий диск может портиться постепенно. Как правило, предшественниками полного отказа становятся «битые» блоки, что проявляется блокированием записи или чтения данных. Если система не может прочитать информацию из такого сектора, вы увидите на консоли соответствующее сообщение. Если вы подозреваете, что причина именно в наличии «битых» секторов, проверьте ваш жесткий диск с помощью программы badblocks. Если ваши опасения подтвердились, немедленно сделайте резервную копию всех данных, которые еще можно прочитать с диска, поскольку сейчас ваш жесткий диск непредсказуем, — он может еще проработать с полгода или год, а может отказать уже завтра или даже через час. После этого купите новый жесткий диск (именно новый, а не другой б/у) и восстановите информацию с резервной копии, а старый винчестер постарайтесь продать, пока он еще работает.
23.3.2. Отказы памяти
При полном отказе оперативной памяти в процессе запуска системы (именно компьютера, а не Linux, поскольку до загрузки Linux дело не дойдет) вы услышите один длинный гудок системного динамика. Это сигнал о том, что пора менять модуль ОЗУ, но пока не спешите это делать сразу. Возможно, вы затронули модуль при разборке/сборке системного блока — вытащите его, протрите пыль, почистите контактные группы стирательной резинкой, стряхните катышки и установите обратно. Если это не поможет, попробуйте поставить модуль в другой слот. В случае окончательной неудачи у вас появится новый брелок (вы уже догадались какой). Если вы особо не разбираетесь в «железе», то, чтобы не ошибиться, выбирайте новый модуль «по образу и подобию» старого, прихватив его в магазин с собою.
Загрузившись с дистрибутивного диска Ubuntu, который прилагается к книге, вы можете вызвать программу memtest86 (рис. 23.1) для проверки модулей памяти компьютера — вдруг уже их пора менять?
Примечание
На рис. 23.1 имеются некоторые несоответствия — например, показано, что в тестируемой системе процессор AMD — и это при чипсете Intel 440 BX! Но не подумайте, что это «глюк» программы. Просто у меня memtest86 запущен в виртуальной машине VMware, поскольку без этого не сделать скриншот окна программы.
Пусть система пройдет тест памяти до конца (да, придется подождать). Но впоследствии это может сэкономить вам очень много времени. Помню, знакомые принесли мне ноутбук с предустановленной Vista (кстати, тоже HP) — после загрузки компьютер отображал «синий экран». Попытки восстановления системы результата не дали, и я попытался установить на эту машину RTM-версию Windows 7. Однако система устанавливаться никак не хотела — в процессе копирования файлов появлялось сообщение об ошибке, связанной с повреждением носителя дистрибутива. Но на других-то компьютерах система с этого диска устанавливалась нормально! С дистрибутивом Windows XP — ситуация аналогичная. Провозился я с этми ноутбуком целый день, но так ничего и не добился. На следующий день решил попробовать на нем Linux. LiveCD запустился без проблем. Начал копирование содержимого всего LiveCD на жесткий диск полностью — ошибка копирования. Стал уже подозревать неисправность привода DVD или даже жесткого диска… А потом запустил memtest. И обнаружил, что один модуль оперативной памяти оказался «битым». Так что, если бы я запустил memtest в самом начале и потратил пару часов на проверку памяти, не пришлось бы мне сносить «родную» Vista, а просто заменить модуль памяти.
23.3.3. Отказ видеокарты
При отказе видеокарты звуковой сигнал BIOS (фирмы AWARD) будет таким — один длинный и два коротких. Если у вас BIOS другой фирмы, то самое время прочитать о его звуковых сигналах в руководстве к материнской плате. Полный отказ видеокарты встречается редко и как правило из-за перегрева при «разгоне» видео, в чем виноват обычно сам пользователь.
В большинстве случаев причиной сбоя может быть неполный контакт видеоплаты со слотом шины AGP или PCI-Express (полагаю, что у вас уже давно не «просто» PCI-видео). Вытащите карту из разъема, почистите контакты и аккуратно установите обратно. То же самое нужно сделать со штекером монитора. Теперь включите компьютер. Все нормально? В противном случае вам придется покупать новую видеокарту.
23.3.4. Отказ материнской платы и процессора
Обычно отказ одного из этих компонентов влечет повреждение второго, но бывают исключения, поэтому нужно отнести компьютер в мастерскую для диагностики. Конечно, если у вас есть подобная материнская плата и такой же процессор, можете все проверить и сами. Хотя я бы на вашем месте так делать не стал — вдруг у вас неисправна материнская плата и из-за нее вышел из строя процессор? Тогда вы рискуете испортить еще один.
Причиной аппаратного отказа материнской платы и/или процессора может быть скачок напряжения или банальный перегрев, когда электроника не успела выключить питание компьютера.
Но в случае с материнской платой возможен и программный отказ — выход из строя BIOS. Тогда поможет перезапись BIOS с помощью программатора. Такая процедура стоит недорого, обратитесь в магазин, в котором вы покупали компьютер, — вам обязательно помогут. «Лечение» подобной неисправности гораздо дешевле, чем покупка новой материнской платы.
Замечание
В большинстве случаев отказа материнской платы и/или процессора система вообще не подает никаких звуковых сигналов — это верный признак подобной неисправности.
23.3.5. Диагностика аппаратного сбоя с помощью ядра
Если во время загрузки или работы Linux произошел серьезный аппаратный сбой (кроме сбоев видеоподсистемы), ядро «впадает в панику» (это режим работы ядра — режим паники, когда работа всей системы останавливается), а на дисплее вы увидите сообщение о вероятной причине сбоя.
Когда сбой некритичный, и работу можно продолжать, сообщение об ошибке также будет выведено на консоль и записано в журнал /var/log/messages. В некоторых дистрибутивах оно может быть записано в один из файлов в каталоге /var/log/kern.log (в зависимости от типа сообщения: предупреждение, ошибка и т. д.).
Во время загрузки сообщения ядра так быстро выводятся на экран, что не всегда успеваешь их просмотреть, однако это можно сделать и после загрузки командой:
# dmesg | less
А можно просто открыть в любом текстовом редакторе файл /var/log/dmesg и просмотреть его содержимое.
23.4. Режим восстановления
Режим восстановления позволяет получить права root без входа в систему. Просто выберите в меню GRUB2 (рис. 23.2) пункт:
Ubuntu, kernel 2.6.32-16-generic (режим восстановления)
Совет
Если вы вообще не видите меню загрузчика GRUB2, тогда вернитесь к главе 19, в которой описан процесс настройки этого загрузчика, который по умолчанию отказывается показывать меню.
Далее вы увидите меню режима восстановления (рис. 23.3).
Рассмотрим команды этого меню:
□ resume — продолжить нормальную загрузку. Эту команду следует выбрать, если вы ошибочно запустили режим восстановления;
Примечание
Любопытно, что вместо загрузки графического интерфейса (чего и следовало ожидать, судя по описанию команды) в результате ее выполнения загружается командная строка. Далее придется ввести имя пользователя, пароль, а затем — команду sudo reboot для перезагрузки системы.
□ clean — система попытается освободить свободное место. Эту команду следует выбрать, если Ubuntu отказывается запускаться из-за нехватки места на диске;
□ dpkg — «отремонтировать» «сломанные» пакеты;
□ grub — обновить загрузчик GRUB2;
□ netroot — командная строка root c поддержкой сети;
□ root — обычная командная строка root (без поддержки сети).
Если ваша неполадка не связана с отсутствием свободного места на диске, «сломанными» пакетами или настройками GRUB2, выбирайте команду root — вы получите root-доступ к системе. Что делать дальше? Все зависит от характера неисправности — можно, например, запустить программу fsck для проверки файловой системы или программу badblocks для проверки поверхности жесткого диска. Можно анализировать журналы системы и т. п.
23.5. Создание резервной копии с помощью программы remastersys
Для Windows существует множество инструментов, позволяющих создать образ диска. Использовать их очень легко. Сначала вы устанавливаете Windows, потом — все необходимые драйверы и приложения, а затем — создаете образ диска. Этот образ можно использовать или для клонирования системы (установки на компьютеры подобной конфигурации), или для восстановления системы, когда она в очередной раз «упадет». Причем восстановление занимает около 15 минут, а это намного меньше, чем новая установка Windows со всеми программами и драйверами.
Для Linux я нашел подобный инструмент — программу remastersys. Она позволяет создать образ вашей системы на LiveCD. Если потребуется переустановить Ubuntu, вы загрузитесь с этого диска и восстановите свою систему. И вам не придется ни настраивать ее, ни устанавливать заново пакеты. Вы также сможете без проблем использовать этот образ для установки системы на другие компьютеры, причем необязательно, чтобы конфигурация этих компьютеров совпадала с конфигурацией компьютера, на котором создавался образ.
Несомненно, программу оценят администраторы (им часто приходится устанавливать/переустанавливать систему), экспериментаторы (которые часто переустанавливают Ubuntu — а эксперименты требуют жертв) и пользователи медленных интернет-соединений (вы только представьте, что выкачивали сутки все необходимое программное обеспечение и еще сутки все настраивали, а через неделю система почему-то «рухнула» — придется все качать заново).
Установим программу. Для этого запустите текстовый редактор с правами root:
gksudo gedit /etc/apt/sources.list
Добавьте в конец файла следующую строку:
deb http://www.geekconnection.org/remastersys/repository karmic/
Сохраните файл и введите команды:
sudo apt-get update
sudo apt-get install remastersys
На рис. 23.4 изображен процесс выполнения команды apt-get update, а на рис. 23.5 — команды apt-get install remastersys.
Понимаю, что вас смущает название каталога в репозитории — karmic, что соответствует версии Ubuntu 9.10. Действительно, на момент написания этих строк на сервере еще не было каталога lucid (хотя Ubuntu 10.04 уже вышла). Надеюсь, скоро такой каталог появится, и тогда вместо karmic в строке обращения к репозиторию нужно будет указать lucid. Впрочем, при установке пакета remastersys производится разрешение зависимостей из источника пакетов для lucid, поэтому программа будет работать без проблем.
Запустите remastersys командой Система | Администрирование | Remastersys Backup. Программа предложит вам закрыть все окна и размонтировать все общие сетевые ресурсы (рис. 23.6) — во время резервного копирования программе ничего не должно мешать.
Далее вы увидите меню программы (рис. 23.7):
□ Backup — полная резервная копия вместе с пользовательскими данными (оптимальный вариант для резервного копирования);
□ Dist — создание дистрибутива. Удобно, если вы хотите поделиться настроенной системой с друзьями. При этом в образ не будут помещены ваши пользовательские данные;
□ Distcdfs, Distiso — создают «полуфабрикаты». Если вы не разработчик собственного дистрибутива, эти команды вам ни к чему;
□ Modify — изменяет параметры remastersys;
□ Clean — удаляет временные файлы. Каждый раз после выполнения команд Dist или Backup выполняйте команду Clean, чтобы очистить место на диске. Только не забудьте перед этим скопировать куда-то полученный ISO-файл (он будет находиться в каталоге /home/remastersys), иначе он будет удален вместе с временными файлами;
□ Info — информация о программе;
□ Quit — выход.
Выберите команду Modify и нажмите OK.
В открывшемся окне (рис. 23.8) вы сможете изменить параметры программы remastersys:
□ Username — имя пользователя LiveCD. Можно не изменять, а можно подставить свое имя;
□ Title — метка для LiveCD;
□ Filename — имя файла образа LiveCD;
□ Working Directory — рабочий каталог. По возможности не изменяйте его;
□ Files to Exclude — список файлов, которые не нужно помещать в LiveCD. Например, вашу коллекцию видеофильмов, которые занимают несколько гигабайтов;
□ URL for USB Creator — здесь можете указать адрес вашего сайта.
Установив параметры, вернитесь в главное меню программы (командой Go back to main menu), выберите команду Backup или Dist и нажмите OK. Процесс создания LiveCD довольно долог (все зависит от размера файловой системы) и его нельзя прерывать. Помните, что максимальный размер образа, который может создать remastersys — 4 Гбайт. Поэтому если ваша файловая система содержит большие файлы (например, фильмы, музыку), то их нужно перенести на другой раздел жесткого диска (после этого не забудьте размонтировать этот раздел) или указать их список в параметре Files to Exclude.
По окончании процесса создания образа в каталоге /home/remastersys будет создан файл custom.iso (если вы предварительно не изменили его имени). Осталось записать его на «болванку» (см. главу 12). Перед записью убедитесь, что размер образа соответствует типу используемой «болванки», — нередко образ превышает 700 Мбайт, и в этом случае для его записи следует использовать DVD, а не CD.
Глава 24
Различные проблемы и их устранение
24.1. Проблемы с загрузкой системы
Проблемы с загрузкой системы могут быть связаны либо с неправильной конфигурацией загрузчика GRUB2, либо с самим ядром системы, когда при загрузке ядро зависает и/или переходит в режим паники.
Если после редактирования конфигурационного файла grub.cfg (одним из двух способов, рассмотренных в главе 19) система больше не загружается, загрузитесь с LiveCD и подмонтируйте раздел жесткого диска, который используется в качестве корневой файловой системы Ubuntu. Затем откройте файл boot/grub/grub.cfg (на жестком диске, а не в файловой системе LiveCD) и исправьте ошибку в конфигурации (вы же помните, что редактировали?).
Проблемы с загрузкой ядра (когда загрузчик работает нормально, передает управление ядру, а оно зависает) решаются передачей ядру соответствующих параметров. В главе 19 были описаны основные параметры ядра, а также способ их редактирования с помощью GRUB2.
24.2. Проблемы с сетью
24.2.1. Сеть не работает
Причиной отказа сети могут быть физическими или программными. Физические связаны с неработающим сетевым оборудованием или повреждением среды передачи данных. Программные — с неправильной настройкой сетевого интерфейса. Как правило, избавиться от программных проблем помогает конфигуратор сети — вы его еще раз запускаете и правильно настраиваете сетевые интерфейсы. Если вы сомневаетесь в своих действиях, обратитесь за помощью к более опытному коллеге.
Для диагностики работы сети мы используем стандартные сетевые утилиты, которые входят в состав любого дистрибутива Linux. Предположим, что у нас не работает PPPoE/DSL-соединение. Проверить, «поднят» ли сетевой интерфейс, можно с помощью команды ifconfig. Итак, сначала мы предприняли попытку установить соединение командой sudo pon dsl-provider, а затем вызвали ifconfig, чтобы понять, установилось ли соединение (рис. 24.1).
Присутствие интерфейса ppp0 в списке вывода команды ifconfig указывает на то, что соединение установлено. Интерфейс eth0 относится к первой сетевой плате (вторая называется eth1, третья — eth2 и т. д), а интерфейс lo — это интерфейс обратной петли, который используется для тестирования программного обеспечения (у вас он всегда будет «поднят»).
Если же интерфейс ppp0 в списке вывода отсутствует (не «поднят»), следует просмотреть файл /var/log/messages сразу после попытки установки сообщения:
tail — n 10 /var/log/messages
Эта команда просматривает «хвост» файла протокола (выводит последние 10 сообщений). В случае удачной установки соединения сообщения в файле протокола будут примерно следующими:
Feb 6 14:28:33 user-desktop pppd[5176]: Plugin rp-pppoe.so loaded.
Feb 6 14:28:33 user-desktop kernel: [17179852.932000] CSLIP: code copyright 198
9 Regents of the University of California
Feb 6 14:28:33 user-desktop kernel: [17179852.944000] PPP generic driver versio n 2.4.2
Feb 6 14:28:33 user-desktop pppd[5183]: pppd 2.4.4b1 started by root, uid 0
Feb 6 14:28:33 user-desktop pppd[5183]: PPP session is 2838
Feb 6 14:28:33 user-desktop kernel: [17179852.984000] NET: Registered protocol family 24
Feb 6 14:28:33 user-desktop pppd[5183]: Using interface ppp0
Feb 6 14:28:33 user-desktop pppd[5183]: Connect: ppp0 <-> eth0
Feb 6 14:28:33 user-desktop pppd[5183]: Remote message: Login ok
Feb 6 14:28:33 user-desktop pppd[5183]: PAP authentication succeeded
Feb 6 14:28:33 user-desktop pppd[5183]: peer from calling number 00:15:F2:60:28:97 authorized
Feb 6 14:28:33 user-desktop pppd[5183]: local IP address 193.254.218.243
Feb 6 14:28:33 user-desktop pppd[5183]: remote IP address 193.254.218.129
Feb 6 14:28:33 user-desktop pppd[5183]: primary DNS address 193.254.218.1
Feb 6 14:28:33 user-desktop pppd[5183]: secondary DNS address 193.254.218.27
Первая строчка — сообщение о том, что загружен модуль поддержки PPPoE. Следующие два сообщения информируют нас о поддержке нашим компьютером протоколов CSLIP и PPP. Затем сообщается, что демон pppd запущен, от чьего имени он запущен (root) и приводится версия самого pppd. Далее сообщается имя используемого интерфейса (ppp0) и имя вспомогательного интерфейса (помните, что протокол PPPoE подразумевает передачу кадров PPP по Ethernet) — eth0. Следующие два сообщения свидетельствуют об удачной регистрации:
Feb 6 14:28:33 user-desktop pppd[5183]: Remote message: Login ok
Feb 6 14:28:33 user-desktop pppd[5183]: PAP authentication succeeded
Затем система сообщает нам наш IP-адрес, адрес удаленного компьютера, который произвел аутентификацию, а также IP-адреса серверов DNS.
А вот пример неудачной попытки соединения:
Feb 6 09:23:48 user-desktop pppd[6667]: PPP session is 2336
Feb 6 09:23:48 user-desktop pppd[6667]: Using interface ppp1
Feb 6 09:23:48 user-desktop pppd[6667]: Connect: ppp1 <-> eth0
Feb 6 09:23:48 user-desktop pppd[6667]: Remote message: Login incorrect
Feb 6 09:23:48 user-desktop pppd[6667]: Connection terminated.
Причина неудачи понятна — имя пользователя или пароль не приняты, о чем красноречиво свидетельствует сообщение Login incorrect. Чтобы изменить имя пользователя или пароль, можно запустить конфигуратор pppoeconf, однако не стоит с этим спешить — если в предыдущий раз соединение было установлено, и настройки соединения вы не изменяли, возможно, следует обратиться к провайдеру — это явный признак неправильной работы оборудования на его стороне.
Вот еще один пример неправильной работы оборудования провайдера, характерный для PPPoE:
Feb 6 09:23:48 user-desktop pppd[6667]: PPP session is 2336
Feb 6 09:23:48 user-desktop pppd[6667]: Using interface ppp1
Feb 6 09:23:48 user-desktop pppd[6667]: Connect: ppp1 <—> eth0
Feb 6 09:23:48 user-desktop pppd[6667]: Connection terminated.
Возможно, нужно перезагрузить точку доступа (access point), т. е. просто выключить и включить ее. Если это не поможет, обращайтесь к провайдеру.
Наиболее простая ситуация — когда сеть вообще не работает. В этом случае очень легко обнаружить причину неисправности. Если работает устройство, значит, повреждена среда передачи данных (сетевой кабель) — проверьте, нет ли обрыва модемной линии. В случае с витой парой обрыв маловероятен (хотя возможен), поэтому проверьте правильность обжатия кабеля (возможно, придется обжать витую пару заново).
Намного сложнее ситуация, когда сеть то работает, то нет. Например, вы не можете получить доступ к какому-либо узлу, хотя пять минут назад все работало отлично. Если исключить неправильную работу удаленного узла, к которому вы подключаетесь, следует поискать решение в маршруте, по которому пакеты добираются от вашего компьютера до удаленного узла. Сначала пропингуйте удаленный узел командой ping (прервать выполнение команды ping можно с помощью нажатия комбинации клавиш
ping dkws.org.ua
PING dkws.org.ua (213.186.114.75) 56(84) bytes of data.
64 bytes from wdt.org.ru (213.186.114.75): icmp_seq=1 ttl=58 time=30.7 ms
64 bytes from wdt.org.ru (213.186.114.75): icmp_seq=2 ttl=58 time=24.8 ms
64 bytes from wdt.org.ru (213.186.114.75): icmp_seq=5 ttl=58 time=12.2 ms
64 bytes from wdt.org.ru (213.186.114.75): icmp_seq=6 ttl=58 time=159 ms
64 bytes from wdt.org.ru (213.186.114.75): icmp_seq=7 ttl=58 time=19.3 ms
64 bytes from wdt.org.ru (213.186.114.75): icmp_seq=9 ttl=58 time=29.0 ms
…
В этом случае все нормально. Но иногда ответы от удаленного сервера то приходят, то нет. Чтобы узнать, в чем причина (где именно теряются пакеты), нужно выполнить трассировку узла (рис. 24.2):
tracepath dkws.org.ua
Сразу видно, что имеются определенные проблемы с прохождением пакетов до удаленного узла — по пути пакеты теряются. В данном случае пакеты доходят до маршрутизатора dc-m7i-1-ge.interfaces.dc.utel.ua, а после него движение пакетов прекращается. Чтобы выяснить причину, надо обратиться к администратору того маршрутизатора, который не пропускает пакеты, — причина именно в нем.
Примечание
В других дистрибутивах вместо команды tracepath используется команда traceroute , а в Windows — tracert .
24.2.2. Не открываются страницы
Если соединение установлено (о чем свидетельствует наличие «поднятого» интерфейса в выводе ifconfig), а Web-страницы не открываются, попробуйте пропинговать любой удаленный узел по IP-адресу. Если не знаете, какой узел пинговать (т. е. не помните ни одного IP-адреса), пропингуйте узел 213.186.114.75. Если вы получите ответ, а при вводе символьного имени странички по-прежнему открываться не будут, значит, у вас проблемы с DNS: сервер провайдера почему-то не передал вашему компьютеру IP-адреса DNS-серверов. Позвоните провайдеру, выясните причину, а еще лучше уточните IP-адреса серверов DNS и укажите их в файле /etc/resolv.conf (всего можно указать до четырех серверов DNS).
Формат этого файла прост:
nameserver IP-адрес
Например:
nameserver 193.254.218.1
nameserver 193.254.218.27
Если же не открывается какая-то конкретная страничка, а все остальные работают нормально, тогда причина в самом удаленном сервере, а не в ваших настройках.
24.2.3. Долго конфигурируются сетевые интерфейсы
При загрузке появляется надпись: Configuring network interfaces, но после этого загрузка как бы «зависает» — вы можете созерцать данную надпись довольно долго. Что же делать? Во-первых, прервите загрузку сетевых интерфейсов, нажав комбинацию клавиш
24.3. Проблемы с синхронизацией времени
Если на вашем компьютере неправильно отображается время/дата (по Гринвичу), откройте файл /etc/default/rcS, найдите в нем строку:
UTC = yes
и исправьте значение параметра UTC на no:
UTC = no
После этого сохраните файл, установите правильную дату/время (Система | Администрирование | Дата и время) и выполните команду:
sudo /etc/init.d/hwclock.sh restart
24.4. Проблемы с установкой программ
Вы не можете установить программу? Сначала убедитесь, что вы пытаетесь установить именно DEB-пакет, а не RPM-пакет. Если вы пытаетесь установить DEB-пакет, сгенерированный из RPM-пакета, но у вас ничего не выходит, можете дальше и не пытаться — вероятность успешной установки весьма мала.
Возможно, просто не удовлетворены зависимости. Поэтому рекомендуется для установки программ использовать менеджер пакетов Synaptic или программу apt-get, поскольку они загружают все необходимые дополнительные пакеты, т. е. разрешают зависимости пакетов. Если вы используете команду dpkg, то разрешение зависимостей не происходит, и вам следует самостоятельно установить все необходимые пакеты, а уже после установить нужный пакет. Это не очень удобно, поэтому используйте лучше Synaptic.
24.5. Проблемы со звуком HDA-Intel
В большинстве случаев у вас не будет проблем со звуком, однако у ряда ноутбуков (некоторые модели Acer и Toshiba) возможны определенные проблемы с ALSA. Вполне вероятно, что подобные проблемы будут и у других ноутбуков или стационарных компьютеров (я не тестировал все возможные аппаратные конфигурации).
Первым делом перенастроим ALSA. Для этого откройте терминал и введите следующие команды:
sudo apt-get install module-assistant
sudo m-a update
sudo m-a prepare
sudo m-a a-i alsa
sudo alsa force-unload
sudo depmod — ae
sudo modprobe snd-hda-intel
Затем откройте файл /etc/modules. Добавьте в него строку:
snd-hda-intel
После этого откройте файл /etc/modprobe.d/alsa-base и добавьте в него строку:
options snd-hda-intel model=модель
Параметр model может принимать значения:
□ auto — автоматическое определение модели;
□ acer — если у вас ноутбук Acer;
□ asus — ноутбук ASUS;
□ uniwill-m31 — ноутбук ASUS F3J;
□ dell — ноутбук Dell;
□ ref — ноутбук Dell Dimension 9150;
□ fujitsu — ноутбук Fujitsu;
□ hp — ноутбук HP;
□ laptop-eapd — ноутбук Lenovo;
□ lg — ноутбук LG;
□ toshiba — ноутбук Toshiba;
□ 3stack — ноутбук Toshiba Tecra A8-103 (кроме параметра model нужно еще задать параметр probe_mask=8).
Если вариант auto не сработает, попробуйте уточнить модель. После перезагрузки вы услышите звук. Если звук не будет чистым (с шумами), откройте файл /etc/modprobe.d/blacklist и добавьте в него строку:
blacklist snd_pcsp
После этого проблем со звуком быть не должно.
Тем не менее, у некоторых моделей бывают проблемы со звуком после пробуждения компьютера из режима сна. Как вылечить это, я пока не знаю.
Глава 25
Безопасность в Ubuntu
25.1. Безопасная работа в Ubuntu
Вспомните главу 2, когда мы очень легко получили права root, используя загрузочный LiveCD. Точно так же доступ к вашей системе может получить и злоумышленник. Алгоритм прост: загружается с LiveCD, получает права root, делает все, что хочет, с файлами на жестком диске — ведь у него есть права root. Даже если у злоумышленника нет LiveCD Ubuntu, он может использовать любой другой LiveCD или просто установить другую операционную систему.
Чтобы избежать подобной ситуации, следует:
□ сделать жесткий диск первым загрузочным устройством в BIOS;
□ установить пароль на доступ к BIOS;
□ можно также установить пароль и на загрузку компьютера, но это не очень удобно — при каждой перезагрузке нужно будет вводить пароль.
Правда, и эти меры не являются панацеей — при желании можно просто вытащить на минуту батарейку BIOS или использовать специальный джампер для сброса настроек (так будет быстрее), и все параметры вместе с вашими паролями будут сброшены. Теперь можно делать с компьютером все, что угодно. Надеюсь, что до этого не дойдет. Но и вы сами должны принять некоторые меры по обеспечению безопасности своего компьютера. Он должен располагаться в безопасном месте, желательно также, чтобы он вовсе не оставался без присмотра. Иначе злоумышленник может даже не извлекать батарейку BIOS, а сразу вытащить жесткий диск и взять оттуда все, что ему нужно.
Теперь поговорим о паролях. Ранее для шифровки паролей использовались алгоритмы DES или его развитие 3DES, которые легко можно было расшифровать. В современных дистрибутивах, а наш Ubuntu таким и является, пароли пользователей шифруются с помощью алгоритма MD5 — его расшифровать вообще невозможно. Правильность пароля определяется так: пароль шифруется и полученный шифр сравнивается с уже имеющимся. Если они совпадают, значит, пароль правильный. Видите, как система заботится о наших данных? Но заботимся ли мы о них? Если вы назначили пароль типа 123456, то можно сказать, что вы совсем не помогаете системе обеспечивать безопасность своих данных. Такой пароль подбирается за пару минут с помощью обычного перебора («brute force attacks»).
Как осуществляется подбор? Предположим, что у нас есть пароль из трех цифр, и мы знаем, что эти цифры не превышают 3. Тогда мы получим 3! (три факториал — если кто-то забыл школьный курс математики) возможных комбинаций, а именно: 123, 132, 213, 231, 312, 321, то есть шесть. Если предположить, что можно использовать цифры от 0 до 9, а длина пароля не превышает 9 символов, тогда вариантов будет уже 362 880. Про буквы и специальные символы говорить вообще не хочется.
Отсюда вывод: чем сложнее ваш пароль: длиннее, содержит цифры, специальные символы, разный регистр букв — тем сложнее его подобрать.
Каким должен быть идеальный пароль?
□ минимальная длина пароля — 8 символов;
□ пароль должен содержать символы разного регистра, например, PasSWorD;
□ кроме символов желательно, чтобы пароль содержал цифры, например, 5PasSWorD6;
□ пароль должен содержать специальные символы, например, знак подчеркивания (5PasS_WorD6);
□ пароль должен быть сложным для подбора и легким для запоминания, чтобы вы его не записали где-нибудь, где его могут прочитать.
Отсюда следует, что пароль 5PasS_WorD6 — практически идеальный. Цифры 5 и 6 легко запоминаются — они следуют по порядку: 5 — в начале, 6 — в конце. Специальный символ разделяет две значимые части слова — тоже легко запомнить его местонахождение. А вот регистр символов придется запомнить… Можно, конечно, немного упростить задачу, например, изменив пароль до 5PASS_word6. Так пароль тоже будет идеально легок для запоминания и труден для подбора.
Повседневные операции следует выполнять от имени обычного пользователя. Если нужно выполнить административное действие, используйте команду sudo, а не входите под именем root. Пусть учетная запись root будет вообще отключена. Так безопаснее.
Кроме этого выполните следующие действия:
□ запретите изменять меню GRUB во время загрузки (см. разд. 25.2) — ведь злоумышленник может изменить параметры ядра и получить права root;
□ отключите ведение истории команд в консоли (см. разд. 25.3) — чтобы никто не смог просмотреть введенные вами команды;
□ отключите использование комбинации клавиш в консоли (см. разд. 25.4) — чтобы никто не смог перезагрузить компьютер без вашего ведома;
□ установите антивирус (см. разд. 25.5) — хотя вирусы в Linux являются довольно редким явлением, но безопасность лишней не бывает.
25.2. Настройка загрузчика GRUB2
Как уже отмечалось, начиная с версии 9.10, в Ubuntu используется загрузчик GRUB2 вместо обычного GRUB. По сравнению с GRUB, новый загрузчик одновременно и проще в обращении, и сложнее в настройке. Настраивать GRUB2 придется реже, но к его сложной настройке надо будет привыкать, — практически все современные дистрибутивы перешли на GRUB2.
В GRUB можно было задать общий пароль для всех загрузочных меток, а также установить пароль только на некоторые загрузочные метки. В GRUB2 можно сделать то же самое, но, кроме самого пароля, понадобится указать еще и имя пользователя, что усложняет злоумышленнику взлом системы, поскольку ему нужно будет знать не только пароль, но и имя пользователя. Защита отдельных загрузочных меток, как правило, используется редко, чаще устанавливается пароль на все метки сразу, что и будет продемонстрировано в этой главе.
Сначала установим простой (незашифрованный) пароль, а затем зашифруем его, чтобы никто не смог его прочитать, загрузившись с LiveCD. Прежде всего откройте файл /etc/grub.d/00_header:
sudo nano /etc/grub.d/00_header
В конец файла добавьте строки:
cat << EOF
set superusers="den"
password den 1234
EOF
Здесь имя пользователя den, пароль — 1234.
Теперь обновите GRUB2:
sudo update-grub
Можно также напрямую редактировать файл конфигурации GRUB2 — grub.cfg. В него следует добавить вот такие строки:
set superusers="user1"
password userl passwordl
password user2 password2
Обратите внимание, что командами password заданы два пользователя: user1 и user2 с паролями password1 и password2 соответственно. Но пользователь user1 является суперпользователем, то есть может редактировать загрузочные метки GRUB2, а обычный пользователь (user2) может только загружать метки. Таким образом, у пользователя user1 получится передать ядру новые параметры, а пользователь user2 сможет только загрузить Linux с параметрами по умолчанию.
Можно даже задать условие, что метку Windows будет загружать только пользователь user2:
menuentry "Windows" — users user2 {
set root=(hd0,2)
chainloader +1
}
Теперь разберемся с шифрованием пароля. Команда password поддерживает только незашифрованные пароли. Если вы хотите использовать зашифрованные пароли, то нужно применить команду password_pbkdf2. Например:
password_pbkdf2 den зашифрованный_пароль
Получить зашифрованный пароль можно командой:
grub-mkpasswd-pbkdf2
После программа запросит у вас пароль и сообщит его хэш:
Your PBKDF2 is grub.pbkdf2.зашифрованный_пароль
Пример пароля:
grub.pbkdf2.sha512.10000.9290F727ED06C38BA4549EF7DE25CF5642659211B7FC076F 2D28FEFD71784BB8D8F6FB244A8CC5C06240631B97008565A120764C0EE9C2CB0073994D7 9080136.887CFF169EA8335235D8004242AA7D6187A41E3187DF0CE14E256D85ED97A9735 7AAA8FF0A3871AB9EEFF458392F462F495487387F685B7472FC6C29E293F0A0
Весь этот хэш нужно скопировать в конфигурационный файл GRUB2:
password_pbkdf2 den
grub.pbkdf2.sha512.10000.9290F727ED06C38BA4549EF7DE25CF5642659211B7FC076F 2D28FEFD71784BB8D8F6FB244A8CC5C06240631B97008565A120764C0EE9C2CB0073994D7 9080136.887CFF169EA8335235D8004242AA7D6187A41E3187DF0CE14E256D85ED97A9735 7AAA8FF0A3871AB9EEFF458392F462F495487387F685B7472FC6C29E293F0A0
Если вы не использовали файл 00_header, а редактировали непосредственно файл grub.cfg, то команду update-grub вводить не нужно!
Дополнительную информацию вы сможете получить по адресам: и .
25.3. Отключение истории команд
Отключить ведение истории команд очень просто. Для этого введите три команды:
rm — f $HOME/.bash_history
touch $HOME/.bash_history
chmod 000 $HOME/.bash_history
После этого никто не сможет просмотреть, какие команды вы вводили.
25.4. Отключение комбинации клавиш <Ctrl>+<Alt>+<Del>
Предположим, у вас есть сервер. К нему подошел «хакер». Он прекрасно знает, что проникнуть в ваш безопасный сервер он не сможет. Там и пароли сложные, и пароль на BIOS стоит. В общем, не пробраться. Как же вывести сервер из строя? Можно, конечно стукнуть по нему молотком, но факт физического повреждения будет налицо, поэтому данный вариант не проходит. Вариант с отключением питания (или источника бесперебойного питания) отпадает по той же причине — уж больно он явный.
Что же остается? Нажать комбинацию клавиш . Сервер перезагрузится, а поскольку установлен пароль на загрузку, то загрузиться он не сможет, пока вы не введете этот пароль. А вас может не быть на месте, вы можете быть вообще в другом городе. Тогда вам придется кому-то сообщить пароль, чтобы он его ввел. Но это небезопасно — вдруг он в сговоре с «хакером»? Поэтому намного эффективнее отключить комбинацию клавиш и кнопку Reset. Кнопку Reset можно отключить физически (для этого понадобится разобрать корпус) или программно (в некоторых BIOS есть функция, позволяющая отключить кнопку Reset).
Для отключения комбинации клавиш откройте файл /etc/event.d/control-alt-delete:
sudo nano /etc/event.d/control-alt-delete
Найдите и закомментируйте строку:
exec /sbin/shutdown — r now "Control-Alt-Delete pressed"
Строка после редактирования должна выглядеть так:
#exec /sbin/shutdown — r now "Control-Alt-Delete pressed"
Сохраните файл.
25.5. Антивирус ClamAV
25.5.1. Вирусы и Linux
Linux считается одной из самых безопасных операционных систем. Она устойчива, ее сетевые сервисы надежны и… для Linux существует очень мало вирусов. Почему? Давайте подумаем. Представим на некоторое время, что мы — вирусописатели. Для какой операционной системы вы бы написали вирус? Для той, в которой работает на данный момент большинство компьютеров и которая более доступна в плане внедрения вируса? Или для той, которая не так популярна, как первая, и в несколько раз неприступнее? Думаю, вы бы выбрали первый вариант. Вот такой вариант как раз и есть — это Windows. Начнем с того, что для DOS было написано очень много вирусов, и все они по наследству перешли в Windows. Но система Windows несла в себе не только новые функции, но и новые ошибки, каждая из которых порождала новую волну вирусов. Не успевали в Microsoft закрыть одну «дыру», как появлялась следующая. Чего только стоит дырявый Internet Explorer, через который буквально за 10–15 минут в Интернете может проникнуть в систему целая армия троянов, сетевых червей и прочей нечисти. Windows, с ее передовыми, но и непроверенными технологиями, — отличная цель для вирусописателей. Ведь вирусописатели, в какой-то степени, творческие люди. И им интересно, чтобы их «творение» развивалось. А в Linux развитие вируса пресекает сама операционная система. Предположим, что Linux-пользователь скачал какой-то вирус для Linux. И даже запустил его. Максимум, что может сделать вирус, — это повредить файлы в домашнем каталоге пользователя. Ведь для всего остального у него не хватит полномочий. А если вирус запустит пользователь root? Да, в этом случае он сможет нанести ущерб системе. Но, скажем так, это единичный случай. Все грамотные Linux-пользователи никогда не запускают ничего подозрительного под пользователем root и вообще ежедневную работу выполняют под обычным пользователем, а под пользователем root осуществляют только системно-важные операции, просмотр же WWW к ним, как мы знаем, не относится. Да и Linux-браузеры не содержат такого огромного количества «дыр», как IE.
Если вирусов под Linux нет, спрашивается: зачем же тогда нужен антивирус? Да как раз для обеспечения безопасности Windows-машин. Большинство антивирусов для Linux предназначены для установки на шлюзах — машинах, которые предоставляют локальным сетям доступ к Интернету. Установив антивирус на шлюзе, вы сможете контролировать трафик, проходящий через шлюз. Таким образом, вы защитите Windows-машины от проникновения вируса. Охрану ставят на входе, не так ли? Конечно, антивирус на шлюзе — это не панацея. Не нужно рассчитывать, что он на все 100 % обезопасит вашу сеть. Желательно, чтобы на каждой Windows-машине был установлен отдельный антивирус, работающий в режиме монитора.
Настройка шлюза выходит за рамки этой книги, но установку и использование антивируса мы рассмотрим.
25.5.2. Установка и использование антивируса ClamAV
ClamAV, в отличие от многих своих коммерческих собратьев, является полностью бесплатным антивирусом. Это значит, что вы можете его абсолютно бесплатно скачать, установить на любое количество машин и использовать. Обновления тоже бесплатны.
Для установки ClamAV введите команду:
sudo apt-get install clamav
После установки нужно сразу обновить антивирусные базы:
sudo freshclam
Для проверки всей файловой системы следует выполнить команду:
sudo clamscan — r /
Если нужно проверить отдельный каталог, тогда укажите его имя:
sudo clamscan — r <каталог>
Можно также установить графическую оболочку для антивируса — пакет clamtk. Запустить программу можно командой меню Приложения | Стандартные | Проверка на вирусы.
Глава 26
Сервер для PHP-программиста на базе Ubuntu
26.1. Зачем нужен Web-сервер в домашней сети?
Некоторым Linux-пользователям Ubuntu не нравится: уж больно она проста. Но простота не означает примитивность, что мы и докажем в этой главе, превратив обычную рабочую станцию в сервер сети — настроим Web-сервер с поддержкой PHP, FTP-сервер и сервер баз данных MySQL. В общем, все, что нужно PHP-программисту для разработки Web-приложений.
Будь у нас корпоративная сеть, использование Web-сервера было бы оправданно — ведь на внутреннем Web-сервере может храниться внутренняя информация для сотрудников компании, а на внешнем — информация о компании и ее продукции для потенциальных клиентов компании.
В домашней сети Web-сервер нужен для «себя любимого». Попытаться настроить, попробовать, как работает. Можно использовать его и как экспериментальную площадку.
Примечание
Если же экспериментировать вам не хочется, равно как и изучать PHP, тогда лучше вообще не читайте эту главу, особенно, если вы постоянно подключены к Интернету — зачем вам целый набор лишних служб, за которыми вы не будете присматривать?
26.2. Web-сервер
26.2.1. Установка Apache и PHP
Запустите менеджер Synaptic. В поле Быстрый поиск введите apache. Щелкните правой кнопкой мыши на пакете apache2 и выберите команду Отметить для установки. Менеджер пакетов сообщит вам, что нужно установить дополнительные пакеты (рис. 26.1). Нажмите кнопку Применить.
Чтобы сразу «убить двух зайцев», отметьте для установки и пакет php5. Он устанавливает PHP 5 и добавляет его поддержку в Apache. Опять менеджер предложит установить дополнительные пакеты, но для PHP (рис. 26.2).
Теперь нажмите кнопку Применить на панели инструментов Synaptic. Размер выбранной мною конфигурации составил 18,9 Мбайт, загрузить из Сети потребуется 6,64 Мбайт (рис. 26.3).
Теперь нужно установить следующие пакеты (их можно найти по запросу php5):
□ ph5-cli — интерпретатор PHP, работающий в режиме командной строки (command-line interpreter);
□ php5-imap — поддержка протоколов POP/IMAP для PHP;
□ php5-gd — поддержка графических функций PHP;
□ php5-mysql — поддержка функций для работы с базой данных MySQL.
Просмотрите весь список пакетов, возможно, необходимые вам пакеты в этом списке найдутся.
26.2.2. Тестирование настроек Web-сервера
Протестируем Web-сервер. Откройте браузер и введите адрес:
http://localhost
Должна открыться страница, изображенная на рис. 26.4.
Теперь протестируем поддержку PHP. Поместите файл test.php в каталог /var/www/. Это можно сделать с помощью команды:
sudo nano /var/www/test.php
<?
phpinfo();
?>
Чтобы создать файл в этом каталоге, нужны права root. После создания файла введите в строке браузера следующий адрес: .
Скорее всего (если вы после установки Apache не перезагружали компьютер), увидите картинку из серии «не ждали» (рис. 26.5).
Похоже, что поддержка PHP не установлена. Но на самом деле поддержка PHP уже установлена, просто нужно перезагрузить Apache — введите в терминале команду:
sudo service apache2 restart
Да, теперь и в Ubuntu есть команда service! После этого в окне браузера вы должны увидеть информацию о своем сервере и PHP (рис. 26.6).
Как вы уже догадались, каталог /var/www является корневым для вашего сервера. Если создать в нем файл test.html, то он будет доступен по адресу: .
26.2.3. Конфигурационные файлы сервера
Файлы конфигурации сервера находятся в каталоге /etc/apache2. Основной файл конфигурации называется apache2.conf. По умолчанию его настройки устроят большинство пользователей. Если вы планируете использовать Web-сервер не только локально (для экспериментов с PHP), а как Web-сервер своей домашней сети, откройте файл apache2.conf и найдите директиву: #ServerName new.host.name
Нужно ее раскомментировать и указать имя сервера, которое будут вводить пользователи в строке браузера. Данное имя должно быть зарегистрировано в DNS-сервере вашей сети (или указано в файле /etc/hosts каждого компьютера сети). Обычно здесь указывается имя компьютера, например:
ServerName user-desktop
После этого можно будет обращаться к серверу по адресу:
http://user-desktop/ .
Для остановки и перезапуска Web-сервера используются, соответственно, следующие команды (перезапуск необходим после изменения конфигурационных файлов сервера):
sudo service apache2 stop
sudo service apache2 restart
26.3. Сервер баз данных MySQL
26.3.1. Установка сервера
Для установки MySQL-сервера запустите менеджер пакетов Synaptic и выберите следующие пакеты:
□ mysql-server-5.1;
□ mysql-client-5.1;
□ mysql-admin.
Первый пакет содержит последнюю версию MySQL-сервера (на данный момент эта пятая версия), во втором пакете находится MySQL-клиент, т. е. программа, которая будет подключаться к MySQL-серверу, передавать ему SQL-запросы и отображать результат их выполнения. Третий пакет содержит программу для администрирования MySQL-сервера. Все необходимые дополнительные пакеты будут установлены автоматически.
При установке MySQL-сервера Synaptic запросит новый пароль пользователя root (рис. 26.7). Это пароль пользователя MySQL — не нужно путать с системным пользователем root!
26.3.2. Изменение пароля root и добавление пользователей
Для изменения пароля root (который вы ввели при установке сервера MySQL) используется следующая команда:
sudo mysqladmin — u root password ваш_пароль
Этот пароль вы будете использовать для администрирования сервера (пароль может и должен отличаться от того, который вы используете для входа в систему). Для обычной работы с сервером рекомендуется создать обычного пользователя. Для этого введите команду:
mysql — u root — p mysql
Программа mysql является клиентом MySQL-сервера. Она должна подключиться к базе данных mysql (служебная база данных), используя имя пользователя root (-u root). Поскольку вы только что указали пароль для пользователя root (до этого пароль для root не был задан), вам нужно указать параметр — p. После того как программа mysql подключится к серверу, вы увидите приглашение программы. В ответ на него нужно ввести следующий SQL-оператор:
insert into user(Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv)
values ('%','username',password('123456'),'Y','Y','Y','Y');
Только что мы создали пользователя с именем username и паролем 123456. Этот пользователь имеет право использовать SQL-операторы select (выборка из таблицы), insert (добавление новой записи в таблицу), update (обновление записи), delete (удаление записи). Если вам нужно, чтобы ваш пользователь имел право создавать и удалять таблицы, добавьте привилегии Create_priv и Drop_priv:
insert into user(Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_prov)
values ('%','username',password('123456'),'Y','Y','Y','Y','Y','Y');
Внимание!
Этот SQL-оператор можно записать в одну строку, можно разбить на несколько строк — как вам будет удобно. Но в конце каждого SQL-оператора должна быть точка с запятой! Помните об этом.
Для выхода из программы mysql нужно ввести команду quit.
Кроме программы mysql в состав MySQL-клиента входит одна очень полезная программа — mysqlshow, которая может вывести список таблиц, которые находятся в той или иной базе данных. Кроме этого, она еще много чего может, но в данный момент нам нужен пока список таблиц — чтобы вы знали, какие таблицы есть в той или иной базе данных:
mysqlshow — p <база данных>
26.3.3. Запуск и останов сервера
Для управления сервером используется программа /etc/init.d/mysql. Раньше нужно было вызывать /etc/init.d/mysql непосредственно, сейчас можно вызвать управляющую программу через команду service, что намного удобнее. Для запуска сервера следует передать этой программе параметр start, для останова — stop, а для перезапуска — restart:
sudo service mysql start
sudo service mysql stop
sudo service mysql restart
Также для управления сервером можно использовать программу mysqladmin, узнать больше о ней можно с помощью команды:
man mysqladmin
26.3.4. Программа MySQL Administrator
Устанавливая сервер, мы установили программу MySQL Administrator (пакет mysql-admin). Запустите программу командой меню Приложения | Программирование | MySQL Administrator. Укажите адрес сервера localhost, имя пользователя — root, пароль, который вы указали при установке сервера (рис. 26.8), и нажмите кнопку Connect. Далее управлять сервером будет существенно проще (рис. 26.9).
Пройдемся по основным разделам программы MySQL Administrator:
□ Server Information — общая информация о сервере (см. рис. 26.9);
□ Service Control — управление запуском сервиса MySQL (здесь вы можете перезапустить сервер);
□ Startup Parameters — параметры, указываемые при запуске сервера;
□ User Administration — здесь можно добавить новых пользователей MySQL и установить права пользователей;
□ Server Connections — позволяет просмотреть текущие соединения с сервером;
□ Server Logs — журналы сервера;
□ Backup — создать резервную копию сервера;
□ Restore Backup — восстановление из резервной копии;
□ Replication Status — состояние репликации сервера;
□ Catalogs — позволяет просмотреть имеющиеся базы данных и таблицы внутри них.
26.4. Быстрая настройка FTP-сервера
Рассмотрим настройку FTP-сервера ProFTPD. На мой взгляд, этот сервер наиболее гибкий в настройке. Установите два пакета: proftpd-basic и gadmin-proftpd. Первый содержит FTP-сервер, а второй — графическую программу для его настройки.
После установки сервер практически готов к работе. Его нужно только запустить (по умолчанию он добавляется в автозапуск, поэтому после перезагрузки эта команда не потребуется):
sudo /etc/init.d/proftpd start
Попробуем подключиться к вашему серверу:
ftp <имя_вашего_компьютера>
FTP-сервер запросит имя пользователя и пароль. Нужно вводить имя пользователя, зарегистрированное на вашем компьютере (на FTP-сервере). После этого вы получите доступ к домашнему каталогу пользователя, который будет для вас корневым, т. е. за пределы этого каталога выйти не получится. Это сделано из соображений безопасности, чтобы никто не мог получить доступ к файловой системе сервера.
Такая конфигурация сервера не очень удобна. Когда нужно предоставить доступ пользователям к их домашним каталогам — все просто прекрасно. Но предположим, вы хотите сделать свою коллекцию фильмов доступной всем пользователям сети. Можно, конечно, записать их в ваш домашний каталог, а потом всем предоставить имя пользователя и пароль, но это нежелательно с точки зрения безопасности — все смогут прочитать ваши файлы, причем не только прочитать, а изменить и даже удалить. Поэтому намного рациональнее предоставить всем пользователям анонимный доступ к вашей коллекции фильмов. Каждый желающий сможет скачать фильм, но никто не сможет ничего удалить.
Основной файл конфигурации сервера ProFTPD называется /etc/proftpd/ proftpd.conf. По умолчанию в конфигурационном файле указываются далеко не все опции, которые доступны, поэтому для создания полноценного конфигурационного файла нужно запустить программу gadmin-proftpd:
gksudo gadmin-proftpd
При первом запуске программа сообщит вам, что в конфигурационном файле не хватает многих опций, и предложит создать полноценный конфигурационный файл — согласитесь, нажав кнопку Yes.
В верхней части окна программы настройки FTP-сервера расположены кнопки управления сервером (рис. 26.10):
□ Activate/Deactivate — информируют о статусе сервера (зеленая кнопка говорит о том, что сервер запущен);
□ Shutdown — завершает работу сервера.
На вкладке Servers можно управлять разными серверами, если у вас их несколько — точнее, редактировать их файлы конфигурации. У нас будет только один сервер, поэтому я не думаю, что кнопки Add (добавить сервер) и Delete (удалить сервер) вам пригодятся.
Ознакомимся с другими вкладками программы настройки:
□ Users — позволяет управлять пользователями выбранного сервера;
□ Transfers — информация об использовании выбранного сервера (рис. 26.11);
□ Disk — информация об использовании дискового пространства локального компьютера;
□ Files — позволяет сгенерировать файлы статистики сервера;
□ Security — информация, касающаяся безопасности сервера;
□ Configuration — позволяет редактировать конфигурационный файл сервера.
Очень удобна вкладка Configuration, позволяющая редактировать файл конфигурации — команда gedit вам больше не понадобится (рис. 26.12).
Теперь самое время заняться предоставлением анонимного доступа к серверу. Предположим, что наша коллекция с фильмами и другими огромными файлами будет размещаться в каталоге /var/ftp/pub. Поэтому секция Anonymous конфигурационного файла proftpd.conf будет выглядеть так:
Теперь любой пользователь сможет подключиться к вашему серверу, используя имя пользователя anonymous и любой e-mail в качестве пароля. Они получат доступ к файлам в каталоге /var/ftp/pub. Файлы можно будет только скачивать, все остальные действия (изменение, удаление) запрещены, запрещена и загрузка файлов на сервер. Если нужно разрешить загрузку файлов на сервер, тогда в конце секции Anonymous (перед ) добавьте следующую секцию:
Пользователи смогут просматривать каталог /var/ftp/pub/incoming и загружать в него новые файлы.
После внесения изменений в конфигурационный файл нужно перезагрузить сервер, чтобы сервер перечитал конфигурационный файл.
Теперь после проделанной работы у вас есть Web-сервер с поддержкой PHP и MySQL, сервер баз данных MySQL и FTP-сервер — все, что нужно, для разработки и тестирования ваших Web-приложений.