我正在观看一个视频,其中作者说我们可以使用此命令来阻止用户登录。
useradd -ms `which false` u2
下面是我的测试。
[root@192 ~]# tree -dL 1 /home
/home
├── u1
└── user1
2 directories
[root@192 ~]# useradd -ms `which false` u2
[root@192 ~]# tree -dL 1 /home
/home
├── u1
├── u2
└── user1
3 directories
[root@192 ~]# passwd u2
Changing password for user u2.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@192 ~]# logout
[u1@192 ~]$ whoami
u1
[u1@192 ~]$ logout
[user1@192 ~]$ whoami
user1
[user1@192 ~]$ su - u2
Password:
[user1@192 ~]$ whoami
user1
[user1@192 ~]$ su - u2
Password:
Last login: Tue Apr 19 11:22:01 PDT 2022 on pts/0
[user1@192 ~]$ whoami
user1
[user1@192 ~]$
对我来说,我觉得用户可以成功登录,因为没有错误。而且,正如您所看到的,当我尝试再次登录时,它甚至会告诉我上次登录时间。只是用户一连接就断开了。这是真的?下面究竟发生了什么?
答案1
选项(-s
useradd
手册页) 是:
-s
,--shell SHELL
用户登录 shell 的名称。
并且`which false`
只给出 command 的路径false
,它除了退出之外什么也不做(有错误,但这并不重要)。
因此,在大多数情况下,用户可以正常工作,只是他们有一个不运行的 shell,因此他们实际上无法执行任何操作。
你也许应该不是为他们创建一个密码,然后使用类似usermod -L u2
(手册页) 锁定账户密码,或chage
(手册页)使帐户过期,这取决于您想用它做什么。
/etc/shadow
(就内核而言,锁定密码或让帐户过期完全没有任何作用。只是与登录等相关的各种工具和库。看看那些东西。)