通过 libpam-mysql 和 libnss-mysql 进行身份验证(CentOS)

通过 libpam-mysql 和 libnss-mysql 进行身份验证(CentOS)

我正在尝试让 MySQL 充当 CentOS 6.3 上验证用户的后端。到目前为止,我已经成功安装并配置了 libnss-mysql。我可以通过以下方式进行测试:

# groups testuser
testuser : sftp

Testuser 是 sftp 组的成员,事实上,所有基于 MySQL 的用户帐户都将被硬编码到该组。sftp 组被 chrooted 并被迫使用 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

答案1

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

将我现有的配置复制到该文件上后(您也可以为它们添加别名),我的配置神奇地开始工作了!

相关内容