среда, 23 ноября 2011 г.

FTP на домашнем сервере

Вот никогда не думал, что потребуется FTP дома, а тут прога в телефоне хочет именно этот протокол.  Пришлось поднять FTP.  Далее кратко описано как и что.

FTP серверов под линукс есть несколько.  После быстрого гугления я остановился на ProFTPD.  Вот тут есть пример толкового конфига с внятными пояснениями.  Есть и рекоммендаци на случай, если надо открыть доступ "снаружи".  Я как раз этим конфигом и воспользовался- мне и надо-то, что анонимный доступ на чтение в одну директорию и только из локалки.

Вот что получилось.

Устанавливаем сервер
На вопрос, как запускать, я ответил- через initd, НЕ standalone.  Много клиентов у этого сервера не будет.
sudo apt-get install proftpd

Правим /etc/shells
sudo vim /etc/shells

Туда добавляем:
/bin/false

Создаем директорию для обмена
sudo mkdir /home/FTP-shared

Создаем юзера
sudo useradd userftp -p password -d /home/FTP-shared -s /bin/false
Пароль password надо заменить на реальный.

Создаем директории для скачки/закачки
sudo mkdir /home/FTP-shared/public
sudo mkdir /home/FTP-shared/upload

Назначаем права
sudo chmod 755 /home/FTP-shared
sudo chmod 755 /home/FTP-shared/public
sudo chmod 777 /home/FTP-shared/upload

Правим конфиг
sudo mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.old
sudo vim /etc/proftpd/proftpd.conf

Туда добавляем (перед секцией Global):

<Limit LOGIN>
AllowUser userftp
DenyALL
</Limit>

<Directory /home/FTP-shared>
Umask 022 022
AllowOverwrite off
<Limit MKD STOR DELE XMKD RNRF RNTO RMD XRMD>
DenyAll
</Limit>
</Directory>

<Directory /home/FTP-shared/public/*>
Umask 022 022
AllowOverwrite off
<Limit MKD STOR DELE XMKD RNEF RNTO RMD XRMD>
DenyAll
</Limit>
</Directory>

<Directory> /home/FTP-shared/upload/>
Umask 022 022
AllowOverwrite on
<Limit READ RMD DELE>
DenyAll
</Limit>

<Limit STOR CWD MKD>
AllowAll
</Limit>
</Directory>


<Anonymous /home/FTP-shared>
   User userftp
   Group nogroup
   UserAlias anonymous userftp
   MaxClients 8 "Max number of clients reached (%m)"
   DisplayChdir .message

  <Directory *>
   <Limit WRITE>
    DenyAll
   </Limit>
  </Directory>
</Anonymous>

Правим /etc/fstab
sudo vim /etc/fstab

Туда добавляем путь, который будет доступен по FTP:
/stuff/books /home/FTP-shared/public none bind 0 0

Итоги
После рестарта сервера (не FTP, а компьютера), анонимному пользователю (и пользователю userftp) будет доступно содержимое директории /stuff/books- только на чтение из /home/FTP-shared/public.  Также, пользователь userftp сможет создавать директории и файлы в /home/FTP-shared/upload.

Проверено с помощью Total Commander и проги в телефоне.