Глава 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. Почему не получается заставить работать дисковые квоты?
10.9. Поддерживает ли FreeBSD вызовы IPC из System V?
10.10. Какое другое программное обеспечение для почтового сервера можно использовать вместо Sendmail?
10.11. Я забыл пароль пользователя root! Что делать?
10.12. Как запретить перезагрузку по нажатию Control+Alt+Delete?
10.13. Как преобразовать текстовые файлы DOS в формат UNIX(R)?
10.14. Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы?
10.15. Я пытался обновить мою систему до последней -STABLE, а получил -BETAx, -RC или -PRERELEASE! Что происходит?
10.16. Я попытался установить новое ядро, однако утилита chflags(1) не сработала. Как это обойти?
10.17. Не получается изменить системное время больше чем на одну секунду! Как это обойти?
10.18. В rpc.statd; есть ошибка работы с памятью! Он использует 256 Мбайт оперативной памяти!
10.19. Почему я не могу снять с файла флаг schg?
10.20. Что такое vnlru?
10.21. Что означают различные состояния памяти, показываемые утилитой top?
10.22. Сколько свободной памяти доступно?
10.23. Что такое /var/empty?
10.24. Я поменял /etc/newsyslog.conf. Как проверить правильность изменений?
10.25. Как поправить часовой пояс?

10.1.

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

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

Пример запуска named(8), поставляемого с системой сервера DNS:

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

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

10.2.

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

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

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

10.3.

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

Обычно это случается при редактировании системного файла crontab.

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

Чтобы удалить лишний неправильный crontab:

# crontab -r

10.4.

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

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

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

# pw groupmod wheel -m lisa

В примере выше пользователь lisa будет добавлен в группу wheel.

10.5.

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

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

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

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

10.6.

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

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

10.7.

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

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

10.8.

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

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

    options QUOTA

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

  2. Не включайте квотирование на разделе /.

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

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

10.9.

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

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

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

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

10.10.

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

Сервер Sendmail является программным обеспечением для работы почтового сервера во FreeBSD, используемым по умолчанию, но его можно заменить другим MTA, установленным из Коллекции Портов. В дереве портов имеется mail/exim, mail/postfix и mail/qmail. Проверьте архивы списков рассылки на предмет обсуждения достоинств и недостатков имеющихся MTA.

10.11.

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

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

Примечание:

Если при входе в однопользовательский режим предлагается ввести пароль пользователя root, это означает, что консоль была помечена как insecure в /etc/ttys. В этом случае потребуется загрузиться с установочного диска FreeBSD, выбрать Live CD или Shell в начале процесса установки и выполнить указанные выше команды. В этом случае смонтируйте нужный раздел и выполните туда chroot. Например, замените команду mount -urw / на mount /dev/ada0p1 /mnt; chroot /mnt для системы, расположенной на ada0p1.

Примечание:

Если корневой раздел не получается смонтировать в однопользовательском режиме, то возможно, что разделы являются зашифрованными, и смонтировать их без ключей доступа не представляется возможным. За дополнительной информацией обращайтесь к разделу Руководства, посвященному шифрованию дисков во FreeBSD.

10.12.

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

При использовании стандартного драйвера консоли syscons(4) перегенерируйте и установите новое ядро с таким параметром в конфигурационном файле:

options SC_DISABLE_REBOOT

Этого также можно достичь установкой следующего sysctl(8), что не требует перезагрузки или пересборки ядра:

# sysctl hw.syscons.kbd_reboot=0

Примечание:

Оба этих метода являются взаимоисключающими. Данный sysctl(8) не существует, если ядро скомпилировано с параметром SC_DISABLE_REBOOT.

10.13.

Как преобразовать текстовые файлы DOS в формат UNIX(R)?

Воспользуйтесь следующей командой perl(1):

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

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

Либо используйте tr(1):

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

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

Еще один способ отформатировать тестовые файлы DOS состоит в использовании converters/dosunix из Коллекции Портов. Для получения дополнительной информации ознакомьтесь с документацией порта.

10.14.

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

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

# shutdown now
# return
# exit

10.15.

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

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

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

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

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

10.16.

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

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

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

# sysctl kern.securelevel

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

10.17.

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

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

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

# sysctl kern.securelevel

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

10.18.

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

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

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

10.19.

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

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

10.20.

Что такое vnlru?

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

10.21.

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

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

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

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

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

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

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

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

10.22.

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

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

10.23.

Что такое /var/empty?

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

10.24.

Я поменял /etc/newsyslog.conf. Как проверить правильность изменений?

Чтобы посмотреть, что будет делать newsyslog(8), используйте следующую команду:

% newsyslog -nrvv

10.25.

Как поправить часовой пояс?

Используйте tzsetup(8).

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

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

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.