Linux拓展之阻止或禁用普通用户登录

引入

有时候我们可能需要阻止或禁用普通用户登录,比如超级管理员需要维护系统。有几种方法可以在 Linux 中禁用普通用户登录。

参考资料:

注:我当前进行测试的 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

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可能是以下原因导致的: 1. 用户名或密码错误:请确认输入的用户名和密码是否正确。 2. 用户账户被锁定:如果用户连续多次输入错误密码,系统会自动锁定该账户。可以通过root用户登录后解锁该账户。 3. 用户账户被禁用:如果管理员禁用了该用户账户,那么该用户将无法登录。可以通过root用户登录后启用该账户。 4. 用户所属的用户组没有登录权限:请确认该用户所属的用户组是否具有登录权限。 5. 系统配置错误:如果系统配置出现问题,可能会导致普通用户无法登录。可以通过检查系统配置文件来解决问题。 ### 回答2: 当一名Linux普通用户无法登录时,可能有几个可能的原因。下面是常见的几种情况和解决方案。 1. 用户名或密码错误:首先,确保输入的用户名和密码是正确的。在Linux系统中,用户名是严格区分大小写的,因此请确保使用正确的大小写形式输入用户名和密码。 2. 用户账户被锁定:如果多次尝试登录失败,可能会导致用户账户被锁定。可以通过root用户登录,在终端运行以下命令进行解锁: ``` sudo passwd -u username ``` 其中,"username"是被锁定的用户的用户名。 3. 用户账户过期:管理员可以设置用户账户的有效期限制。如果该用户账户已过期,普通用户将无法登录。可以通过root用户登录,并使用以下命令更改用户账户的有效期限制: ``` sudo chage -E YYYY-MM-DD username ``` 其中,"YYYY-MM-DD"是新的有效期截止日期,"username"是要更改的用户的用户名。 4. 用户账户目录权限问题:普通用户的家目录(/home/username)必须拥有正确的权限以确保登录。可以通过root用户登录,并使用以下命令更正目录权限: ``` sudo chown username:username /home/username sudo chmod 700 /home/username ``` 其中,"username"是要更正权限的用户的用户名。 5. 用户Shell被设置为无效路径:普通用户登录时,默认的Shell必须存在于系统中。如果Shell的路径被设置为无效路径,可能会导致登录失败。可以通过root用户登录,并使用以下命令更改Shell路径为有效值: ``` sudo chsh -s /bin/bash username ``` 其中,"username"是要更改Shell路径的用户的用户名。 如果以上解决方案未能解决问题,可能需要进一步检查系统日志文件(如/var/log/auth.log)以获取更多关于登录失败的详细信息。另外,还可以考虑重启系统或联系系统管理员获取更多帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值