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):

1
apt-get install nfs-kernel-server nfs-common portmap

Правим ‘/etc/exports’ и прописываем монтируемые каталоги с правильными опциями:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# /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. Ну и не забудьте поменять разрешенные подсети на свои.

Перезапускаем сервис:

1
/etc/init.d/nfs-kernel-server restart

Чтобы посмотреть какие ресурсы предоставлены:

1
showmount -e

Если вы только добавляли ресурсы в файл ‘/etc/exports’, то их можно активировать без перезапуска службы NFS:

1
exportfs -a

Теперь перейдем к настройке EncFS, для упрощения я написал небольшой скрипт, подробно его прокомментировав, тем самым, не вижу смысла дублировать пояснения:

1
nano /usr/local/bin/efs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/bin/sh

# ----------------------------------------------------------------------------
# Simple script for EncFS with NFS access
# Written by ZeroChaos
# Version 1.0, 2013-02-26
# Site: http://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
1
chmod 755 /usr/local/bin/efs

Вот и все, теперь монтируем шару через Finder (CMD+K):

nfs-encfs-01

Смонтированная шара:

nfs-encfs-02

При необходимости добавляем в автозагрузку (просто перетяните смонтированный том в ‘Объекты входа’):

nfs-encfs-03

Свою зашифрованную шару я монтировать и демонстрировать не буду, процесс ничем не отличается от того, что описан выше. Выполнили ‘efs -m’, ввели пароль, смонтировали через Finder шару, залили приватные данные, отмонтировали шару, выполнили ‘efs -u’. А так выглядят зашифрованные данные:

nfs-encfs-04

Приятного пользования!

Категория: *nix, Mac OS X, Programming

Теги: , , ,

Оставить комментарий

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Аватары обслуживаются системой Gravatar. При публикации сообщения, Вы можете указать свой e-mail в этой системе.

Donate

Яндекс.Деньги:

VISA/MasterCard:

PayPal:
PayPal USD
PayPal RUB
WMZ WMZ: Z375880088307
WMR WMR: R883546545943
YAD YAD: 4100170884493

Donate - лучшее спасибо автору
Количество благодарностей: 34

Разделы

Последние комментарии