Главная > Операционные системы > Unix/QNX >
FAQ по FreeBSD 2.X, 3.X и 4.X. Системное администрирование

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

8.1. Где расположены файлы конфигурации системы?
8.2. Как проще всего добавить пользователя?
8.3. Как добавить в систему новый диск?
8.4. Как использовать устройство для чтения сменных дисков?
8.5. Почему после редактирования моего файла crontab я получаю сообщения вида ``root: not found''?
8.6. Команда su выдает, что ``you are not in the correct group to su root'', когда я пытаюсь сменить привилегии на root.
8.7. Я сделал ошибку в файле rc.conf или в каком-то другом файле начальной загрузки, и теперь не могу его отредактировать из-за того, что файловая система находится в режиме только для чтения. Что мне делать?
8.8. Как смонтировать вторичный раздел DOS?
8.9. Можно ли смонтировать другие файловые системы?
8.10. Как создать образ CD с данными?
8.11. Как можно использовать загрузчик NT для запуска FreeBSD?
8.12. Как загрузить FreeBSD и Linux с помощью LILO?
8.13. Как загрузить FreeBSD и Linux с помощью BootEasy?
8.14. Не угрожает ли режим "dangerously dedicated" моему здоровью?
8.15. Команды du и df показывают разный объем доступного дискового пространства. Что происходит?
8.16. На каких разделах можно без опаски использовать систему softupdates? Я слышал, что мягкие обновления на / могут приводить к проблемам.
8.17. Как добавить дополнительную виртуальную память?
8.18. У меня проблемы с установкой принтера.
8.19. Раскладка клавиатуры неверна.
8.20. У меня при загрузке появляются сообщения вида ``unknown: <PNP0303> can't assign resources''
8.21. Не получается заставить работать дисковые квоты.
8.22. Что не так с устройством ccd?
8.23. Почему невозможно отредактировать метку диска ccd?
8.24. Поддерживает ли FreeBSD вызовы IPC из System V?
8.25. Как настроить sendmail для доставки почты по UUCP?
8.26. Как настроить почту при коммутируемом соединении с Internet?
8.27. Что это за пользователь toor с UID 0? Я подвергся взлому?
8.28. Ой! Я забыл пароль администратора!
8.29. Как запретить перезагрузку по клавишам Control-Alt-Delete?
8.30. Как преобразовать текстовые файлы DOS в формат Unix?
8.31. Как прервать процесс по имени?
8.32. Почему su выдаёт сообщение о том, что я не вхожу в root ACL?
8.33. Как деинсталлировать Kerberos?
8.34. Как добавить в систему дополнительные псевдотерминалы?
8.35. Не получается создать устройство snd0!
8.36. Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы?
8.37. Что означает термин sandbox (песочница)?
8.38. Что такое уровень защиты (securelevel)?
8.39. Как разрешить обычным пользователям монтировать дискеты, компакт-диски и другие сменные носители?
8.40. Как перенести систему на большой новый диск?
8.41. Я пытался обновить мою систему до последней -STABLE, а получил -RC или -BETA! Что происходит?
8.42. Я попытался установить новое ядро, однако утилита chflags не сработала. Как это обойти?
8.43. Не получается изменить системное время больше чем на одну секунду! Как это обойти?
8.44. В rpc.statd; есть ошибка работы с памятью ! Он использует 256 Mb памяти !
8.45. Почему я не могу снять с файла флаг schg?
8.46. Почему SSH аутентификация посредством файла .shosts не включена по умолчанию в последних версия FreeBSD?
8.47. Существует ли криптографическая файловая система для FreeBSD?
8.48. Как сменить приглашение загрузчика с ??? на что-нибудь более значащее?

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

Для FreeBSD версий от 2.0.5R до 2.2.1R основным конфигурационным файлом является /etc/sysconfig. Все параметры указываются здесь, а остальные конфигурационные файлы, такие, как /etc/rc (посмотрите справку по rc(8)) и /etc/netstart просто его используют.

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

В системах выше 2.2.1 и в 3.0 файл /etc/sysconfig сменил название на говорящее само за себя rc.conf(5), синтаксис описания переменных был несколько улучшен. /etc/netstart тоже был переименован в /etc/rc.network, так что все конфигурационные файлы теперь можно скопировать одной командой cp /usr/src/etc/rc* /etc.

А в системах версий 3.1 и выше /etc/rc.conf был перемещён в /etc/defaults/rc.conf. Не редактируйте этот файл! Вместо этого, если в файле /etc/defaults/rc.conf имеется параметр, который вы хотите изменить, то вы должны скопировать строчку с ним в файл /etc/rc.conf и поменять его значение именно здесь.

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

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


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

Файл /etc/rc.serial предназначен для инициализации коммуникационных адаптеров (например, установки характеристик работы последовательных портов и тому подобное).

Файл /etc/rc.i386 предназначен для настройки специфичных для архитектуры Intel параметров, таких, как эмуляция iBCS2 или характеристик системной консоли ПК.

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

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

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

8.3. Как добавить в систему новый диск?

Обратитесь к Руководству по форматированию дисков на сервере http://www.freebsd.org/articles/formatting-media/index.html.

8.4. Как использовать устройство для чтения сменных дисков?

Каким бы ни было это устройство, типа ZIP, EZ (или даже обычным дисководом, если вы хотите его использовать) или каким-то другим, как только оно будет установлено и распознано системой, и вы вставите в него картридж/дискету/что-там-ещё, всё будет выглядеть примерно одинаково.

(этот раздел опирается на FAQ по устройствам ZIP Марка Мэйо (Mark Mayo))

Если это устройство ZIP или обычный дисковод, и у вас уже есть файловая система DOS на дискетах, то вы можете использовать команду типа:

    # mount -t msdos /dev/fd0c /floppy
     

для обычных дискет, или

    # mount -t msdos /dev/da2s4 /zip
     

для дискет ZIP со стандартной конфигурацией.

Для других дисков посмотрите их параметры с помощью команды fdisk(8) или sysinstall(8).

Остальные примеры даны для привода ZIP на da2, третьем диске SCSI.

Если это дискета или сменный диск, который будет использоваться для обмена информацией с другими людьми, хорошей идеей будет помещение туда файловой системы BSD. Вы получите поддержку длинных имён файлов, увеличение производительности по крайней мере в два раза и гораздо большую надёжность. Первым делом вам снова будет нужно выполнить разбиение диска на разделы/файловые системы. Вы можете воспользоваться утилитой fdisk(8) либо sysinstall(8), а в случае небольшого диска, на котором не нужно располагать несколько операционных систем, просто сотрите таблицу разделов (слайсов) FAT и используйте разбиение на разделы BSD.

    # dd if=/dev/zero of=/dev/rda2 count=2
    # disklabel -Brw da2 auto
     

Вы можете использовать disklabel(8) или sysinstall(8) для создания нескольких разделов BSD. Вам наверняка придётся это сделать, если вы станете добавлять место для раздела подкачки на винчестере, хотя это не имеет отношения к устройствам типа ZIP.

В итоге вы должны создать новую файловую систему (в этом примере она занимает весь наш диск ZIP):

    # newfs /dev/rda2c
     

и смонтировать её:

    # mount /dev/da2c /zip
     

Хорошо ещё добавить строку типа следующей в файл /etc/fstab (прочтите справку по fstab(5)), чтобы в будущем можно было просто давать команду mount /zip:

    /dev/da2c /zip ffs rw,noauto 0 0
     

8.5. Почему после редактирования моего файла 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 является первым в команде на выполнение, но такой команды не существует.

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

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

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

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

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

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

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

8.8. Как смонтировать вторичный раздел DOS?

Вторичные разделы DOS находятся после ВСЕХ первичных разделов. Например, если раздел "E" является вторым разделом DOS на втором диске SCSI, вам нужно создать специальные файлы для пятого "слайса" в каталоге /dev, затем смонтировать /dev/da1s5:

    # cd /dev
    # sh MAKEDEV da1s5
    # mount -t msdos /dev/da1s5 /dos/e
     

8.9. Можно ли смонтировать другие файловые системы?

Digital UNIX

Компакт-диски с файловой системой UFS могут быть замонтированы без всяких проблем. Монтирование файловых систем Digital UNIX или других систем, поддерживающих UFS, может быть более сложным, в зависимости от особенностей разбиения диска конкретной операционной системой.

Linux

Начиная с версии 2.2 FreeBSD имеет поддержку разделов ext2fs. За дополнительной информацией обратитесь к странице справочника mount_ext2fs(8).

NT

Существует драйвер, позволяющий под FreeBSD получить доступ к NTFS в режиме "только для чтения". Посмотрите учебник от Марка Овенса (Mark Ovens) по адресу http://ukug.uk.FreeBSD.org/~mark/ntfs_install.html.



Нас интересует любая дополнительная информация по этому вопросу.

8.10. Как создать образ CD с данными?

Если вы хотите сделать точную копию CD (чтобы, например, потом скопировать его на пишущем CD), воспользуйтесь командой dd(1). В приводимом здесь примере предполагается, что у вас имеется устройство IDE CDROM, которое доступно как acd0. Если у вас SCSI CD или другой тип привода, вам нужно подставить правильное имя устройства. К имени устройства нужно дописать символ c, указывающий на целый раздел, а в случае с CDROM, на диск полностью.

    # dd if=/dev/acd0c of=file.iso bs=2048

Полученный файл будет стандартным файлом ISO, который можно использовать с программами cdrecord, burncd и другими утилитами, поддерживающими этот стандартный формат CD с данными. Этот метод не работает с аудио-CD.

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

8.11. Как можно использовать загрузчик NT для запуска FreeBSD?

Эта процедура выглядит по разному для версий FreeBSD 2.2.x и 3.x (с трёхступенчатым процессом загрузки системы).

Идея заключается в копировании первого сектора корневого раздела FreeBSD в файл, находящийся в разделе DOS/NT. Предположим, что вы назвали этот файл c:\bootsect.bsd (по аналогии с c:\bootsect.dos), после чего можете отредактировать файл c:\boot.ini, чтобы он выглядел примерно так:

    [boot loader]
    timeout=30
    default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows NT"
    C:\BOOTSECT.BSD="FreeBSD"
    C:\="DOS"
     

Для систем 2.2.x предполагается, что DOS, NT, FreeBSD или другая операционная система были установлены в их соответствующие разделы fdisk на одном и том же диске. Этот пример тестировался с системой, в которой DOS и NT находились на первом разделе fdisk, а FreeBSD на втором. Кроме того, FreeBSD была настроена на загрузку с её раздела, а не из MBR.

Смонтируйте дискету в формате DOS (если вы используете NTFS) или раздел FAT, скажем, в каталог /mnt.

    # dd if=/dev/rda0a of=/mnt/bootsect.bsd bs=512 count=1
     

Перезапустите DOS или NT. Пользователи NTFS должны скопировать файл bootsect.bsd и/или bootsect.lnx с дискеты на диск C:\. Измените атрибуты (права) на файл boot.ini следующим образом:

    C:\> attrib -s -r c:\boot.ini
     

Отредактируйте этот файл, добавив соответствующие строки из примерного boot.ini выше, и восстановите атрибуты:

    C:\> attrib +s +r c:\boot.ini
     

Если FreeBSD загружается из MBR, восстановите его командой DOS fdisk после того, как переконфигурировали их для загрузки с их "родных" разделов.

Для систем FreeBSD 3.x эта процедура выглядит несколько проще.

Если FreeBSD установлена на тот же самый диск, что и загрузочный раздел NT, просто скопируйте /boot/boot1 в C:\BOOTSECT.BSD. Однако, если FreeBSD установлена на другой диск, то /boot/boot1 работать не будет, нужно копировать /boot/boot0.

WarningНЕ КОПИРУЙТЕ ПРОСТО /boot/boot0 ВМЕСТО /boot/boot1, ЭТИМ ВЫ ПЕРЕЗАПИШЕТЕ ТАБЛИЦУ РАЗДЕЛОВ ВИНЧЕСТЕРА И ВАШ КОМПЬЮТЕР ПЕРЕСТАНЕТ ЗАГРУЖАТЬСЯ!

/boot/boot0 нужно устанавливать с помощью sysinstall, выбрав менеджер загрузки FreeBSD в диалоговом окне при выборе менеджера загрузки. Это потому что в /boot/boot0 область таблицы разделов заполнена символами NULL, а sysinstall копирует сюда таблицу разделов перед тем, как скопировать /boot/boot0 в область MBR.

При запуске менеджер загрузки FreeBSD задаёт ОС, которая загружалась последний раз, устанавливая для этой операционной системы признак активизации в таблице разделов, а затем записывает 512 байт самого себя обратно в MBR, так что если вы просто скопируете /boot/boot0 в C:\BOOTSECT.BSD, то в MBR будет записана пустая таблица разделов с флагом активности в некотором месте.

8.12. Как загрузить FreeBSD и Linux с помощью LILO?

Если у вас установлены FreeBSD и Linux на одном и том же диске, следуйте указаниям по установке LILO о загрузке не-Linux операционных систем. Они сводятся к следующему:

Загрузите Linux, и добавьте следующие строки в файл /etc/lilo.conf:

    other=/dev/hda2
    table=/dev/hda
    label=FreeBSD
     

(здесь мы предполагаем, что слайс с FreeBSD известен Linux как /dev/hda2; измените эту строку в соответствии с вашей конфигурацией). Затем достаточно будет запустить lilo, войдя в систему как администратор.

Если FreeBSD располагается на другом диске, вам нужно добавить строчку loader=/boot/chain.b в конфигурационный файл LILO. Например:

    other=/dev/dab4
    table=/dev/dab
    loader=/boot/chain.b
    label=FreeBSD
     

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

    Boot: 1:da(0,a)/kernel
     

Во FreeBSD 2.2.5 и выше вы можете настроить boot(8) на автоматическое принятие таких параметров во время загрузки.

В документе Linux+FreeBSD mini-HOWTO содержится много информации, касающейся взаимодействия FreeBSD и Linux.

8.13. Как загрузить FreeBSD и Linux с помощью BootEasy?

Установите LILO в начало загрузочного раздела Linux, а не в Master Boot Record. После этого можно запустить LILO из BootEasy.

Это рекомендуется сделать в любом случае при одновременном использовании Windows-95 и Linux, чтобы упростить восстановление работоспособности Linux после переинсталляции Windows95 (которая является Недоброжелательной Операционной Системой и не терпит присутствия других операционных систем в Master Boot Record).

8.14. Не угрожает ли режим "dangerously dedicated" моему здоровью?

В процессе установки вы можете выбрать два различных метода разбиения вашего диска. По умолчанию это делается в режиме совместимости с другими операционными системами на этой же машине с использованием записей в таблице разделов fdisk (то, что называется "слайсом" во FreeBSD), со слайсом (разделом), выделенным FreeBSD. Опционально, вы можете выбрать установку менеджера загрузки для переключения между операционными системами. Либо вы можете выделить диск полностью под FreeBSD, не заботясь о совместимости с другими операционными системами.

Почему же этот режим называется "dangerous"? Дело в том, что диск в этом режиме не будет содержать того, что обычные утилиты для ПК распознают как таблицу разделов. В зависимости от того, насколько хорошо они написаны, они могут сообщить вам об этом, как только обнаружат такой диск, или, что гораздо хуже, могут запортить загрузчик BSD, даже не спрашивая и не сообщая об этом. К тому же известно, что разметка диска в режиме "dangerously dedicated" вводит в заблуждение BIOS многих производителей, включая AWARD (которые используются в компьютерах HP Netserver, Micronics и многих других) и Symbios/NCR (производителя популярных SCSI-контроллеров серии 53C8xx). И это не полный список, есть ещё другие производители. Симптомами подобных проблем является сообщение ``read error'', выводимое загрузчиком FreeBSD, когда он не может найти сам себя, а также зависания системы при загрузке.

Тогда зачем вообще нужен этот режим? Он экономит всего лишь несколько килобайт дискового пространства и может вызвать серьёзные проблемы при новой инсталляции. Причиной появления этого режима является желание избежать появления одной из самых распространённых проблем, с которой сталкиваются новички - соответствие параметров BIOS и реальных параметров диска.

"Параметры" диска являются устаревшей концепцией, но она лежит в основе работы BIOS с диском. Когда программа установки FreeBSD создаёт слайсы, она записывает их расположение в соответствии с тем, как с ними будет работать BIOS. Если это делается неправильно, вы не сможете выполнить загрузку системы.

Режим "dangerously dedicated" пытается обойти это, упрощая решение данной проблемы. Иногда он делает это правильно. Однако это значит, что его нужно использовать только как последнюю альтернативу - есть способы получше, решающие проблему в 99 случаях из 100.

Итак, как избежать использования режима "DD" во время установки? Сначала запишите параметры диска, которые сообщает BIOS. Вы можете выяснить это, заставив ядро вывести эти параметры при загрузке, указав -v в приглашении boot:, или используя boot -v в загрузчике. Перед тем, как запустится программа установки, ядро выведет параметры, используемые BIOS. Не волнуйтесь - подождите запуска программы установки, а затем воспользуйтесь скроллингом, чтобы посмотреть значения этих параметров. Как правило, BIOS нумерует диски в том же порядке, что и FreeBSD, сначала IDE, затем SCSI.

Когда вы разбиваете диск на слайсы, проверьте, что параметры диска, выводимые в окне программы FDISK, корректны (то есть они соответствуют параметрам BIOS); если это не так, воспользуйтесь командой g, чтобы их исправить. Вы можете это сделать, если на диске нет абсолютно ничего или если этот диск был перенесён с другой системы. Заметьте, что это касается только загрузочного диска; FreeBSD прекрасно разберётся с остальными дисками, которые могут у вас быть.

Как только вы добились соответствия параметров диска в BIOS и FreeBSD, скорее всего, проблем у вас больше не будет, и использовать режим "DD" не потребуется. Если, однако, страшной сообщение ``read error'' продолжает появляться при загрузке, самое время перекреститься и попробовать этот режим - терять вам больше нечего.

Чтобы вернуть диск из режима "dangerously dedicated" к нормальному режиму использования, есть два способа. Первый заключается в том, что вы записываете достаточное количество байтов NULL поверх MBR, чтобы любой инсталлятор думал, что это чистый диск. Это можно сделать, например, командой

    # dd if=/dev/zero of=/dev/rda0 count=15
     

