在我们运维工作中,会经常要求一些用户不允许登陆系统,以加固系统安全。今天这里介绍下锁定账号登陆的几种方法:
一、最常用方式,修改用户的shell类型为/sbin/nologin(推荐)
这种方式会更加人性化一点,因为不仅可以禁止用户登录,还可以在禁止登陆时给出提示告诉它这么做的原因。
修改/etc/nologin.txt,没有的话就手动新建一个,在里面添加给被禁止用户的提示。如下,禁用cnsdhh账号登陆系统:
(注意:以这种方式禁止的所有用户的锁定信息都在这个文件中,在登陆时会给予提示。)
添加一个cnsdhh用户并给它设置密码为“123456”:
[root@localhost ~]# useradd cnsdhh
[root@localhost ~]# echo "123456" | passwd --stdin cnsdhh
Changing password for user cnsdhh.
passwd: all authentication tokens updated successfully.修改此用户的shell类型为/sbin/nologin,并添加提示信息:
[root@localhost ~]# cat /etc/passwd | grep cnsdhh
cnsdhh:x:500:500::/home/cnsdhh:/bin/bash
[root@localhost ~]# sed -i 's#/home/cnsdhh:/bin/bash#/home/cnsdhh:/sbin/nologin#g' /etc/passwd
[root@localhost ~]# cat /etc/passwd | grep cnsdhh
cnsdhh:x:500:500::/home/cnsdhh:/sbin/nologin
[root@localhost ~]# touch /etc/nologin.txt
[root@localhost ~]# cat /etc/nologin.txt
In order to protect the system security, this type of user is locked!现在尝试用cnsdhh账号登陆系统,就会被拒绝,并给出提示信息:
[root@localhost ~]# su - ops
[ops@localhost ~]$ su - cnsdhh
Password:
In order to protect the system security, this type of user is locked!
[ops@localhost ~]$---------------------------------------------------------------------------------------
也可以使用usermod命令修改用户的shell类型,加“-s”参数,如:
[root@localhost ~]# cat /etc/passwd | grep cnsdhh
cnsdhh:x:500:500::/home/cnsdhh:/bin/bash
[root@localhost ~]# usermod cnsdhh -s /sbin/nologin
[root@localhost ~]# cat /etc/passwd | grep cnsdhh
cnsdhh:x:500:500::/home/cnsdhh:/sbin/nologin
(注意:这种方法无论是从root用户,还是从其他用户,都不能通过ssh登陆或su切换到锁定账号下。)
---------------------------------------------------------------------------------------
解除用户登陆就是把shell改为它原有的就即可:
[root@localhost ~]# cat /etc/passwd | grep cnsdhh
cnsdhh:x:500:500::/home/cnsdhh:/sbin/nologin
[root@localhost ~]# sed -i 's#/home/cnsdhh:/sbin/nologin#/home/cnsdhh:/bin/bash#g' /etc/passwd
[root@localhost ~]# cat /etc/passwd|grep cnsdhh
cnsdhh:x:500:500::/home/cnsdhh:/bin/bash
[root@localhost ~]# su - ops
[ops@localhost ~]$ su - cnsdhh
Password:
[cnsdhh@localhost ~]$
二、修改用户配置文件/etc/shadow,将第二栏设置为“*”(不推荐)
使用这种方式会导致该用户的密码丢失,要再次使用此用户时,需重设密码。
方法如下:
将用户的密码设置为“*”:
[root@localhost ~]# cat /etc/passwd | grep cnsdhh
cnsdhh:x:500:500::/home/cnsdhh:/bin/bash
[root@localhost ~]# cat /etc/shadow | grep cnsdhh
cnsdhh:$1$0/5NU4y2$OBGISa8yaloVNYVLFCoP3.:17133::::::
[root@localhost ~]# cat /etc/shadow | grep cnsdhh #将第二栏密码设置为*
cnsdhh:*:17133::::::
[root@localhost ~]# su - ops
[ops@localhost ~]$ su - cnsdhh #不能登陆系统
Password:
su: incorrect password解禁用户登陆,需要重置密码:
[root@localhost ~]# echo "123456" | passwd --stdin cnsdhh
Changing password for user cnsdhh.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# cat /etc/shadow | grep cnsdhh
cnsdhh:$1$RPfkekf7$QAUGmJ0SCIb64aEvJvNif1:17133::::::
[ops@localhost ~]$ su - cnsdhh
Password:
[cnsdhh@localhost ~]$
三、使用命令passwd
passwd -l 用户 //锁定账号,-l:lock
passwd -u 用户 //解禁用户,-u:unlock
[root@localhost ~]# passwd -l cnsdhh
Locking password for user cnsdhh.
passwd: Success
[ops@localhost ~]$ su - cnsdhh
Password:
su: incorrect password
[root@localhost ~]# passwd -u cnsdhh
Unlocking password for user cnsdhh.
passwd: Success
[ops@localhost ~]$ su - cnsdhh
Password:
[cnsdhh@localhost ~]$
四、使用命令usermod
usermod -L 用户 //锁定帐号,-L:lock
usermod -U 用户 //解锁帐号,-U:unlock
[root@localhost ~]# usermod -L cnsdhh
[ops@localhost ~]$ su - cnsdhh
Password:
su: incorrect password
[root@localhost ~]# usermod -U cnsdhh
[ops@localhost ~]$ su - cnsdhh
Password:
[cnsdhh@localhost ~]$
---------------------------------------------------------------------------------------
这里有个细节需要注意一下:
第三和第四种方式,即passwd或usermod命令锁定的用户:
1)无论从root用户还是其他普通用户,都不能ssh登陆锁定用户下
2)可以从root用户su切换到锁定用户下,但是用其他普通用户不能su切换到锁定用户下
---------------------------------------------------------------------------------------
五、禁止所有的用户登录(手动创建/etc/nologin文件)
如果不想让除root用户之外的其他所有用户登录系统(比如在系统维护情况下),如果按照上面的几种方式,就需要一个一个地去禁止用户登录,这就是一种很傻X的工作方式,效率也很低!
下面介绍一种简洁有效的设置方式,只需要在/etc目录下建立一个nologin文档,那么Linux上的所有用户(除了root以外)都无法登录!!
在/etc/nologin文件里面可以自定义一些内容,告诉用户为何无法登录:
(注意:这可不是第一种方式中的nologin.txt)
[root@localhost ~]# touch /etc/nologin
[root@localhost ~]# cat /etc/nologin
抱歉,系统维护中,暂时禁止登陆!这样,就会发现除root之外的其他用户统统无法登陆系统了。
[root@nginx ~]# ssh root@192.168.1.117
root@192.168.1.117's password:
[root@localhost ~]#[root@nginx ~]# ssh cnsdhh@192.168.1.117
cnsdhh@192.168.1.117's password:
抱歉,系统维护中,暂时禁止登陆!
Connection closed by 192.168.1.117
[root@nginx ~]# ssh ops@192.168.1.117
ops@192.168.1.117's password:
抱歉,系统维护中,暂时禁止登陆!
Connection closed by 192.168.1.117
(注意:这种方法设置后,只是禁止了从外部ssh登陆本机时有效!但是在本机上,无论是从root用户还是其他普通用户使用su命令切换到锁定用户下都不受影响。)
解禁帐号也简单,直接将/etc/nologin删除就行了!
***************当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************