Файловый сервер без 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.
Однако пользователи периодически копируют из разных источников файлы, у которых уже установлены некие, отличающиеся от необходимых, права.
Для решения этой проблемы используем gamin и fileschanged:
#aptitude install gamin fileschanged

Создаем скрипт, который будет устанавливать права:
#nano /root/share.sh

И записываем в него:
#!/bin/bash
if [ -d "$2" ]; then
chmod 770 "$2"
elif [ -f "$2" ]; then
chmod 660 "$2"
fi

Теперь при помощи fileschanged нужно этот скрипт выполнить.
#fileschanged -cCfr -x /root/share.sh /home/share &

Все хорошо, но сервера время от времени имеют свойство перезагружаться. Можно, конечно, каждый раз руками запускать эту строку. Но это некрасиво.
По этому нужно просто запускать эту строку автоматически.
Для этого добавим в файл /etc/rc.local строку:
/usr/bin/fileschanged -cCfr -x /root/share.sh /home/share &

Вот и все. Все работы на сервере закончены.

Дополнение к статье

Как показала практика, использовать gamin слишком непродуктивно.Уж слишком много ресурсов отъедает эта программа.
На Celeron 2.6 она отъедала 25% проца. Пришлось искать альтернативу.И она таки была найдена!
Теперь на сервере крутится 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

Вот теперь действительно все. Нагрузка на процессор сервера значительно снизилась.
inotifywait потребляет порядка 0.5%-1%. Это вполне допустимо, как по мне.

 

Добавить комментарий

Защитный код
Обновить