我有一个托管多个用户网页的 Apache 服务器 (RHEL 6),该服务器当前连接到我的 Active Directory 环境以对用户进行身份验证。服务器用于自动托管用户放入其 /home/<user>/public_html 文件夹中的内容。我还将此服务器配置为使用 chroot,以便用户将无法浏览服务器上主文件夹之外的任何其他内容。登录脚本不会为用户创建主文件夹。这些是手动创建的,因为我们只希望某些用户能够从此服务器托管网页。
问题是,任何用户当前都可以登录服务器,而不是进入他们的 /home 文件夹(因为它不存在),而是自动进入 /。这使他们能够查看其组具有读取访问权限的服务器上的任何文件/文件夹。这是一个安全问题,我想将登录限制为拥有 /home 目录的用户。我们不想将 AD 组或用户列表指定为经过身份验证的,因为该列表可能会变得很长并且难以管理,尽管它可能比编写 PAM 模块更容易。
有没有办法将 LDAP 登录限制为只有已经拥有 /home 目录的用户?我在 PAM 选项或文档中没有找到任何内容。
答案1
由于访问管理需要在本地主机上进行大量工作,因此我们决定在 Active Directory 中创建一个组,并将登录限制为该组中的用户。
这可以通过编辑 /etc/security/pam_winbind.conf 文件来完成,其中包含以下字段以及我们想要限制访问的组或用户的 SID(逗号分隔)。
require_membership_of=
然后,我们将过滤对该组的 chroot 限制(或将用户放入本地组),以限制他们对其自己的主目录的 sftp 访问。这还允许我们将 oddjobs mkhomedir 添加回 pam,然后为了允许访问服务器,我们只需将用户添加到该组即可。然后他们可以登录,并且将自动创建他们的主目录。
感谢大家的帮助/想法,但看起来 AD 组毕竟是最容易管理的。
答案2
解决此问题的一种方法是强制他们使用 ssh 密钥,并禁止使用密码进行 ssh 登录。这样,只有拥有 /home/<user>/.ssh/authorized_keys 文件的人才能连接。
答案3
解决方案一:
您可以使用PAM模块pam_homecheck
它所做的只是检查是否存在用户的主目录,如果没有找到则拒绝会话。
问题是,它仅在 openSUSE 中可用,但您可以pam_homecheck.so
从下载的软件包中放置并在ldd pam_homecheck.so
.
解决方案2:
您可以添加以下内容,/etc/bashrc
但仅适用于 shell/putty 登录
[[ $HOME == / ]] && { echo "Error: Home Dir not define.."; exit 1; }
解决方案3:
如果未设置主目录则拒绝(已在 Ubuntu 中按照以下步骤进行测试和工作)
拒绝 WinScp
aptitude install libpam-script
使用您最喜欢的编辑器打开“ /etc/pam.d/common-auth
”并添加以下条目
auth optional pam_script.so # add at the last
用您喜欢的编辑器打开“ /usr/share/libpam-script/pam_script_auth
”并添加以下条目
#!/bin/bash
Pam_home=$(awk -v u=$PAM_USER -F: '($1 == u ){print $6}' /etc/passwd)
if [[ $Pam_home == / ]]; then
echo "Error: Home Dir not define.."
kill -9 $PPID # Force fully kill winscp pid
else
/usr/lib/openssh/sftp-server
fi
拒绝从 Shell/putty 登录
它将从默认位置引用并运行相同的脚本,即“ /usr/share/libpam-script/pam_script_auth
”或者您可以在日志中验证“ tail -f /var/log/auth.log
”