Я пока не могу публиковать фотографии, поэтому постараюсь объяснить все лаконично.
У меня работает установка 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. Как только я это сделал, все заработало.