Назад | Перейти на главную страницу

Проблемы с proftpd - интеграция с postgres

Я пока не могу публиковать фотографии, поэтому постараюсь объяснить все лаконично.

У меня работает установка ProFTPd. Теперь пытаюсь маршрутизировать аутентификацию через postgres. Есть база данных, содержащая таблицу пользователей webapp. В идеале это позволит пользователям webapp входить в FTP, используя свои учетные данные webapp. Вот соответствующие настройки в файле proftpd.conf:

LoadModule mod_sql.c

LoadModule mod_sql_passwd.c

LoadModule mod_sql_postgres.c

#Begin SQL configuration
#mod_sql_password parameters
SQLPasswordEngine           on
SQLPasswordEncoding         hex

#mod_sql base configuration
SQLEngine               on
SQLBackend              postgres
SQLConnectInfo          [database_name]@localhost:5432 [SELECT name] [password]
SQLAuthTypes            SHA1
SQLAuthenticate         users
SQLLogFile              /var/log/proftpd/sqlLog.txt

Учетная запись «SELECT name» - это учетная запись, которой предоставлены привилегии SELECT в таблице пользователей webapp. Я могу войти в систему этого пользователя из командной строки, используя

psql -d [database_name] -U [SELECT name] -W 

а затем введите тот же пароль, что и в файле proftpd.conf.

Когда я пытаюсь подключиться, он генерирует следующие данные файла журнала:

Feb 21 10:20:00 mod_sql/4.2.5[43238]: entering  postgres cmd_exit
Feb 21 10:20:00 mod_sql/4.2.5[43238]: exiting   postgres cmd_exit
Feb 21 10:29:45 mod_sql/4.2.5[43334]: defaulting to 'postgres' backend
Feb 21 10:29:45 mod_sql/4.2.5[43334]: backend module 'mod_sql_postgres/4.0.4'
Feb 21 10:29:45 mod_sql/4.2.5[43334]: backend api    'mod_sql_api_v1'
Feb 21 10:29:45 mod_sql/4.2.5[43334]: >>> sql_sess_init
Feb 21 10:29:45 mod_sql/4.2.5[43334]: entering  postgres cmd_defineconnection
Feb 21 10:29:45 mod_sql/4.2.5[43334]:  name: 'default'
Feb 21 10:29:45 mod_sql/4.2.5[43334]:  user: [SELECT account]
Feb 21 10:29:45 mod_sql/4.2.5[43334]:  host: 'localhost'
Feb 21 10:29:45 mod_sql/4.2.5[43334]:    db: [database_name]
Feb 21 10:29:45 mod_sql/4.2.5[43334]:  port: '5432'
Feb 21 10:29:45 mod_sql/4.2.5[43334]:   ttl: '0'
Feb 21 10:29:45 mod_sql/4.2.5[43334]: exiting   postgres cmd_defineconnection
Feb 21 10:29:45 mod_sql/4.2.5[43334]: mod_sql engine     : on
Feb 21 10:29:45 mod_sql/4.2.5[43334]: negative_cache     : off
Feb 21 10:29:45 mod_sql/4.2.5[43334]: authenticate       : users 
Feb 21 10:29:45 mod_sql/4.2.5[43334]: usertable          : users
Feb 21 10:29:45 mod_sql/4.2.5[43334]: userid field       : userid
Feb 21 10:29:45 mod_sql/4.2.5[43334]: password field     : passwd
Feb 21 10:29:45 mod_sql/4.2.5[43334]: UID field          : uid
Feb 21 10:29:45 mod_sql/4.2.5[43334]: GID field          : gid
Feb 21 10:29:45 mod_sql/4.2.5[43334]: homedir field      : homedir
Feb 21 10:29:45 mod_sql/4.2.5[43334]: homedir(default)   : [redacted]
Feb 21 10:29:45 mod_sql/4.2.5[43334]: shell field        : shell
Feb 21 10:29:45 mod_sql/4.2.5[43334]: SQLMinUserUID      : 999
Feb 21 10:29:45 mod_sql/4.2.5[43334]: SQLMinUserGID      : 999
Feb 21 10:29:45 mod_sql/4.2.5[43334]: <<< sql_sess_init
Feb 21 10:29:45 mod_sql/4.2.5[43334]: >>> sql_pre_pass
Feb 21 10:29:45 mod_sql/4.2.5[43334]: <<< sql_pre_pass
Feb 21 10:29:45 mod_sql/4.2.5[43334]: >>> cmd_getpwnam
Feb 21 10:29:45 mod_sql/4.2.5[43334]: entering  postgres cmd_escapestring
Feb 21 10:29:45 mod_sql/4.2.5[43334]: entering  postgres cmd_open
Feb 21 10:29:45 mod_sql/4.2.5[43334]: exiting   postgres cmd_open
Feb 21 10:29:45 mod_sql/4.2.5[43334]: exiting   postgres cmd_escapestring
Feb 21 10:29:45 mod_sql/4.2.5[43334]: unrecoverable backend error
Feb 21 10:29:45 mod_sql/4.2.5[43334]: error: 'mod_sql_postgres/4.0.4'
Feb 21 10:29:45 mod_sql/4.2.5[43334]: message: 'FATAL:  Ident authentication failed for user [SELECT account]
'
Feb 21 10:29:45 mod_sql/4.2.5[43334]: entering  postgres cmd_exit
Feb 21 10:29:45 mod_sql/4.2.5[43334]: exiting   postgres cmd_exit

Так что сейчас я полностью потерялся, потому что не уверен, почему те же учетные данные, которые работают при входе в командную строку, не работают при использовании в proftpd.conf. Может ли кто-нибудь посоветовать, что попробовать дальше? Спасибо!

Хорошо, я нашел ответ на этот вопрос, на случай, если кто-нибудь столкнется с ним в будущем.

Таким образом, из журналов ошибок создается впечатление, что Postgres отклоняет мои действительные учетные данные. Не так! В файле proftpd.conf по умолчанию proftpd пытается войти в систему как пользователь и группа «никто». «none» - это действительный действующий пользователь на сервере, но связанный ID # обычно очень низкий. В моем случае это было 99.

Теперь при использовании mod_sql доступен параметр, называемый SQLMinID. По умолчанию это 999. И это мешало мне войти в систему!

Чтобы исправить это, я просто установил параметры «Пользователь» и «Группа» в proftpd.conf для пользователя с более высоким идентификационным номером, который имел достаточные привилегии для доступа к postgres. Как только я это сделал, все заработало.