понедельник, 17 октября 2011 г.

Файловый сервер без SAMBA. Работа по SSH


Файловый сервер без SAMBA. Работа по SSH

Идеологическая часть

Вначале рассмотрим политически-организационную часть такого сервера.
Работа с Samba, и вообще по протоколу SMB в Windows-сети стала уже стандартом. Да и задумывалась она, скорее всего, так же.
Но сегодня уже нет смысла привязываться только к этому протоколу. Он несет в себе слишком много ограничений.


Если рассматривать офис, в котором установлены только стационарные компьютеры и работа из дома или вообще из-за пределов офиса не планируется никогда - то в таком случае действительно стоит ограничиться работой по SMB и не морочить себе голову.
Совсем другое дело, когда пользователь работает за ноутбуком. Тут уже строить систему нужно так, что бы у работника были минимальные (а лучше, что бы их не было вообще) отличия в трудовом процессе, при работе через интернет.
Работа большинства современных серверных приложений (1С, GroupWare и т.д.) абсолютно спокойно делается с помощью веб-интерфейса. С почтой тоже обычно проблем не бывает. Доступ в интернет при удаленной работе системного администратора вообще не волнует. Остается последняя проблема - доступ к файлам на файловом сервере.



В качестве альтернативы протоколу SMB, рассмотрим преимущества работы с файловым хранилищем по SSH:
1. Только авторизованный доступ.
2. Изначально жесткое разделение прав пользователей на доступ.
3. Отсутствие разницы в работе пользователя вне зависимости от его местонахождения.
4. Возможность авторизации пользователя как по паролю (возможна интеграция с Microsoft AD), так и по ключу.
5. Отсутствие необходимости в закупке, настройке и поддержке сервера VPN.
6. Отсутствие необходимости в закупке серверной лицензии Microsoft Windows.

Из недостатков можно найти только один - это все таки непривычное для большинства системных администраторов решение.


Настройка сервера

Вначале займемся настройкой сервера.
Для начала создадим папку, в которой и будут размещаться папки общего доступа.
Пусть она находится в /home/share
#mkdir /home/share

Теперь создадим в ней две подпапки - /public и /sales
#cd /home/share
#mkdir public
#mkdir sales

Соответственно нужно будет создать и две группы пользователей на сервере - public и sales
#addgroup public
#addgroup sales

Сейчас создадим двух тестовых пользователей - user1 и user2:
#adduser user1
#adduser user2

Теперь сделаем так, что бы пользователь user1 имел доступ только в public, а user2 - и в public, и в sales.
Для этого введем их в соответствующие группы:
#addgroup user1 public
#addgroup user2 public
#addgroup user2 sales

Настройка пользователей на сервере закончена.
Теперь нужно правильно установить права на сами папки.
#chown root:public /home/share/public
#chown root:sales /home/share/sales
#chmod 770 /home/share/public
#chmod 770 /home/share/sales

Для того, что бы был нормальный доступ к файлам в папках, на эти папки нужно еще установить бит SedGID.
#chmod g+ws,o= /home/share/public
#chmod g+ws,o= /home/share/sales

Остался последний момент. Нужно контролировать, что бы у всех файлов внутри этих каталогов были права 660, а у вложенных каталогов - 770.
Если бы у нас заведомо файлы только создавались, не было бы никаких проблем. Можно было бы обойтись использованием umask.
Однако пользователи периодически копируют из разных источников файлы, у которых уже установлены некие, отличающиеся от необходимых, права.



Для решения этой проблемы используем inotifywait:
Для начала нужно установить пакет inotify-tools#aptitude install inotify-tools
Теперь в /etc/rc.local добавим строку:
/usr/bin/inotifywait -mr --format '%w%f' -e close_write -e moved_to -e create /home/share | while read file; do /root/share.sh "$file"; done

Переменную $file в кавычки брать обязательно!
Если этого не сделать, и в пути встретятся имена файлов или каталогов с пробелами - ничего не сработает.
Ну и создаем скрипт /root/share.sh:
#!/bin/bash
if [ -d "$1" ]; then
chmod 770 "$1"
elif [ -f "$1" ]; then
chmod 660 "$1"
fi




Не забываем сделать этот скрипт исполняемым:
#chmod +x /root/share.sh
Вот и все. Все работы на сервере закончены.


Настройка клиентских компьютеров под Linux.
Установим sshfs и autofs. Выполним команду:$sudo aptitude install sshfs autofs
Теперь настройка.
Для начала сделаем возможным подключение по ssh к удаленному серверу по ключу, а не по паролю:
Заходим на свою машину с правами root:
$sudo su
Вводим свой пароль.
Генерируем RSA ключи:
#ssh-keygen -t rsa

Отвечаем на вопросы:
1.
Enter file in which to save the key (/root/.ssh/id_rsa): - соглашаемся на значение по умолчанию.
2.
Enter passphrase (empty for no passphrase): - Оставляем значение пустым. Паролем пользоваться не будем.
3.
Enter same passphrase again: - Снова оставляем значение пустым.

Скрипт создал 2 ключа: приватный и публичный.
Your identification has been saved in /root/.ssh/id_rsa. - секретный приватный ключ для декодирования.Your public key has been saved in /root/.ssh/id_rsa.pub. - публичный ключ для кодирования.

Сейчас нужно скопировать на сервер наш публичный ключ:

#ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

Всё. Теперь попробуем залогиниться:
#ssh user@server

Теперь беремся за настройку, собственно, autofs.
Открываем на редактирование файл /etc/auto.master и добавляем туда:
/home/user/server /etc/auto.sshfs --timeout=30,--ghost
где /home/user/server - это папка, за которой будет следить наш autofs.

Теперь создадим файл /etc/auto.sshfs и запишем в него:
home -fstype=fuse,rw,nodev,nonempty,noatime,allow_other,max_read=65536,reconnect,uid=1000,gid=1000 sshfs\#user@server\:/home/user
Разлогиниваемся из-под root:
#exit

Создаем папку, куда будет монтироваться каталог на удаленном сервере:
$mkdir /home/user/server

И перестартовываем сервис autofs:
$sudo service autofs restart

Теперь у нас все настроено. При заходе в папку /home/user/server у нас автоматически примонтируется сервер, что можно сразу же проверить.



Настройка клиентских компьютеров под Windows.
Здесь все просто. Скачиваем и устанавливаем программу Docan.
С ее помощью удаленный каталог на сервере монтируется как локальный диск.

Комментариев нет: