Как стать автором
Обновить

Домашний сервер. Часть 2. FTP, Samba и rTorrent

Время на прочтение7 мин
Количество просмотров81K
Пришло время организовывать файловое хранилище, как внутри сети так и снаружи. Данная статья является продолжением первой части, посвященной настройки WiFi роутера на Вашем домашнем сервере. Все жесткие диски с Вашего домашнего компьютера(кроме системного) можно перенести на сервер, поскольку скорость передачи данный колеблется в районе 10-20 мегабайт в секунду [данный параметр еще и очень сильно зависит от модели Вашего жесткого диска], да и кстати, давно уже пора для системного диска покупать SSD накопители.

FTP Server.
Существует множество ftp серверов для linux, много хороших, много плохих, но есть лучший [естественно, что это субъективное мнение, и лучший он для меня] и это vsftpd. Его мы и будем рассматривать.
Скачать его можно из стандартных репозитариев OpenSUSE, выполнив в терминале команду:
zypper in vsftpd

Теперь перейдем к описанию. Это консольный ftp server, у него нет GUI [графическая оболочка], поэтому вся настройка происходит в одном единственном конфиге, по адресу /etc/vsftpd.conf.
Вот пример рабочего конфига:
#разрешаем любые формы записи на FTP сервер
write_enable=YES
#разрешаем возможность отображения сообщений о переходах из папки в #папку.
dirmessage_enable=YES
#выбираем пользователя БЕЗ всяких привелегий (read-only)
nopriv_user=ftpsecure
#разрешаем локальных пользователей (локальные пользователи - это те, #которые зарегестрированы в системе, то есть на них есть учетные записи)
local_enable=YES
#запихиваем локального пользователя в chroot.
chroot_local_user=YES
#запрет анонимного входа на сервер
anonymous_enable=NO
#включаем логгирование
syslog_enable=YES
#разрешаем присоединятся по 20ому порту
connect_from_port_20=YES
#разрешаем аплоадить папки с киррилицей в названии
ascii_upload_enable=YES
#разрешаем скачивать папки с киррилицей в названии
ascii_download_enable=YES
#название PAM сервиса в системе
pam_service_name=vsftpd
#возможность работы в автономном режиме
listen=YES
#запрещаем SSL аутентификацию
ssl_enable=NO
#рейнж портов для режима PASV.
pasv_min_port=30000
pasv_max_port=30100
#привествие при заходе на ftp-server
ftpd_banner=Welcome to my ftp-server
#время, через сколько пользователя кикнут с сервера при его бездействии
idle_session_timeout=900
#максимальное количество юзеров
max_clients=10
#максимальное количество сессией с одного ip адреса
max_per_ip=3
#разрешение режима PASV(пассивный режим)
pasv_enable=YES
#маска разрешающих привелегий для локальных пользователей.
local_umask=0002

В приведенном выше конфиге нет заморочек для распределения прав доступа отдельным пользователям, отдельных папок. Всё довольно просто и лаконично, настроил один раз и пользуешься [пользуются]. Vsftpd был выбран, потому что у него лучшая система настройки прав доступа, которая подразделяется на два вида: внутренняя, системная аутентификация и внешняя, с отдельным конфигурационным файлом для распределения прав доступа, но при этом, пользователи всё также берутся из системы.

В данном примере и пользователи, и распределение прав доступа этих самых пользователей берется из системы, дополнительный конфиг-файл не используется.
image
Рисунок 1. Выставление прав
На этом собственно всё.

Samba.
Хотите всегда иметь под рукой файловое хранилище всех коллекций и всего прочего с ноутбука, с домашнего компьютера, с телефона, с планшета? Поехали.

Изначально, при стандартной установке системы OpenSUSE всё что нужно для установки и настройки samba на сервере уже предустановлено. Поэтому перейдем непосредственно к настройке. Поскольку доступ из под ОС Windows в качестве «Подключения сетевого диска» будет доступен только внутри Вашей локальной сети [для интернета есть ftp сервер, да и к тому же, вывешивать самбу в интернет крайне не безопасно, а мы же, — «ЗА СЕКЬЮРНОСТЬ!!! УРА!»] поэтому настройки будут крайне банальны и просты в понимании. Есть два [известных мне и адекватных на мой взгляд] настройки самбы, это через, всё тот самый, конфигурационный файл и при помощи утилиты — WebMin. Это дико-крутая штука, особенно для тех, кто не любит ковырять конфиги [но и здесь есть свои ньюансы]. В данной статье не будем останавливаться на средствах "для ленивых", поэтому продолжаем. Мы будем рассматривать рабочий конфиг файл. Находится он по адресу: /etc/samba/smb.conf. Вот он:
[global]
	# Указываем имя гостевого юзера.
        guest account = nobody
	# Указываем имя
        netbios name = homeserver
	# Включаем возможность прав "write"
        writeable = yes
	# Дополнительная опция, убирающая задержку.
        socket options = TCP_NODELAY IPTOS_LOWDELAY
	# При необходимости, указываем рабочую группу, где будут находится компьютеры
	#(абсолютно не обязательный параметр)
        workgroup = HOMENET
	# Выбираем интерфейсы на которые будет "прослушивать" самба.
	# (также, необязательная опция, по-умолчанию, будут прослушиваться все интерфейсы)
        interfaces = eth1 wlan0
	# Дома безопасность особо не нужна.
        security = share
        public = yes
[public]
	# Разрешаем гостя
        guest ok = yes
	# Только гость? Да.
        guest only = yes
	# Путь до публичной папки
        path = /cifs/pub
	# Не запрещаем запись.
        read only = no 
# Также, если интересует возможность доступа к CD-ROM'у, то вставьте # в конфиг самбы следующие опции:
[cdrom]
        fake oplocks = yes
        guest ok = yes
        guest only = yes
        path = /mnt/cdrom
        read only = yes

Также, дополнительную настройку можно выполнить через встроенный в YaST GUI samba.

Того пользователя, что мы указали в самом начале конфига, в данном примере это пользователь nobody, необходимо создать непосредственно в системе. Задать ему необходимые права (дома, имеет смысл поставить полные права, на создание, удаление, редактирование всех файлов и папок (т.е. права 777). Также, если Вы столкнетесь с ситуацией, когда по какой-то причине станет невозможным удаление/создание файлов в какой-либо из папок на сервере, то выполните команду:
chmod 777 -R /path

Разберем её, на всякий случай:
chmod — команда установки прав.
777 — собственно права, в буквенном обозначении означают rwx, rwx, rwx — права чтение, запись, выполнение для владельца, группы(где состоит владелец), всех.
-R — ключ рекурсии, для того чтобы команда выполнилась не только для той папки(и файлов, находящихся в ней), которую Вы указали в /path, но и для всех под-папок и файлов в них тоже.
/path — путь до папки, на которую необходимо установить права. Аналогичная команда соответствует FTP серверу, если возникли похожие проблемы. Да, и надо оговориться, что если возникают подобные проблемы, то скорей всего проблема кроется в пользователях созданных в системе, а точнее в правах, выданных на использование их домашних директорий.

rTorrent.
Полу-автоматизированный торрент клиент.
На самом деле, это обычный торрент клиент, но, возможности настройки которого, очень богаты разнообразием. Сейчас мы с Вами разберём одну очень полезную функцию данного клиента. Представьте, Вы уже настроили самбу на Вашем домашнем сервере, файловое хранилище, находящееся на сервере подключена к Вашему компьютеру как Сетевой Диск, Вы открываете Ваш сетевой диск, открываете папку torrents, там открываете папку music и перемещаете туда все торрент файлы с музыкой, которые Вы хотите скачать и… всё, ложитесь спать. На утро уже будут скачены и проверены хеши всех торрентов, что Вы туда положили (тут конечно всё зависит от того сколько торрентов Вы хотите скачать, какой у них вес и какова ширина Вашего интернет канала). Нравится? Вот и я балдею уже как пол года, от этой функции.
Давайте разбираться.
Вам надо установить rtorrent, выполняем следующую команду в терминале:
zypper in rtorrent

После того, как Вы скачали и установили торрент-клиент rtorrent, необходимо произвести настройку клиента. Настройка программы осуществляется при помощи конфигурационного файла .rtorrent.rc, размещаемого в домашнем каталоге пользователя. (По умолчанию файл .rtorrent.rc отсутствует. Его нужно создавать самостоятельно. Привожу пример с подробными комментариями рабочего конфига:
#обмен пирами? Да!
peer_exchange = yes

#минимальное число пиров на торрент
min_peers = 1

#максимальное число пиров на торрент
max_peers = 1000

#максимальная скорость загрузки
download_rate = 0

#максимальная скорость отдачи. 1 - не ограничена
upload_rate = 0

#каталог для сохранения закачек или откуда будут сидироваться торренты.
directory = /files/torrents

#каталог куда будет сохраняться состояние торрентов.
#Здесь, в этом примере, они сохраняются в папку  session
session = /files/torrents/session/

#rtorrent каждые 5 секунд проверяет этот каталог на новые *.torrent #файлы
#и если они есть то ставит их на закачку
#schedule = watch_directory,5,5,load_start=/home/user/torrent_auto_load/

#проверяет каталоги на новые *.torrent файлы и сохраняет закачки в #соответствующие папки
schedule = watch_directory,5,5,"load_start=/files/torrents/music/*.torrent,d.set_directory=/files/music"
schedule = watch_directory_2,5,5,"load_start=/files/torrents/video/*.torrent,d.set_directory=/files/video"
schedule = watch_directory_3,5,5,"load_start=/files/torrents/video/serial/*.torrent,d.set_directory=/files/video/serial"
schedule = watch_directory_4,5,5,"load_start=/files/torrents/progs/*.torrent,d.set_directory=/files/progs"
schedule = watch_directory_5,5,5,"load_start=/files/torrents/games/*.torrent,d.set_directory=/files/games"
schedule = watch_directory_6,5,5,"load_start=/files/torrents/unsorted/*.torrent,d.set_directory=/files/unsorted"
schedule = watch_directory_7,5,5,"load_start=/files/torrents/doc/*.torrent,d.set_directory=/files/doc"
schedule = watch_directory_8,5,5,"load_start=/files/torrents/doc/books/*.torrent,d.set_directory=/files/doc/books"
#Удаление торрент-файлов из директории music(потому что в данном #примере, папка music идет как "directory"(#1), которые уже скачаны.
schedule = untied_directory,7,5,remove_untied=
#номер порта (или нескольких портов) который открывает клиент для #обмена данными
port_range = 40890-40890

#случайный выбор порта для обмена данными. В данном случае он #отключён
port_random = no

#проверять хэш торрента после закачки
check_hash = yes

#сохранять сессию
session_save = yes

#принимать зашифрованные входящие соединения, устанавливать #незашифрованные исходящие соединения,
#если возвращает ошибку, повторять с шифрованием, предпочитать #открытый текст после установления
#зашифрованного соединения
encryption = allow_incoming,enable_retry,prefer_plaintext

#использовать udp
use_udp_trackers = yes


image
Рисунок 2. Главное окно программы rTorrent

Собственно и все. Далее хитрый приём, — открываем консоль и пишем(можно и по ssh зайти на сервер):
screen rtorrent
Далее, в терминале откроется торрент-клиент, там же Вы его можете настроить и отладить дополнительно. Теперь нажимаем волшебные комбинации клавиш Ctrl+A затем Ctrl+D и консоль радостно Вас оповестит, что:
[detached]

image
Рисунок 3. «Заскринивание» процесса программы rTorrent.

Это говорит о том, что процесс Вашего торрент-клиента «закринин», то есть выполняется, но его при этом не видно. Для тех, адептов, кому всегда, всё интересно, может прочесть вот здесь про данную утилиту обременять голову такими вещами (хотя, они очень интересные и познавательные, и применяются часто) принудительно я не хочу.
Если Вам понадобилось заного открыть клиент, пишем:
screen -r

ВАЖНО: Если Вы хотите запускать торрент-клиент под рутом(root, т.е. через команду sudo) то, необходимо конфиг файл создавать в корневом каталоге пользователя root, а также, screen -r необходимо выполнять также, под тем же пользователем, под которым Вы ее «заскринили».
Таким образом, у Вас в фоне всегда будет висеть торрент-клиент, который будет качать и раздавать ровно столько, сколько будет работать Ваш сервер.


На этой «важной» ноте, я хочу закончить данную статью. Спасибо за внимание, и да, пользуйтесь поисковиком Google, он молодец!

Если ошибся топиком, подскажите куда перенести.
Теги:
Хабы:
Всего голосов 66: ↑46 и ↓20+26
Комментарии79

Публикации

Истории

Ближайшие события

28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань