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

Аутентификация с помощью libpam-mysql и libnss-mysql (CentOS)

Я пытаюсь заставить MySQL функционировать как серверную часть для аутентификации пользователей в CentOS 6.3. Пока что я успешно установил и настроил libnss-mysql. Я могу проверить это, выполнив:

# groups testuser
testuser : sftp

Testuser является членом группы sftp, и все учетные записи пользователей на базе MySQL будут жестко привязаны к нему. Группа sftp привязана к корневому каталогу и вынуждена использовать internal-sftp, поэтому они не могут ничего делать, кроме доступа к своему домашнему каталогу.

Затем я настроил pam-mysql и PAM, чтобы разрешить вход в систему mysql. Это тоже работает .. Когда SELinux не принудительно.

Когда я делаю setenforce 1 пользователи больше не могут войти в систему. Ошибка:

В доступе отказано, попробуйте еще раз.

Это мое pam_mysql.conf файл:

users.host=localhost
users.db_user=nss-pam-user
users.db_passwd=***********
users.database=sftpusers
users.table=users
users.user_column=username
users.password_column=password
users.password_crypt=6
verbose=1

Мой /etc/pam.d/sshd:

#%PAM-1.0
auth       sufficient   pam_sepermit.so
auth       include      password-auth
auth       required     pam_mysql.so    config_file=/etc/pam_mysql.conf 
account    sufficient   pam_nologin.so
account    include      password-auth
account    required     pam_mysql.so    config_file=/etc/pam_mysql.conf 
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth

И для полноты содержание некоторых файлов журналов ..

/var/logs/secure

Nov 20 14:52:20 hostname unix_chkpwd[4891]: check pass; user unknown
Nov 20 14:52:20 hostname unix_chkpwd[4891]: password check failed for user (testuser) 
Nov 20 14:52:20 hostname sshd[4880]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.10.107  user=testuser Nov 20 14:52:22 sftpusers sshd[4880]: Failed password for testuser from 192.168.10.107 port 51849 ssh2

/var/logs/audit/audit.log
type=USER_AUTH msg=audit(1353420107.070:812): user pid=5285 uid=0 auid=500 ses=24 subj=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=pubkey acct="testuser" exe="/usr/sbin/sshd" hostname=? addr=192.168.10.107 terminal=ssh res=failed'
type=USER_AUTH msg=audit(1353420112.312:813): user pid=5285 uid=0 auid=500 ses=24 subj=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=PAM:authentication acct="testuser" exe="/usr/sbin/sshd" hostname=192.168.10.107 addr=192.168.10.107 terminal=ssh res=failed'
type=USER_AUTH msg=audit(1353420112.456:814): user pid=5285 uid=0 auid=500 ses=24 subj=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=password acct="testuser" exe="/usr/sbin/sshd" hostname=? addr=192.168.10.107 terminal=ssh res=failed'

Я пытался позволить audit2why объясните проблему, но он ничего не говорит, даже если есть некоторые ошибки.

Кто-нибудь видит проблему? Спасибо!

РЕДАКТИРОВАТЬ: Оказывается, это почти работаю с setenforce 0 Я могу mkdir foobar но если я сделаю сингл ls Я получаю сообщение об ошибке: Received message too long 16777216

CentOS 6.3 поставляется с OpenSSH5.3p1, существует известная ошибка, которая не позволяет sftp извлекать имена групп файлов, в результате возникает ошибка и соединение закрывается при каждой команде ls.

Решение - загрузить более свежую версию OpenSSH, я взял 6.1p1 и собрал ее из исходников.

В основном я следовал этим инструкциям: http://kb.bobcares.com/?View=entry&EntryID=1059 , в моем случае libwrap отсутствовал, его нужно было установить. Я сделал:

 yum install tcp_wrappers-devel

Некоторые другие библиотеки могут отсутствовать, после их установки я настроил OpenSSH для включения SELinux, когда вы достигнете этого шага:

./configure --prefix=/usr/local/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-kerberos5 --with-ssl-engine

Вместо этого сделайте это:

./configure --prefix=/usr/local/ssh --with-selinux --with-md5-passwords --with-pam --with-tcp-wrappers --with-kerberos5 --with-ssl-engine

Ваш файл sshd_config по умолчанию изменится на расположение префикса:

/usr/local/ssh/etc/sshd_config

После копирования моей существующей конфигурации поверх этого файла (вы также можете использовать псевдонимы) моя конфигурация волшебным образом начала работать!