我怎样才能su到没有登录shell的用户?

Kon*_*ner 8 debian su nologin

问题

在Debian 10中我想创建一个无法直接登录的用户。人们应该只能通过使用su二进制文件来访问用户。在我的 Ubuntu 18.04 设置中,我确实做到了这一点,并且它的工作非常顺利,但在 Debian 10 中我无法这样做。

暗示

能够登录的用户将没有使用权限sudo

我做了什么

我已经使用默认 shell 设置了一个用户/usr/sbin/nologin。但是当我尝试访问该用户时,su --shell=/bin/bash user我无法这样做。

最小的例子

# useradd --shell /usr/sbin/nologin locked

# passwd locked
Enter new UNIX password: *secret*
Retype new UNIX password: *secret*
passwd: password updated successfully

$ su --shell /bin/bash locked
Password: *secret*
This account is currently not available.
Run Code Online (Sandbox Code Playgroud)

为什么这在 Debian 中不再起作用?

编辑1:

输出/etc/shells

$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/zsh
/usr/bin/zsh
Run Code Online (Sandbox Code Playgroud)

编辑2:

关于我想要实现的目标的更详细的答案:

我正在尝试创建一个能够通过 SSH 或使用显示器和键盘登录计算机的用户 ( user1 )。user1用户应该具有受限的权限。该限制之一是,他无法使用sudo应用程序,他根本不被允许这样做。

然后我有第二个用户(user2),它将能够使用 sudo 应用程序执行一些配置任务,例如更改网络设置或其他一些事情。默认情况下,该user2应被锁定登录。因此无法通过 SSH 登录,并且(更多属于我的问题)无法通过显示器和键盘登录。

--> 当某人想要执行某些任务时,他必须以受限制的user1身份登录,将用户更改为user2,然后他就可以更改某些配置或类似的内容。

这就是我想要实现的所有情况。有一些更细粒度的细节允许用户或不允许用户执行哪些操作。但为了尽可能简单地描述它,我简单地用“sudo”来解释它。

Cbh*_*ihe 8

如果您的用户有登录 shell,则您需要在 cmd 中键入:su --shell=/bin/bash lockedsudo -u locked /bin/bash前提是为目标用户指定的默认 shell 已在 中列出/etc/shell
(请注意,长选项后面有一个等号--shell。)

然而:

  1. 让用户没有登录 shell 的意义在于,该用户无法以任何方式登录,无论是直接在会话启动时还是通过其他用户帐户登录。奇怪的是,这正是您想要实现的目标。

  2. 为了能够访问该用户(假设它有一个登录 shell,通过切换到其配置文件(如上所示),您通常需要sudo特权,或者至少能够使用 cmd su...


小智 5

我在服务器故障中的ivanleoncz中找到了这个,并且 id 确实对我有用:

您可以使用 su 的 -s 开关来运行特定的 shell

su -s /bin/bash -c '/path/to/your/script' testuser
Run Code Online (Sandbox Code Playgroud)