Вопрос или проблема
Наличие SSD – рекомендуется монтировать /tmp
как tmpfs
.
Примеры:
- https://askubuntu.com/questions/550589/best-way-to-mount-tmp-in-fstab
- https://yktoo.com/en/blog/post/233
- https://askubuntu.com/questions/173094/how-can-i-use-ram-storage-for-the-tmp-directory-and-how-to-set-a-maximum-amount
Настройки монтирования разные в каждом примере – почему???
По умолчанию установка Ubuntu 16 настраивает параметры монтирования для корневой файловой системы (/
) как (из /etc/mtab
):
/dev/sda1 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
Итак, все другие параметры – как предлагается в примерах/ссылках – не должны применяться.
Некоторые из параметров монтирования в различных примерах в интернете:
defaults,noatime,mode=1777
или:
defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M
Но:
- Наличие
noatime
кажется бесполезным, потому что данные хранятся в оперативной памяти, которая и так быстрая. - Почему
nosuid,nodev,noexec
?
Как они знают, зависят ли программы от определенных опций или нет?
Я думаю, лучше придерживаться стандартных разрешений, примененных при установке, то есть:
rw,relatime,mode=1777,uid=0,gid=0
Чтобы обеспечить правильную работу различных программ:
- Разрешения 1777, потому что стандартные разрешения для
/tmp
такжеdrwxrwxrwt
(см.stat -c "%a %n" /tmp
). uid
иgid
установлены наroot
, потому что/tmp
имеет такие же.
Есть ли что-то, что я упускаю?
Перед systemd стандартным способом активации tmpfs на /tmp было активировать его в /etc/default/tmpfs
и установить RAMTMP=yes
(даже если почти все редактировали /etc/fstab). Таким образом, вы можете увидеть, какие параметры по умолчанию. В моей системе Devuan Ascii параметры монтирования:
$ mount -l | grep "/tmp"
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime,size=3293980k)
Размер по умолчанию составляет 20% фPhysical memory + swap.
Так что, я думаю, вы не ошибетесь, используя те же параметры в /etc/fstab.
рекомендуется монтировать /tmp как tmpfs
Нет.
Вы можете смонтировать устройство tmpfs в /tmp, если вам все равно на потерю файлов при перезагрузке (tmpfs реализуется в памяти).
Итак, все другие параметры – как предлагается в примерах/ссылках – не должны применяться.
Эй? Вы не хотите этих опций? Или думаете, что операционная система проигнорирует их? В случае первого выберите те опции, которые вы хотите – они БУДУТ учтены / они НЕ наследуются.
Наличие noatime кажется бесполезным
Да, наличие atime или relatime имеет незначительные затраты здесь.
Почему nosuid,nodev,noexec ?
Потому что их можно использовать в /tmp. Однако использование битов слипших также снижает риск (всех?) атак, использующих эти векторы.
rw,relatime,mode=1777,uid=0,gid=0
rw – в общем-то, это полезно для временной файловой системы – но это также ПОВЕДЕНИЕ ПО УМОЛЧАНИЮ, так что вам не нужно это явно указывать.
relatime – на ваше усмотрение – но опять же это по умолчанию.
mode=1777,uid=0,gid=0 – если во время монтирования ваш /tmp не принадлежит root и доступен для записи всем, с установленным битом слипшего, тогда, вероятно, уже слишком поздно закрывать эти дыры.
Ответ или решение
Монтирование /tmp
как tmpfs
: Совместимость и безопасность
Использование tmpfs
для монтирования /tmp
рекомендуется в условиях, когда установлено SSD, поскольку это может повысить общую производительность системы. Однако такое решение зависит от нескольких ключевых аспектов, касающихся как совместимости программного обеспечения, так и вопросов безопасности.
Разнообразие опций монтирования
Вы заметили, что в примерах, представленных в различных статьях, используются разные опции для монтирования /tmp
. Это объясняется тем, что разные системы и среды могут иметь разные требования и рекомендации, основанные на специфике использования. Например, опции, рекомендованные для одной системы, могут не подходить для другой.
Некоторые из популярных опций монтирования включают:
defaults,noatime,mode=1777
defaults,noatime,nosuid,nodev,noexec,mode=1777,size=512M
Каждая из этих опций имеет свою цель. Например:
-
noatime
: Отключает обновление временной метки доступа к файлам, что может немного увеличить производительность. Однако, как вы правильно заметили, основное преимуществоtmpfs
заключается в малом времени доступа к данным, поэтому влияние этой опции может быть незначительным. -
nosuid,nodev,noexec
: Эти опции важны для повышения безопасности. Они ограничивают возможность выполнения бинарных файлов и создания специальных файлов в/tmp
, что снижает риск эксплуатации уязвимостей. Важно понимать, что/tmp
часто используется для выполнения временных файлов, поэтому наличие этих опций может помочь предотвратить потенциальные атаки.
Безопасность и совместимость
Вы правильно упомянули, что использование mode=1777
, что соответствует стандартным правам доступа для /tmp
, является хорошим практическим решением. Права 1777
обеспечивают возможность записи для всех пользователей, но защищают файлы от удаления другими пользователями за счет использования бита "sticky" (последний бит).
Тем не менее, соглашаться на использование только стандартных опций может быть небезопасно. Как вы отметили, необходимо учитывать случаи, когда существует угроза безопасности, особенно в условиях совместного использования системы несколькими пользователями или при запуске ненадежного программного обеспечения.
Заключение
Монтирование /tmp
как tmpfs
может значительно улучшить производительность, но важно правильное понимание опций монтирования, которые используются. Разные системы могут требовать разные настройки, и игнорирование параметров безопасности может привести к уязвимостям.
В конечном итоге выбор опций монтирования — это вопрос компромисса между безопасностью, производительностью и необходимостью совместимости с различным программным обеспечением. Рекомендуется протестировать различные конфигурации в вашей системе, чтобы определить наиболее оптимальный вариант, учитывая ваш конкретный сценарий использования и угрозы.