NFS mount on the OS X Mountain Lion and realtime encrypt files with EncFS
Уверен, что многие столкнулись с проблемой монтирования NFS (Network File System) из под OS X Mountain Lion. В этой версии Apple выпилила привычный инструмент монтирования через Disk Utility. Многие начали изобретать велосипеды или пользоваться чем-то вроде NFS Manager. Вот только все это ни к чему, достаточно внимательно почитать man и правильно настроить NFS Server. Пройдемся пошагово.
Для начала установим NFS Server на нашем *nix’овом сервере (в моем случае Debian):
apt-get install nfs-kernel-server nfs-common portmap
Правим ‘/etc/exports’ и прописываем монтируемые каталоги с правильными опциями:
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/hdd1/Downloads 192.168.1.0/255.255.255.0(rw,sync,no_subtree_check,all_squash,anonuid=1002,anongid=1002,insecure) 10.10.1.0/255.255.255.0(rw,sync,no_subtree_check,all_squash,anonuid=1002,anongid=1002,insecure)
/hdd1/webdav/itunes 192.168.1.0/255.255.255.0(rw,sync,no_subtree_check,all_squash,anonuid=33,anongid=33,insecure) 10.10.1.0/255.255.255.0(rw,sync,no_subtree_check,all_squash,anonuid=33,anongid=33,insecure)
/hdd1/webdav/efs 192.168.1.0/255.255.255.0(rw,sync,no_subtree_check,all_squash,anonuid=33,anongid=33,fsid=1,insecure)
Ключевой здесь является опция ‘insecure’, по сути, она избавляет от необходимости в опции ‘resvport’ на стороне клиента, которую раньше можно было выставить в Disk Utility. Опция ‘resvport’ применяется в случае, если NFS-сервер работает на привилегированном порту (ниже 1024), по умолчанию же, OS X пытается подключиться к NFS-серверу на непривилегированном порту, вот мы и повесим NFS на него, используя опцию ‘insecure’. Не забудьте исправить ‘anonuid’ и ‘anongid’ на uid и gid того пользователя и группы, из под которых хотите, чтобы велась запись. Обратите внимание на ‘fsid=1’, добавьте эту опцию для шары, в которой будет использоваться EncFS. Ну и не забудьте поменять разрешенные подсети на свои.
Перезапускаем сервис:
/etc/init.d/nfs-kernel-server restart
Чтобы посмотреть какие ресурсы предоставлены:
showmount -e
Если вы только добавляли ресурсы в файл ‘/etc/exports’, то их можно активировать без перезапуска службы NFS:
exportfs -a
Теперь перейдем к настройке EncFS, для упрощения я написал небольшой скрипт, подробно его прокомментировав, тем самым, не вижу смысла дублировать пояснения:
nano /usr/local/bin/efs
#!/bin/sh
# ----------------------------------------------------------------------------
# Simple script for EncFS with NFS access
# Written by ZeroChaos
# Version 1.0, 2013-02-26
# Site: https://zerolab.net/
# ----------------------------------------------------------------------------
## Install EncFS:
# apt-get install encfs
## If we mount under another user (with option "--public" it's not necessary):
# adduser username fuse
## RTM!:
# man encfs
## Just replace the variables $EFS_FOLDER and $MOUNT_POINT, and then run:
# efs -m
## For unmount:
# efs -u
## For force unmount:
# efs -f
# ----------------------------------------------------------------------------
# Are you using NFS for access to decrypted folder?
NFS_ACCESS="yes"
# Variables for encfs command
EFS_FOLDER="/hdd1/efs"
MOUNT_POINT="/hdd1/webdav/efs"
OPTIONS="--public"
#OPTIONS="--public --idle=60"
MNT_CMD="encfs $OPTIONS $EFS_FOLDER $MOUNT_POINT"
# If we mount under another user
#RUNAS="username"
#MNT_CMD="su - $RUNAS -c \"encfs $EFS_FOLDER $MOUNT_POINT\""
# Mount
mount() {
$MNT_CMD
}
# Unmount
umount() {
if [ $NFS_ACCESS = "yes" ]; then
/etc/init.d/nfs-kernel-server stop >/dev/null 2>&1
sleep 1
fi
fusermount -u $MOUNT_POINT
if [ $NFS_ACCESS = "yes" ]; then
sleep 1
/etc/init.d/nfs-kernel-server start >/dev/null 2>&1
fi
}
# Force unmount
force_umount() {
ps ax | grep [e]ncfs | awk '{ print $1 }' | xargs kill >/dev/null 2>&1
if [ $NFS_ACCESS = "yes" ]; then
/etc/init.d/nfs-kernel-server restart >/dev/null 2>&1
fi
}
ME=$(basename "$0")
print_help() {
echo
echo "Usage: $ME [OPTION...]"
echo
echo "Options:"
echo " -m Mount:"
echo " efs -m"
echo " -u Unmount:"
echo " efs -u"
echo " -f Force unmount:"
echo " efs -f"
echo " -h Help."
echo
}
while getopts ":mufh" opt;
do
case $opt in
m) mount;
;;
u) umount;
;;
f) force_umount;
;;
h) print_help;
;;
*) echo "Wrong option";
exit 1
;;
esac
done
chmod 755 /usr/local/bin/efs
Вот и все, теперь монтируем шару через Finder (CMD+K):
Смонтированная шара:
При необходимости добавляем в автозагрузку (просто перетяните смонтированный том в ‘Объекты входа’):
Свою зашифрованную шару я монтировать и демонстрировать не буду, процесс ничем не отличается от того, что описан выше. Выполнили ‘efs -m’, ввели пароль, смонтировали через Finder шару, залили приватные данные, отмонтировали шару, выполнили ‘efs -u’. А так выглядят зашифрованные данные:
Приятного пользования!