开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

禁止无需登录的账号设置登录权限

在Linux系统中,通常存在多个账号,而并非所有账号都需要具备登录权限。例如,systemd、dhcp等软件安装时自动创建的账号,这些账号仅用于运行相关的服务进程。对于不需要登录的账号,必须禁止其登录能力。如果允许非登录账号有登录能力,将扩大系统的攻击面,攻击者可以利用这些账号进行bash交互操作,从而攻击系统。

  • sync、shutdown、halt属于特殊账号,通常情况下不能将Shell设置为“/sbin/nologin”或“/bin/false”。且账号在“/etc/shadow”文件中口令设置为“*”,无法直接登录。
  • openEuler默认满足无需登录的账号不具备登录能力。

操作步骤

  1. 确认是否所有不应登录的账号均已设置“/sbin/nologin”或“/bin/false”,或对应的口令已被锁定。
    • 通过如下命令查看“/etc/passwd”文件中所有禁止登录的账号,可根据实际业务场景进行比对确认。
      cat /etc/passwd | grep "\/sbin\/nologin\|\/bin\/false" | awk -F ":" '{print $1}'
    • 通过如下命令查看“/etc/passwd”文件中所有允许登录的账号,可根据实际业务场景进行比对确认。
      cat /etc/passwd | grep -v "\/sbin\/nologin\|\/bin\/false" | awk -F ":" '{print $1}'
    • 通过如下命令查看“/etc/passwd”文件中所有口令被锁定的账号,可根据实际业务场景进行比对确认。
      cat /etc/passwd | awk -F ":" '{print $1}' | xargs -I '{}' passwd -S '{}' | awk '($2=="L" || $2=="LK") {print $1}'
    • 通过如下命令查看“/etc/passwd”文件中所有口令未被锁定的账号,可根据实际业务场景进行比对确认。
      cat /etc/passwd | awk -F ":" '{print $1}' | xargs -I '{}' passwd -S '{}' | awk '($2!="L" && $2!="LK") {print $1}'
  2. 支持以下两种方式锁定和解锁用户账号。
    • (推荐)方式一:通过usermod命令修改“/etc/passwd”文件,将指定账号的登录Shell设置为“/sbin/nologin”“/bin/false”。该方法不仅可以禁止用户登录,还能防止通过su命令切换到该用户,以test用户为例。
      • 锁定:
        usermod -s /sbin/nologin test

        usermod -s /bin/false test
      • 解锁:
        usermod -s /bin/bash test
    • 方式二:通过修改“/etc/shadow”文件,在指定账号的第二个字段中添加感叹号“!”或“!!”来锁定口令。以test用户为例,若用户并未设置口令,则会提示操作失败。
      • 锁定:
        usermod -L test
        passwd -l test
      • 解锁:
        usermod -U test
        passwd -u test

    使用usermod命令锁定的口令,可以使用passwd命令进行解锁,反之亦然。

  3. 锁定或解锁后,可通过如下命令查询账号状态。
    passwd -S test
    • 返回信息如下(LK),表示口令已经锁定。
      test LK 2022-01-01 0 30 10 35 (Password locked.)
    • 返回信息如下(NP),表示口令未设置。
      test NP 2020-12-03 0 50 10 35 (Empty password.)
    • 返回信息如下(PS),口令已被设置,且未锁定。
      test PS 2022-01-01 0 30 10 35 (Password set, SHA512 crypt.)