Доброгог времени суток всем линуксоидам!
Сразу оговорюсь, я в линуксе новичек и мне хотелось бы получить ответы в более менее развернутом виде, с объяснениями что как куда и почему...
Есть задача - реализовать харденинг (укрепление системы) по требованиям Department of Defence (DoD) - http://www.defense.gov/
там можно найти документы, например вот этот
http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf
(который у нас используется как список требований, большую часть из которых надо реализовать, и не важно, почему ссылка с другого сервака)
Так вот, есть там пункт "2.1.1.1 Disk Partitioning". Вот у меня вопросы возникают прямо с первого подпункта.
2.1.1.1.1 Create Separate Partition or Logical Volume for /tmp
The /tmp directory is a world-writable directory used for temporary file storage. Ensure that it has its own partition or logical volume
там дальше нас отсылают к экселевскому файлу (http://nvd.nist.gov/ncp/DoD-RedHat-RHEL5-Settings.xls), где говорится, что это реализуется через fstab.
ВОПРОС: что именно я должен прописать в fstab? (это должно быть реализованно на перле и быть более менее универсальным, в смысле, без привязки к UUID)
ну и дальше есть аналогичные рекомендации по /var, /var/log и ещё интересно для меня пункт 2.2.1.4 Bind-mount /var/tmp to /tmp - как этот бинд делается через fstab?
Буду рад любым разъяснениям.
Заранее благодарен
Department of Defence (DoD) Hardening Requirements Implementation
ВОПРОС: что именно я должен прописать в fstab? (это должно быть реализованно на перле и быть более менее универсальным, в смысле, без привязки к UUID)
у меня написано
tmpfs /tmp tmpfs nodev,nosuid,size=768M 0 0
для безопасности лучше вообще не монтировать /tmp/ на диск.
ну и дальше есть аналогичные рекомендации по /var, /var/log
а вот эти приходится на диск.
2.2.1.4 Bind-mount /var/tmp to /tmp - как этот бинд делается через fstab?
можно и через fstab.
/tmp/ и /var/tmp это мусорки, и во первых их не надо мешать с системой, а во вторых их надо чистить. Но вторая по традиции должна выживать при перезагрузке, а первая не должна. Конечно лучше одну помойку держать, а не две.
2.1.1.1.1 Create Separate Partition or Logical Volume for /tmp
The /tmp directory is a world-writable directory used for temporary file storage. Ensure that it has its own partition or logical volume
там дальше нас отсылают к экселевскому файлу (http://nvd.nist.gov/ncp/DoD-RedHat-RHEL5-Settings.xls), где говорится, что это реализуется через fstab.
ВОПРОС: что именно я должен прописать в fstab? (это должно быть реализованно на перле и быть более менее универсальным, в смысле, без привязки к UUID)
ну и дальше есть аналогичные рекомендации по /var, /var/log и ещё интересно для меня пункт 2.2.1.4 Bind-mount /var/tmp to /tmp - как этот бинд делается через fstab?
Что именно требуется прописывать в fstab'е явно видно из самого fstab. cat /etc/fstab и читай эти несколько строчек до полного просветления. Там всё наглядно: что монтируем, куда монтируем, с какой файловой системой монтируем, опции монтирования.
А дальше - просто соображения. Документ рекомендует каталог /tmp размещать на отдельном разделе диска или логическом томе (LVM). Значит надо выделить этот отдельный том и удобным для себя способом (способов указать это много) прописать строчку в fstab. Но, если требуется приличная производительность системы, то размещать /tmp на жестком диске не есть эффективно. Его лучше разместить в оперативной памяти, то есть сделать /tmp как tmpfs. Помимо повышения скорострельности работы с временными файлами это даст и гарантии того, что если кто украдет компьютер, то изучение содержимого /tmp ему ничего не даст... И еще рекомендация - для большей устойчивости целесообразно монтировать /tmp как noexec.
Размещать /var на отдельном от корня разделе - не знаю в том большой целесообразности. А вот /var/log на высоконагруженном сервере лучше держать даже не на отдельном разделе, а на отдельном диске. Ну и тоже - с опцией noexec.
Далее - можно жить и без UUID (хотя узнать их элементарно - blkid), задавая имена устройств (например, /dev/sda1...). А можно вместо этого присвоить разделам метки (label) и вместо UUID в fstab прописывать эти осмысленные метки.
И главный секрет - последняя строчка в fstab должна быть пустой.
Bind-mount /var/tmp to /tmp? Не стоит совмещать эти два временных каталога. Если мне не изменяет память, то /tmp предназначен для хранения временных файлов, которые образуются в данном сеансе работы. То есть, после перезагрузки компа они не нужны. Поэтому /tmp можно размещать в памяти. А вот /var/tmp - нужен для хранения более долговременных временных файлов. Их лучше не совмещать в одном месте. А так - создай символьную ссылку /var/tmp на /tmp и всего делов.
Что именно требуется прописывать в fstab'е явно видно из самого fstab.
лармальные администраторы читают это:
FSTAB(5) File Formats FSTAB(5)
NAME
fstab - static information about the filesystems
SYNOPSIS
/etc/fstab
DESCRIPTION
The file fstab contains descriptive information about the various file systems. fstab is only read by programs, and
not written; it is the duty of the system administrator to properly create and maintain this file. Each filesystem is
described on a separate line; fields on each line are separated by tabs or spaces. Lines starting with '#' are com-
ments, blank lines are ignored. The order of records in fstab is important because fsck(8), mount(8), and umount(8)
sequentially iterate through fstab doing their thing.
(и далее)
для большей устойчивости целесообразно монтировать /tmp как noexec.
тогда временными программами придётся мусорить в другом месте. Впрочем, для непрогрммистов это не важно.
Размещать /var на отдельном от корня разделе - не знаю в том большой целесообразности.
есть смысл: там файлы постоянно меняются. Там же всякие СУБД и прочее такое.
А вот /var/log на высоконагруженном сервере лучше держать даже не на отдельном разделе, а на отдельном диске. Ну и тоже - с опцией noexec.
ну это если кто угодно может там файлы создавать. Если может только рут, то noexec не имеет смысла, т.к. на рута всё равно не действует.
И да, noexec можно и обойти. Не забываем про /lib/ld-linux.so (да, исправили, но кто знает? Может ещё что-то есть)
например, /dev/sda1
они могут измениться из-за гонок...
И главный секрет - последняя строчка в fstab должна быть пустой.
на самом деле, все строчки должны оканчиваться символом \n. Последняя -- не исключение. А вот Vim/Vi об этом в курсе.
Всем спасибо за ответы.
Сразу скажу - информативного в них не было ни одного пока что.
Во-первых, обсуждение целесообразности - это тема другого топика. У меня есть просто список требований, которые я должен реализовать для того, чтобы пройти сертификацию.
Во-вторых, писать что-то типа "лармальные администраторы читают это:" - ну как минимум не этично. Читал я ман. но у меня не получается. Получилось бы - не спрашивал бы вообще.
А теперь к делу.
Я пытался у себя на виртуалке поиграться с fstab'ом. Вот что у меня было до моих изменений
dev/mapper/vg_livecd-lv_root / ext4 defaults 1 1
UUID=c6190b1e-1244-4a4e-b400-3d3e98155011 /boot ext4 defaults 1 2
/dev/mapper/vg_livecd-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
я добавил ещё этот рядок
tmpfs /tmp tmpfs defaults,nodev,noexec,nosuid 0 0
Насколько целесообразно заводить ещё один TMPFS раздел?
Дальше. Как мне прописать сюда /var и /var/log ? т.е. я не могу понять, что должно быть в первом и третьем столбцах.
Значит надо выделить этот отдельный том и удобным для себя способом (способов указать это много) прописать строчку в fstab.
можно показать хотя бы несколько способов выделения отдельного тома? Я так понимаю, выделив отдельный том, я потом смогу прописать его в первом столбце и выставить просто ext3 или ext4 в третьем. Правильно?
И есть ли разница, какую файловую систему я прописываю тут? Если у меня изначально диск идет как ext4 а в fstab я прописываю маунту маунтить его как ext3 - не по феншую?
и ещё раз напоминаю, мне это всё надо будет потом реализовать на перле программно, т.е. у меня в башке вся инфа долна выстроиться так, чтобы это можно было потом описать алгоритмически.
Во-первых, обсуждение целесообразности - это тема другого топика(*). У меня есть просто список требований, которые я должен реализовать для того, чтобы пройти сертификацию.
что-бы выполнить требования, необходимо их понимать. Разве проблема не в этом? По вашей ссылке написано
2.1.1.1.1 Create Separate Partition or Logical Volume for
/tmp
и что тут непонятного? Лично мне-бы было непонятно, ЗАЧЕМ это делать. ИЧСХ, в мане это не написано.
Во-вторых, писать что-то типа "лармальные администраторы читают это:" - ну как минимум не этично. Читал я ман. но у меня не получается. Получилось бы - не спрашивал бы вообще.
это не вам было написано, а Cruiser78'у, который предлагал читать /etc/fstab, т.к. в его системе в этом файле есть комментарии. Имелось ввиду, что эти комментарии не в любой системе есть.
tmpfs /tmp tmpfs defaults,nodev,noexec,nosuid 0 0
Насколько целесообразно заводить ещё один TMPFS раздел?
(*)не скажу. Открывайте другой топик. (:
Если серьёзно, то вы можете использовать ровно столько разделов, сколько вам надо.
Вот только задавайте их максимальный размер. А то враг может забить всю память, и этим положить ваш сервер (т.е. требования НЕ выполнены. вы сделали дыру для DoS)
Дальше. Как мне прописать сюда /var и /var/log ? т.е. я не могу понять, что должно быть в первом и третьем столбцах.
я зачем вам ссылку на man 5 fstab дал? Там всё ясно написано.
Ок. В первом и третьем написано ЧТО монтируется. Разница в том, что в первом -- устройство/каталог КОТОРЫЙ монтируется, а в третьем тип этой сущности. Для /var/ в первом это /dev/sda5 например (у меня так на некоторой системе), а в третьем ext4.
можно показать хотя бы несколько способов выделения отдельного тома? Я так понимаю, выделив отдельный том, я потом смогу прописать его в первом столбце и выставить просто ext3 или ext4 в третьем. Правильно?
"тома" это из LVM. Вы точно решили использовать LVM? Определитесь.
И есть ли разница, какую файловую систему я прописываю тут? Если у меня изначально диск идет как ext4 а в fstab я прописываю маунту маунтить его как ext3 - не по феншую?
нет. Если вы не знаете, какая там БУДЕТ ФС, используйте тип auto. Тогда mount сама попытается угадать (не всегда успешно. Подходит для флешек в десктопе, на серверах так не делают)
и ещё раз напоминаю, мне это всё надо будет потом реализовать на перле программно, т.е. у меня в башке вся инфа долна выстроиться так, чтобы это можно было потом описать алгоритмически.
я сомневаюсь, что вы это всё ручками сможете сделать(пока ещё). А уж программу написать...
Кстати, если-бы такую программу можно было-бы написать, то большинство админов давно-бы уволили...
Может сначала подучить систему, а потом уже браться за hardening?
Всем спасибо за ответы.
Сразу скажу - информативного в них не было ни одного пока что.
Напротив, Вы получили полную информацию. Никто не обязан делать за Вас Вашу работу. Но вот направить Ваш мыслительный процесс по оптимальному руслу, съэкономить Вам время, отведенное на решение Вашей задачи - для того этот форум и существует. Здесь Вы скорее найдете путь решения, чем конкретную реализацию, которую можно копипастить. Да и в последнес случае работу Вашего мыслительного аппарата никто не отменял. нельзя копипастить всё подряд, бездумно. Надо понимать что делаешь и к чему это приведет.
я добавил ещё этот рядок
tmpfs /tmp tmpfs defaults,nodev,noexec,nosuid 0 0
Насколько целесообразно заводить ещё один TMPFS раздел?
Все написано правильно. Вот только для понимания -tmpfs это не физической раздел на диске или в памяти. Это программное. Есть два "девайса", которые могут представлять оперативную память компьютера как блочное устройство и монтировать её куда хочешь. Это ramfs и tmpfs. Отличия между ними следующие:
1. ramfs представляет всю память как единое устройство и позволяет забить (случайно) её по самые промидоры. Это опасно, поэтому надо такой раздел принудительно ограничивать в размере опцией монтирования size=.
2. tmpfs тоже представляет память как блочное устройство, но в случае роста объема данных на нём (больше половины свободной RAM) начинает переносить эти данные в своп. То есть реально в оперативной памяти доступна для tmpfs только её половина (быстро). Что более безопасно в плане устойчивости (не забьешь память полностью), но и более тормознуто.
Отсюда - tmpfs это не "раздел" и его никак не завести.
Дальше. Как мне прописать сюда /var и /var/log ? т.е. я не могу понять, что должно быть в первом и третьем столбцах.
...
можно показать хотя бы несколько способов выделения отдельного тома? Я так понимаю, выделив отдельный том, я потом смогу прописать его в первом столбце и выставить просто ext3 или ext4 в третьем. Правильно?
Если Вы не используете LVM, то для создания нового дискового раздела следует пользоваться базовыми командами fdisk и mkfs. Первой командой создаешь на диске разделы (которые будут именоваться /dev/sd[X][1-9]), второй - нужную файловую систему на этом диске. При этом созданный раздел получит и UUID (доступный по blkid) и на него можно повесить метку, LABEL.
Если Вы используете LVM, то есть тоже набор базовых команд (lvcreate, pvcreate etc). Ими также создается LVM-том, на котором создается файловая система и так далее.
Это - базовые команды. Помимо этого есть графические frontend'ы, например, gparted или system-config-lvm. Которые сделают то же самое.
Итак, том Вы выделите, отформатируете его в нужную Вам файловую систему, так что помешает Вам записать в /etc/fstab строчку?
/dev/sda5 /var ext4 defaults 0 0
или
UUID="real UUID" /var ext4 defaults 0 0
или
LABEL="real LABEL" /var ext4 defaults 0 0
И есть ли разница, какую файловую систему я прописываю тут? Если у меня изначально диск идет как ext4 а в fstab я прописываю маунту маунтить его как ext3 - не по феншую?
Если Вы создали файловую систему ext4, то её можно смотрировать как ext3. Обратное неверно. Естественно, что если вы ext4 смонтируете как ext3, то работать оно будет только как ext3, без каких либо ext4-плюшек.
и ещё раз напоминаю, мне это всё надо будет потом реализовать на перле программно, т.е. у меня в башке вся инфа долна выстроиться так, чтобы это можно было потом описать алгоритмически.
Что именно Вам нужно реализовать программно? Файл /etc/fstab - файл статический и неизменный. Писать какую-либо программу по его однократному заполнению под Ваши конкретные особенности? По моему это нонсенс.