引入
有时候我们可能需要阻止或禁用普通用户登录,比如超级管理员需要维护系统。有几种方法可以在 Linux 中禁用普通用户登录。
参考资料:
- How to Block or Disable User Login in Linux
- nologin命令
注:我当前进行测试的 Linux 系统是 CentOS 7。
方法一
第一种方法:使用 /etc/nologin
文件禁止所有普通用户登录。
/etc/nologin
文件只是用来向普通用户(即非 root
用户)在关机后再尝试重新登录会显示的消息(这消息其实就是写在 /etc/nologin
文件的内容),从而阻止他们登录。通常 Linux 系统在关机时自动创建该文件,在开机时将其删除。
而我们要自己控制是否要让普通用户,所以需要自己手动创建该文件。使用超级管理员执行如下命令:
vi /etc/nologin
# 然后向该文件内写入一些提示内容,任意内容均可。然后保存并关闭文件
只要该文件存在于系统中,Linux 系统就会阻止所有普通用户登录;当删除该文件后,普通用户又可以进行登录了。
为此,我们可以写一个脚本来处理这种情况:Linux脚本练习之script015-实现禁止和允许普通用户登录系统。。
#!/bin/bash
####################################
#
# 功能:实现禁止和允许普通用户登录
#
# 使用:直接执行,无须任何参数。
#
####################################
##
# 实现禁止和允许普通用户登录
##
function allow_or_forbid_login() {
# 根据 /etc/nologin 文件是否存在,来判断是允许普通用户登录还是禁止普通用户登录
if [ -f "/etc/nologin" ]; then
read -n 1 -p "你是否想要允许普通用户登录[Y/N]:" is_allow
echo
else
read -n 1 -p "你是否想要禁止普通用户登录[Y/N]:" is_forbid
echo
fi
# 将输入的字母都转换成小写字母
is_allow=$(echo "$is_allow" | tr 'A-Z' 'a-z')
is_forbid=$(echo "$is_forbid" | tr 'A-Z' 'a-z')
# 实现禁止普通用户登录
if [ "$is_forbid" = "y" ]; then
# 如果要禁止普通用户登录,只需要创建 /etc/nologin 文件即可
echo "系统正在维护中,请过段时间再登录!" > /etc/nologin
echo "现在普通用户将不能登录系统了!"
elif [ "$is_forbid" = "n" ]; then
echo "现在普通用户仍然可以登录!"
fi
# 实现允许普通用户登录
if [ "$is_allow" = "y" ]; then
# 只要删除掉 /etc/nologin 文件就可以让普通用户进行登录了
rm -rf "/etc/nologin"
echo "现在普通用户已经可以登录了!"
elif [ "$is_allow" = "n" ]; then
echo "现在普通用户仍然不允许登录!"
fi
}
##
# 主函数
##
function main() {
# 在主函数中调用
allow_or_forbid_login
}
# 调用主函数
main
方法二
第二种方法:禁止某个用户登录,而非禁止所有用户登录,也无法通过 FTP 登录。
如果我们想要禁止某个特定的用户登录,那么可以使用 passwd
命令:
# 语法
# 禁止特定用户,让它不能够进行登录
passwd -l 指定用户名
# 解锁特定用户,让它能够进行登录
passwd -u 指定用户名
# 示例
# 让 zhangsan 用户不能登录
passwd -l zhangsan
# 让 zhangsan 用户能够登录
passwd -u zhangsan
禁止用户 zhangsan
登录的情况如下:
解锁用户 zhangsan
能够登录:
方法三
第三种方法:禁止指定用户通过 shell 登录但是允许 FTP 等其他方法(如 WinSCP 这类可以进行FTP登录的软件)登录。
如果要通过该种方法实现,我们可以直接修改 /etc/passwd
文件种指定用户登录的 shell,通常由 /bin/bash
修改为 /sbin/nologin
。
vi /etc/passwd
例如,修改 zhangsan
用户:但上面的方法每次都需要去修改
/etc/passwd
文件,很麻烦。所以我们可以使用 chsh
命令,该命令将会改变指定用户的 shell。命令格式如下:
# 语法
# 禁止指定用户登录,其实就是将普通用户的 shell 修改为 /sbin/nologin,这样普通用户就无法登录了
chsh -s /sbin/nologin 指定用户名
# 恢复指定用户登录,其实就是将普通用户的 shell 又修改回 /bin/bash,这样普通用户就又能够进行登录了
chsh -s /bin/bash 指定用户名
# 示例
# 禁止指定用户 zhangsan 登录
chsh -s /sbin/nologin zhangsan
# 恢复指定用户 zhangsan 登录
chsh -s /bin/bash zhangsan
注:关于
chsh
命令可参考 Linux命令之改变用户的shell设定chsh。