• 【Linux】Linux 之用户管理


    1.Linux 下的用户

    Linux 是一个多用户的系统,我们可以多个用户同时登陆 Linux,在 Linux 中用户有三种角色:

    • 超级用户root 拥有对系统的最高的管理权限 ID=0
    • 普通用户:(普通用户又包含系统用户和本地用户)
      • 系统用户 UID: 1 − 999 1-999 1999(Centos7 版本)、 1 − 499 1-499 1499(Centos6 版本)
      • 本地用户 UID: 1000 + 1000+ 1000+
      • UID: 即每个用户的身份标示,类似于每个人的身份证号码。
    • 虚拟用户: 虚拟用户是伪用户,在 Linux 系统中不是真实存在的(非本地用户,即使通过抓包工具得到了用户名及密码,也不能用于登录 Linux 系统),一般不会用来登录系统,它主要是用于维持某个服务的正常运行,如:FTP。

    2.配置文件

    每个用户有三个信息可以证明自己: 一个是 配置文件,一个是 用户组文件,一个是 用户对应的密码信息

    • 用户配置文件 /etc/passwd:记录了每个用户的基本属性,并且对所有用户可读,每一行记录一个用户,每行记录用冒号分割。
    • 用户组文件 /etc/group:用户组的所有信息存放地。
    • 用户对应密码文件 /etc/shadow:用户密码单独分离出来放在了 shadow 下,该文件只有 root 用户拥有读的权限。

    3.用户管理

    3.1 useradd

    使用方法:

    useradd -d -u [UID] -g [初始组] -s [/bin/bash] 用户
    
    • 1

    参数如下:

    -c comment 给新用户添加备注 
    -d home_dir 为主目录指定一个名字(如果不想用登录名作为主目录名的话) 
    -e expire_date 用 YYYYY-MM-DD 格式指定一个账户过期的日期 
    -f inactive_days 指定这个帐户密码过期后多少天这个账户被禁用;0 表示密码一过期就立即禁用,-1 表示禁用这个功能 
    -g initial_group 指定用户登录组的 GID 或组名 
    -G group ... 指定用户除登录组之外所属的一个或多个附加组 
    -k 必须和 -m 一起使用,将 /etc/skel 目录的内容复制到用户的 HOME 目录 
    -m 创建用户的 HOME 目录 
    -M 不创建用户的 HOME 目录(当默认设置里指定创建时,才用到) 
    -n 创建一个同用户登录名同名的新组 
    -r 创建系统账户 
    -p passwd 为用户账户指定默认密码 
    -s shell 指定默认登录 shell ,有时候禁止登录使用 /sbin/nologin
    -u uid 为账户指定一个唯一的 UID 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    useradd 命令背后发生了什么?

    • 创建一个唯一的 UID
    • 添加一个用户名相同的用户组和一个唯一的 GID,并将用户设置为该组
    • /home 目录下创建一个与用户同名的目录
    • 设置 shell 为 /bin/bash
    • 默认情况下是不会设置用户密码的,需要使用 passwd 命令为新用户设置密码

    使用举例:

    添加一个名为 gaosh 的用户,并使用 bash 作为登陆的 shell。

    [root@zmgaosh ~]# useradd gaosh
    [root@zmgaosh ~]# tail -1 /etc/passwd
    gaosh:x:1000:1000::/home/gaosh:/bin/bash
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    字段含义
    gaosh用户名
    x密码占位符
    1001用户的 UID,它都是用数字来表示的
    1001用户所属组的 GID,它都是用数字来表示的
    用户描述信息对用户的功能或其它来进行一个简要的描述
    /home/goash用户主目录(shell 提示符中 ~ 代表的那个)
    /bin/bash用户登录系统后使用的 shell,默认是 /bin/bash

    3.1.1 创建用户并指定用户 ID

    [root@zmgaosh ~]# useradd -u 1111 xinsz08  # 创建用户指定 UID 为 1111
    
    [root@zmgaosh ~]# id xinsz08   # 查看用户所属组,及 UID 和组 ID 信息
    uid=1111(xinsz08) gid=1111(xinsz08) 组=1111(xinsz08)
    
    [root@zmgaosh ~]# tail -1 /etc/passwd  # 查看 /etc/passwd 新建用户 
    xinsz08:x:1111:1111::/home/xinsz08:/bin/bash
    
    [root@zmgaosh ~]# ls /home/xinsz08/ -a  # 查看家目录默认模板
    .  ..  .bash_logout  .bash_profile  .bashrc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.1.2 指定用户的主目录

    [root@zmgaosh ~]# useradd -d /opt/xinsz xinsz
    
    [root@zmgaosh ~]# ls -a /opt/xinsz/   # 可以看到家目录跑 /opt/xinsz 下了
    .  ..  .bash_logout  .bash_profile  .bashrc
    
    [root@zmgaosh ~]# tail -1 /etc/passwd
    xinsz:x:1112:1112::/opt/xinsz:/bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.1.3 指定用户的主组

    就相当于一个财务加到前台组,让财务偶尔也干前台。

    [root@zmgaosh ~]# useradd qiantai  # 创建了一个前台
    
    [root@zmgaosh ~]# id qiantai
    uid=1113(qiantai) gid=1113(qiantai) 组=1113(qiantai)  
    
    [root@zmgaosh ~]# useradd -g qiantai caiwu # 把财务放在前台的组里
    
    [root@zmgaosh ~]# id caiwu 
    uid=1114(caiwu) gid=1113(qiantai) 组=1113(qiantai)  # 可以看到财务属于前台组,万一前台请假,财务顶上干前台
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.2 adduser

    adduser 是创建用户的另外一个命令,使用方法相同。

    [root@zmgaosh ~]# which adduser
    /usr/sbin/adduser
    
    [root@zmgaosh ~]# ll /usr/sbin/adduser
    lrwxrwxrwx 1 root root 7 4月  27 22:17 /usr/sbin/adduser -> useradd
    
    • 1
    • 2
    • 3
    • 4
    • 5

    由此可见,adduseruseradd 的软连接。

    3.3 userdel

    • -r:会连同家目录和 /var/mail 的目录一同删除
      • userdel 用户名:皇帝下令斩立决
      • userdel -r 用户名:皇帝下令斩立决并抄家灭族
    [root@zmgaosh ~]# userdel -r xinsz08
    
    • 1

    3.4 密码文件

    密码文件放在 /etc/shadow 下。

    3.4.1 字段含义解释

    [root@zmgaosh ~]# head -3 /etc/shadow
    root:$6$SlVomD$EBjlGVUUOnCCk.lupiqnL58ESGeVJBNCvIc7IE6LNQ9J66OEhNSvlZQvk8EJkx6laSHDeDnuVN3NnJgqZxZid.:18430:0:99999:7:::
    bin:*:17834:0:99999:7:::
    daemon:*:17834:0:99999:7:::
    
    • 1
    • 2
    • 3
    • 4

    /etc/passwd 文件一样,文件中每行代表一个用户,同样使用 : 作为分隔符,不同之处在于,每行用户信息被划分为 9 9 9 个字段。每个字段的含义如下:

    1-用户名 : 2-加密密码 : 3-最后一次修改时间 : 4-最小修改时间间隔 : 5-密码有效期 : 6-密码需要变更前的警告天数 : 7-密码过期后的宽限时间 : 8-账号失效时间 : 9-保留字段

    1. 账户名称。
    2. 加密后的密码,如果这一栏的第一个字符为 ! 或者 * 的话,说明这是一个不能登录的账户,从上面可以看出,ubuntu 默认的就不启用 root 账户。
    3. 最近改动密码的日期(这个是从 1970 1970 1970 1 1 1 1 1 1 日算起的总的天数)。
    4. 密码不可被变更的天数:设置了这个值,则表示从变更密码的日期算起,多少天内无法再次修改密码,如果是 0 0 0 的话,则没有限制。
    5. 密码需要重新变更的天数:如果为 99999 99999 99999 则没有限制。
    6. 密码过期预警天数。
    7. 密码过期的宽恕时间:如果在 5 中设置的日期过后,用户仍然没有修改密码,则该用户还可以继续使用的天数。
    8. 账号失效日期,过了这个日期账号就无法使用。
    9. 保留的字段。

    3.4.2 给用户添加密码

    方法1:

    [root@zmgaosh ~]# useradd gaosh1 
    [root@zmgaosh ~]# passwd gaosh1
    更改用户 gaosh1 的密码
    新的密码:
    无效的密码: 密码未通过字典检查 - 它没有包含足够的不同字符
    重新输入新的密码:
    passwd:所有的身份验证令牌已经成功更新
    [root@zmgaosh ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    方法2:使用 echo 命令,可以实现很方便、快捷地修改用户密码。

    # echo password | passwd --stdin username
    
    • 1
    [root@zmgaosh ~]# echo 123456 | passwd --stdin gaosh2
    更改用户 gaosh2 的密码
    passwd:所有的身份验证令牌已经成功更新。
    [root@zmgaosh ~]# 
    
    • 1
    • 2
    • 3
    • 4

    这里有个问题,如果两个不同的用户,他们的密码一样,在 /etc/shadow 中加密的 hash 值一样吗?答案是不一样,要不然太容易破解了。

    3.5 其他与用户相关的命令

    命令作用
    id用户和组的信息
    whoami查看当前有效用户名
    who显示目前登入系统的用户信息
    w显示已经登陆系统的用户列表
    users用于显示当前登录系统的所有用户的用户列表

    4.修改用户的信息

    4.1 usermod

    usermod [参数] 用户名
    
    • 1

    常用参数:

    -u UID
    -d 宿主目录
    -g 起始组
    -G 附加组
    -s 登录 shell
    -L 锁定
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.2 举例

    4.2.1 修改 UID

    [root@zmgaosh ~]# id xinsz
    uid=1112(xinsz) gid=1112(xinsz) 组=1112(xinsz)
    
    [root@zmgaosh ~]# usermod -u 2222 xinsz
    [root@zmgaosh ~]# id xinsz
    uid=2222(xinsz) gid=1112(xinsz) 组=1112(xinsz)
    
    [root@zmgaosh ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.2.2 修改 shell

    [root@zmgaosh ~]# grep xinsz /etc/passwd
    xinsz:x:2222:1112::/opt/xinsz:/bin/bash
    
    [root@zmgaosh ~]# usermod -s /sbin/nologin xinsz
    [root@zmgaosh ~]# grep xinsz /etc/passwd   
    xinsz:x:2222:1112::/opt/xinsz:/sbin/nologin    # 可以看到变成了 nologin
    
    [root@zmgaosh ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.2.3 更改用户主目录

    [root@zmgaosh ~]# usermod -m -d /opt/xinsz1 xinsz
    [root@zmgaosh ~]# grep xinsz /etc/passwd
    xinsz:x:2222:1112::/opt/xinsz1:/sbin/nologin    # 可以看到家目录变成了 /opt/xinsz1
    
    • 1
    • 2
    • 3

    5.关于用户管理常见的面试题

    5.1 查找当前系统下能够登陆系统的用户

    [root@zmgaosh ~]# grep /bin/bash /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    gaosh:x:1000:1000::/home/gaosh:/bin/bash
    qiantai:x:1113:1113::/home/qiantai:/bin/bash
    caiwu:x:1114:1113::/home/caiwu:/bin/bash
    sanwu:x:1115:1115::/home/sanwu:/bin/bash
    sanwu1:x:1116:1116::/home/sanwu1:/bin/bash
    gaosh1:x:1117:1117::/home/gaosh1:/bin/bash
    gaosh2:x:1118:1118::/home/gaosh2:/bin/bash
    
    [root@zmgaosh ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5.2 统计当前系统下能够登陆系统的用户个数

    [root@zmgaosh ~]# grep /bin/bash /etc/passwd | wc -l
    
    • 1

    其实是在统计 /etc/passwd 文件中有多少包含 bash 的行。

    5.3 增加一个新用户 admin,权限是 root

    [root@zmgaosh ~]# useradd -u 0 -o admin
    
    • 1
    [root@zmgaosh ~]# grep admin /etc/passwd
    admin:x:0:1119::/home/admin:/bin/bash
    
    • 1
    • 2

    当你使用 -u 选项指定 UID 时,-o 选项允许你创建具有非唯一 ID 的用户,例如:

    # useradd -o huey -u 501
    # useradd -o dewey -u 501
    # useradd -o louie -u 501
    
    • 1
    • 2
    • 3

    简而言之,这允许设置多个用户具有相同的权限和特权,但具有不同的主目录和密码。

  • 相关阅读:
    【HMS core】【FAQ】HMS Toolkit典型问题合集1
    FPGA project : inf_rcv
    【毕业设计】 基于Django的会议室预定系统
    C#,加权有向无环图(DAG,Directed Acyclic Graph)的最长路径(Longest Path)算法与源程序
    翻译英语的软件-免费翻译软件-各种语言互相翻译
    Win7下安装Docker(虚拟机win7)
    前端获取资源的方式(ajax、fetch)及其区别
    Qt学习04 Hello Qt
    高端手机市场的诸神之战,vivo举起一把“雷神之锤”
    UE Lyda项目学习 一、基础移动
  • 原文地址:https://blog.csdn.net/be_racle/article/details/133715698