Product SiteDocumentation Site

8.9. Другие настройки: Синхронизация времени, Журналы, Разделение Доступа…

Многие элементы, перечисленные в данной главе, полезно знать тем, кто хочет освоить все стороны настройки систем GNU/Linux. Однако, они описаны кратко, а за подробной информацией рекомендуется обратиться к документации.

8.9.1. Timezone (Часовой пояс)

Часовой пояс определяется в процессе установки дистрибутива на машину, входит в пакет tzdata. При необходимости изменить часовой пояс запустите команду dpkg-reconfigure tzdata. Ответьте на несколько вопросов в интерактивном режиме и программа установит новый часовой пояс на вашей машине. Эти настройки сохраняются в файле /etc/timezone. Дополнительно /etc/localtime становится символической ссылкой на соответствующий файл в /usr/share/zoneinfo; файл, содержащий правила, определяющие даты перехода на летнее время (DST) активен для стран, которые его используют.
Если вам понадобится временно изменить часовой пояс, используйте переменную окружения TZ, которая будет иметь приоритет над настройками окружения, которые обычно используются "по умолчанию":
$ date
Thu Sep  2 22:29:48 CEST 2021
$ TZ="Pacific/Honolulu" date
Thu 02 Sep 2021 10:31:01 AM HST

8.9.2. Синхронизация Времени

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

8.9.2.1. Для Рабочих Станций

Поскольку рабочие станции регулярно перезагружаются (хотя бы для экономии энергии), то их синхронизации по NTP при загрузке вполне достаточно. Для этого надо просто установить пакет ntpdate. Можно также изменить NTP сервер, который будет использоваться, отредактировав файл /etc/default/ntpdate.

8.9.2.2. Для Серверов

Сервера крайне редко перезагружаются, поэтому очень важно, чтобы их системное время всегда было корректно установлено. Чтобы постоянно поддерживать правильное время, установите локальный NTP сервер. Данная возможность включена в пакет ntp. В настройках по умолчанию сервер, с одной стороны, будет синхронизироваться с внешним публичным сервером pool.ntp.org и, с другой стороны, будет предоставлять данные о дате и времени в ответ на запросы, поступающие из локальной сети. Вы можете редактировать файл /etc/ntp.conf, изменив в нём NTP сервер, который будет использоваться для синхронизации (наиболее часто изменяемая опция). Если в сети много серверов, то вас может заинтересовать вариант с локальным сервером времени, синхронизирующимся с публичным сервером. Он же будет использоваться в качестве источника для других серверов сети.

8.9.3. Смена Журналов Событий

Так как со временем журналы событий могут быстро увеличиваться, возникает необходимость их периодического архивирования. Наиболее распространённой схемой является чередование архивов: журнал событий регулярно архивируется, и только последний X архив сохраняется. Программа logrotate является инициатором этих чередований, она руководствуется правилами, прописанными в: файле /etc/logrotate.conf и во всех файлах, расположенных в каталоге /etc/logrotate.d/. Администратор может модифицировать эти файлы, если желает приспособить политику чередования событий, определённую в Debian, к своим нуждам. Страница руководства logrotate(1) описывает все параметры, доступные в тех конфигурационных файлах. Возможно вы захотите: увеличить количество файлов, сохраняемых при чередовании журналов событий, или переместить журналы событий в определённый каталог, предназначенный для их архивирования (не удаляя старые журналы). Вы можете также послать их по e-mail для архивирования где-нибудь в другом месте.
Программа logrotate выполняется ежедневно, её запуск выполняет планировщик задач cron (см. Раздел 9.7, «Планирование задач с помощью cron и atd»).

8.9.4. Совместное использование прав администратора (делегирование части полномочий другому пользователю или старшему администратору)

