在平時工作中,有時候會要求禁止一些用戶的登錄,以便系統變更或者安全,這里介紹幾種常見的方法:
一、最常用方式,修改用戶的shell類型為/sbin/nologin (推薦使用)
比如,禁止用戶user001登錄系統:
[root@ubuntu2020 ~]# cat /etc/passwd|grep user001
user001:x:2000:5555:這是游客:/home/guest0:/bin/bash
[root@ubuntu2020 ~]# usermod -s /sbin/nologin user001
[root@ubuntu2020 ~]# cat /etc/passwd|grep user001
user001:x:2000:5555:這是游客:/home/guest0:/sbin/nologin //此時已經將用戶的shell改為nologin,不允許登錄
現在嘗試登錄切換到user001,會無法登錄並給出提示信息: // 提示信息可以在/etc/nologin.txt編輯,沒有則創建該文件
[user002@ubuntu2020 ~]$ su user001
Password:
該賬戶為已被鎖定, 不允許登錄
[user002@ubuntu2020 ~]$
還原則將用戶的修改為原本的即可,可以通過命令或者vim直接修改/etc/passwd
[root@ubuntu2020 ~]# usermod -s /bin/bash user001
[root@ubuntu2020 ~]# su user001
[user001@ubuntu2020 root]$ cat /etc/passwd|grep user001
user001:x:2000:5555:這是游客:/home/guest0:/bin/bash
注意:這一種方法,無論是從root用戶,還是從其他用戶,都不能ssh登陸或su切換到鎖定賬號下
--------------------------------------------------------------------------------------------------------------------------------
二、修改用戶配置文件/etc/shadow,將第二欄設置為“*”
使用這種方式會導致該用戶的密碼丟失,要再次使用時,需重設密碼。一般不推薦這種方式!
[root@ubuntu2020 ~]# cat /etc/passwd|grep user001
user001:x:2000:5555:這是游客:/home/guest0:/bin/bash
[root@ubuntu2020 ~]# cat /etc/shadow|grep user001
user001:$6$QPKq./fl$.jwt7JMWW9.EBex.2MNfY6RLIkI3hhUotU15ml/Mdm.tyr7Yubqa.:18389:0:99999:7:::
[root@ubuntu2020 ~]# vim /etc/shadow
[root@ubuntu2020 ~]# su user001
[user001@ubuntu2020 root]$ // root用戶仍然可以通過su切換到該用戶
[user002@ubuntu2020 ~]$ su user001
Password:
su: Authentication failure
[user002@ubuntu2020 ~]$ // 非root用戶則無法su登錄,ssh工具也無法登錄
如果讓用戶重新登錄,則需要重設密碼
[root@ubuntu2020 ~]# echo "123456"|passwd --stdin user001
Changing password for user user001.
passwd: all authentication tokens updated successfully.
[root@ubuntu2020 ~]# cat /etc/shadow|grep user001
user001:$6$vBbI/K7d$SUgM1R6t6w.HOqiek2iQwiQDUlFKli620yZUMD9BxiFJSYG4vRC0:18389:0:99999:7:::
--------------------------------------------------------------------------------------------------------------------------------
三、使用命令passwd (實驗發現:鎖定后,做了ssh無密碼信任的機器之間登錄不受影響)
passwd -l 用戶 //鎖定賬號,-l:lock
passwd -u 用戶 //解禁用戶,-u:unlock
[root@ubuntu2020 ~]# passwd -l user001
Locking password for user user001.
passwd: Success
[root@ubuntu2020 ~]# cat /etc/shadow|grep user001 // 本質就是在密碼前面加上了雙感嘆號"!!"
user001:!!$6$vBbI/K7d$SU0R6t6w.HOqiek2iQwiQDUlFtgxbZ0QNtuawq9Y3fXrxSG4vRC0:18389:0:99999:7:::
[root@ubuntu2020 ~]# su user001
[user001@ubuntu2020 root]$ // root用戶仍然可以通過su切換到該用戶
[user002@ubuntu2020 ~]$ su user001
Password:
su: Authentication failure
[user002@ubuntu2020 ~]$ // 非root用戶則無法su登錄,ssh工具也無法登錄
解鎖用戶重新登錄
[root@ubuntu2020 ~]# passwd -u user001
Unlocking password for user user001.
passwd: Success
[user002@ubuntu2020 ~]$ su user001
Password:
[user001@ubuntu2020 guest1]$
--------------------------------------------------------------------------------------------------------------------------------
四、使用命令usermod
usermod -L 用戶 //鎖定帳號,-L:lock
usermod -U 用戶 //解鎖帳號,-U:unlock
[root@ubuntu2020 ~]# usermod -L user001
[root@ubuntu2020 ~]# cat /etc/shadow|grep user001 // 本質就是在密碼前面加上了單感嘆號"!"
user001:!$6$vBbI/K7d$SU0R6t6w.HOqiek2iQwiQDUlFtgxbZ0QNtuawq9Y3fXrxSG4vRC0:18389:0:99999:7:::
[root@ubuntu2020 ~]# su user001 // root用戶仍然可以通過su切換到該用戶
[user001@ubuntu2020 root]$
[user002@ubuntu2020 ~]$ su user001
Password:
su: Authentication failure
[user002@ubuntu2020 ~]$ // 非root用戶則無法su登錄,ssh工具也無法登錄
解鎖用戶重新登錄
[root@ubuntu2020 ~]# usermod -U user001
[root@ubuntu2020 ~]# cat /etc/shadow|grep user001
user001:$6$vBbI/K7d$SU0R6t6w.HOqiek2iQwiQDUlFtgxbZ0QNtuawq9Y3fXrxSG4vRC0:18389:0:99999:7:::
[user002@ubuntu2020 ~]$ su user001
Password:
[user001@ubuntu2020 guest1]$
---------------------------------------------------------------------------------------
通過第三和第四種方式,即passwd或usermod命令鎖定的用戶:
1)無論從root用戶還是其他普通用戶,都不能ssh登陸鎖定用戶下
2)可以從root用戶su切換到鎖定用戶下,但是用其他普通用戶不能su切換到鎖定用戶下
注意:通過
usermod
或
passwd
鎖定賬號,不會對做了
ssh
互信的機器造成登錄影響;但要是在sshd_config里做了DenyUsers的限制,則就徹底禁止了
ssh
動作,互信也受影響。
--------------------------------------------------------------------------------------------------------------------------------
五、禁止所有的用戶登錄(手動創建/etc/nologin文件)
如果不想讓除root用戶之外的其他所有用戶登錄系統(比如在系統維護情況下),如果按照上面的幾種方式,就需要一個一個地去禁止用戶登錄,效率很低!
一種簡潔有效的設置方式,只需要在/etc目錄下建立一個nologin文件,那么Linux上的所有用戶(除了root以外)都無法登錄!
[root@ubuntu2020 ~]# touch /etc/nologin
[root@ubuntu2020 ~]# vim /etc/nologin
[root@ubuntu2020 ~]# cat /etc/nologin
系統維護, 暫時不允許非root登錄!
此時除root之外的其他用戶統統無法登陸系統了
C:\Users\Shutdown>ssh user001@192.168.1.84
user001@192.168.1.84's password:
系統維護, 暫時不允許非root登錄!
Connection closed by 192.168.1.84 port 22
注意一點:這種方法設置后,只是禁止了從外部ssh登陸本機時有效!但是在本機上,無論是從root用戶還是其他普通用戶使用su命令切換到鎖定用戶下都不受影響。
[user002@ubuntu2020 ~]$ su user001
Password:
[user001@ubuntu2020 guest1]$
解鎖用戶重新登錄,刪除/etc/nologin文件即可
[root@ubuntu2020 ~]# rm -rf /etc/nologin
[root@ubuntu2020 ~]#
以上幾種鎖定賬號的設置完成后,在遠程使用ssh命令都將無法登陸系統!