не могу поднять сервер ftp с systemd

Настройка, программирование, распределённые вычисления

Модераторы: Olej, bellic, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

не могу поднять сервер ftp с systemd

Непрочитанное сообщение Olej » 09 авг 2012, 23:52

Собственно, и весь вопрос!
То, что многие годы, в SysV делалось элементарно, под systemd порождает проблемы!
Т.е. вопрос по-честному должен бы звучать так: не могу поднять сервер ftp с долбанным systemd!

Система Fedora 17.

Вот начальное состояние сервиса xinetd после загрузки:

Код: Выделить всё

bash-4.2$ sudo systemctl status xinetd.service
xinetd.service - Xinetd A Powerful Replacement For Inetd
	  Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled)
	  Active: active (running) since Thu, 09 Aug 2012 22:07:59 +0300; 1h 16min ago
	 Process: 739 ExecStart=/usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid $EXTRAOPTIONS (code=exited, status=0/SUCCESS)
	Main PID: 741 (xinetd)
	  CGroup: name=systemd:/system/xinetd.service
		  └ 741 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid

Aug 09 22:08:00 notebook xinetd[741]: removing shell
Aug 09 22:08:00 notebook xinetd[741]: removing rsync
Aug 09 22:08:00 notebook xinetd[741]: removing tcpmux
Aug 09 22:08:00 notebook xinetd[741]: removing telnet
Aug 09 22:08:00 notebook xinetd[741]: removing time
Aug 09 22:08:00 notebook xinetd[741]: removing time
Aug 09 22:08:00 notebook xinetd[741]: xinetd Version 2.3.15 started with libwrap loadavg labeled-networking options compiled in.
Aug 09 22:08:00 notebook xinetd[741]: Started working: 1 available service

Код: Выделить всё

bash-4.2$ ps -A | grep xinetd
  741 ?        00:00:00 xinetd
В принципе, xietd должен бы по запросу ftp поднять службу xproftpd:

Код: Выделить всё

[root@notebook xinetd.d]# ls /etc/xinetd.d
chargen-dgram   daytime-dgram   discard-dgram   echo-dgram   rexec   rsh    tcpmux-server  time-dgram   xproftpd
chargen-stream  daytime-stream  discard-stream  echo-stream  rlogin  rsync  telnet         time-stream
Но служба стартует и сразу же падает:

Код: Выделить всё

[root@notebook xinetd.d]# ftp
ftp> open 192.168.1.5
Connected to 192.168.1.5 (192.168.1.5).
421 Service not available, remote server has closed connection

Код: Выделить всё

bash-4.2$ sudo systemctl status xinetd.service | tail -n 3
Aug 09 23:30:11 notebook xinetd[741]: START: ftp pid=2769 from=::ffff:192.168.1.5
Aug 09 23:30:11 notebook proftpd[2770]: [87B blob data]
Aug 09 23:30:11 notebook xinetd[741]: EXIT: ftp status=0 pid=2769 duration=0(sec)
Хоть бы какую зацепку? ;-)

Этот сюрприз стал крайне неприятным и не вовремя - в связи с активным использованием инсталляций разных ОС (QNX и др.) в виртуальных машинах VirtualBox.
Ну и как туда закидывать файлы ... на начальной раскрутке?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: не могу поднять сервер ftp с systemd

Непрочитанное сообщение Olej » 10 авг 2012, 15:08

Olej писал(а): Хоть бы какую зацепку? ;-)

Код: Выделить всё

bash-4.2$ sudo systemctl stop xinetd.service
bash-4.2$ sudo systemctl status xinetd.service
xinetd.service - Xinetd A Powerful Replacement For Inetd
	  Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled)
	  Active: inactive (dead) since Fri, 10 Aug 2012 14:58:07 +0300; 1s ago
	Main PID: 733 (code=exited, status=0/SUCCESS)
	  CGroup: name=systemd:/system/xinetd.service

Aug 10 12:07:24 notebook xinetd[733]: removing exec
Aug 10 12:07:24 notebook xinetd[733]: removing login
Aug 10 12:07:24 notebook xinetd[733]: removing shell
Aug 10 12:07:24 notebook xinetd[733]: removing rsync
Aug 10 12:07:24 notebook xinetd[733]: removing tcpmux
Aug 10 12:07:24 notebook xinetd[733]: removing telnet
Aug 10 12:07:24 notebook xinetd[733]: removing time
Aug 10 12:07:24 notebook xinetd[733]: removing time
Aug 10 12:07:24 notebook xinetd[733]: xinetd Version 2.3.15 started with libwrap loadavg labeled-networking options...ed in.
Aug 10 12:07:24 notebook xinetd[733]: Started working: 1 available service
Остановился сервис суперсервера xinetd.

Код: Выделить всё

bash-4.2$ sudo systemctl start proftpd.service
bash-4.2$ sudo systemctl status proftpd.service
proftpd.service - ProFTPD FTP Server
	  Loaded: loaded (/usr/lib/systemd/system/proftpd.service; disabled)
	  Active: active (running) since Fri, 10 Aug 2012 14:58:36 +0300; 7s ago
	 Process: 7482 ExecStart=/usr/sbin/proftpd $PROFTPD_OPTIONS (code=exited, status=0/SUCCESS)
	Main PID: 7483 (proftpd)
	  CGroup: name=systemd:/system/proftpd.service
		  └ 7483 proftpd: (accepting connections)

Aug 10 14:58:36 notebook proftpd[7483]: 192.168.1.5 - ProFTPD 1.3.4b (maint) (built Wed Aug 1 2012 12:03:19 UTC) st...TARTUP
bash-4.2$ 
Стартовал сервис proftpd :

Код: Выделить всё

bash-4.2$ ftp localhost
Connected to localhost (127.0.0.1).
220 FTP Server ready.
Name (localhost:olej): olej
331 Необходим пароль для пользователя olej
Password:
530 Некорректные данные аутентификации.
Login failed.
421 Service not available, remote server has closed connection
ftp> pwd
Not connected.
ftp> quit
Есть коннект!

Это можно понять... предположить, по крайней мере:
- xinetd открывает прослушивающий сокет, прихватывает порт...
- proftpd пытается создать серверный (прослушивающий) сокет на том же порту ... обламывается...

Но теперь перефразирую вопрос:
- а как запустить суперсервер (чего ему не хватает), чтобы он подымал ftp?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: не могу поднять сервер ftp с systemd

Непрочитанное сообщение Olej » 22 окт 2012, 19:27

Olej писал(а): Стартовал сервис proftpd :

Код: Выделить всё

bash-4.2$ ftp localhost
Connected to localhost (127.0.0.1).
220 FTP Server ready.
Name (localhost:olej): olej
331 Необходим пароль для пользователя olej
Password:
530 Некорректные данные аутентификации.
Login failed.
421 Service not available, remote server has closed connection
ftp> pwd
Not connected.
ftp> quit
Есть коннект!

Код: Выделить всё

bash-4.2$ ps -A | grep ftp
 5492 ?        00:00:00 proftpd
В том, что есть подключение, но дальше не проходит аутентификация - нам пакостит SELinux.
Гадость редкая.

Отключим его временно:

Код: Выделить всё

[root@notebook selinux]# setenforce 0
И далее подключение FTP:

Код: Выделить всё

