Каждому пользователю нужен доступ к каталогу для временных файлов. Обычно переменная окружения TMPDIR указывает на этот каталог, и многие команды (например mktemp) умеют брать путь к временному каталогу из этой переменной.
Этот каталог предназначен для хранения файлов, которые не будут иметь смысла после перезапуска ОС (для таких временных файлов как журналы текстовых редакторов, и прочей информации которая скорее всего будет иметь смысл и после перезапуска, предназначен каталог /var/tmp).
Чаще всего каталогом для временных файлов является либо /tmp, либо ~/tmp. У каждого из этих вариантов есть свой недостаток:
/tmp -- другие пользователи видят как минимум факт наличия временного файла, его имя, дату последнего обновления, и, возможно, доступа. В случае ошибки с правами возможен даже доступ к этому временному файлу другим пользователем.
~/tmp -- файлы, которые является заведомо временным оказываются на одном разделе с ценными данными пользователя. Это неудобно для резервного копирования и автоматизированого удаления "ненужных" временных файлов (к которым не было обращения больше определённого времени и которые не открыты ни одним приложением). Кроме того временные файлы имеет смысл хранить на файловых системах без журналируемых, или быстрых но не славящихся особой надёжностью файловых системах вроде ReiserFS 3.
В UNIX-мире принято отделять мух от котлет, поэтому временные файлы можно и нужно хранить на отдельном разделе. И логично если это всё-таки будет /tmp.
Как это сделать?
Самый простой способ -- создать в /tmp подкаталоги для каждого конкретного пользователя, и добавить в /etc/profile код для установки TMPDIR в соответствующее значение.
Самый главный недостаток такого решения -- администратор должен побеспокоиться о каждом конкретном пользователе, да ещё и о том, чтобы эта переменная окружения выставлялась при разных вариантах доступа пользователя к системе (а если у него шелл не bash? А если он пользуется su/sudo? А если ...).
pam_mktemp
Есть простой и эффективный способ решить эту проблему -- модуль PAM (Pluggable Authentication Modules) pam_mktemp.
Я не буду описывать процесс сборки и установки модуля (ибо считаю что нет смысла засорять этим статью -- те, кто не знает как это сделать самостоятельно могут изучить, например, SRPM-пакет от ALT Linux). Пользователи же ALT Linux предпочтут просто выполнить команду "apt-get install pam0_mktemp".
Для его настройки достаточно в каталоге /etc/pam.d добавить строчку:
session optional pam_mktemp.so
в конфигурационные файлы всех программ, для которых нужно использовать эту возможность.
Как минимум это должны быть: sshd, все *dm, su, sudo, login.
Для ленивых достаточно выполнить следующий скрипт:
for s in kde wdm xdm sshd su sudo login; do
FILENAME=/etc/pam.d/$s
if [ -f $FILENAME ]; then
if ! grep -q pam_mktemp.so $FILENAME; then
echo -e "session optional\tpam_mktemp.so" >> $FILENAME
fi
fi
done
Заключение
Использование модуля pam_mktemp ещё один простой способ сделать жизнь системного администратора и его пользователей более приятной, а настроеную систему более логичной, "красивой" и эффективной.
----
(C) Денис Смирнов <mithraen@freesource.info> 5 Nov 2004
Размещение этого документа на других Internet-ресурсах, а также в печатных изданиях не допускается.
Отзывы
-- здесь вы можете высказать своё мнение по поводу этой статьи