AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 697956
Accepted
ARDVL
ARDVL
Asked: 2022-04-05 08:54:32 +0800 CST2022-04-05 08:54:32 +0800 CST 2022-04-05 08:54:32 +0800 CST

用 `success=3` 澄清 pam 规则

  • 772

pam_ssh_agent_auth.so在通过 ssh pubkey 进行身份验证时,我正在尝试配置为使用 sudo 为某些用户提供无密码体验。

我开始查看gentoo wiki,它建议使用

...
auth [success=3 default=ignore] pam_ssh_agent_auth.so file=/etc/ssh/sudo_authorized_keys
auth    include     system-auth                 <- 1st skipped
account include     system-auth                 <- 2nd skippedm
session include     system-auth                 <- 3rd skipped
...                                             <- should continue from here

我在 Fedora 上,/etc/pam.d/sudo看起来如下所示:

auth     [success=3 default=ignore] pam_ssh_agent_auth.so file=/etc/ssh/sudo_authorized_keys
auth     include     system-auth
account  include     system-auth
password include     system-auth
session  optional    pam_keyinit.so revoke
session  required    pam_limits.so
session  include     system-auth

我不是 PAM 专家,但是查看手册页时,我将其解释success=3为“如果此规则成功,则跳过接下来的 3 行”,因此如果用户正确登录并且存在代理,我希望不会询问密码。

唉,这是行不通的:无论如何都在询问密码。

[success=3 default=ignore]如果我只使用而不是使用,则身份验证按预期工作sufficient- 我相信这基本上是相同的,在这种情况下我无法分辨出任何区别,因为模块堆栈由接下来的 3 个模块组成。

显然,使用[success=3 default=ignore]和sufficient不是一回事,因为我没有得到相同的结果。

有人可以向我解释实际差异是什么以及为什么前者在这种情况下不起作用?

谢谢

pam
  • 2 2 个回答
  • 230 Views

2 个回答

  • Voted
  1. Best Answer
    telcoM
    2022-04-05T23:22:30+08:002022-04-05T23:22:30+08:00

    首先,include一行不是 PAM 模块。而不是计算

    auth     include     system-auth
    

    作为要跳过的一项,PAM 库将auth include用auth来自/etc/pam.d/system-auth. 因此,要确定跳过了哪些 3 行[success=3 default=ignore],您需要首先将include语句替换为system-auth文件的适当内容,然后计算要跳过的行数。

    其次,我认为[success=3 default=ignore]不会跨模块类型工作。

    在对用户进行身份验证时,应用程序将首先调用pam_authenticate(),在此期间 PAM 库将只处理该auth类型的条目。一旦用户成功通过身份验证,应用程序就可以调用pam_acct_mgmt(),这将只处理该account类型的条目。一旦完成,pam_open_session()将只处理该session类型的条目。

    由于身份验证通过、帐户管理通过和会话设置通过是三个不同的操作,我认为auth [success=3 default=ignore]只会跳过接下来的 3 行type authonly。在您的情况下,将被跳过的行将在/etc/pam.d/system-auth文件中。


    当您使用auth sufficient时,这意味着如果该行列出的模块报告验证成功,则该auth行的处理将立即停止。auth sufficient这意味着文件auth中的所有行都system-auth将被跳过,无论有多少行。

    当您使用auth [success=3 default=ignore]时,下一auth行中有include一行,您还必须调查包含的文件以准确了解会发生什么。当您这样做时仍然询问密码这一事实表明您的文件中显然有超过 3auth行。system-auth

    • 1
  2. Garnet
    2022-04-05T11:04:25+08:002022-04-05T11:04:25+08:00

    从手册页:

          sufficient
               if such a module succeeds and no prior required module has failed the PAM
               framework returns success to the application or to the superior PAM stack
               immediately without calling any further modules in the stack. A failure of a
               sufficient module is ignored and processing of the PAM module stack
               continues unaffected.
    

    在您的情况下,一旦它检查了“授权密钥”文件,它就会立即返回成功。

    在fedora 示例中,如果它成功检查了“授权密钥”文件,它会跳过接下来的两个步骤并执行一些会话检查,例如pam_limits.so 设置sudo 用户可以使用多少资源的限制。

    • 0

相关问题

  • /etc/pam.d/system-auth 中的这条规则有什么作用?

  • PAM:身份验证失败,密码有效

  • 了解 PAM 和 PAM 感知守护程序之间的通信

  • LDAP 和 PAM 用于 GUI 登录但不适用于 SSH

  • PAM Ke​​rberos 和 RStudio

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve