Вопрос или проблема
У меня есть следующая строка в моем /etc/fstab
:
/dev/mapper/tmp /tmp ext4 noexec,nodev,nosuid,mode=1777 0 0
Когда я пытаюсь смонтировать /tmp
, я получаю следующую ошибку в dmesg
:
EXT4-fs (dm-1): Неизвестный параметр монтирования "mode=1777" или отсутствующее значение
Как я могу указать, что у /tmp
будут разрешения 1777
? Я пересоздаю (форматирую) файловую систему на /dev/mapper/tmp
каждый раз при загрузке, поэтому разрешения не сохраняются после перезагрузки.
Из того, что я нашел в интернете, mode=1777
должен делать свою работу. Но у меня это не работает.
ОБНОВЛЕНИЕ:
Чтобы сделать ситуацию более наглядной, вот скрипт, который я использую:
cryptsetup --key-file /dev/urandom create tmp /dev/sda2
mkfs.ext4 /dev/mapper/tmp > /dev/null 2>&1
Этот скрипт выполняется во время загрузки, после checkroot
. Затем позже, когда bootall
хочет смонтировать /tmp
, он видит запись в fstab и смонтирует /dev/mapper/tmp
как /tmp
.
Поскольку я создаю устройство LUKS
при каждой загрузке, мне также нужно форматировать раздел каждый раз. В отличие от того, что некоторые люди комментировали здесь, разрешения НЕ сохраняются после форматирования. Очевидно.
Если у вас система с включенным systemd
, то вы можете использовать tmpfiles
. См. man 5 tmpfiles.d
для получения подробной информации.
Создайте файл /etc/tmpfiles.d/tmp.conf
с таким содержанием:
d /tmp 1777 root root - -
systemd-tmpfiles-setup.service
позаботится о ваших разрешениях.
Если вам не нужно большее /tmp
, чем может вместить ваша свободная память + своп, вы можете рассмотреть возможность использования tmpfs
-основанного /tmp
, который на самом деле является диском в оперативной памяти, и использовать место на диске, ранее выделенное для /tmp
, для увеличения пространства свопа вместо этого.
Он будет использовать только столько оперативной памяти, сколько необходимо для текущего содержимого, и переместит наименее недавно используемое содержимое в своп, если ОЗУ становится низким.
Вам нужно будет только добавить строку в /etc/fstab
подобную этой:
tmpfs /tmp tmpfs rw,mode=1777 0 0
Максимальный размер по умолчанию составляет 50% вашей свободной памяти. Вы можете использовать опцию size=
для указания другого максимального размера, как в процентах от свободной памяти, так и в байтах (с необязательным суффиксом k
, m
или g
для килобайтов/мегабайтов/гигабайтов на основе 1024).
Если вы уже используете зашифрованный своп, который повторно шифруется при каждой перезагрузке, это даст вам возможность эффективно получить аналогичное повторное шифрование /tmp
бесплатно, с приростом производительности, если у вас достаточно ОЗУ для размещения содержимого /tmp
.
Измените строку в /etc/fstab
на:
/dev/mapper/tmp /tmp ext4 noexec,nodev,nosuid 0 0
Затем войдите в систему и выполните:
chmod 1777 /dev/mapper/tmp
При следующей перезагрузке ваша /etc/fstab
будет достаточной, так как chmod
является постоянным. Вы пытаетесь использовать параметр, предназначенный для монтирования в Windows (fat, ntfs и т.д.) в нативной файловой системе Linux (ext4). Вместо этого вы изменяете
разрешения папки с помощью chmod.
Смотрите пост на форумах Suse.
Вы не можете использовать mode в ext4
. Таким образом, вам, возможно, придется монтировать файловую систему, которую вы создаете, другим способом. Вы можете создать раздел ext3
где-то еще.
Ответ или решение
Чтобы задать права доступа 1777 для каталога /tmp
, вы не можете использовать опцию mode=1777
в файле /etc/fstab
, так как эта опция не поддерживается для файловых систем на базе ext4
. Вместо этого вам нужно выполнить изменение прав доступа непосредственно после создания и монтирования файловой системы. Ниже я представлю несколько решений вашей проблемы, а также объясню каждое из них.
1. Изменение прав доступа после монтирования
Наиболее прямолинейный способ установить необходимые права для каталога /tmp
— это просто выполнить команду chmod
после его монтирования. Вы можете изменить свою настройку в fstab
следующим образом:
/dev/mapper/tmp /tmp ext4 noexec,nodev,nosuid 0 0
Затем, после монтирования файловой системы, выполните следующую команду:
sudo chmod 1777 /tmp
Это обеспечит, что /tmp
будет иметь права доступа 1777, что позволяет любому пользователю создавать файлы, но они могут удалять только свои собственные файлы.
2. Использование سیستم tmpfiles
Если у вас система, основанная на systemd
, вы можете использовать tmpfiles
для автоматического задания прав доступа к каталогу /tmp
при каждой загрузке. Для этого создайте файл конфигурации:
sudo nano /etc/tmpfiles.d/tmp.conf
Добавьте в него следующую строчку:
d /tmp 1777 root root - -
С помощью systemd-tmpfiles-setup.service
при загрузке будут автоматически применены установленные вами права доступа.
3. Рассмотрение использования tmpfs
Если разрешение на использование большего размера для /tmp
не является критичным, вы можете рассмотреть возможность использования tmpfs
, что представляет собой виртуальную файловую систему в оперативной памяти. Для этого добавьте в свой файл /etc/fstab
следующую строку:
tmpfs /tmp tmpfs rw,mode=1777 0 0
Это автоматически будет создавать /tmp
как файловую систему в оперативной памяти с правами 1777. tmpfs
использует объём оперативной памяти и при необходимости может использовать пространство подкачки, что обеспечивает высокую производительность.
Заключение
В итоге, наиболее рекомендованным и простым решением для задания прав 1777 на каталоге /tmp
является использование команды chmod
после монтирования файловой системы или внедрение системы tmpfiles
при использовании systemd
. Если вы цените производительность и объем доступной памяти, использование tmpfs
будет оптимальным выбором.
Пожалуйста, пусть это руководство поможет вам правильно настроить права доступа на вашем сервере и избежать проблем с безопасностью и доступом в будущем.