Другой способ - недокументированной командой DOS

    C:\> fdisk /mbr
     

проинсталлировать новую MBR, удалив загрузчик BSD.

8.15. Команды du и df показывают разный объем доступного дискового пространства. Что происходит?

Вам нужно разобраться, что на самом деле делают команды du и df. du проходит по дереву каталогов, замеряя, насколько большой объем занимает каждый файл, и выдает общий объем. df просто запрашивает файловую систему об оставшемся объеме. Это выглядит как одно и то же, однако файл без записи в каталоге затронет df, но не повлияет на du.

Когда программа использует файл, а вы его удалили, файл на самом деле не удаляется из файловой системы, пока программа не прекратит его использовать. Однако файл тут же удаляется из списка каталога. Вы можете легко это видеть при помощи такой программы, как more. Предположим, что у вас имеется файл, настолько большой, что его присутствие влияет на вывод команд du и df. (Так как в настоящее время диски могут быть настолько большими, это может быть очень большой файл!) Если вы удалите этот файл в процессе работы more над ним, на команду more это не повлияет и она не сообщит, что не может просматривать файл. Запись о файле просто удалена из каталога, так что другие программы или пользователи не смогут к нему обратиться. du покажет, что файл исчез -- она просматривает дерево каталогов, а файла там не будет. df показывает, что он все еще здесь, так как файловая система знает, что more все еще использует это пространство. Как только вы закончите работу с more, команды du и df придут в соответствие.

Заметьте, что подсистема мягких обновлений (softupdates) может задерживать освобождение дискового пространства; вам может потребоваться подождать до 30 секунд, прежде, чем изменения будут заметны!

Такая ситуация часта на веб-серверах. Многие устанавливают веб-сервер на FreeBSD и забывают обновлять файлы протоколов. Журнал доступа заполняет /var. Новый администратор удаляет файл, но система все еще сообщает о том, что раздел заполнен. Остановка и перезапуск программы веб-сервера освободит файл, позволяя системе освободить дисковое пространство. Для предотвращения этого настройте newsyslog(8).

8.16. На каких разделах можно без опаски использовать систему softupdates? Я слышал, что мягкие обновления на / могут приводить к проблемам.

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

Подробный ответ: Были несколько аргументов против использования мягких обновлений на корневом разделе. Мягкие обновления имеют две характеристики, которые этому способствуют. Во-первых, раздел с мягкими обновлениями имеет мало шансов потери данных по время аварийного остановва системы. (Раздел не будет попорчен; просто будут потеряны данные.) также мягкие обновления могут приводить к временной нехватке пространства.

При использовании мягких обновлений ядро может задерживать до тридцати секунд реальную запись изменений на физический диск. Если вы удаляете большой файл, он остается на диске, пока ядро не выполнит удаления на самом деле. Это может привести к очень простой проблеме. Предположим, что вы удалили один большой файл и тут же создали другой большой файл. Первый большой файл еще не удален реально с физического диска, так что на диске может не оказаться достаточного пространства для второго большого файла. Вы получите ошибку, говорящую о том, что на разделе нет достаточного пространства, хотя вы точно знаете, что только что освободили его большой объем! Если вы попробуете еще раз выполнить операцию секундами позже, создание файла сработает так, как это и ожидалось. Это не раз заставляло пользователей почесать голову и дважды проверить свое психическое здоровье, файловую систему FreeBSD и оба этих объекта.

Если система может аварийно остановиться после того, как ядро примет набор данных для записи на диск, но перед тем, как данные реально запишутся, то данные могут потеряться или оказаться испорченными. Такой риск весьма мал, но в общем-то, управляем. Использование кэширование записи на IDE очень сильно увеличивает этот риск; настоятельно рекомендуется выключить кэширование записи для IDE при использовании мягких обновлений.

Эти проблемы влияют на все разделы, использующие мягкие обновления. Итак, что это означает для корневого раздела?

Жизненно важная информация на корневом разделе меняется очень редко. Файлы, такие, как /kernel и содержимое /etc меняется только при обслуживании системы, или когда пользователи меняют свои пароли. Если в системе произойдет сбой в период тридцатисекундного окна после выполнения такого изменения, возможно, что данные окажутся потерянными. Этот риск незначителен для большинства применений, но вы должны иметь в виду, что он есть. Если ваша система не может принять такой риск, не используйте мягкие обновления с корневой файловой системой!

/ традиционно является одним из самых маленьких разделов. По умолчанию FreeBSD размещает каталог /tmp в /. Если у вас забит /tmp, вы можете встретиться с возникающими время от времени проблемами с исковым пространством. Создание символической ссылки /tmp, указывающей на /var/tmp, решит эту проблему.

8.17. Как добавить дополнительную виртуальную память?

Наилучший способ - увеличить размер раздела подкачки, может быть, добавив для этого ещё один диск. Общим правилом является выбор размера виртуальной памяти, в два раза превышающий объём физической памяти. Однако, если у вас очень мало физической памяти, этот объём гораздо больше. Хорошей практикой является задание достаточного объёма виртуальной памяти в ожидании добавления физической памяти, чтобы потом не испытывать трудностей.

Перенос виртуальной памяти на отдельный диск увеличивает быстродействие системы по сравнению с добавлением виртуальной памяти на том же диске. Например, компиляция исходных текстов происходит быстрее, если они находятся не на том же диске, что и раздел подкачки. Особенно это заметно для дисков SCSI.

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

Диски IDE не позволяют реализовать одновременный доступ к обоим дискам по одному каналу (FreeBSD не поддерживает режим 4, так что весь ввод/вывод для дисков IDE "программируется"). Однако всё равно рекомендуем перенести раздел подкачки на отдельный диск: они достаточно дешёвые, и экономить тут не на чем.

Использование NFS для размещения раздела подкачки рекомендуется только в случае, если у вас нет локального диска. Подкачка поверх NFS медленна и неэффективна в релизах FreeBSD до 4.x, хотя достаточно быстра в релизах 4.0 и выше. Кроме того, её скорость будет ограничена реальной пропускной способностью сети и это даст дополнительную нагрузку на NFS-сервер.

Вот пример vn-файла подкачки размером 64Мб (/usr/swap0, хотя, конечно, вы можете выбрать любое другое имя.

Удостоверьтесь, что ядро откомпилировано со строкой

    pseudo-device   vn 1   #Vnode driver (turns a file into a device)
     

в конфигурационном файле. Ядро GENERIC её содержит.

  1. создайте vn-устройство

        # cd /dev
        # sh MAKEDEV vn0
             
    
  2. создайте файл подкачки (/usr/swap0)

        # dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
             
    
  3. установите корректные права на файл (/usr/swap0)

        # chmod 0600 /usr/swap0
             
    
  4. включите использование файла подкачки в /etc/rc.conf

        swapfile="/usr/swap0"   # Set to name of swapfile if aux swapfile desired.
             
    
  5. перезагрузите машину

Чтобы включить использование файла подкачки немедленно, наберите

    # vnconfig -e /dev/vn0b /usr/swap0 swap
     

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

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

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

Эта программа создаёт выходной поток при помощи протокола PPA (printer performance architecture). Этот протокол используется в некоторых принтерах "только для Windows" от HP, включая модели линеек HP Deskjet 820C, HP DeskJet 720 и HP DeskJet 1000. [...]

WWW: http://pnm2ppa.sourceforge.net/

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

Программа kbdcontrol имеет параметр, задающий файл раскладки. Файлы раскладок находятся в каталоге /usr/share/syscons/keymaps. Выберите соответствующий вашей системе и загрузите его.

    # kbdcontrol -l uk.iso
     

Программа kbdcontrol(1) предполагает использование каталога /usr/share/syscons/keymaps и расширения .kbd.

Это может быть настроено в файле /etc/sysconfig (или rc.conf(5)). Обратитесь к соответствующим комментариям в этом файле.

В системах 2.0.5R и выше, всё, относящееся к знакогенератору, раскладке клавиатуры, находится в каталоге /usr/share/examples/syscons.

На данный момент поддерживаются следующие раскладки:

  • Belgian ISO-8859-1

  • Brazilian 275 keyboard Codepage 850

  • Brazilian 275 keyboard ISO-8859-1

  • Danish Codepage 865

  • Danish ISO-8859-1

  • French ISO-8859-1

  • German Codepage 850

  • German ISO-8859-1

  • Italian ISO-8859-1

  • Japanese 106

  • Japanese 106x

  • Latin American

  • Norwegian ISO-8859-1

  • Polish ISO-8859-2 (programmer's)

  • Russian Codepage 866 (alternative)

  • Russian koi8-r (shift)

  • Russian koi8-r

  • Spanish ISO-8859-1

  • Swedish Codepage 850

  • Swedish ISO-8859-1

  • Swiss-German ISO-8859-1

  • United Kingdom Codepage 850

  • United Kingdom ISO-8859-1

  • United States of America ISO-8859-1

  • United States of America dvorak

  • United States of America dvorakx

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

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

 

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

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

8.21. Не получается заставить работать дисковые квоты.

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

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

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

8.22. Что не так с устройством ccd?

Симптом выглядит так:

    # ccdconfig -C
    ccdconfig: ioctl (CCDIOCSET): /dev/ccd0c: Inappropriate file type or format
     

Это сообщение обычно выдаётся, когда вы пытаетесь объединить разделы c, по умолчанию имеющие тип unused. Драйвер ccd требует, чтобы используемые разделы имели тип FS_BSDFFS. Отредактируйте метки тех дисков, которые вы хотите использовать, сменив типы разделов на 4.2BSD.

8.23. Почему невозможно отредактировать метку диска ccd?

Симптом выглядит так:

    # disklabel ccd0
    (здесь выводится информация о диске, пробуем отредактировать метку)
    # disklabel -e ccd0
    (редактирование, сохранение, выход)
    disklabel: ioctl DIOCWDINFO: No disk label on disk;
    use "disklabel -r" to install initial label
     

Это происходит из-за того, что метка диска, возвращаемая ccd, на самом деле "ненастоящая", не соответствующая реально располагающейся на диске. Вы можете решить эту проблему, явно записав эту метку обратно следующим образом:

    # disklabel ccd0 > /tmp/disklabel.tmp
    # disklabel -Rr ccd0 /tmp/disklabel.tmp
    # disklabel -e ccd0
    (теперь это будет работать)
     

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

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

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

Note: Во FreeBSD 3.2 и выше эти параметры уже включены в ядро GENERIC, что уже означает их присутствие в вашей системе.

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

8.25. Как настроить sendmail для доставки почты по UUCP?

Конфигурация sendmail, поставляемая с FreeBSD, предназначена для сайтов, которые имеют непосредственный выход в Internet. Сайты, которым требуется обмениваться почтой по UUCP, должны использовать другой конфигурационный файл.

Ковыряние в файле /etc/sendmail.cf вручную - это занятие для пуристов (и мазохистов). Восьмая версия sendmail поставляется с новой системой генерации конфигурационных файлов с использованием препроцессора m4(1), в которой ручная настройка перенесена на более высокий уровень абстракции. Используйте конфигурационные файлы в каталоге /usr/src/usr.sbin/sendmail/cf.

Если вы не собираетесь инсталлировать все исходные тексты системы, специально для вас конфигурационные файлы sendmail выделены в отдельный дистрибутив. Если вы имеете смонтированный компакт-диск, выполните такую команду:

    # cd /cdrom/src
    # cat scontrib.?? | tar xzf - -C /usr/src contrib/sendmail
     

Не волнуйтесь, эти файлы занимают всего лишь несколько сотен килобайт. Файл README в каталоге cf может быть использован как начальное введение в конфигурацию m4.

Для доставки почты по UUCP лучше всего использовать mailertable. В этом файле содержится база данных, используемая sendmail при маршрутизации почты.

Первым делом создайте ваш файл .mc. Для таких файлов предназначен каталог /usr/src/usr.sbin/sendmail/cf/cf. Посмотрите в нём, там есть уже несколько примеров. Положим, что вы назвали ваш файл foo.mc, всё, что вам нужно для преобразования его в нормальный sendmail.cf, это:

    # cd /usr/src/usr.sbin/sendmail/cf/cf
    # make foo.cf
    # cp foo.cf /etc/mail/sendmail.cf

Типичный файл .mc выглядит примерно так:

    VERSIONID(`Your version number')
    OSTYPE(bsd4.4)
    
    FEATURE(accept_unresolvable_domains)
    FEATURE(nocanonify)
    FEATURE(mailertable, `hash -o /etc/mail/mailertable')
    
    define(`UUCP_RELAY', your.uucp.relay)
    define(`UUCP_MAX_SIZE', 200000)
    define(`confDONT_PROBE_INTERFACES')
    
    MAILER(local)
    MAILER(smtp)
    MAILER(uucp)
    
    Cw    your.alias.host.name
    Cw    youruucpnodename.UUCP
     

Строки, в которых содержатся параметры accept_unresolvable_domains, nocanonify и confDONT_PROBE_INTERFACES, подавляют всяческое использование DNS в процессе доставки. Строка UUCP_RELAY может понадобиться только в очень странных случаях, не спрашивайте о них. Просто поместите здесь имя хоста Internet, который может обрабатывать адреса с псевдо-доменами .UUCP; в большинстве случаев достаточно поставить сюда имя почтового шлюза вашего провайдера.

Как только вы сгенерируете конфигурационный файл, вам понадобится файл /etc/mail/mailertable. Если имеется единственный канал связи со внешним миром, который используется для всей вашей почты, то следующего файла будет достаточно:

    #
    # makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
    .                             uucp-dom:your.uucp.relay

Более сложный пример может выглядеть примерно так:

    #
    # makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
    #
    horus.interface-business.de   uucp-dom:horus
    .interface-business.de        uucp-dom:if-bus
    interface-business.de         uucp-dom:if-bus
    .heep.sax.de                  smtp8:%1
    horus.UUCP                    uucp-dom:horus
    if-bus.UUCP                   uucp-dom:if-bus
    .                             uucp-dom:
     

Как видите, это часть реально существующего файла. Первые три строки описывают особые случаи, когда почта, направленная на некоторые домены, будет посылаться не по стандартному маршруту, а на некоторую близлежащую UUCP-систему для "сокращения" маршрута доставки. Следующая строка описывает, что почта на локальный домен в сети Ethernet может быть доставлена по SMTP. В конце файла описаны близлежащие системы UUCP в псевдо-домене .UUCP, что позволит выполнять правильную доставку почты на адреса uucp-система!получатель. В последней строке всегда присутствует одна точка, соответствующая всем остальным доменам, с доставкой по UUCP на ближнюю систему UUCP, который является универсальный почтовым шлюзом во весь остальной мир. Все имена узлов после uucp-dom: должны быть реально существующими узлами UUCP, что можно проверить командой uuname.

Как напоминание о том, что этот файл должен быть преобразован в формат базы данных DBM перед использованием, командная строка, выполняющая это действие, помещена как комментарий в начало файла. При изменении mailertable всегда нужно выполнять эту команду.

Последняя подсказка: если вы не уверены в правильности настройки маршрутизации почты, используйте sendmail с опцией -bt. Она переводит sendmail в режим проверки адресов; просто введите 3,0, а затем адрес, который вы хотите протестировать на правильность маршрутизации. В последней строке будут указаны используемый почтовый агент, хост получателя, с которым будет работать этот агент, и (может быть преобразованный) адрес. Выход их этого режима осуществляется по Control-D.

    % sendmail -bt
    ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
    Enter <ruleset> <address>
    > 3,0 foo@example.com
    canonify           input: foo @ example . com
    ...
    parse            returns: $# uucp-dom $@ your.uucp.relay $: foo < @ example . com . >
    > ^D
     

8.26. Как настроить почту при коммутируемом соединении с Internet?

Если адрес IP вам выделен статически, то вам не нужно ничего менять. Установите имя вашего хоста в соответствии с выделенным именем DNS, а sendmail сделает всё остальное.

Если ваш IP-адрес выделяется динамически при коммутируемом соединении по протоколу ppp с Internet, может быть, вам выделен почтовый ящик на сервере провайдера. Предположим, что домен вашего провайдера называется myISP.com, а ваше имя пользователя - user. Также положим, что вы назвали вашу машину bsd.home, и что ваш провайдер сказал, что вы можете использовать relay.myISP.com в качестве почтового шлюза.

Чтобы забирать почту из вашего почтового ящика, вам нужно установить соответствующий агент. Хорошим агентом является программа fetchmail, так как она поддерживает много различных протоколов. Обычно провайдеры предлагают POP3. Если вы используете user-ppp, то можете автоматически забирать вашу почту при установлении соединения с Internet, добавив такую строку в файл /etc/ppp/ppp.linkup:

    MYADDR:
      !bg su user -c fetchmail
     

Если вы используете sendmail (как показано ниже) для доставки почты для внешних пользователей, поместите команду

      !bg su user -c "sendmail -q"
     

после вышеуказанной строки. Это заставит sendmail обработать вашу очередь почтовых сообщений, как только будет осуществлено подключение к сети.

Предположим, что вы имеет учётную запись для user на машине bsd.home. В домашнем каталоге пользователя user на машине bsd.home создайте файл .fetchmailrc такого содержания:

    poll myISP.com protocol pop3 fetchall pass MySecret
     

Излишним будет напоминание о том, что этот файл никому не должен быть доступен для чтения, кроме пользователя user, потому что он содержит пароль MySecret доступа к почтовому ящику.

Чтобы посылать почту с правильным заголовком from:, вы должны указать программе sendmail использовать user@myISP.com, а не user@bsd.home. Вам может понадобиться настроить sendmail для посылки всей почты через relay.myISP.com, чтобы ускорить её передачу.

Следующий файл .mc должен подойти:

    VERSIONID(`bsd.home.mc version 1.0')
    OSTYPE(bsd4.4)dnl
    FEATURE(nouucp)dnl
    MAILER(local)dnl
    MAILER(smtp)dnl
    Cwlocalhost
    Cwbsd.home
    MASQUERADE_AS(`myISP.com')dnl
    FEATURE(allmasquerade)dnl
    FEATURE(masquerade_envelope)dnl
    FEATURE(nocanonify)dnl
    FEATURE(nodns)dnl
    define(`SMART_HOST', `relay.myISP.com')
    Dmbsd.home
    define(`confDOMAIN_NAME',`bsd.home')dnl
    define(`confDELIVERY_MODE',`deferred')dnl
     

В предыдущем разделе описано, как преобразовать файл .mc в sendmail.cf. И не забудьте перезапустить sendmail после обновления файла sendmail.cf.

8.27. Что это за пользователь toor с UID 0? Я подвергся взлому?

Не волнуйтесь, toor является "альтернативным" адимнистративным пользователем (toor - это root, записанный задом наперед). Раньше он создавался при установке командного интерпретатора bash(1), однако теперь он создается по умолчанию. Его предполагается использовать с нестандартным командным интерпретатором, так чтобы вам не нужно было менять используемый по умолчанию командный процессор для пользователя root. Это важно, так как оболочки, не являющиеся частью дистрибутива системы (например, командный процессор, устанавливаемый из портов или пакаджей), скорее всего, устанавливаются в каталог /usr/local/bin, который по умолчанию располагается в другой файловой системе. Если командный процессор для пользователя root располагается в /usr/local/bin, и /usr (или другая файловая система, содержащая /usr/local/bin) по какой-либо причине не смонтирована, то root не сможет войти в систему для исправления этой проблемы (хотя если вы перезагрузите систему в однопользовательский режим, вы сможете указать командный процессор).

Некоторые используют toor для выполнения повседневных административных работ с нестандартным командным процессором, оставляя root со стандартной оболочкой для работы в однопользовательском режиме или выполнения аварийных работ. По умолчанию вы не сможете войти в систему как пользователь toor, потому что у него нет пароля, так что, если вы хотите его использовать, зарегистрируйтесь в системе как root и задайте пароль для пользователя toor.

8.28. Ой! Я забыл пароль администратора!

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

8.29. Как запретить перезагрузку по клавишам Control-Alt-Delete?

Если вы используете драйвер консоли syscons (который является стандартным) во FreeBSD 2.2.7-RELEASE и выше, перегенерируйте и установите новое ядро со строчкой

    options SC_DISABLE_REBOOT

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

    options PCVT_CTRL_ALT_DEL

Для более старых версий FreeBSD отредактируйте используемый для консоли файл раскладки клавиатуры, заменив ключевые слова boot на nop. Используемая по умолчанию раскладка находится в файле /usr/share/syscons/keymaps/us.iso.kbd. Вам может потребоваться явно указать в файле /etc/rc.conf загрузку этой раскладки, чтобы она действительно поменялась. Конечно, если в вашей стране вы используете другую раскладку, вы должны отредактировать именно её.

8.30. Как преобразовать текстовые файлы 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.

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

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

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

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

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

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

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

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

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

Если у вас много пользователей, работающий в сеансах 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. Теперь осталось только перезапустить систему с новым ядром.

8.35. Не получается создать устройство snd0!

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

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

    # cd /dev
    # sh MAKEDEV snd0
     

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

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

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

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

8.37. Что означает термин sandbox (песочница)?

"Sandbox" - это термин, используемый при обеспечении безопасности. Он имеет два значения:

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

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

    Стеной может служить, например, идентификатор пользователя. Вот определение, даваемое на страницах справочника по named и часто используемое при обсуждении безопасности систем.

    Рассмотрим, например, службу ntalk (смотрите /etc/inetd.conf). Раньше эта служба запускалась с идентификатором пользователя root, а сейчас - tty. Пользователь tty - это та песочница, которая осложняет взлом системы через ntalk посредством использования этого идентификатора пользователя.

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

    Самым распространённым способом достигнуть такого результата является построение имитирующего окружения в каталоге и затем запуск процессов и этом каталоге через chroot (т.е. задав этот каталог в качестве / для этого процесса, а не реальный / всей системы).

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

    Попытка сделать такой тип песочницы настолько прозрачна, что пользователь (или взломщик) даже не поймёт, что он в ней находится.

В Unix реализованы два типа "песочниц". Один на уровне процесса, и один на уровне идентификаторов пользователей.

Каждый процесс в Unix полностью защищён от других процессов. Никакой процесс не может модифицировать адресное пространство другого процесса. Это отличается от Windows, где процесс может легко записать что-либо в адресное пространство другого процесса, что приводит к аварийным ситуациям.

В Unix каждым процессом владеет некоторый идентификатор пользователя. Если этот пользователь не root, он ограждает процесс от других, владельцами которых являются другие пользователи. Этот идентификатор используется также для защиты данных на диске.

8.38. Что такое уровень защиты (securelevel)?

Уровень защиты является механизмом обеспечения безопасности, реализованным в ядре. В общем, когда уровень защиты больше нуля, ядро ограничивает выполнение некоторых операций; даже администратору (то есть пользователю root) запрещается их выполнять. На момент написания этого текста механизм уровня защиты может, кроме всего прочего, ограничивать возможности по

  • снятию некоторых флагов с файлов, таких, как schg (системный флаг неизменямости),

  • записи в память ядра через устройства /dev/mem и /dev/kmem,

  • загрузке модулей ядра и

  • изменению правил для ipfirewall(4).

Для выяснения состояния уровня защиты в работающей сситеме просто выполните следующую команду:

    # sysctl kern.securelevel

Результат будет содержать название sysctl(8)-переменной (в нашем случае это kern.securelevel) и число. Последнее и является текущим значением уровня защиты. Если оно положительно (то есть больше нуля), то по крайней мере некоторые из защит этого механизма включены.

Вы не можете понизить уровень защиты работающей системы; возможность сделать это противоречит назначению этого механизма. Если вам нужно выполнить работу, которая требует не положительный уровень защиты (к примеру, выполнение installworld или смена даты), вам потребуется изменить настройки уровня защиты системы в файле /etc/rc.conf (вам нужно обратить внимание на переменные kern_securelevel и kern_securelevel_enable) и перезагрузить систему.

Более подробная информация об уровнях защиты и о том, какие специфические действия выполняют все уровни, может быть найдена на справочных страницах о init(8).

WarningУровень защиты не является панацеей; в нем есть много недостатков. Зачастую он дает обманчивое чувство безопасности.

Одной из самых больших проблем является то, что для его эффективной работы все файлы, используемые в процессе загрузки, должны быть защищены. Если атакующий сможет заставить систему выполнять свой код до установки уровня защиты (что происходит достаточно поздно во время процесса загрузки, так как некоторые вещи, выполняемые системой в это время, не могут быть сделаны при повышенном уровне защиты), то эта защита может быть отключена. Хотя такая задача по защите всех файлов, используемых в процессе загрузки, технически вполне осуществима, если это будет сделано, то поддержка системы станет кошмаром, так как для изменения конфигурационного файла придется останавливать систему, переводя ее по крайней мере в однопользовательский режим.

Это обстоятельство, а также ряд других, часто обсуждаются в списках рассылки, в частности, во freebsd-security. Пожалуйста, поищите в архивах более подробное обсуждение. Некоторые надеются, что механизм уровней защиты вскоре отомрет, а на его смену придет более гибкий механизм, но пока все это туманно.

Считайте себя предупреждённым.

8.39. Как разрешить обычным пользователям монтировать дискеты, компакт-диски и другие сменные носители?

Обычным пользователям можно позволить монтировать устройства. Вот как это делается:

  1. Как пользователь root, установите системную переменную vfs.usermount в значение 1.

        # sysctl -w vfs.usermount=1
             
    
  2. Работая пользователем root, назначьте соответствующие права на устройства с поблочным доступом, которые соответствуют сменным носителям.

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

        # chmod 666 /dev/fd0
    

    Чтобы разрешить пользователям из группы operator монтировать компакт-диски, сделайте так:

        # chgrp operator /dev/cd0c
        # chmod 640 /dev/cd0c
             
    
  3. Наконец, добавьте строчку vfs.usermount=1 в файл /etc/sysctl.conf, чтобы она срабатывала во время загрузки системы.

Теперь все пользователи могут монтировать дискету /dev/fd0 в собственные каталоги:

    % mkdir ~/my-mount-point
    % mount -t msdos /dev/fd0 ~/my-mount-point
     

Пользователи из группы operator теперь могут монтировать компакт-диск /dev/cd0c в собственные каталоги:

    % mkdir ~/my-mount-point
    % mount -t msdos /dev/cd0c ~/my-mount-point
     

Размонтировка устройства осуществляется просто:

    % umount ~/my-mount-point
     

Использование vfs.usermount, однако, имеет некоторые негативные стороны, связанные с вопросами безопасности. Более правильным способом работы с носителями в формате MSDOS является использование пакета mtools из коллекции портов.

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

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

Если вы решили не делать новой установки, то вам нужно разбить на разделы и разметить новый диск с помощью /stand/sysinstall или fdisk(8) и disklabel(8). Вы также должны установить на оба диска программу booteasy с помощью boot0cfg(8), чтобы иметь возможность выполнять загрузку как старой, так и новой системы после выполнения копирования. Обратитесь к руководству по форматированию носителей за подробным описанием этого процесса.

Итак, после подготовки диска вы можете переносить данные. К сожалению, вы не можете просто скопировать данные. Такие вещи, как файлы устройств (в каталоге /dev), флаги и ссылки будут этому мешать. Вам нужно использовать инструменты, которые работают с такими случаями, а именно dump(8). Хотя рекомендуется выполнять перенос данных в однопользовательском режиме, это не обязательное условие.

Вы не должны использовать ничего, кроме dump(8) и restore(8) для переноса корневой файловой системы. Команда tar(1) может сработать, а может и не сработать. Также вы должны использовать dump(8) и restore(8) при переносе одного раздела в другой пустой раздел. Последовательность шагов при использовании программы dump для переноса данных раздела в новый раздел такова:

  1. выполните команду newfs над новым разделом.

  2. смонтируйте его во временный каталог.

  3. перейдите в этот каталог.

  4. Выполните команду dump над старым разделом, направив вывод в новый раздел.

Например, если вы собираетесь перенести корневую файловую систему на устройство /dev/ad1s1a с использованием каталога /mnt в качестве временной точки монтирования, то это делается так:

    # newfs /dev/ad1s1a
    # mount /dev/ad1s1a /mnt
    # cd /mnt
    # dump 0af - / | restore xf -

Переразбиение разделов с использованием dump требует несколько больше усилий. Для объединения раздела типа /var с его вышестоящим разделом, создайте новый раздел, достаточно большой для размещенияих их обоих, переместите вышестоящий раздел так, как это описано выше, а затем переместите нижестоящий раздел в пустой каталог, созданный при первом перемещении:

    # newfs /dev/ad1s1a
    # mount /dev/ad1s1a /mnt
    # cd /mnt
    # dump 0af - / | restore xf -
    # cd var
    # dump 0af - /var | restore xf -

Для отделения каталога от вышестоящего, скажем, для размещения /var в собственном разделе, которого не было, создайте оба раздела, затем смонтируйте нижестоящий раздел в подходящий каталог во временную точку монтирования, а затем переместите старый единый раздел:

    # newfs /dev/ad1s1a
    # newfs /dev/ad1s1d
    # mount /dev/ad1s1a /mnt
    # mkdir /mnt/var
    # mount /dev/ad1s1d /mnt/var
    # cd /mnt
    # dump 0af - / | restore xf -

Вы можете использовать cpio(1), pax(1), tar(1) вместо dump(8) для данных пользователей. На момент написания этого документа было известно, что они теряют информацию о флагах файлов, так что используйте их с осторожностью.

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

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

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

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

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

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

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

    # sysctl kern.securelevel
     

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

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

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

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

    # sysctl kern.securelevel
     

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

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

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

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

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

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

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

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

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

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

8.47. Существует ли криптографическая файловая система для FreeBSD?

Да; посмотрите порт security/cfs.

8.48. Как сменить приглашение загрузчика с ??? на что-нибудь более значащее?

Вы не можете сделать это со стандартным менеджером загрузки, не переписав его. Среди портов из категории sysutils есть несколько других менеджеров загрузки, которые предоставляют такую функциональность.



Украинская Баннерная Сеть

Главная  Алфавитный индекс  Справка  Добавить FAQ  E-mail
Новости  Поиск по сайту

Copyright © 2002 УкрFAQ
Сайт создан в системе uCoz