bash-4.2$ ftp 192.168.1.5
Connected to 192.168.1.5 (192.168.1.5).
220 FTP Server ready.
Name (192.168.1.5:olej): olej
331 Необходим пароль для пользователя olej
Password:
230 Пользователь olej подключён
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/" является текущей директорией
ftp> ls
227 Entering Passive Mode (192,168,1,5,146,241).
150 Открываю режим ASCII данных для file list
drwxr-xr-x   4 olej     olej         4096 Jul 28 14:15 2010_WORK
drwxr-xr-x  11 olej     olej         4096 Aug  7 15:30 2011_WORK
drwxr-xr-x  16 olej     olej         4096 Sep 27 08:57 2012_WORK
drwxr-xr-x   5 olej     olej         4096 Jul 28 14:17 ADT-10.0.1
drwxr-xr-x   3 olej     olej         4096 Jul 28 14:40 CodeBlocks
drwxr-xr-x   3 olej     olej         4096 Jul 28 14:39 CodeSourcery
drwxr-xr-x   2 olej     olej         4096 Jul 28 14:34 DS-5
drwx------   5 olej     olej         4096 Sep  1 18:25 Dropbox
drwxr-xr-x   3 olej     olej         4096 Jul 28 14:26 IdeaProjects
drwxr-xr-x   7 olej     olej         4096 Jul 28 14:34 MyWebMoney
drwxr-xr-x   7 olej     olej         4096 Jul 28 14:40 NVIDIA_GPU_Computing_SDK
drwxr-xr-x   3 olej     olej         4096 Jul 28 14:33 NetBeansProjects
drwxr-xr-x   3 olej     olej         4096 Jul 28 14:32 SolStudioProjects
drwxr-xr-x   3 olej     olej         4096 Jul 28 14:16 Syllable_OS
-rw-rw-r--   1 olej     olej     10240000 Oct  5 20:29 XXX
-rw-rw-r--   1 olej     olej     102400000 Oct  5 21:08 YYY
drwxr-xr-x  11 olej     olej         4096 Jul 28 14:22 android-sdk-linux_x86
drwxr-xr-x   2 olej     olej         4096 Sep  6 10:53 bin
drwxr-xr-x  14 olej     olej         4096 Jul 28 14:40 buildroot-2011.08
drwxr-xr-x   2 olej     olej         4096 Aug  5 20:24 codeblocks.src
drwxr-xr-x   9 olej     olej         4096 Jul 28 14:43 eclipse
drwxr-xr-x   2 olej     olej         4096 Jul 28 14:26 fbinst
drwxrwxr-x   8 olej     olej         4096 Jul 31 20:58 glassfish-3.1.2
drwxrwxr-x   6 olej     olej         4096 Jul 30 19:21 idea-IC-117.798
drwxrwxr-x  20 olej     olej         4096 Jul 29 14:58 netbeans-7.1.1
-rwxr--r--   1 500      500            47 Jul 28 14:26 nfs.mount.atom
-rwxr--r--   1 500      500            51 Jul 28 14:36 nfs.mount.nvidia
drwxr-xr-x  11 olej     olej         4096 Nov 16  2011 solarisstudio12.3
-rw-------   1 olej     olej     3072000000 Aug 21 17:31 tmp.2Gx4krDXCv
-rw-------   1 olej     olej     1024000000 Sep  1 09:36 tmp.yKOhubmq6X
drwxr-xr-x   6 olej     olej         4096 Jul 28 14:15 workspace
drwxr-xr-x   2 olej     olej         4096 Jul 29 10:25 Видео
drwxr-xr-x   2 olej     olej         4096 Jul 29 10:25 Документы
drwxr-xr-x  26 olej     olej        12288 Oct 19 07:20 Загрузки
drwxr-xr-x   2 olej     olej         4096 Oct 19 07:40 Изображения
drwxr-xr-x  20 olej     olej         4096 Jul 28 14:16 Картинки
drwxr-xr-x   6 olej     olej         4096 Jul 28 14:17 Книги
drwxr-xr-x   2 olej     olej         4096 Jul 29 10:25 Музыка
drwxr-xr-x   2 olej     olej         4096 Jul 29 10:25 Общедоступные
drwxrwxr-x   2 olej     olej         4096 Sep 11 22:58 Рабочий стол
drwxr-xr-x   2 olej     olej         4096 Jul 29 10:25 Шаблоны
drwx------   3 olej     olej         4096 Aug  5 16:21 проекты
226 Передача завершена
P.S. Про "гадкий" SELinux подробнее здесь рядом: SELinux.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: не могу поднять сервер ftp с systemd

Непрочитанное сообщение Olej » 22 окт 2012, 19:49

Olej писал(а): И далее подключение FTP:
Итого, у нас есть 2, а на самом деле 3 (см. ниже) возможности использовать FTP:

1. настроить xinetd так, чтобы он по запросу подымал службу, описанную в настройках /etc/xinetd.d/xproftpd (это пока отложили).

2. убить xinetd, и запустить командами systemd службу proftpd (в Fedora 17 ставится по дефаулту, но можно любой FTP-сервер) - это то, что показано выше.

3. а если нужен xinetd для слежения для запросами к другим службам?
Тогда просто забрать FTP из-под управления xinetd, в файле /etc/xinetd.d/xproftpd - в disable no заменяем yes:

Код: Выделить всё

[root@notebook xinetd.d]# cat /etc/xinetd.d/xproftpd
# default: off
# description: The ProFTPD FTP server 
service ftp
{
#	disable	= no
	disable	= yes
	flags           = REUSE
	socket_type     = stream
	wait            = no
	user            = root
	server          = /usr/sbin/in.proftpd
	log_on_success  += DURATION
	log_on_failure  += USERID
	nice		= 10
}
И дальше запускаем сервис proftpd :

Код: Выделить всё

[root@notebook xinetd.d]# systemctl start proftpd.service
Теперь они не конфликтуют:

Код: Выделить всё

bash-4.2$ ps -A | grep ftp
 5492 ?        00:00:00 proftpd
bash-4.2$ ps -A | grep xinet
 5480 ?        00:00:00 xinetd
И всё закрутилось:

Код: Выделить всё

bash-4.2$ ftp 192.168.1.5
Connected to 192.168.1.5 (192.168.1.5).
220 FTP Server ready.
Name (192.168.1.5:olej): 
331 Необходим пароль для пользователя olej
Password:
230 Пользователь olej подключён
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/" является текущей директорией

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

не могу поднять сервер ftp с systemd

Непрочитанное сообщение Olej » 25 окт 2012, 00:17

Olej писал(а): 1. настроить xinetd так, чтобы он по запросу подымал службу, описанную в настройках /etc/xinetd.d/xproftpd (это пока отложили).
Наконец, и этот способ ... Он хорош, когда FTP нужен изредка, время от времени.

Собственно, настраивать там сам xinetd нужды нет.
Нужно только проверить, чтобы сервис ftp у xinetd был разрешён ... но по умолчанию так и есть:

Код: Выделить всё

[root@notebook xinetd.d]# cat /etc/xinetd.d/xproftpd
# default: off
# description: The ProFTPD FTP server 
service ftp
{
	disable	= no
#	disable	= yes
	flags           = REUSE
	socket_type     = stream
	wait            = no
	user            = root
	server          = /usr/sbin/in.proftpd
	log_on_success  += DURATION
	log_on_failure  += USERID
	nice		= 10
}
А настраивать на этот способ нужно proftpd (это и есть ссылка на /usr/sbin/in.proftpd).
И настроить (добавить) нужно только 1-ну строчку в /etc/proftpd.conf:

Код: Выделить всё

[root@notebook etc]# head -n 5 /etc/proftpd.conf
# This is the ProFTPD configuration file
#
# See: http://www.proftpd.org/docs/directives/linked/by-name.html

ServerType inetd

- вот та одна показанная последняя строчка.

Значение ServerType может быть inetd | standalone, но standalone предполагается по умолчанию, поэтому оно нам не мешало.
Но для автономного запуска proftpd можно прописать явно:

Код: Выделить всё

ServerType standalone
Всё! Этого достаточно, вот теперь сеанс с удалённого хоста:

Код: Выделить всё

olej@atom:~$ ftp 192.168.1.5
Connected to 192.168.1.5.
220 FTP Server ready.
Name (192.168.1.5:olej): 
331 Необходим пароль для пользователя olej
Password:
230 Пользователь olej подключён
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 До свидания.
И протокол этого сеанса на хосте, где работает ftpd:

Код: Выделить всё

[root@notebook xinetd.d]# tail -n7 /var/log/messages
Oct 24 23:48:30 notebook xinetd[6750]: START: ftp pid=6958 from=::ffff:192.168.1.7
Oct 24 23:48:34 notebook proftpd[6958]: 192.168.1.5 (192.168.1.7[192.168.1.7]) - FTP session opened.
Oct 24 23:48:44 notebook systemd-logind[642]: New session 10 of user olej.
Oct 24 23:48:44 notebook proftpd[6958]: 192.168.1.5 (192.168.1.7[192.168.1.7]) - Preparing to chroot to directory '/home/olej'
Oct 24 23:48:53 notebook proftpd[6958]: 192.168.1.5 (192.168.1.7[192.168.1.7]) - FTP session closed.
Oct 24 23:48:53 notebook xinetd[6750]: EXIT: ftp status=0 pid=6958 duration=23(sec)
Oct 24 23:48:53 notebook systemd-logind[642]: Removed session 10.
Важно и неприятно:
- при одном и том же содержимом конфигурационного файла /etc/proftpd.conf запускать и автономный сервис FTP и его как сервис xinetd - нельзя ...
- должно быть в этом файле прописано или

Код: Выделить всё

ServerType inetd
- или

Код: Выделить всё

ServerType standalone
- можно, конечно, ещё и по-другому: в xinetd конфигурации для ftpd указать другой конфигурационный файл в качестве параетра запуска сервиса.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: не могу поднять сервер ftp с systemd

Непрочитанное сообщение Olej » 25 окт 2012, 18:09

Olej писал(а): Итого, у нас есть 2, а на самом деле 3 (см. ниже) возможности использовать FTP:

1. настроить xinetd так, чтобы он по запросу подымал службу, описанную в настройках /etc/xinetd.d/xproftpd (это пока отложили).

2. убить xinetd, и запустить командами systemd службу proftpd (в Fedora 17 ставится по дефаулту, но можно любой FTP-сервер) - это то, что показано выше.

3. а если нужен xinetd для слежения для запросами к другим службам?
Тогда просто забрать FTP из-под управления xinetd, в файле /etc/xinetd.d/xproftpd - в disable no заменяем yes:
И даже не 3, а 4 ;-) :

4. настроить сокетную активацию systemd (совершенно новая возможность) на порт 21, так, чтобы запускать службу в ответ на входящие сетевые соединения.

Это в точности то же, что и с inetd / xinetd по логике происходящего, но проделываемое без этих утилит суперсерверов, а только исключительно средствами systemd.

Подробнейше, в деталях и с тестированием, это описано здесь: xinetd + systemd.

Вот теперь всё ;-) .

Ответить

Вернуться в «Сети»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей