ProFTPD nefunguje na CentOS 7

ProFTPD nefunguje na CentOS 7
« kdy: 27. 08. 2014, 10:13:47 »
Zdravím pánové a dámy.

Mám takový menší problém s ProFTPd na CentOS7. Moje aktuální konfigurace na CentOS 6.5 funguje zcela bez problému, hledal bych tedy problém v nové verzi CentOS.

Při startu služby mám tento warning:

warning: unable to include '/etc/proftpd/modules.conf': Permission denied

"ls -la"
-rw-r--r--.  1 root root    2527 Mar 27 09:18 modules.conf

a když se pokusím o připojení klientem tak v /var/log/proftpd/proftpd.log se s každým pokusem o připojení píše toto:

AuthOrder: warning: module 'mod_ldap.c' not loaded (v konfiguraci se mám nastaveno ověření uživatelů dle LDAPu)

Měl by někdo nějaký nápad kde může být zakopaný pes?


« Poslední změna: 27. 08. 2014, 10:15:37 od Petr Krčmář »


Strašidlo

Re:ProFTPD nefunguje na CentOS 7
« Odpověď #1 kdy: 27. 08. 2014, 10:39:18 »
Částečně jste si odpověděl sám. Nejdříve bych vyřešil vlastnictví a oprávnění k souboru /etc/proftp/modules.conf.

Dzavy

Re:ProFTPD nefunguje na CentOS 7
« Odpověď #2 kdy: 27. 08. 2014, 10:40:53 »
Tipoval bych to na selinux

aaa

Re:ProFTPD nefunguje na CentOS 7
« Odpověď #3 kdy: 27. 08. 2014, 10:43:51 »
Tipujem, ze na /etc/proftpd nema ten user prava.

Diagnostika sa spravi tak, ze das nieco ako
Kód: [Vybrat]
su - proftpa potom skusis vypisat ten subor.

Re:ProFTPD nefunguje na CentOS 7
« Odpověď #4 kdy: 27. 08. 2014, 10:58:19 »
problém s SeLinux opravil problém s oprávněním k souboru, zcela jsem na něj zapomněl,

ale nyní se vyskytlo toto:

 systemctl status proftpd.service
proftpd.service - ProFTPD FTP Server
   Loaded: loaded (/usr/lib/systemd/system/proftpd.service; enabled)
   Active: failed (Result: signal) since Wed 2014-08-27 10:53:00 CEST; 8s ago
  Process: 2102 ExecStart=/usr/sbin/proftpd $PROFTPD_OPTIONS (code=killed, signal=SEGV)

Aug 27 10:52:59 ftp.domena.com systemd[1]: Starting ProFTPD FTP Server...
Aug 27 10:53:00 ftp.domena.com proftpd[2102]: 2014-08-27 10:52:59,999 ftp.domena.com proftpd[2102] ftp: 127.0.0.1:21 masquerading as aaa.xx.yyy.zzz
Aug 27 10:53:00 ftp.domena.com proftpd[2102]: 2014-08-27 10:52:59,999 ftp.domena.com proftpd[2102] ftp: ProFTPD terminating (signal 11)
Aug 27 10:53:00 ftp.domena.com proftpd[2102]: 2014-08-27 10:52:59,999 ftp.domena.com proftpd[2102] ftp: FTP session closed.
Aug 27 10:53:00 ftp.domena.com systemd[1]: proftpd.service: control process exited, code=killed status=11
Aug 27 10:53:00 ftp.domena.com systemd[1]: Failed to start ProFTPD FTP Server.
Aug 27 10:53:00 ftp.domena.com systemd[1]: Unit proftpd.service entered failed state.


Re:ProFTPD nefunguje na CentOS 7
« Odpověď #5 kdy: 27. 08. 2014, 11:14:13 »
případně přidám ještě

[root@ftp ~]# journalctl -xn
-- Logs begin at Wed 2014-08-27 11:07:11 CEST, end at Wed 2014-08-27 11:08:04 CEST. --
Aug 27 11:07:44 ftp.domena.com sshd[1965]: pam_unix(sshd:session): session opened for user root by (uid=0)
Aug 27 11:07:54 ftp.domena.com chronyd[686]: Selected source 81.27.xxx.yyy
Aug 27 11:08:04 ftp.domena.com systemd[1]: Starting ProFTPD FTP Server...
-- Subject: Unit proftpd.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit proftpd.service has begun starting up.
Aug 27 11:08:04 ftp.domena.com proftpd[1988]: 2014-08-27 11:08:04,376 ftp.domena.com proftpd[1988] dmz-web-1: 127.0.0.1:21 masquerading as yyy.xxx.ccc.vvv
Aug 27 11:08:04 ftp.domena.com proftpd[1988]: 2014-08-27 11:08:04,377 ftp.domena.com proftpd[1988] dmz-web-1: ProFTPD terminating (signal 11)
Aug 27 11:08:04 ftp.domena.com proftpd[1988]: 2014-08-27 11:08:04,377 ftp.domena.com proftpd[1988] dmz-web-1: FTP session closed.
Aug 27 11:08:04 ftp.domena.com kernel: traps: proftpd[1988] general protection ip:7fec9f465180 sp:7fffa7d4a4e8 error:0 in proftpd[7fec9f43d000+e7000]
Aug 27 11:08:04 ftp.domena.com systemd[1]: proftpd.service: control process exited, code=killed status=11
Aug 27 11:08:04 ftp.domena.com systemd[1]: Failed to start ProFTPD FTP Server.
-- Subject: Unit proftpd.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit proftpd.service has failed.
--
-- The result is failed.
Aug 27 11:08:04 ftp.domena.com systemd[1]: Unit proftpd.service entered failed state.

Re:ProFTPD nefunguje na CentOS 7
« Odpověď #6 kdy: 27. 08. 2014, 11:57:11 »
Zkus prosím postnout zprávy z /var/log/messages, co se ti tam oběví.

Re:ProFTPD nefunguje na CentOS 7
« Odpověď #7 kdy: 27. 08. 2014, 12:06:20 »
Zkus prosím postnout zprávy z /var/log/messages, co se ti tam oběví.
Sorry, nevšiml jsem si řádků výše a ten journalctl mě zmátl. Zkus proftpd spustit přímo s odkazem na konfigurační soubor, jestli ti to "vyblije" stejnou chybu: /path/to/proftpd -c /path/to/proftpd.conf

Re:ProFTPD nefunguje na CentOS 7
« Odpověď #8 kdy: 27. 08. 2014, 12:21:49 »
Našel jsem k tomu status code 11, že se to týká perlu, což je divné, protože ten jsem v konfiguraci nenašel, ale tvůj config neznám, zkus jen tak mimochodem spustit proftpd bez LDAPu, jestli ti pojede.

Re:ProFTPD nefunguje na CentOS 7
« Odpověď #9 kdy: 27. 08. 2014, 12:34:07 »
Ok, sry za "spamování", ale našel jsem tohle: http://www.proftpd.org/docs/howto/Debugging.html

Zvláště tahle část je asi zajímavá (měla by tě odkázat na modul, který způsobuje pád proFTP)

Debugging Segfaults
If you see a message like the following in your logs:

  golem.castaglia.org (127.0.0.1[127.0.0.1]) - ProFTPD terminating (signal 11)

then you have most likely encountered a segfault. This is a particular bad error, and can be hard to track down.

In version 1.3.1rc1, ProFTPD gained the ability to provide better logging to help track down these sorts of bugs. To enable this ability, you will need to configure proftpd with something like:

  ./configure --enable-devel=stacktrace ...

and run your proftpd like normal. If a segfault occurs, the logs should show something like this:

  golem.castaglia.org (127.0.0.1[127.0.0.1]) - ProFTPD terminating (signal 11)
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - FTP session closed.
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - -----BEGIN STACK TRACE-----
  golem.castaglia.org (127.0.0.1[127.0.0.1]) -
  • ./proftpd [0x809b1e1]

  golem.castaglia.org (127.0.0.1[127.0.0.1]) - [1] ./proftpd(call_module+0x53) [0x8072c63]
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - [2] ./proftpd(strftime+0x14cf) [0x8051bef]
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - [3] ./proftpd(pr_cmd_dispatch+0x167) [0x8051f2f]
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - [4] ./proftpd(strftime+0x1fd3) [0x80526f3]
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - [5] ./proftpd [0x8053e12]
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - [6] ./proftpd [0x805484d]
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - [7] ./proftpd [0x8057975]
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - [8] ./proftpd(main+0x9d1) [0x8058625]
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - [9] /lib/i686/libc.so.6(__libc_start_main+0x93) [0x40076507]
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - [10] ./proftpd(strcpy+0x31) [0x8051001]
  golem.castaglia.org (127.0.0.1[127.0.0.1]) - -----END STACK TRACE-----

These stack symbols are generated automatically by glibc, and may or may not contain the function names.

The key here for tracking down the location of the segfault is that
  • frame, and the memory address: 0x809b1e1. Using that address and a very handy command called addr2line, you can determine the location of that address in the source code:


  addrline -e ./proftpd 0x809b1e1

In this example, I saw:

  golem/tj>addr2line -e ./proftpd 0x809b1e1
  /home/tj/proftpd/cvs/proftpd/modules/mod_auth.c:1723

which is the location of test code added to trigger the segfault.

This feature is specific to glibc systems, so keep that in mind. Other things to mention about this feature: it disables the changing of the process title that proftpd normally does. The obtaining of the stack symbols that glibc does uses the process title, and if this feature did not disable that process title changing, the output would be much less legible. Also, it does not work if the process which receives the SIGSEGV signal is chrooted. (Blame glibc for its bad handling of being chrooted.) To work around this, I would recommend using the mod_vroot module, just for a short period of time, in order to get a useful automatic stack trace.

Re:ProFTPD nefunguje na CentOS 7
« Odpověď #10 kdy: 28. 08. 2014, 09:02:41 »
Přiznám se že ta poslední rada mi moc nedala, ale během testování jsem vyzkoušel veškeré moduly mimo ldap modulu zakomentovat a pak ProFTPd se rozjelo bez problému, ale nedalo se k němu pochopitelně připojit.

loaduji toto:

[root@ftp proftpd]# cat /etc/proftpd/modules.conf
ModulePath /usr/lib/proftpd
ModuleControlsACLs insmod,rmmod allow user root
ModuleControlsACLs lsmod allow user *
LoadModule mod_ctrls_admin.c
LoadModule mod_ldap.c
LoadModule mod_radius.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c
LoadModule mod_quotatab_radius.c
LoadModule mod_rewrite.c
LoadModule mod_load.c
LoadModule mod_ban.c
LoadModule mod_dynmasq.c
LoadModule mod_vroot.c
LoadModule mod_exec.c
LoadModule mod_shaper.c
LoadModule mod_ratio.c
LoadModule mod_site_misc.c
LoadModule mod_facl.c
LoadModule mod_unique_id.c
LoadModule mod_ifsession.c


[root@ftp proftpd]# proftpd -l
Compiled-in modules:
  mod_core.c
  mod_xfer.c
  mod_rlimit.c
  mod_auth_unix.c
  mod_auth_file.c
  mod_auth.c
  mod_ls.c
  mod_log.c
  mod_site.c
  mod_delay.c
  mod_facts.c
  mod_dso.c
  mod_ident.c
  mod_readme.c
  mod_auth_pam.c
  mod_tls.c
  mod_memcache.c
  mod_cap.c
  mod_ctrls.c
  mod_lang.c


Začínám být ztracený

Re:ProFTPD nefunguje na CentOS 7
« Odpověď #11 kdy: 28. 08. 2014, 09:48:49 »
Tak trochu změna, aktuálně jsem z seznamu loadovaných modulů zakomentoval tento:

LoadModule mod_exec.c

a Proftpd se rozběhlo, ale nedaří se připojit, v logu je pouze toto:

ProFTPD terminating (signal 11)
FTP session closed.


Re:ProFTPD nefunguje na CentOS 7
« Odpověď #12 kdy: 28. 08. 2014, 14:51:53 »
Mohl bys tady postnout log z tohoto:

proftpd -nd10 2>&1 >& /path/to/debug/file

Jinak k té poslední radě: stáhní si zdrojové kódy proftpd, rozbal je, v dané složce dej ./configure --enable-devel=stacktrace, a spusť ./proftpd -c /path/to/proftpd.conf (když ti to dá velký výstup, tak si jej přesměruj do souboru)