Как убрать навсегда параметр noexec linux

Обновлено: 02.07.2024

То все будет работать и в общем-то класть получается на noexec .

Суть в принципе понимаю, хотелось бы понять, кто как справляется ?

Использовать SELinux и запретить файлам из /bin /usr/bin /sbin и прочим доступ к директории с noexec

А еще варианты :D ?

Гм. Если злоумышленник имеет возможность запустить perl, то какая хрен разница, может ли он читать из tmp или откуда-то еще?

В этом случае он и без /tmp может сделать что угодно. В том числе и получить какой-то исполняемый код извне.

А какая версия ядра? Может какой то баг?

vapetrov:
Гм. Если злоумышленник имеет возможность запустить perl, то какая хрен разница, может ли он читать из tmp или откуда-то еще?
В этом случае он и без /tmp может сделать что угодно. В том числе и получить какой-то исполняемый код извне.

Не согласен. Если стоит noexec, файл не должен исполняться. Может быть, в описанном случае, perl забирает файл в кеш и там исполняет?

На perl noexec не стоит. А файл ему нужно только прочитать, а на чтение файла запрета нет.

Himiko:
На perl noexec не стоит. А файл ему нужно только прочитать, а на чтение файла запрета нет.

Пожалуй, вы правы. Соглашусь. Спасибо за минус к репутации :)

Кстати, в таком случае должен сработать и такой фокус: /lib/ld-linux.so _исполняемый_файл_. Не проверял, но по всей видимости он тоже выполнится.

adm.unix:
Кстати, в таком случае должен сработать и такой фокус: /lib/ld-linux.so _исполняемый_файл_

Раньше работало, но уже давно в glibc по крайней мере пофиксили.

Оптимизайка:
Раньше работало, но уже давно в glibc по крайней мере пофиксили.

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

vapetrov:
Гм. Если злоумышленник имеет возможность запустить perl, то какая хрен разница, может ли он читать из tmp или откуда-то еще?
В этом случае он и без /tmp может сделать что угодно. В том числе и получить какой-то исполняемый код извне.

В принципе логично. Выходит что noexec влияет только на +x в разделе куда он установлен. :(

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

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

7.1. Монтирование локальных файловых систем

7.1.1. Создание точки монтирования с помощью утилиты mkdir

В данном примере демонстрируется методика создания новой точки монтирования с помощью утилиты mkdir .

7.1.2. Утилита mount

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

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

7.1.3. Файл /etc/filesystems

На самом деле использование параметра -t ext2 утилиты mount для явного указания типа файловой системы не всегда является необходимым. Утилита mount имеет возможность автоматической идентификации типов множества файловых систем.

В случае монтирования файловой системы без явного указания ее типа утилита mount в первую очередь попытается идентифицировать файловую систему как одну из файловых систем, перечисленных в файле /etc/filesystems . При этом утилита mount будет пропускать строки с директивой nodev .

7.1.4. Файл /proc/filesystems

В том случае, если файла /etc/filesystems не существует или данный файл заканчивается строкой с одним символом *, утилита mount будет читать файл /proc/filesystems .

7.1.5. Утилита umount

Вы можете отмонтировать файловую систему с помощью утилиты umount .

7.2. Вывод списка смонтированных файловых систем

Для вывода списка смонтированных файловых систем следует использовать команду mount . Также можно прочитать содержимое файлов /proc/mounts и /etc/mtab .

7.2.1. Утилита mount

Простейший и наиболее часто используемый способ вывода списка смонтированных файловых систем заключается в использовании утилиты mount без каких-либо аргументов.

7.2.2. Файл /proc/mounts

Ядро ОС предоставляет информацию о смонтированных файловых системах посредством файла /proc/mounts , причем данный файл не хранится на жестком диске. При чтении информации из файла /proc/mounts осуществляется чтение информации, переданной непосредственно ядром ОС.

7.2.3. Файл /etc/mtab

Содержимое файла /etc/mtab не обновляется средствами ядра ОС, а поддерживается в актуальном состоянии средствами утилиты mount . Не редактируйте файл /etc/mtab вручную.

7.2.4. Утилита df

Более удобный для пользователя способ получения списка смонтированных файловых систем заключается в использовании утилиты df . Утилита df (название расшифровывается как diskfree - свободное пространство диска) имеет полезную дополнительную возможность, заключающуюся в выводе данных об объеме свободного пространства в каждой из смонтированных файловых систем, расположенных в разделах жестких дисков. Как и большинство утилит из состава Linux, утилита df поддерживает параметр -h , предназначенный для активации режима вывода данных в формате, облегчающем чтение.

7.2.5. Команда df -h

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

7.2.6. Утилита du

Утилита du позволяет получить количественные показатели использования пространства жесткого диска для хранения файлов и директорий. Используя утилиту du с параметром, являющимся путем к точке монтирования, вы на самом деле будете получать информацию о пространстве раздела жесткого диска, занятом данными из файловой системы.

Хотя утилита du и может осуществлять рекурсивный обход дерева директорий с последующим выводом информации о каждой из директорий, параметр -s позволит вам получить обобщенную информацию о размере родительской директории. Этот параметр чаще всего используется вместе с параметром -h . Поэтому команда du -sh по отношению к точке монтирования позволит получить информацию обо всем пространстве раздела диска, использованном файловой системой.

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

В приведенном ниже примере показана полная последовательность действий, начинающаяся с определения имени файла устройства жесткого диска (/dev/sdb) и заканчивающаяся монтированием созданной в разделе этого жесткого диска файловой системы в директорию /mnt .

7.4. Монтирование файловых систем на постоянной основе

До текущего момента мы монтировали все файловые системы вручную. Такой подход вполне приемлем, но файловая система остается смонтированной только до следующей перезагрузки системы. К счастью, существует способ уведомления вашего компьютера о необходимости монтирования определенных файловых систем в процессе загрузки операционной системы.

7.4.1. Файл /etc/fstab

Таблица монтируемых файловых систем, расположенная в файле /etc/fstab , содержит список файловых систем с параметрами, позволяющими монтировать каждую из них в процессе загрузки операционной системы.

Ниже приведен пример файла /etc/fstab .

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

7.4.2. Команда mount /точка_монтирования

Благодаря добавлению элемента с список монтируемых файловых систем, расположенный в файле /etc/fstab , вы можете использовать упрощенный вариант команды mount . Команда из примера ниже позволяет осуществить поиск информации о файле устройства, представляющем связанный с переданной точкой монтирования раздел жесткого диска, в файле /etc/fstab с помощью утилиты mount .

7.5. Безопасное монтирование файловых систем

Безопасное монтирование файловых систем становится возможным благодаря наличию нескольких специализированных параметров монтирования файловых систем . Эти параметры рассмотрены в примерах, приведенных ниже.

7.5.1. Параметр ro

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

7.5.2. Параметр noexec

Параметр noexec позволяет предотвратить исполнение бинарных файлов и сценариев, расположенных в смонтированной файловой системе.

7.5.3. Параметр nosuid

Параметр nosuid позволяет игнорировать биты setuid , установленные для бинарных файлов из смонтированной файловой системы.

Обратите внимание на то, что в случае использования данного параметра вы все также сможете устанавливать биты setuid для бинарных файлов из файловой системы.

Но пользователи не смогут воспользоваться привилегиями, обусловленными наличием битов setuid .

7.5.4. Параметр noacl

Для предотвращения использования механизма управления правами доступа к файлам на основе списков контроля доступа следует использовать параметр noacl .

Описания других параметров монтирования файловых систем доступны на странице руководства для утилиты mount .

7.6. Монтирование удаленных файловых систем

7.6.1. Файловая система SMB/CIFS

Соединение с сервером Samba (или компьютером, работающим под управлением ОС производства компании Microsoft) также может осуществляться с помощью утилиты mount.

В данном примере показана методика соединения с сервером, имеющим IP-адрес 10.0.0.42 , для доступа к разделяемому ресурсу с именем data2 .

Для корректного соединения с использованием описанного протокола необходимо установить дополнительные программные компоненты с помощью команды yum install cifs-client .

7.6.2. Файловая система NFS

Серверы Unix обычно используют протокол NFS (расшифровывается как Network File System - сетевая файловая система) для предоставления доступа к директориям по сети. Настройка сервера NFS будет обсуждаться позднее. Соединение же с сервером NFS со стороны клиента осуществляется также с помощью утилиты mount и очень похоже на соединение с локальным дисковым хранилищем.

Данная команда демонстрирует методику соединения с сервером NFS с именем server42 , который предоставляет доступ к директории /srv/data . Точка монтирования (путь к которой приведен в конце строки команды) должна существовать.

В том случае, если сервер с именем server42 имеет IP-адрес 10.0.0.42 , вы также можете использовать запись:

7.6.2. Специфичные для NFS параметры монтирования

bg : в случае неудачи при монтировании файловой системы повторять попытки в фоновом режиме.

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

soft : прекратить процесс монтирования файловой системы после X неудачных попыток.

hard : (используется по умолчанию) продолжать предпринимать попытки монтирования файловой системы после неудач.

Комбинация параметров soft+bg позволяет осуществить наиболее быструю загрузку клиентской системы в случае неполадок с сервером NFS.

retrans=X : Попытаться соединиться с сервером X раз (по протоколу UDP).

tcp : Принудительно использовать протокол TCP (используется по умолчанию и всегда поддерживается).

udp : Принудительно использовать протокол UDP (не всегда поддерживается).

7.7. Практическое задание: монтирование файловых систем

1. Смонтируйте файловую систему, созданную в рамках малого раздела размером в 200 МБ, в точку монтирования /home/project22.

2. Смонтируйте файловую систему, созданную в рамках большого первичного раздела размером в 400 МБ, в точку монтирования /mnt, после чего скопируйте некоторые системные файлы в эту директорию (рекомендуется скопировать все содержимое директории /etc). После этого отмонтируйте файловую систему и повторно смонтируйте ее в точку монтирования /srv/nfs/salesnumbers в режиме только для чтения. Где оказались скопированные вами ранее файлы?

3. Проверьте корректность своих выполненных действий с помощью утилит fdisk , df и mount . Также изучите содержимое файлов /etc/mtab и /proc/mounts .

4. Сделайте так, чтобы монтирование обеих файловых систем осуществлялось автоматически на постоянной основе, после чего проверьте работоспособность использованного механизма монтирования.

5. Что случится, если вы смонтируете файловую систему в директорию, в которой уже содержатся файлы?

6. Что случится, если вы смонтируете две файловых системы в одну и ту же точку монтирования?

7 (дополнительное задание). Дайте пояснения относительно различий между данными утилитами: find, locate, updatedb, makewhatis, whereis, apropos, which и type.

8 (дополнительное задание). Выполните проверку файловой системы, созданной в разделе, который смонтирован в директорию /srv/nfs/salesnumbers.

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

1. Смонтируйте файловую систему, созданную в рамках малого раздела размером в 200 МБ, в точку монтирования /home/project22.

2. Смонтируйте файловую систему, созданную в рамках большого первичного раздела размером в 400 МБ, в точку монтирования /mnt, после чего скопируйте некоторые системные файлы в эту директорию (рекомендуется скопировать все содержимое директории /etc). После этого отмонтируйте файловую систему и повторно смонтируйте ее в точку монтирования /srv/nfs/salesnumbers в режиме только для чтения. Где оказались скопированные вами ранее файлы?

Теперь вы можете обнаружить скопированные ранее файлы в директории /srv/nfs/salenumbers .

Но физически эти файлы все также хранятся в рамках файловой системы ext3 на разделе жесткого диска, представленном файлом устройства /dev/sdb1

3. Проверьте корректность своих выполненных действий с помощью утилит fdisk , df и mount . Также изучите содержимое файлов /etc/mtab и /proc/mounts .

В выводах всех трех приведенных выше команд должна содержаться информация о смонтированных вами файловых системах и файлах устройств соответствующих разделов дисков.

4. Сделайте так, чтобы монтирование обеих файловых систем осуществлялось автоматически на постоянной основе, после чего проверьте работоспособность использованного механизма монтирования.

Добавьте следующие строки в файл /etc/fstab

5. Что случится, если вы смонтируете файловую систему в директорию, в которой уже содержатся файлы?

Уже имеющиеся файлы будут скрыты до момента отмонтирования файловой системы, к примеру, с помощью утилиты umount .

6. Что случится, если вы смонтируете две файловых системы в одну и ту же точку монтирования?

Будут доступны файлы только из последней смонтированной файловой системы.

7 (дополнительное задание). Дайте пояснения относительно различий между данными утилитами: find, locate, updatedb, makewhatis, whereis, apropos, which и type.

8 (дополнительное задание). Выполните проверку файловой системы, созданной в разделе, который смонтирован в директорию /srv/nfs/salesnumbers.

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

Пример файла

Простой пример /etc/fstab , в котором файловые системы заданы по именам файлов устройств:

Формат строки

Каждая строка в файле /etc/fstab содержит следующие поля, разделенные пробелами или символами табуляции:

filesystem

Физическое место размещения файловой системы, по которому определяется конкретный раздел или устройство хранения для монтирования.

Точка монтирования, куда монтируется корень файловой системы.

Тип файловой системы. Поддерживается множество типов: ext2, ext3, ext4, btrfs, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap и auto. При выборе auto команда mount попытается определить реальный тип файловой системы самостоятельно. Это полезно для компакт-дисков (CD/DVD).

options

Параметры монтирования файловой системы. Подробнее смотрите на man странице mount. Обратите внимание, что некоторые параметры относятся к конкретным типам файловых систем.

Используется утилитой dump для определения того, нужно ли создать резервную копию данных в файловой системе. Возможные значения: 0 или 1. Если указано число 1, dump создаст резервную копию. У большинства пользователей утилита dump не установлена, поэтому им следует указывать 0 в этом поле.

Используется программой fsck для определения того, нужно ли проверять целостность файловой системы. Возможные значения: 0, 1 или 2. Значение 1 следует указывать только для корневой файловой системы (с точкой монтирования /); для остальных ФС, которые вы хотите проверять, используйте значение 2, которое имеет менее высокий приоритет.Обратите внимание, что в случае btrfs следует всегда указывать 0, даже если эта файловая система используется в качестве корневой. Файловые системы, для которых в поле указано значение 0, не будут проверяться fsck.

Определение файловой системы

Конкретное место расположения файловой системы может быть определено различными способами. В файле /etc/fstab можно указать имя файла устройства, его метку или UUID (в том числе GPT-метку и GPT-UUID для дисков GPT). Определение по UUID является наиболее предпочтительным способом. Далее приведены примеры определений файловых систем с использованием каждого из способов. Вывод lsblk -f and blkid для этих примеров вы можете найти на странице Persistent block device naming.

По именам устройств

Запустите lsblk -f , чтобы отобразить список разделов. Укажите имена устройств с префиксом /dev/ :

По меткам

Запустите lsblk -f , чтобы отобразить список разделов. Укажите метки из столбца LABEL с префиксом LABEL= :

По UUID

Запустите lsblk -f, чтобы отобразить список разделов. Укажите идентификаторы из столбца UUID с префиксом UUID= :

Совет: Если вы хотите отобразить только UUID конкретного раздела, используйте команду lsblk -no UUID /dev/sda2.

По меткам GPT

Запустите blkid чтобы отобразить список разделов. Укажите значения PARTLABEL без кавычек:

По UUID GPT

Запустите blkid чтобы отобразить список разделов. Укажите значения PARTUUID без кавычек:

Дополнительная информация

Автоматическое монтирование с systemd

Если у вас большой раздел /home, вы можете разрешить службам, которые не обращаются к /home, запускаться в то время, как /home проверяется программой fsck. Для этого добавьте следующие параметры монтирования в запись /etc/fstab для точки монтирования /home:

При этом процедура проверки и монтирования /home будет запущена только при первой попытке доступа, и ядро будет держать в ожидании все создаваемые потоки ввода-вывода в /home, пока раздел не будет смонтирован.

Обратите внимание: Ускорение при автоматическом монтировании /home может составлять не более секунды-двух, в зависимости от конфигурации вашей системы. При этом разделу /home будет присвоен тип файловой системы autofs, который по умолчанию игнорируется mlocate. Используйте эту возможность с осторожностью.

Обратите внимание: Если вы намереваетесь использовать флаг exec при автоматическом монтировании, вам следует удалить флаг user, чтобы монтирование производилось корректно.

Если у вас имеются зашифрованные файловые системы, вы можете также добавить параметр noauto в соответствующие записи в /etc/crypttab . Тогда systemd не будет пытаться открыть зашифрованное устройство во время загрузки системы, а сделает это при первой попытке доступа к файловой системе на этом устройстве, применив указанный файл ключа и затем автоматически смонтировав ФС. Это может дать выигрыш в несколько секунд при загрузке системы, например, если у вас зашифрованный RAID массив: systemd не придется ожидать готовности устройства.

Пробелы в значениях полей

Так как пробельные символы используются в fstab для разделения полей, их нельзя напрямую использовать в значениях полей. Любые пробелы в полях (например, значения PARTLABEL, LABEL или точки монтирования) должны быть заменены специальными управляющими последовательностями, которые состоят из обратной косой черты (\) и трех восьмеричных цифр (например, для пробела это \040):

Внешние устройства

Если устройство не подключено постоянно, и может отсутствовать во время загрузки системы, монтируйте его с параметром nofail. Это предотвратит появление ошибок при загрузке.

Параметры atime

Если файловая система смонтирована с параметром atime, то, когда происходит обращение к файлу, в его поле atime записывается текущее время (иными словами, время доступа). Это может быть полезно, когда Linux используется на сервере; на персональном компьютере эта функция обычно не нужна. Недостаток этой функции в том, что даже при чтении файла из кэша (в оперативной памяти) все равно производится медленная операция записи на диск. Использование параметров монтирования noatime, nodiratime или relatime может улучшить производительность доступа к данным, а также уменьшить износ твердотельных (SSD) накопителей. Параметр noatime полностью отключает запись времени доступа к файлу. Большинство программ не используют это поле. Но бывают и редкие исключения — например, Mutt полагается на его значение. Для mutt вы можете использовать параметр relatime. Параметр nodiratime отключает обновление времени доступа только для каталогов; для остальных файлов время atime будет обновляться всегда.

Обратите внимание: Действие noatime перекрывает собой nodiratime. Нет необходимости указывать оба параметра.

Параметр relatime включает обновление поля только когда содержимое файла перезаписывается (в отличие от noatime, при котором поле atime вообще не обновляется, и может становиться раньше времени изменения mtime). Использование этого параметра наиболее предпочтительно, так как программы вроде Mutt будут работать корректно, и при этом вы все равно получите достаточное улучшение производительности: при операциях чтения (как правило, гораздо более частых, чем записи) не будет производиться запись времени на диск. По умолчанию файловые системы монтируются с этим параметром

Запись в FAT32 с правами обычного пользователя

Чтобы иметь возможность записи в разделе FAT32, вам следует указать правильные параметры монтирования в вашем файле /etc/fstab.

Перемонтирование корневого раздела

Если по какой-то причине корневой раздел был неправильно смонтирован только на чтение, вы можете перемонтировать его с доступом на чтение-запись без перезагрузки, набрав

Многие люди (включая Обеспечение безопасности Debian Manual ) рекомендуется установить /tmp с помощью набора noexec,nodev,nosuid . Это обычно представляется одним из элементов стратегии «защита в глубину», предотвращая эскалацию атаки, которая позволяет кому-то писать файл, или атаку пользователя с законной учетной записью, но без другого записываемого пространства.

Однако со временем я столкнулся с аргументами (наиболее заметно, что Debian /Ubuntu Developer Colin Watson), что noexec - бесполезная мера по нескольким потенциальным причинам:

  1. Пользователь может запустить /lib/ld-linux.so <binary> , чтобы получить тот же эффект.
  2. Пользователь все еще может запускать интерпретаторы, предоставляемые системой, в сценариях, которые нельзя запускать напрямую.

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

Вот аргументы для полезности, которые я придумал до сих пор:

Современные ядра исправляют отверстие /lib/ld-linux.so , так что он не сможет сопоставить исполняемые страницы из файловой системы noexec .. р>

Устный перевод, безусловно, все еще вызывает беспокойство, хотя я думаю, что меньше, чем люди могут требовать. Мое соображение, которое я могу придумать, заключается в том, что были многочисленные уязвимости эскалации привилегий, которые основывались на создании особых искаженных системных вызовов. Без злоумышленника, предоставляющего двоичный код, было бы намного сложнее сделать злые системные вызовы. Кроме того, интерпретаторы сценариев должны быть непривилегированы (я знаю, что это исторически иногда не было, например, с suid perl), и поэтому для атаки было бы полезно использовать их собственную уязвимость. По-видимому, это возможно для использования Python, на по крайней мере, для выполнения некоторых эксплойтов.

Многие «консервированные» эксплойты могут пытаться писать и запускать исполняемые файлы в /tmp , поэтому noexec уменьшает вероятность падения на сценарий атаки (скажем, в окне между раскрытием уязвимости и установкой исправлений).

Таким образом, все еще существует преимущество безопасности при установке /tmp с помощью noexec .

Как описано в отслеживании ошибок Debian , настройка APT::ExtractTemplates::TempDir в apt.conf в каталог, который не является noexec и доступен для root, устраняет проблему debconf.

Для многих пакетов Debian требуется /tmp для выполнения, чтобы пакет был установлен. Они часто обозначаются как ошибки (из-за серьезности «обычного» /«желаемого»):

Я получил эту ошибку только при установке обновленного ядра в стабильную ветку только сегодня.

Итак, похоже, что Debian (& производные?) не готов к установке /tmp noexec .

добавьте следующее в /etc/apt.conf или, /etc/apt/apt.conf.d/50remount

Несмотря на то, что обходные пути существуют для большинства дополнительных мер безопасности, которые вы могли бы реализовать, даже наиболее легко обойти меры безопасности (например, установка /tmp noexec или запуск SSH на альтернативном порту) будут препятствовать автоматическим атакам или сценариям, которые полагаются на по умолчанию, чтобы функционировать. Он не защитит вас от решительного и хорошо осведомленного злоумышленника, но в более чем 99% случаев вы не столкнетесь с решительным или хорошо осведомленным злоумышленником. Вместо этого вы будете защищаться от сценария автоматической атаки.

Во-первых: Он охватывает множество различных случаев атаки Отключение, потому что вокруг него было несколько известных способов (некоторые из которых даже исправлены) являются странными. Атакующие, загружающие код в /dev /shm или /tmp, являются обычным делом.

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

  • Он также может быть остановлен пользовательскими ограничениями iptables.
  • Он также может быть остановлен SELinux.
  • Он также может быть остановлен не из-за легко доступного другого эксплойта.

Суть заключается в том, чтобы сделать это так сложно, как вы легко , и вырезать 99% атак.

Второе: Это останавливает плохую практику (запускать материал из temp, делая крупные приложения, устанавливая через /tmp вместо пользователя tmpdir), оставляя данные в /tmp. Пользовательские установщики обычно понимают TMPDIR Кроме того: даже если это не так: время установки, как действие «точка-в-время», не является веской причиной для отключения проблемы безопасности постоянно .

Третье: Учитывая анонимные пространства имен в /tmp («функция»), вы действительно хотите ограничить то, что там было, и запустить оттуда.

Forth: Удобство не является важным фактором в этом. Предполагая, что мы запускаем серверы за деньги и для какой-то цели: мы несем ответственность за этот материал. «О, я не блокировал /tmp, потому что мне нужно еще несколько минут, когда я обновляю свое программное обеспечение в следующем году». Несомненно, это не будет только одна вещь, которая стоит между шантажом и просто быть в порядке. Отличная причина? Я так не думаю.

Как насчет этого:

«Мы узнали, что враги могут атаковать без предупреждения. используйте сотни шпионов, чтобы отравить пищу. Поэтому мы прекратили раздавать оружие нашим солдатам ».

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

Существуют приложения, для которых /tmp требуется выполнить для установки. На предыдущей работе, до того, как я добрался туда, администраторы создали /tmp noexec, но я обнаружил, что пакет db2 не будет установлен. Даже если вы распакуете пакет db2 где-то в другом месте, процедура установки копирует некоторые файлы в /tmp и ожидает, что сможет его выполнить, что, конечно же, не удалось с разрешенным разрешением. Если вы не знаете, что файловая система смонтирована noexec, это может немного ввести в заблуждение. Он смог продолжить установку после перезагрузки /tmp без noexec.

Во всяком случае, дело в том, что хотя бы один коммерческий продукт требует /tmp не монтировать noexec, и могут быть и другие. Я не нашел для него действительно веских оснований. Если вы хотите улучшить безопасность, я бы пошел с selinux вместо этого.

Как вы знаете, во время загрузки операционной системы Linux все используемые разделы собираются в единую корневую файловую систему. Все это выполняется системой инициализации и пользователь даже не замечает переходов между разделами. Например, домашний раздел монтируется в /home, загрузочный в /boot.

Но откуда система инициализации узнает о том, что и куда нужно монтировать? Все просто, она берет эти данные из файла /etc/fstab. В этой небольшой статье мы рассмотрим как выполняется автоматическое монтирование fstab, поговорим как это работает, а также рассмотрим основные опции монтирования файловых систем.

Как происходит монтирование?

Файловая система Linux очень сильно отличается от Windows, здесь нет дисков. Есть только корневая файловая система, которая строиться путем монтирования всех нужных разделов в подкаталоги корня.

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

Все эти задачи выполняет система инициализации, независимо от того используете ли вы OpenRC или Systemd. Но сама система инициализации не знает куда монтировать тот или иной раздел. Для получения этой информации она использует конфигурационные файлы.

Системы инициализации, совместимые с SysVinit используют файл /etc/fstab. Новая система инициализации Systemd сохранила поддержку /etc/fstab для совместимости, но на самом деле работает с файлами юнитов *.mount. Во время загрузки файлы юнитов автоматически генерируются для всех записей /etc/fstab.

В этой статье мы рассмотрим как настроить автомонтирование разделов fstab, так и новый способ, с помощью systemd.

Автоматическое монтирование fstab

Каждая строчка в fstab описывает раздел, который нужно примонтировать к определенной точке монтирования. Мы можем указать файловую систему, опции монтирования, а также нужно ли проверять файловую систему на ошибки.

Сначала давайте рассмотрим синтаксис одной строчки fstab:

устройство точка_монтирования файловая_система опции резерв проверка

Теперь подробнее рассмотрим что означает каждый пункт:

  • Устройство - это раздел диска, который вам нужно примонтировать. Его можно указать в формате файла устройства Linux в каталоге /dev/, например, /dev/sda1 или с помощью уникального идентификатора UUID, тогда формат записи будет таким UUID="XXXX-XXXX-XXXX-XXXX", также возможна запись с помощью метки, например, LABEL=home;
  • Файловая система указывает в какой файловой системе нужно монтировать это устройство, например, ext4, ext3, ext2, btrfs;
  • Точка монтирования - куда нужно примонтировать это устройство, например, /home, /boot, /mnt;
  • Опции - параметры монтирования файловой системы, рассмотрим подробнее ниже;
  • Проверка - указывает в какой очереди нужно проверять устройство на ошибки, 1 - в первую очередь, 2 - вторую, 0 - не проверять;
  • Резерв - указывает нужно ли делать резервную копию раздела, может принимать значения только 0 и 1.

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

Начнем с общих для всех файловых систем опций:

  • sync - записывать на диск все изменения сразу после того, как они были выполнены, не использовать кэширование для записываемых данных. Может понадобится для извлечения флешки без размонтирования, но сильно снижает производительность;
  • async - использовать кэш при записи данных, увеличивает производительность, используется по умолчанию;
  • atime - сохранять время последнего доступа к файлу;
  • noatime - не сохранять время последнего доступа, полезно для ssd и флешек;
  • relatime - обновлять время доступа только при изменении файла, необходимо для работы многих программ;
  • norelatime - отключить relatime;
  • strictatime - обновлять время доступа всегда, отключает действие предыдущих опций;
  • auto - автоматически монтировать при загрузке, действие по умолчанию;
  • noauto - не монтировать при загрузке;
  • defaults - использовать опции монтирования fstab по умолчанию - rw,suid,dev,exec,auto,nouser,async;
  • dev - интерпретировать блочные устройства;
  • nodev - не интерпретировать блочные устройства;
  • diratime - аналогично atime только для каталогов;
  • dirnoatime - аналогично noatime, для каталогов;
  • exec - разрешить выполнять программы на этом разделе;
  • noexec - запретить выполнять программы на этом разделе;
  • group - разрешить другим пользователям кроме root монтировать этот раздел, если их группа совпадает с указанной, обычно используется вместе с noauto;
  • nofail - не сообщать об ошибках;
  • mand - разрешить блокирование файловой системы, нужно для некоторых антивирусов;
  • nomand - запретить блокирование файловой системы;
  • suid - разрешить выполнение программ с флагом suid от имени другого пользователя;
  • nosuid - игнорировать флаг suid;
  • owner - разрешить указанному пользователю монтировать устройство;
  • ro - монтировать только для чтения;
  • rw - монтировать для чтения и записи;
  • users - разрешить монтирование любому пользователю;
  • umask - установить права доступа к файлам и папкам на этом разделе;
  • uid - задает владельца каталога, по умолчанию root;
  • gid - задает группу владельца каталога.

Когда мы рассмотрели всю теорию, настройка fstab не вызовет у вас проблем. Теперь давайте рассмотрим стандартное содержимое файла fstab, а также как выполняется монтирование. Вот так выглядит монтирование корня:

/dev/sda2 / ext4 defaults 0 1

Здесь в качестве корневой файловой системы будет монтироваться раздел /dev/sda2 с файловой системой ext4 и опциями по умолчанию defaults. Резервная копия не используется, и вообще, этот параметр не читается системой инициализации и сейчас нас не интересует. Для домашнего раздела все будет выглядеть очень похоже:

/dev/sda3 /home ext4 defaults,noexec 0 2

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

/dev/sda4 /media/files/ ext4 noauto,users,rw 0 0

Тут мы указываем, что раздел не нужно монтировать во время загрузки, но его могут подключить любые пользователи в режиме для чтения и записи. Ни проверка ни резервная копия не выполняются. Для раздела подкачки файловая система указывается swap, а точка монтирования none:

/dev/sda5 none swap defaults 0 0

Также вы можете примонтировать немножко оперативной памяти:

tmpfs /tmp tmpfs nodev , nosuid , noexec , size=100M 0 0

Таким образом, мы примонтировали оперативную память в /tmp и теперь система будет работать немного быстрее. Вот что получилось:

/dev/sda2 / ext4 defaults 0 1
/dev/sda3 /home ext4 defaults,noexec 0 2
/dev/sda4 /media/files/ ext4 noauto,users,rw 0 0
/dev/sda5 none swap defaults 0 0
tmpfs /tmp tmpfs nodev,nosuid,noexec,size=100M 0 0

А теперь, как я и обещал рассмотрим как выполняется монтирование с помощью systemd.

Автоматическое монтирование в Systemd

Система инициализации Systemd анализирует /etc/fstab при загрузке и автоматически генерирует все нужные файлы юнитов на основе описанных там точек монтирования, а уже потом их загружает.

Вы можете посмотреть все созданные в systemd точки монтирования такой командой:

systemctl -l --type mount

fstab

Но нам ничего не мешает самим создать такой файл точки монтирования. Это очень просто, давайте рассмотрим синтаксис:

[Mount]
What=адрес_раздела
Where=точка монтирования
Type=файловая система
Options=опции монтирования

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

sudo vi /etc/systemd/system/home.mount

[Unit]
Description=Mount System Home Directory

[Mount]
What=/dev/sda3
Where=/home
Type=ext4
Options=defaults,noexec

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

sudo systemctl start home.mount

А чтобы добавить эту точку монтирования в автозагрузку выполните:

sudo systemctl enable home.mount

Вот и все теперь вы знаете не только как выполняется монтирование fstab, но и автоматическое монтирование в systemd.

Выводы

Читайте также: