Chapter 10 Системное администрирование

10.1. Где расположены файлы конфигурации системы?
10.2. Как проще всего добавить пользователя?
10.3. Почему после редактирования моего файла crontab я получаю сообщения вида ``root: not found''?
10.4. Команда su выдает, что ``you are not in the correct group to su root'', когда я пытаюсь сменить привилегии на root.
10.5. Я сделал ошибку в файле rc.conf или в каком-то другом файле начальной загрузки, и теперь не могу его отредактировать из-за того, что файловая система находится в режиме только для чтения. Что мне делать?
10.6. У меня проблемы с установкой принтера.
10.7. Раскладка клавиатуры неверна.
10.8. У меня при загрузке появляются сообщения вида ``unknown: <PNP0303> can't assign resources''
10.9. Почему не получается заставить работать дисковые квоты?
10.10. Поддерживает ли FreeBSD вызовы IPC из System V?
10.11. Какое другое программное обеспечение для почтового сервера можно использовать вместо Sendmail?
10.12. Я забыл пароль пользователя root! Что делать?
10.13. Как запретить перезагрузку по нажатию Control+Alt+Delete?
10.14. Как преобразовать текстовые файлы DOS в формат Unix?
10.15. Как прервать процесс по имени?
10.16. Почему su выдаёт сообщение о том, что я не вхожу в root ACL?
10.17. Как деинсталлировать Kerberos?
10.18. Что случилось с /dev/MAKEDEV?
10.19. Как добавить в систему дополнительные псевдотерминалы?
10.20. Почему не получается создать устройство snd0?
10.21. Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы?
10.22. Я пытался обновить мою систему до последней -STABLE, а получил -RC или -PRERELEASE! Что происходит?
10.23. Я попытался установить новое ядро, однако утилита chflags не сработала. Как это обойти?
10.24. Не получается изменить системное время больше чем на одну секунду! Как это обойти?
10.25. В rpc.statd; есть ошибка работы с памятью ! Он использует 256 Mb памяти !
10.26. Почему я не могу снять с файла флаг schg?
10.27. Почему в SSH аутентификация посредством файла .shosts не включена по умолчанию в последних версиях FreeBSD?
10.28. Что такое vnlru?
10.29. Что означают различные состояния памяти, показываемые утилитой top?
10.30. Сколько свободной памяти доступно?
10.31. Что такое /var/empty? Я не могу его удалить!

10.1. Где расположены файлы конфигурации системы?

Основным настроечным файлом является /etc/defaults/rc.conf (обратитесь к rc.conf(5)) Скрипты начального запуска системы, такие, как /etc/rc и /etc/rc.d (обратитесь к rc(8)) просто включают этот файл. Не редактируйте этот файл! Вместо этого, если в файле /etc/defaults/rc.conf имеется параметр, который вы хотите изменить, то вы должны скопировать строчку с ним в файл /etc/rc.conf и поменять его значение именно здесь.

Например, если вы хотите запустить named, поставляемый сервер DNS, то всё, что вам нужно сделать, это:

# echo named_enable="YES" >> /etc/rc.conf

Чтобы запустить местные сервисы, поместите скрипты в каталог /usr/local/etc/rc.d. У этих скриптов должен быть выставлен бит выполнимости, и их имена должны оканчиваться на .sh.

10.2. Как проще всего добавить пользователя?

Используйте команду adduser(8) или pw(8) в случае выполнения более сложных операций.

Чтобы удалить пользователя, используйте команду rmuser(8) или, если это будет необходимо, pw(8).

10.3. Почему после редактирования моего файла crontab я получаю сообщения вида ``root: not found''?

Обычно это случается при редактировании системного crontab-файла (/etc/crontab) и последующего использования утилиты crontab(1) для его установки:

# crontab /etc/crontab

Это неправильно. Системный crontab-файл имеет формат, отличный от пользовательских crontab-файлов, которые обновляет утилита crontab(1) (страница Справочника по crontab(5) описывает отличия более подробно).

Если это именно то, что вы сделали, то дополнительный crontab-файл является просто копией файла /etc/crontab в неправильном формате. Удалите его такой командой:

# crontab -r

В следующий раз при редактировании файла /etc/crontab, вам не нужно делать ничего для оповещения утилиты cron(8) о сделанных изменениях, так как она распознает их автоматически.

Если вы хотите запускать что-то один раз в день, неделю или месяц, то, наверное, лучше обновить скрипты /usr/local/etc/periodic и позволить команде periodic(8), запускаемой системной cron-утилитой, планировать их выполнение вместе с другими периодическими системными задачами.

Реальная причина ошибки заключается в том, что системный crontab-файл имеет дополнительное поле, указывающее, какой пользователь запускает команду. В системном crontab-файле, поставляемом с FreeBSD и используемом по умолчанию, это пользователь root для всех строк. Если этот crontab-файл используется в качестве crontab-файла пользователя root (что не то же самое, что системный crontab-файл), cron(8) полагает, что слово root является первым в команде на выполнение, но такой команды не существует.

10.4. Команда su выдает, что ``you are not in the correct group to su root'', когда я пытаюсь сменить привилегии на root.

Это особенность работы системы защиты. Для того, чтобы изменить свои привилегии на пользователя root (или любого другого пользователя, имеющего привилегии администратора), вы должны быть членом группы wheel. Если бы этого не было, любой, имеющий доступ к системе и узнавший пароль пользователя root, смог получить в системе администраторские полномочия. С такой же защитой этого не получится; su(1) будет препятствовать попыткам даже ввести пароль, если некто не являетесь членом группы wheel.

Чтобы разрешить кому-либо менять привилегии на root, просто включите его в группу wheel.

10.5. Я сделал ошибку в файле rc.conf или в каком-то другом файле начальной загрузки, и теперь не могу его отредактировать из-за того, что файловая система находится в режиме только для чтения. Что мне делать?

При получении приглашения на ввод полного пути до командного процессора, просто нажмите ENTER, а затем выполните команду mount / для повторного монтирования корневой файловой системы в режиме чтения/записи. Вам может также потребоваться выполнить команду mount -a -t ufs для монтирования файловой системы, в которой расположен ваш любимый редактор. Если редактор расположен на сетевой файловой системе, то вам потребуется выполнить сетевые настройки вручную до монтирования сетевой файловой системы, либо воспользоваться редактором, находящимся в локальной файловой системе, таким, как ed(1).

Если вы собираетесь использовать полноэкранный редактор, такой, как vi(1) или emacs(1), то вам нужно будет выполнить команду export TERM=cons25, чтобы такие редакторы смогли корректно взять данные из базы данных termcap(5).

После выполнения этих шагов вы сможете отредактировать файл /etc/rc.conf так, как вы это обычно делаете для исправления ошибки. Сообщение об ошибке, выводимое сразу же после сообщений при загрузке ядра, должно указать вам на номер строки в файле, которая содержит ошибку.

10.6. У меня проблемы с установкой принтера.

Обратитесь к соответствующему разделу Руководства, посвящённому печати. В нём описаны решения большинства ваших проблем.

Некоторые принтеры для выполнения любых операций по печати требуют наличия на хосте драйвера. Такие так называемые ``WinPrinters'' изначально во FreeBSD не поддерживаются. Если ваш принтер не работает в DOS или Windows NT 4.0, то, скорее всего, это WinPrinter. Единственное, что вам остаётся сделать в надежде на то, что вы заставите его работать, это проверить, поддерживает ли его порт print/pnm2ppa.

10.7. Раскладка клавиатуры неверна.

Пожалуйста, обратитесь к разделу Руководства, посвящённому использованию локализации, а именно к части, описывающей настройку консоли.

10.8. У меня при загрузке появляются сообщения вида ``unknown: <PNP0303> can't assign resources''

Ниже следует часть письма, опубликованного в списке рассылки freebsd-current.

 

Сообщение ``can't assign resources'' говорит о том, что устройство является устаревшим ISA-устройством, для которого в ядре присутствует драйвер, не поддерживающий PnP. К таким устройствам относятся контроллеры клавиатуры, микросхема контроллера программируемых прерываний, а также другие части стандартного набора. Ресурсы не могут выделены, потому что уже есть драйвер, использующий эти адреса.

 
--Garrett Wollman , 24 апреля 2001  