Часто несколько администраторов работают в одной и той же сети. Первый самый простой способ для обеспечения возможности им совместно работать - вариант, при котором все администраторы имеют право работать в этой сети под одним и тем же паролем администратора. Такое решение не является наилучшим, так как открывает лазейки для выполнения кем-то из них недопустимых действий, а из-за анонимности - избежать ответственности в дальнейшем. Решением данной проблемы является программа sudo, которая позволяет определённым пользователям выполнять оговоренные команды со специальными правами. В наиболее распространённом случае её использования (применяемом часто из-за простоты, а не из-за того, что это наилучшее решение), sudo позволяет доверить пользователю выполнение любой команды от лица администратора. Для этого пользователь просто выполняет sudo command и для проверки подлинности использует свой персональный пароль (при этом, что очень важно, все действия такого пользователя записываются в специальный журнал событий и в дальнейшем можно легко отследить кто и что сделал).
При установке пакет sudo предоставляет полные root-права членам группы Unix sudo. Чтобы делегировать другие права, администратор может использовать команду visudo, которая позволяет ему изменять файл конфигурации /etc/sudoers/(здесь снова будет вызван редактор vi или любой другой редактор, указанный в переменная среды EDITOR). В качестве альтернативы они могут помещать правила в файлы в /etc/sudoers.d/, если этот каталог включен в /etc/sudoers/ через @includedir /etc/sudoers.d, который является по умолчанию для Debian. Добавление строки с username ALL=(ALL) ALL позволяет соответствующему пользователю выполнять любую команду от имени пользователя root.
Более тонкие настройки дают возможность наделить определёнными полномочиями отдельных пользователей, то есть уполномочить их на выполнение тех или иных действий, не давая им при этом полных прав администратора, даже под "sudo". Детальную информацию вы можете получить на страницах руководства sudoers(5).

8.9.5. Список Точек Монтирования

В файле /etc/fstab перечислены все возможные варианты монтирования (разрешённые администратором на данной системе), которые выполняются автоматически при загрузке системы и позволенные опции для монтирования в дальнейшем вручную для съёмных запоминающих устройств (например CDROM). Каждой точке монтирования выделена одна строка. Она содержит несколько полей, используя в качестве разделителей пробелы:
  • файловая система: указывает, где можно найти монтируемую файловую систему, это может быть локальное устройство (раздел жёсткого диска, CD-ROM) или удалённая файловая система (например, NFS или даже SSHFS).
    Это поле часто заменяется уникальным идентификатором файловой системы (который вы можете определить с помощью команды blkid device), введя в качестве префикса UUID= (то есть вы указываете что нужно смонтировать не в привычном нам виде, как например "/dev/sdc1", а в виде "mount UUID=8e9cb4e1-5aa0-4340-b43e-a489741299fa1 /mnt/point"). Это защищает от изменения имени устройства в случае добавления или удаления дисков, а также в случае обнаружения дисков в другом порядке (поскольку ядро нумерует все присоединяемые физически к компьютеру устройства по мере их подключения. К примеру ранее опознанное устройство как sdc1 через два-три дня может быть опознано как sdf1, смотрите "dmesg"). Чтобы этого избежать и рекомендуется при монтировании указывать ID устройства в явной, то есть конкретной форме (UUID=8e9cb4e1-5aa0-4340-b43e-a489741299fa1) Таким образом ID этого устройства будет одним и тем же и в дальнейшем. Раздел 8.8.1, «Идентификация Дисков» раскрывает эту тему более подробно.
  • точка монтирования: это точка (местоположение в локальной файловой системе), в которую будет присоединено (примонтировано) устройство, удалённая система, раздел диска и т.д.
  • тип: это поле описывает, какая файловая система используется на монтируемом устройстве. К примеру: ext4, ext3, vfat, ntfs, btrfs, xfs и другие.
    С полным перечнем, известных программе "mount (unmount)" файловых систем, можно ознакомиться в руководстве mount(8). Специальный тип файловой системы swap предназначен для раздела подкачки (виртуальная память); специальный параметр auto сообщит программе mount, что ей нужно попытаться самой автоматически определить тип файловой системы (особенно полезно для устройств чтения дисков и USB-ключей, поскольку у каждого из них может быть своя файловая система);
  • опции: их много, в зависимости от файловой системы, и они задокументированы в man-странице mount. Наиболее известные из них
    • rw или ro - это означает, соответственно, что устройство будет смонтировано с разрешениями на чтение/запись или только чтение. ("rw" - read/write , "ro" - read only).
    • noauto - отключает автоматическое монтирование устройства при загрузке системы (в нижеприведённом примере можно заменить scd0 на sr0 для CDROM/DVD, если dmesg таким образом опознаёт его).
    • nofail - позволит выполнять далее загрузку, несмотря на то, что какое-то внешнее устройство не представлено в настоящий момент в системе. Убедитесь, что включили этот параметр именно для того дополнительного устройства, которое, так может случиться, будет отсоединено физически от компьютера в момент загрузки системы. Команда systemd действительно гарантирует то, что всё, что должно было быть смонтировано в системе, будет сделано своевременно, присвоив им до этого наименования, и далее процесс загрузки нормально дойдёт до конца. Обратите внимание, что вы можете скомбинировать этот параметр с x-systemd.device-timeout=5s, чтобы сказать systemd не ожидать более чем 5 сек появления внешнего устройства в системе (смотрите руководство systemd.mount(5)).
    • user - разрешает всем пользователям монтировать эту файловую систему (операция, которая в противном случае была бы доступна только пользователю root).
    • defaults - значит применить группу параметров по умолчанию, включающих в себя: rw, suid, dev, exec, auto, nouser и async. Каждый из них может быть отключён индивидуально добавлением после defaults следующих записей - nosuid, nodev, которые исключат тот или иной параметр из группы по умолчанию (в данном примере исключаются suid, dev). При добавлении после "defaults" слова user будет выполнено противоположное по смыслу действие - то есть отключение "группы параметров по умолчанию", поскольку defaults сам в своём списке уже включает nouser.
  • dump: это поле почти всегда установлено в значение 0 и является своего рода реликвией. Когда оно больше нуля, это сообщает утилите dump, что раздел содержит данные, для которых необходимо часто выполнять резервное копирование. Инструмент поддерживает только файловые системы Ext2/3/4 и будет использовать это значение при запуске через команду dump -W или dump -w, чтобы определить, для каких разделов необходимо создать резервную копию. Если вы хотите использовать эту функцию, рассмотрите примеры в /usr/share/doc/dump/examples/. Но есть лучшие альтернативы для резервного копирования файловой системы, например, fsarchiver.
  • правило проверки: это последнее поле показывает - необходимо ли делать проверку файловых систем на предмет целостности в момент загрузки системы, и в каком порядке эта проверка должна быть выполнена. Если здесь установлено значение 0 - то это значит не проводить проверку. Для корневой файловой системы здесь должна быть установлена 1, а для других постоянных файловых систем здесь будет значение 2.

Пример 8.5. Пример файла /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system>                           <mount point>   <type>      <options>         <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=7a250fb8-c16d-4a4e-9808-ec08ae92b6c6 /               ext4        errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=13f367ae-dbaf-40ed-85c0-4072a2ebe426 none            swap        sw                0       0
/dev/sr0                                  /media/cdrom0   udf,iso9660 user,noauto       0       0
/dev/fd0                                  /media/floppy   auto        rw,user,noauto    0       0
arrakis:/shared                           /shared         nfs         defaults          0       0
В нижеприведённом примере последней записью подключается каталог сетевой файловой системы (NFS): каталог /shared/, размещённый физически на сервере arrakis будет присоединён в точку монтирования /shared/ на локальной машине.
Формат файла /etc/fstab задокументирован в странице руководства fstab(5).

8.9.6. locate и updatedb

Команда locate может найти месторасположение файла даже если вы знаете только часть его имени. Она выдаёт результат почти мгновенно, сначала лишь сверившись с базой данных, которая сохраняет месторасположение всех файлов, имеющихся в системе. Эта база данных обновляется ежедневно командой updatedb. Существует несколько разновидностей команды locate. Для включения в стандартную систему Debian выбрана её разновидность, называемая mlocate (входит в одноимённый). Как альтернативу вы можете попробовать plocate, который предоставляет те же параметры командной строки и может рассматриваться как замена.
Команда mlocate достаточно умна - при выдаче результата она учитывает права доступа и выдаёт лишь те файлы, что доступны запустившему её пользователю, несмотря на то, что она знает про все файлы, имеющиеся в системе (поскольку реализация этой программы updatedb запускается с правами администратора). Для дополнительной безопасности администратор может использовать PRUNEDPATHS в файле /etc/updatedb.conf для исключения из индексирования некоторых каталогов.