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 для доставки почты по UUCP?
10.12. Как настроить почту при коммутируемом соединении с Internet?
10.13. Какое другое программное обеспечение для почтового сервера можно использовать вместо Sendmail?
10.14. Ой! Я забыл пароль администратора!
10.15. Как запретить перезагрузку по клавишам Control-Alt-Delete?
10.16. Как преобразовать текстовые файлы DOS в формат Unix?
10.17. Как прервать процесс по имени?
10.18. Почему su выдаёт сообщение о том, что я не вхожу в root ACL?
10.19. Как деинсталлировать Kerberos?
10.20. Как добавить в систему дополнительные псевдотерминалы?
10.21. Не получается создать устройство snd0!
10.22. Как перечитать содержимое /etc/rc.conf и перестартовать /etc/rc без перезагрузки системы?
10.23. Что означает термин sandbox (песочница)?
10.24. Что такое уровень защиты (securelevel)?
10.25. Я пытался обновить мою систему до последней -STABLE, а получил -RC или -BETA! Что происходит?
10.26. Я попытался установить новое ядро, однако утилита chflags не сработала. Как это обойти?
10.27. Не получается изменить системное время больше чем на одну секунду! Как это обойти?
10.28. В rpc.statd; есть ошибка работы с памятью ! Он использует 256 Mb памяти !
10.29. Почему я не могу снять с файла флаг schg?
10.30. Почему SSH аутентификация посредством файла .shosts не включена по умолчанию в последних версия FreeBSD?
10.31. Как сменить приглашение загрузчика с ??? на что-нибудь более значащее?
10.32. Что такое vnlru?

10.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 или характеристик системной консоли ПК.

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. Раскладка клавиатуры неверна.

Программа 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

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

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

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

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

10.11. Как настроить 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 [email protected]
    canonify           input: foo @ example . com
    ...
    parse            returns: $# uucp-dom $@ your.uucp.relay $: foo < @ example . com . >
    > ^D

10.12. Как настроить почту при коммутируемом соединении с 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 использовать [email protected], а не [email protected]. Вам может понадобиться настроить 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.

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

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

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

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

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

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

10.15. Как запретить перезагрузку по клавишам 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 загрузку этой раскладки, чтобы она действительно поменялась. Конечно, если в вашей стране вы используете другую раскладку, вы должны отредактировать именно её.

10.16. Как преобразовать текстовые файлы 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.17. Как прервать процесс по имени?

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

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

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

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

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

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

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

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

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

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

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

    # cd /dev
    # sh MAKEDEV snd0

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

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

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

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

    # return
    # exit

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

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

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

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

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

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

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

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

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

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

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

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

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

10.24. Что такое уровень защиты (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. Пожалуйста, поищите в архивах более подробное обсуждение. Некоторые надеются, что механизм уровней защиты вскоре отомрет, а на его смену придет более гибкий механизм, но пока все это туманно.

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

10.25. Я пытался обновить мою систему до последней -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.

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

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

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

    # sysctl kern.securelevel

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

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

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

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

    # sysctl kern.securelevel

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

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

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

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

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

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

10.30. Почему 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.

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

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

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

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