10.9. Почему не получается заставить работать дисковые квоты?

  • Не включайте квотирование на /,

  • Помещайте файл с квотами в ту файловую систему, которую он обслуживает, то есть:

    Файловая система Файл квот
    /usr /usr/admin/quotas
    /home /home/admin/quotas
    ... ...

10.10. Поддерживает ли FreeBSD вызовы IPC из System V?

Да, FreeBSD поддерживает IPC из System V, в том числе совместно используемую память, сообщения и семафоры. Во FreeBSD версий, вышедших после 3.2, IPC из System V поддерживаются в ядре GENERIC. В более ранних версиях FreeBSD для включения их поддержки нужно добавить следующие строки в файл конфигурации ядра.

options    SYSVSHM          # enable shared memory
options    SYSVSEM          # enable for semaphores
options    SYSVMSG          # enable for messaging

Перекомпилируйте и переустановите ядро.

10.11. Какое другое программное обеспечение для почтового сервера можно использовать вместо Sendmail?

Sendmail является программным обеспечением для работы почтового сервера во FreeBSD, используемым по умолчанию, но вы можете с легкостью заменить его другим MTA (к примеру, установленным из портов).

В дереве портов уже имеются различные альтернативные MTA, из которых mail/exim, mail/postfix, mail/qmail, mail/zmailer являются одними из самых популярных.

Разнообразие хорошо, а тот факт, что у вас есть выбор из многих различных почтовых серверов, является хорошим признаком; поэтому попытайтесь не задавать вопросы типа ``Sendmail лучше, чем Qmail?'' в списках рассылки. Если вы захотите получить ответ, сначала просмотрите архивы списков рассылки. Достоинства и недостатки каждого из имеющихся MTA уже обсуждались неоднократно.

10.12. Я забыл пароль пользователя root! Что делать?

Без паники! Просто перезапустите систему, наберите boot -s в приглашении Boot: (или просто -s в случае использования версий FreeBSD до 3.2) для входа в однопользовательский режим. На вопрос об используемой оболочке нажмите ENTER. На приглашение # введите mount -u /, чтобы перемонтировать корневую файловую систему в режиме чтения/записи, после чего выполните команду mount -a для монтирования всех файловых систем. Запустите команду passwd root, чтобы сменить пароль пользователя root, а затем exit(1) для продолжения процесса загрузки.

10.13. Как запретить перезагрузку по нажатию Control+Alt+Delete?

Если вы используете драйвер консоли syscons (который является стандартным), перегенерируйте и установите новое ядро со следующим параметром.

options SC_DISABLE_REBOOT

в конфигурационном файле. Если же вы используете драйвер консоли PCVT, то вместо вышеуказанной включите в конфигурационный файл следующую строку.

options PCVT_CTRL_ALT_DEL

10.14. Как преобразовать текстовые файлы DOS в формат Unix?

Используйте такую команду:

% perl -i.bak -npe 's/\r\n/\n/g' file ...
 

где file - это имя файла(ов) для преобразования. Преобразование делается в том же самом файле, оригинальные файлы сохраняются с расширением .bak.

Это преобразование также можно выполнить с помощью команды tr(1):

% tr -d '\r' < dos-text-file > unix-file
 

где dos-text-file - это имя файла, содержащего текст DOS, а в файл unix-file будет помещён уже преобразованный текст. Этот способ может работать гораздо быстрее, чем при использовании perl.

10.15. Как прервать процесс по имени?

Используйте команду killall(1).

10.16. Почему su выдаёт сообщение о том, что я не вхожу в root ACL?

Эта ошибка выдаётся распределённой системой аутентификации Kerberos. Эта ошибка не фатальна, однако это раздражает. Вы можете запустит su с ключом -K либо деинсталлировать Kerberos, как описано в следующем разделе.

10.17. Как деинсталлировать Kerberos?

Чтобы убрать Kerberos из системы, переустановите дистрибутив bin того релиза, который у вас запущен. Если у вас есть CDROM, вы можете смонтировать компакт-диск (положим, в каталог /cdrom) и выполнить команду

# cd /cdrom/bin
# ./install.sh

Либо вы можете убрать все опции MAKE_KERBEROS из файла /etc/make.conf и выполнить полное перестроение системы.

10.18. Что случилось с /dev/MAKEDEV?

Во FreeBSD 5.X используется система devfs(8) устройств по требованию. Драйверы устройств автоматически создают новые файлы устройств, как только в них появляется необходимость, таким образом обходясь без /dev/MAKEDEV.

Если вы работаете с FreeBSD 4.X или более ранней версией, и файл /dev/MAKEDEV отсутствует, то у вас действительно есть проблема. Возьмите копию из исходных кодов системы, как правило, из /usr/src/etc/MAKEDEV.

10.19. Как добавить в систему дополнительные псевдотерминалы?

Если у вас много пользователей, работающий в сеансах telnet, ssh, X или в screen, вам можете столкнуться с проблемой нехватки псевдотерминалов. Их количество можно увеличить следующим образом:

  1. Откомпилируйте и инсталлируете новое ядро, в конфигурационный файл которого входит такая строка:

    pseudo-device pty 256
         
    
  2. Выполните следующие команды:

    # cd /dev
    # sh MAKEDEV pty{1,2,3,4,5,6,7}
         
    

    для создания 256 дополнительных файлов устройств для новых терминалов.

  3. Отредактируйте файл /etc/ttys, добавив по строке для каждого из 256 терминалов. Они должны соответствовать формату существующих строк, то есть должны выглядеть вот так:

    ttyqc none network
         
    

    Порядок назначения букв при записи в виде регулярного выражения имеет вид tty[pqrsPQRS][0-9a-v].

  4. Теперь осталось только перезапустить систему с новым ядром.

10.20. Почему не получается создать устройство snd0?

Такого устройства, как snd, не существует. Это название используется в качестве краткого обозначения различных устройств, которые составляют во FreeBSD звуковой драйвер, таких как mixer, sequencer и dsp.

Для создания этих устройств вы должны сделать следующее:

# cd /dev
# sh MAKEDEV snd0

Note: Вы можете пропустить этот шаг, если используете FreeBSD 5.0-RELEASE или более новую версию с включенным механизмом devfs(5).

10.21. Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы?

Перейдите в однопользовательский режим, а затем возвратитесь обратно в многопользовательский.

На консоли выполните следующее:

# shutdown now
(Замечание: без -r или -h)

# return
# exit
 

10.22. Я пытался обновить мою систему до последней -STABLE, а получил -RC или -PRERELEASE! Что происходит?

Краткий ответ: это же просто название. RC означает ``Release Candidate''. Это значит, что вскоре произойдет выход релиза. Во FreeBSD появление -PRERELEASE, как правило, равнозначно прекращению внесения изменений в код системы перед появлением релиза. (Для некоторых релизом метка -BETA использовалась точно так же, как и PRERELEASE.)

Подробный ответ: во FreeBSD релизы выпускаются из одного из двух мест. Крупные релизы, точка-ноль, такие, как 3.0-RELEASE и 4.0-RELEASE, ответвляются от основного потока разработки, более известного как -CURRENT. Мелкие релизы, такие, как 3.1-RELEASE или 4.2-RELEASE, являлись снэпшотами активной ветки -STABLE. Начиная с 4.3-RELEASE, каждый релиз также имеет свою ветвь, которой могут следовать те, кому необходим сверхконсервативный метод обновления (как правило, внесение только тех исправлений, которые касаются вопросов обеспечения безопасности).

Когда делается релиз, то ветвь, из которой он выпускается, подвергается некоторой подготовке. Частью этого процесса является замораживание кода. Когда инициируется замораживание кода, то имя ветки изменяется для того, чтобы отразить факт близости релиза. Например, если ветка называлась 4.5-STABLE, то её имя будет изменено на 4.6-PRERELEASE, чтобы обозначить момент прекращения внесения изменений в код системы и период дополнительного тестирования перед выходом релиза. В это время исправления ошибок могут быть внесены в код системы для того, чтобы быть включенными в релиз. Когда исходный код подготовлен к выпуску релиза, имя будет изменено на 4.6-RC для обозначения того, что релиз будет сделан, скорее всего, именно из этого кода. Когда код находится на этапе RC, в нём могут исправляться только самые критичные ошибки. Как только релиз (в нашем примере 4.6-RELEASE) и ветка релиза будут созданы, ветвь будет переименована в 4.6-STABLE.

Для получения дополнительной информации о номерах версий и различных ветках CVS обратитесь к статье о выпуске релизов.

10.23. Я попытался установить новое ядро, однако утилита chflags не сработала. Как это обойти?

Краткий ответ: Скорее всего, вы работаете в режиме безопасности, большем, чем 0. Для установки ядра перезагрузите машину и войдите в однопользовательский режим.

Подробный ответ: FreeBSD запрещает менять системные флаги при работе на уровнях безопасности, превышающих 0. Вы можете определить ваш уровень такой командой:

# sysctl kern.securelevel
 

Вы не можете понизить уровень безопасности; для установки ядра вам нужно перезагрузиться в однопользовательский режим, или изменить уровень безопасности в /etc/rc.conf, а затем выполнить перезагрузку. Обратитесь к странице Справочника по init(8) за подробной информацией об уровне безопасности и посмотрите /etc/defaults/rc.conf и справочную страницу по rc.conf(5) для выяснения подробностей о файле rc.conf.

10.24. Не получается изменить системное время больше чем на одну секунду! Как это обойти?

Краткий ответ: Скорее всего, вы работаете на уровне безопасности, превышающем 1. Для смены даты перезагрузите машину и войдите в однопользовательский режим.

Подробный ответ: FreeBSD запрещает менять системное время на больше чем одну секунду при работе на уровнях безопасности, превышающих 1. Вы можете определить ваш уровень такой командой:

# sysctl kern.securelevel
 

Вы не можете понизить уровень безопасности; для изменения даты вам нужно перезагрузиться в однопользовательский режим, или изменить уровень безопасности в /etc/rc.conf, а затем выполнить перезагрузку. Обратитесь к странице Справочника по init(8) за подробной информацией об уровне безопасности, и посмотрите /etc/defaults/rc.conf и справочную страницу по rc.conf(5) для выяснения подробностей о файле rc.conf.

10.25. В rpc.statd; есть ошибка работы с памятью ! Он использует 256 Mb памяти !

Нет, там нет ошибок и он не использует 256 Mb памяти. Ему просто нравится (что он постоянно и делает) отображать неприлично большой кусок памяти в свое адресное пространство для удобства. Здесь нет ничего неправильного с технической точки зрения, это просто сбивает с толку программы вроде top(1) и ps(1)

rpc.statd(8) отображает свой статусный файл (находящийся на /var) в свое адресное пространство. Для того чтоб постоянно не беспокоится о будущих переотражениях, когда файл вырастет в размерах, он просто отображает его с огромным размером заранее. Это просто заметить в исходных текстах, где как вы можете увидеть параметр длина к функции mmap(2) имеет значение 0x10000000, или одна шестнадцатая адресного пространства для IA32, то есть 256Mb.

10.26. Почему я не могу снять с файла флаг schg?

Вы работаете в системе с повышенным (то есть большим, чем 0) уровнем защиты. Понизьте уровень защиты и попробуйте еще раз. Для получения более подробной информации обратитесь к разделу FAQ об уровне защиты и справочной странице о init(8).

10.27. Почему в SSH аутентификация посредством файла .shosts не включена по умолчанию в последних версиях FreeBSD?

Причиной, по которой .shosts аутентификация не работает по умолчанию в последних версиях FreeBSD, является то что ssh(1) не устанавливается более с битом изменения привилегий на пользователя root. Если вы хотите ``исправить'' это, то вы можете сделать одно из двух нижеприведённых действий:

  • Как постоянную правку, установите ENABLE_SUID_SSH в true в файле /etc/make.conf и перекомпилируйте ssh.

  • Как временную правку измените права доступа к файлу /usr/bin/ssh на 4555 командой chmod 4555 /usr/bin/ssh из-под администратора. А потом добавьте строку ENABLE_SUID_SSH=true в файл /etc/make.conf, чтоб это изменение осталось в силе после очередного обновления системы с помощью make world.

10.28. Что такое vnlru?

vnlru сбрасывает и освобождает vnode, когда система достигает своего ограничения по параметру kern.maxvnodes. Этот подпроцесс ядра в основном работает вхолостую и активируется только при наличии огромного объема ОЗУ и обращении к десяткам или тысячам файлов маленького размера.

10.29. Что означают различные состояния памяти, показываемые утилитой top?

  • Active: по статистике страницы недавно использовались.

  • Inactive: по статистике страницы недавно не использовались.

  • Cache: (наиболее часто) страницы, которых перемещены из числа неактивных в статус, в котором они содержат данные, но которые могут часто сразу же использоваться повторно (как с их старым содержимым, так и повторно с новым.) Это может быть некоторое непосредственное перемещение из числа активных в состояние 'cache', если известна чистота (немодифицированность) страницы, но такое перемещение определяется политикой, зависящей от выбора алгоритма разработчиком VM-системы.

  • Free: страницы, не содержащие данных, и которые могут быть использованы при некоторых условиях, когда страницы кэша могут не подойти. Свободные страницы могут повторно использоваться в состояниях прерывания или процессах.

  • Wired: страницы, зафиксированные в памяти, обычно для использования ядром, а также иногда для специального использования процессами.

  • Страницы чаще всего записываются на диск (типа синхронизации VM), когда они находятся в состоянии 'inactive', однако страницы в состоянии 'active' также могут сбрасываться (но это требует наличия определённых возможностей ЦПУ.) Это зависит от наличия и возможности отслеживания со стороны ЦПУ бита 'модифицированности', и в некоторых ситуациях это может быть лучше для блока синхронизируемых страниц VM, вне зависимости от их активности. В большинстве встречающихся ситуаций лучше всего представлять 'неактивную' очередь как очередь сравнительно неиспользуемых страниц, которые могут быть, а могут и не быть в процессе записи на диск. 'Кэшируемые' страницы уже 'синхронизированы', не отображаются, но доступны для непосредственного использования процессом со своей старой или новой привязкой. Свободные страницы доступны на уровне прерывания, однако кэшируемые или свободные страницы могут использоваться в процессе повторно. Кэшируемые страницы недостаточно заблокированы для того, чтобы быть доступными на уровне прерывания.

    Есть ещё некоторые другие флаги (например, флаг Busy или счётчик занятости), которые могут изменить некоторые описанные правила.

10.30. Сколько свободной памяти доступно?

Есть несколько понятий ``свободной памяти''. В одном случае это объём памяти, непосредственно доступной в данный момент без страничной выгрузки чего-либо. Этот объём равен примерно размеру очереди кэша + размер очереди на высвобождение (с учётом допустимых отклонений, зависящих от настроек системы.) В другом случае ``свободная память'' обозначает общий объём пространства VM. Он может сложно вычисляться, но зависит от объёма раздела подкачки и памяти. Другие определения ``свободной памяти'' также возможны, но они достаточно бесполезны, ведь в любом случае важно сохранять низкий уровень подкачки и избегать исчерпания раздела подкачки.

10.31. Что такое /var/empty? Я не могу его удалить!

/var/empty представляет собой каталог, который использует программа sshd(8) при выполнении разделения полномочий. Каталог /var/empty пуст, его владельцем является root и на нём установлен флаг schg.

Хотя этот каталог удалять не рекомендуется, для выполнения этой операции вам нужно сначала снять флаг schg. Обратитесь к справочным страницам по chflags(1) для получения более полной информации (и помните про ответ на вопрос о снятии флага schg).

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам связанными с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам связанным с русским переводом документации, пишите <frdp@FreeBSD.org.ua>.