在不禁用帐户的情况下禁用用户的登录


87

假设我使用adduser命令创建了一个名为“ bogus”的用户。在不禁用帐户的情况下,如何确定该用户将不是可行的登录选项。简而言之,我希望可以通过来访问该帐户su - bogus,但是我不希望通过常规的登录提示符来访问该帐户。

到处搜寻,似乎我需要禁用该用户的密码,但是这样passwd -d bogus做没有帮助。实际上,这使情况变得更糟,因为我现在无需输入密码就可以登录到虚假文件。

有没有一种方法可以禁用给定帐户的常规登录?

注意:请注意,我知道如何从图形登录屏幕(如gdm)的菜单选项中删除用户,但是这些方法只是隐藏了帐户,而没有实际禁用登录。我正在寻找一种完全禁用常规登录(包括文本模式)的方法。


2
-d是删除密码的标志。这与禁用它不同(称为锁定,请参阅乍得的答案)。
Caleb

1
您可能希望完全禁用它们:unix.stackexchange.com/questions/7690/… 另请参阅以下Ubuntu问题:Askubuntu.com/questions/282806/how-to-enable-或-disable
Simon Woodside

Answers:


102
passwd -l user

是你想要的。

这将锁定用户帐户。但是您仍然可以

su - user

但您必须以su - userroot用户身份。

或者,您可以通过在!用户密码前面加上a 来完成相同的操作/etc/shadow(所有passwd -l操作都是在后台进行)。而passwd -u将撤消这一点。


27
通过使用该passwd -l选项,您应该知道用户可以使用其他身份验证令牌(例如SSH密钥)登录。
pl1nk

2
请参阅下面有关如何避免这种情况的推荐解决方案的解答。
约尔格Gottschlich

2
这不适用于ubuntu 16.04。它将更改过期日期,并且不再允许su-用户。
merlin

1
这与--disabled-password给的选项相同adduser吗?难道没有创建用户--disabled-password,然后运行passwd -l对用户达到相同的结果,运行adduser--disabled-password摆在首位?
haridsv

39

的手册页passwd(1)关于passwd -l

请注意,这不会禁用该帐户。用户仍然可以使用其他身份验证令牌(例如SSH密钥)登录。要禁用该帐户,管理员应使用usermod --expiredate 1(将帐户的到期日期设置为1970年1月2日)。

所以

usermod --expiredate 1 [LOGIN]

在我看来,禁用用户帐户的正确方法似乎不再可用(例如,因为他离开了公司)。


4
在我的CentOs 6.3上,passwd -l确实阻止ssh了用户的连接,但是usermod --expiredate 1没有!
fduff

1
在我的CentOS 7.4上,passwd -l不再阻止ssh用户连接,并且usermod --expiredate 1 user会阻止。man passwd您还可以使用Per chage -E 0 user来阻止用户。申请后usermodchage我可以sudo su user
2015年

usermod --expiredate 0 [LOGIN]也可以使用,它将过期日期设置为1970年1月1日,而将1设置为1970
slm

“不应使用值0,因为它将被解释为没有到期的帐户,或者被解释为1970年1月1日到期。”
约翰内斯

28

有两种方法可以阻止用户登录:

  1. 您可以通过编辑锁定用户 /etc/passwd
  2. 通过passwd-l交换机直接发出命令

在第二种情况下,用户可以使用另一个身份验证令牌(例如SSH密钥)登录。

方法1

  1. 查找哪里是nologin:/ bin / nologin或/ bin / sbin / nologin
  2. 打开终端并以root用户身份登录
  3. 类型 vi /etc/passwd

现在您已进入passwd文件Ins编辑模式。

使用nologin选项更改以下行(/bin/bash表示用户可以登录)。

root:x:0:0:root:/root:/bin/bash

为此。nologin表示用户无法登录。

root:x:0:0:root:/root:/bin/nologin

(或使用/ bin / sbin / nologin)

  1. 关闭vi Esc :wq

方法#2

锁定用户: passwd -l username

解锁用户: passwd -u username


1
在Ubuntu 14.04系统上,我找到了/usr/sbin/nologin而不是/bin/nologin
丹尼斯·威廉姆森

7

您只需要做一些/etc/passwd文件更改即可,这是非常简单的任务。

只需简单地更改外壳程序(通常默认情况下即可),/bin/bash即您可以使用此外壳程序登录,将其更改为/bin/nologin/bin/false/bin/nologin由于/bin/false过时,建议将其更改为。


4

设置/bin/false为外壳/etc/passwd


18
当将shell设置为时/bin/false,将阻止使用su充当该用户。此外,使用/bin/false不会产生错误,也不会提示发生了什么问题-如果确实要防止以su身份使用su来获得该用户的shell,则应将shell更改为/sbin/nologin会产生错误的shell 。
HedgeMage 2011年

8
不,su对于使用/bin/falseshell的用户来说仍然可以实现passwd-只需使用选项--shellsu - --shell /bin/sh bogus
Matej Kovac 2014年

1
/usr/sbin/nologin具有与相同的效果/bin/false,但还会显示有用的信息性消息。
罗德

0

当我们使用passwd -l user命令锁定用户!!时,/etc/shadow文件中会显示“ ” 。但是我们仍然可以从根帐户切换到用户外壳程序,但是不能通过其他普通用户登录外壳程序来切换到用户帐户。

我们也可以通过提供/bin/nologin或归档/bin/false来禁用帐户/etc/passwd。因此,用户可能无法登录。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.