我有一个 FreeBSD 服务器,我喜欢可以从任何地方访问它。通常我使用 SSH 公钥登录,或者如果我没有可用的 SSH 私钥,那么我可能会通过 SSH 使用常规密码。但是,当从不受信任的机器登录时,键盘记录器总是存在在我输入登录密码时捕获我的登录密码的风险。
FreeBSD 已经支持 OPIE,这是一种一次性密码方案。这很好用,但一次性密码是唯一需要的身份验证。如果我打印出一个一次性密码列表供以后使用,那么如果我丢失了该列表,那么这就是某人所需要的。
我想设置身份验证,以便我需要一次性密码和我知道的一些信息(密码,除了不是我常用的登录密码)。我有一种感觉,答案与PAM(和/etc/pam.d/sshd)有关,但我不确定细节。
在需要两种方法的情况下,如何设置身份验证?
我有一个充满用户帐户的 Postgresql 数据库,我想允许这些用户通过 ssh 访问服务器,只使用公钥认证。
到目前为止,我已经在 Ubuntu 服务器上设置了这些部分:
有没有更简单的方法来解决这个问题?我在正确设置 nss 配置时遇到问题(缺乏文档和日志)。
感谢您的时间和帮助。
所以在问了这个问题之后,我一直在测试 FreeIPA 作为基于这个问题的中央认证源:管理对多个 linux 系统的访问
我遇到的一个问题是,如果用户被授予本地 root 权限,他们又可以以 FreeIPA 目录中的任何用户身份登录。即使该用户无权通过 HBAC 规则访问该特定机器。
示例场景:
我能找到的唯一信息是在 /etc/pam.d/su 中注释掉这一行:
auth sufficient pam_rootok.so
Run Code Online (Sandbox Code Playgroud)
如果他尝试以下操作,它现在会向本地 root 询问 Alice 的密码:su alice
但是,如果 Bob 具有 root 访问权限,他可以轻松启用上述 PAM/su 行。FreeIPA 不应该阻止 Alice 的帐户通过直接登录尝试或本地 root su访问 PC1吗?如何防止本地根用户以任何 FreeIPA 用户身份登录?
我正在寻找一种使用存储在数据库(MongoDB)中的公钥来验证用户身份的方法。类似的问题通常会导致建议安装 OpenSSH 的补丁版本 ( https://github.com/wuputahllc/openssh-for-git ),该版本针对数据库进行身份验证(GitHub 正在使用 OpenSSH 的补丁版本)。
我看到有一个 PAM 模块可以通过 MySQL 进行身份验证,但它假定用户名/密码身份验证。我想知道是否可以使用某种 PAM 模块对服务器使用公钥进行身份验证。
编辑:我需要一个 git 服务器,所有用户都将通过“git”用户名进行连接。每个用户不会有特定的用户名。
我们目前在 SSH 服务器上使用 2factor 身份验证,因此我们的 sshd_config 中有“RequiredAuthentications2 publickey,keyboard-interactive”(公钥用于密钥,keyboard-interactive 用于通过 PAM 处理的 2factor)
为了让我们的开发人员更轻松,我们希望禁用 sftp 子系统的 2factor 要求。
我已经搜索了诸如“匹配子系统 sftp”之类的东西(比如可用的“匹配组”,我之后只能定义“RequiredAuthentications2 publickey”,但这似乎是不可能的。
我查看的另一件事是检查 PAM,如果有可能为 sftp 子系统定义单独的配置(这似乎不可行,pam 的服务始终是“ssh”)或者我是否可以在我的 sshd pam conf 就像“sftp 中的 auth [success=1 default=ignore] pam_succeed_if.so 安静子系统”
任何提示?(除了为具有不同设置的 sftp 设置另一个 sshd 实例)
我试图了解 FreeBSD 10.0 上的 PAM 配置出现了什么错误
该计算机配置了两种不同的身份验证领域,一种是默认的 Unix 身份验证,另一种是使用系统安全服务守护程序 (sssd)。
目前我正在使用此配置,/etc/pam.d/sshd因为我只想允许 sssd 从 ssh 登录。
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient /usr/local/lib/pam_sss.so
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth required pam_unix.so no_warn use_first_pass
# account
account required pam_nologin.so
#account required pam_krb5.so
account required pam_login_access.so
account required /usr/local/lib/pam_sss.so ignore_unknown_user
account required pam_unix.so
# session
#session optional pam_ssh.so want_agent
session optional /usr/local/lib/pam_sss.so
session optional /usr/local/lib/pam_mkhomedir.so mode=0700
session required pam_permit.so
# …Run Code Online (Sandbox Code Playgroud) 从任何服务升级到 Debian 7.4 后,密码验证都需要很长时间。这适用于 SSH 登录、sudo'ing 和使用 dovecot(配置为使用 PAM)的身份验证。
我能够反向查找 DNS 条目,这似乎不是问题。感觉就像某些身份验证机制遇到了超时。我尝试启用 pam_debug,但我没有看到任何调试输出。
以下是执行 sudo 所需时间的示例(带有密码提示,在 sudo 缓存密码期间,它会立即生效):
ceicke@h1633420:~$ time sudo who
[sudo] password for ceicke:
ceicke pts/0 2014-08-01 09:19 (80.131.XXX.XXX)
real 0m27.976s
user 0m0.009s
sys 0m0.014s
Run Code Online (Sandbox Code Playgroud)
使用我的私钥 SSH 进入盒子也可以立即生效。所以真的密码检查过程需要很长时间。
我对我可以尝试的其他事情有点迷茫,特别是因为 PAM 模块对它正在做的事情非常非常沉默。
这是 strace 的输出:http : //pastebin.com/dRvqsrcd
我猜有很多调用time(null)会获取当前的 Unix 时间戳。似乎有些东西正在积极检查超时。
我注意到两件事:
time(null)通话经常与公开征集到之前/dev/urandom,它可以是我的服务器正在等待收集足够的熵?krb5在不同的地方有很多参考。我不使用 Kerberos 进行身份验证,我可以简单地pam_krb5.so从我的 pam 配置中取出吗?我没有很多准备strace输出的经验,也许你可以看到更多?
服务器上的熵相当低,在 100 - 200 之间。
我正在尝试为 OpenSSH 实施两因素身份验证。环境是 Centos 7(内核:3.10.0-229.1.2.el7.x86_64)和 OpenSSH_6.6.1p1,OpenSSL 1.0.1e-fips 2013 年 2 月 11 日。我们部署了 Active Directory (LDAP) + Kerberos。规格如下:
为了执行第二个因素的身份验证过程,有第 3 方可用的 PAM 模块,它对 Kerberos 一无所知。所以这就是我所做的:
将这些行放入 /etc/ssh/sshd_config:
# To enable PAM - this will make sshd use PAM with configuration /etc/pam.d/sshd
UsePam yes
ChallengeResponseAuthentication yes
# To enable Kerberos and public key authentication - it will let sshd use existing Kerberos tickets
GSSAPIAuthentication yes …Run Code Online (Sandbox Code Playgroud) 我正在尝试让 OpenVPN 通过 PAM 通过 LDAP 向 Active Directory 服务器验证用户。
以下是我的配置文件的相关部分:
/etc/openvpn/server.conf:
# ...
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so ldap-login
Run Code Online (Sandbox Code Playgroud)
/etc/nslcd.conf:
uri ldap://prod-adc1.mydomain.local
base DC=MyDomain,DC=Local
uid nslcd
gid ldap
Run Code Online (Sandbox Code Playgroud)
/etc/pam.d/ldap-login:
auth sufficient pam_ldap.so minimum_uid=1000 use_first_pass
auth required pam_deny.so
password sufficient pam_ldap.so minimum_uid=1000 use_first_pass
password required pam_deny.so
Run Code Online (Sandbox Code Playgroud)
当我尝试进行身份验证时,我在日志中看到以下内容:
/var/log/secure:
Dec 4 22:22:42 localhost openvpn[25505]: pam_ldap(ldap-login:auth): failed to get password: Authentication failure
Run Code Online (Sandbox Code Playgroud)
/var/log/messages:
Dec 4 22:38:28 localhost openvpn[25504]: 1.2.3.4:37503 TLS: Initial packet from [AF_INET]1.2.3.4:37503, sid=c2d806cc 5c7c7ace
Dec 4 22:38:28 localhost …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 libpam-google-authenticator 通过 ssh 启用 2FA。并非所有用户都需要启用身份验证器。每个人都使用 ssh 公钥,但没有人有密码。我正在运行 Debian buster,并且还尝试了 bullseye 的 libpam-google-authenticator。
我的问题是,无论我在 PAM 配置中输入什么内容,未启用身份验证器的用户都不会直接登录,而是总是要求输入密码。
我已经安装了 libpam-google-authenticator 并配置了 /etc/ssh/sshd_config:
PasswordAuthentication no
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no
PermitEmptyPasswords no
Run Code Online (Sandbox Code Playgroud)
我无法计算出正确的 PAM 配置,以便没有 .google_authenticator 文件的用户仍然可以登录。根据我使用的内容,系统要么提示用户输入密码(他们没有密码),要么不提示完全允许进入。
在 /etc/pam.d/sshd 中,我尝试过(像这样Trying to get SSH with public key (no password) + googleauthenticatorworking on Ubuntu 14.04.1):
#@include common-auth
auth required pam_google_authenticator.so debug nullok
Run Code Online (Sandbox Code Playgroud)
在这种情况下,没有身份验证器设置的用户将通过以下调试被拒绝;
Aug 05 15:11:18 <host> sshd(pam_google_authenticator)[746624]: debug: start of google_authenticator for "<user>"
Aug 05 15:11:18 <host> sshd(pam_google_authenticator)[746624]: debug: …Run Code Online (Sandbox Code Playgroud)