Сетевое окружение в Linux

Grifon аватар

В Windows есть совсем мало штук, которым я, как линуксоид, по-доброму завидую. Одной из них, как это ни странно звучит, является реализация сетевого окружения как части файловой системы (ФС) что даёт пользовательским программам в подавляющем большинстве случаев не делать различия между локальными дисками и сетевыми ресурсами. В системах на базе Linux программы вынуждены закачивать исходный файл на локальную ФС, либо использовать так называемые «транспорты» на подобие KIO в KDE, что тоже имеет множество минусов. Помимо этого, есть возможность подмонтировать шары, используя smbfs или cifs, но данный способ требует прав root или наличие записи для каждого расшаренного ресурса записи в /etc/fstab, что может делать только root. Что можно сделать, смотрите дальше...

Не так давно (относительно) ядро стало поддерживать FUSE - File System In Userspace.

Цитата:
Он позволяет пользователям без привилегий создавать их собственные файловые системы без необходимости переписывать код ядра. Это достигается за счёт запуска кода файловой системы в пространстве пользователя, в то время как модуль FUSE только предоставляет «мост» для актуальных интерфейсов ядра.

На странице FUSE в вики можно почитать подробнее. Итак, продолжу. На базе FUSE образовалась smbnetfs, о которой я и расскажу.
SMBNetFS - это ФС в Linux/FreeBSD, которая позволяет использовать samba или microsoft network в той же манере, как и «Сетевое окружение» в Microsoft Windows.
Проверим, поддерживает ли ядро FUSE:
$ grep -i fuse /boot/config-smp.samsung-2.6.32.susp2

Если мы видим такую строчку:
CONFIG_FUSE_FS=y
Или
CONFIG_FUSE_FS=m
то поддерживает.
Во втором случае нам необходимо загрузить модуль:
$ modprobe fuse

Далее проверим, есть ли smbnetfs в нашем дистрибутиве (gentoo).
$ emerge --search smbnetfs
Searching...
[ Results for search key : smbnetfs ]
[ Applications found : 0 ]

К сожалению, в портах этого приложения нет. Ничего, соберём его вручную. Для этого мы скачаем с сайта http://ru.wikipedia.org/wiki/Filesystem_in_Userspace исходный код.
$ tar xjf ./smbnetfs-0.5.2.tar.bz2
$ cd smbnetfs-0.5.2
$ ./configure
$ make
$ make install

Всё, установили.
По сути, сейчас уже можно с ней работать, но мы хотим создать удобство, сравнимое с «сетевым окружением».
Поэтому, из папки исходного кода скопируем содержимое папки conf в $HOME/.smb для тех пользователей, которые будут пользоваться smbnetfs.
Раскоментарим строки
show_$_shares           "true"
show_hidden_hosts       "true"
include                 "smbnetfs.auth"
include                 "smbnetfs.host"

в файле ~/.smb/smbnetfs.conf
Проверим работу:
mkdir ~/network
smbnetfs ~/network

Смотрим:

Видим в локальном каталоге окружающие нас расшаренные компьютеры. При этом, любое приложение работает с ними как каталогами, а файлами в шарах - как регулярными файлами, что нам и требовалось:
$ tail network/CHILD/grifon/myfile.txt
splint
sqlite
sqlite-devel
...

Что соответствует файлу \\CHILD\grifon\myfile.txt
«А как быть, если ресурсы защищены паролем?» - спросите вы. Очень просто. Например, добавлю доступ на сервер CHILD:
echo 'auth CHILD grifon password' >> .smb/smbnetfs.auth
chmod 600 .smb/smbnetfs.auth
umount ~/network
smbnetfs ~/network

Наличие/отстутсвие записи авторизации:

«Допустим, авторизовались, а монтировать нам каждый раз?» - вы продолжите. И тут я вам напоминаю про PAM, который был описан в одной из прошлых статей.
Сейчас мы будем использовать модуль pam_mount. Этот модуль может монтировать различные тома автоматически на время пользовательской сессии. Первое, что надо сделать, это его установить.
Для gentoo это выглядит так:
emerge -u -N -D pam_mount

Изменяем файл /etc/pam.d/system-auth (для другого дистрибутива может быть немного другим):
auth            required        pam_env.so
auth            required        pam_unix.so try_first_pass likeauth nullok
auth            required        pam_ecryptfs.so unwrap
# Здесь:
auth            optional        pam_mount.so

account         required        pam_unix.so

password        required        pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password        required        pam_unix.so try_first_pass use_authtok nullok sha512 shadow

session         required        pam_limits.so
session         required        pam_env.so
session         required        pam_unix.so
session         optional        pam_permit.so
session         optional        pam_ecryptfs.so unwrap
# И здесь:
session         optional        pam_mount.so

Создаём ссылку для mount:
ln -sf /usr/local/bin/smbnetfs /sbin/mount.smbnetfs

В файле /etc/security/pam_mount.conf.xml добавляем после строки
<!-- pam_mount parameters: Volume-related -->

Следующее:
<volume  fstype="fuse"  path="smbnetfs" mountpoint="~/network" options="allow_other,umask=077,nonempty" />

Теперь при входе в систему «сетевое окружение» будет автоматически монтироваться.

sdfgh153 аватар

До чего network place знакомый. Я, кстати, ставил фьюз на рабочую бубунту но меня дико кошмарило то, что оно неадекватно переживло смерть сети и начинало тупить как конь на барже. Так что я забил и начал делать alt+f2 smb://, тоже неплохой вариант, я и на маке так часто делаю.

Grifon аватар

То было не так давно, меня это тоже сильно огорчало. Но сейчас smbnetfs исправили.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".