允许 user1 在没有密码的情况下“su - user2”

Mar*_*ter 70 users password authentication pam

我需要允许用户martin切换到martin-test没有密码的用户

su - martin-test
Run Code Online (Sandbox Code Playgroud)

我认为这可以在/etc/pam.d/su. 该文件中已经有一些可以取消注释的行。但是,我不喜欢将 user 添加martin到 group的想法wheel。我不希望给martin任何更多的特权,而不是能够切换到martin-test。我也不想用sudo

在保持用户权限martin最小的情况下,最好的方法是什么?

GnP*_*GnP 76

pam_rootok.so在您的行下方添加以下行/etc/pam.d/su

auth  [success=ignore default=1] pam_succeed_if.so user = martin-test
auth  sufficient                 pam_succeed_if.so use_uid user = martin
Run Code Online (Sandbox Code Playgroud)

这些行使用pam_succeed_if.so模块执行检查。另请参阅Linux-PAM 配置文件语法以了解有关auth行的更多信息。

  • 第一行检查目标用户是否为martin-test。如果没有发生(success=ignore),我们可以在下一行继续检查当前用户。如果不是,将跳过下一行 ( default=1),我们可以在后续行中继续执行通常的身份验证步骤。
  • 第二行检查当前用户是否是martin,如果是,则系统认为身份验证过程成功并返回(sufficient),如果不是,则没有任何反应,我们继续执行通常的身份验证步骤。

您还可以限制su为一个组,这里的组allowedpeople可以su没有密码:

auth sufficient pam_succeed_if.so use_uid user ingroup allowedpeople
Run Code Online (Sandbox Code Playgroud)


cha*_*aos 13

如果您不想更改组或使用sudo,请使用调用的 pam 模块pam_exec在 pam 阶段执行外部脚本。

在您/etc/pam.d/supam_rootok.so行后添加一行:

auth       sufficient pam_exec.so quiet /path/to/script
Run Code Online (Sandbox Code Playgroud)

/path/to/script 具有权限 755 (rwxr-xr-x) 和以下内容:

auth       sufficient pam_exec.so quiet /path/to/script
Run Code Online (Sandbox Code Playgroud)

因此,如果出现su以下情况,此脚本将成功退出:

  • 在身份验证的上下文中调用,
  • 主叫用户是martin
  • 要验证的用户是martin-test.

看:

martin@host:~$ su - martin-test
martin-test@host:~$ exit
martin@host:~$ su - otheruser
Password: ****
otheruser@host:~$ 
Run Code Online (Sandbox Code Playgroud)

  • @jsbillings 实际上`pam_access` 不能这样做。当 `su` 遍历 pam 堆栈时,它是以您要更改的用户身份进行操作,而不是您要更改的用户身份。因此,如果您添加诸如 `+ : martin : ALL` 之类的规则,它将允许 **anyone** 将 ** 更改为 ** `martin`。即使您将 `martin` 更改为 `martin-test`,它仍然可以让任何人这样做。您需要分析您来自的用户和您要更改为的用户。真的,这正是 `sudo` 的用途...... (3认同)

小智 6

这可能是最好的办法。

su不是要这样做 -sudo是。

打开 /etc/sudoers.d/custom并写入以下内容:

user-a ALL=(user-b:user-b) NOPASSWD:ALL

这意味着:每当 user-a 执行时sudo -u user-b,让他离开而不询问密码。

其它的办法

youruserid ALL = (username) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

visudo然后sudo -u username bash就像su - username