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’. А так выглядят зашифрованные данные:
Приятного пользования!