• Linux用户和组管理


    用户和组管理

    bash的配置文件:

    配置文件类型 配置文件路径
    全局配置 /etc/profile
    /etc/profile.d/*.sh
    /etc/bashrc
    个人配置 ~/.bash_profile
    ~/.bashrc
    配置文件类型 功能
    profile类 为交互式登录的shell提供配置,用来设定环境变量、运行命令或脚本
    bashrc类 为非交互式登录的shell提供配置,用来设定本地变量、定义命令别名

    用户组类型

    用户组类别 特性
    私有组 创建用户时,如果没有为其指定所属的组,
    系统会自动为其创建一个与用户名相同的组
    基本组 用户的默认组
    附加组(额外组) 默认组以外的其它组

    配置文件信息

    配置文件 作用
    /etc/passwd 用户及其属性信息(名称、uid、基本组id等等)
    /etc/group 组及其属性信息
    /etc/shadow 用户密码及其相关属性
    /etc/gshadow 组密码及其相关属性。在用户执行基本组切换时使用

    配置文件 /etc/passwd /etc/group
    第一字段 用户名 组名
    第二字段 密码占位符 组密码
    第三字段 UID GID
    第四字段 GID 以当前组为附加组的用户列表(分隔符为逗号)
    第五字段 用户的描述信息
    第六字段 用户家目录
    第七字段 用户的登录shell

    配置文件 /etc/shadow
    第一字段 登录名
    第二字段 加密后的密码
    第三字段 最近一次更改密码的日期
    第四字段 密码的最小使用期限
    第五字段 密码的最大使用期限
    第六字段 密码警告时间段
    第七字段 密码禁用期
    第八字段 帐号的过期日期
    第九字段 保留字段

    用户创建命令useradd

    • 语法:useradd [option] USERNAME
      • -u UID        指定用户UID,[UID_MIN,UID_MAX]定义在/etc/login.defs文件中
      • -g GID       指定用户所属基本组,可为组名或GID,组groupname必须事先存在
      • -G groupname,...  附加组,可以有多个,用逗号隔开。组groupname必须事先存在
      • -c "COMMENT"   注释信息(或用户描述)
      • -d /path/to/directory 指定用户的家目录。此目录必须不能事先存在,否则将不会从/etc/skel中复制环境设置文件
      • -s shell       这里的shell最好使用/etc/shells里面有的shell,/etc/shells指定了当前系统可用的安全shell
      • -M          创建用户时不给其创建家目录
      • -r          添加一个系统用户(系统用户不用登陆不用家目录配合-M -s nologin使用)
      • -D          直接打印/etc/default/useradd文件的内容或配合其它选项(例如-s SHELL)直接修改/etc/default/useradd文件中的默认值
    • useradd [option] USERNAME
    [root@hostnamectl ~]# useradd tianxiadiyi
    [root@hostnamectl ~]# tail -1 /etc/passwd
    tianxiadiyi:x:1006:1006::/home/tianxiadiyi:/bin/bash
    
    • -g 指定组(指定组时组必须先存在)
    [root@hostnamectl ~]# tail -1 /etc/group
    guilai:x:1005:
    [root@hostnamectl ~]# useradd -u 1005 -g 1005 -G root -c "my world" -d /home/world -s /bin/bash guilai
    [root@hostnamectl ~]# tail -1 /etc/passwd
    guilai:x:1005:1005:my world:/home/world:/bin/bash
    

    创建组groupadd

    • groupadd [options] GROUP
         -g GID //指定GID
         -r //添加一个系统组
    hostnamectl ~]# groupadd -g 1008 xiaobai
    [root@hostnamectl ~]# grep xiaobai /etc/group
    xiaobai:x:1008:
    
    

    id 查看用户的帐号属性信息

    • id 查看用户的帐号属性信息
          -u : 查看UID
          -g : 查看GID
          -G : 查看Groups
    [root@hostnamectl ~]# id guilai
    uid=1005(guilai) gid=1005(guilai) 组=1005(guilai),0(root)
    

    用户删除命令userdel

    • userdel [option] USERNAME
          -r:删除用户的同时删除其家目录(userdel默认不会删除其家目录)
    [root@hostnamectl ~]# userdel tianxiadiyi
    [root@hostnamectl ~]# id tianxiadiyi
    id: tianxiadiyi: no such user
    

    删除组命令groupdel

    • groupdel [options] GROUP
    [root@hostnamectl ~]# grep xiaobai /etc/group
    xiaobai:x:1008:
    [root@hostnamectl ~]# groupdel xiaobai
    [root@hostnamectl ~]# grep xiaobai /etc/group
    [root@hostnamectl ~]# 
    

    修改用户帐号属性的命令

    • usermod 修改用户属性
    • usermod [options] username
           -u :UID
           -g :GID
           -a -G groupname: 不使用-a选项,会覆盖此前的附加组
           -d -m : 改变用户家目录的同时把原来家目录的文件移动到新的家目录中
           -e :YYYY-MM-DD 指明用户帐号过期日期
           -f :INACTIVE 设定非活动期限
           -L : 锁定帐号,被锁定的帐号在/etc/shadow文件中密码前面会有一个!感叹号
           -U : 解锁帐号
           chsh 修改用户的默认shell (建议用-s 更简单)
              chsh [options] [username]
           -s: SHEL
    • -u修改账户UID (UID不能重复)
    [root@hostnamectl ~]# usermod -u 10002 guilai
    [root@hostnamectl ~]# id guilai
    uid=10002(guilai) gid=1005(guilai) 组=1005(guilai),0(root)
    
    • -g 修改用户基本组
    [root@hostnamectl ~]# usermod -g 1007 guilai
    [root@hostnamectl ~]# id guilai
    uid=10002(guilai) gid=1007(tianxaidiyi) 组=1007(tianxaidiyi),0(root)
    
    • -a -G修改用户附加组
    [root@hostnamectl ~]# grep swordsman /etc/group
    swordsman:x:1008:
    [root@hostnamectl ~]# usermod -a -G 1008 guilai
    [root@hostnamectl ~]# id guilai
    uid=10002(guilai) gid=1007(tianxaidiyi) 组=1007(tianxaidiyi),0(root),1008(swordsman)
    
    • -G覆盖用户附加组
    [root@hostnamectl ~]# id guilai
    uid=10002(guilai) gid=1007(tianxaidiyi) 组=1007(tianxaidiyi),1008(swordsman)
    
    • -d修改用户家目录(文件不会移动只移动家目录地址)
    [root@hostnamectl ~]# usermod -d /opt/world guilai
    [root@hostnamectl ~]# grep guilai /etc/passwd
    guilai:x:10002:1007:my world:/opt/world:/bin/bash
    
    • -d -m修改用户家目录(包括家目录里所有文件)
    [root@hostnamectl ~]# mkdir -p /opt/world/abc
    [root@hostnamectl ~]# usermod -d /home/guilai  -m guilai
    [root@hostnamectl ~]# grep guilai /etc/passwd
    guilai:x:10002:1007:my world:/home/guilai:/bin/bash
    [root@hostnamectl ~]# ls /home/
    guilai/ world/  
    [root@hostnamectl ~]# ls /home/guilai/
    abc
    
    •  -L : 锁定帐号,被锁定的帐号在/etc/shadow文件中密码前面会有一个!感叹号
    [root@hostnamectl ~]# grep guilai /etc/shadow
    guilai:$6$8xpOiM55$1rmh9cE7t3ttiDvG.P5SUlcVBoaO29J48Np1pjwDHaemQN.OTuIwjQn9Fi0/.dEivY8J7XkWRvsCJddHvMeII0:18158:0:99999:7:::
    [root@hostnamectl ~]# grep guilai /etc/shadow
    guilai:!$6$8xpOiM55$1rmh9cE7t3ttiDvG.P5SUlcVBoaO29J48Np1pjwDHaemQN.OTuIwjQn9Fi0/.dEivY8J7XkWRvsCJddHvMeII0:18158:0:99999:7:::
    
    • -U :解锁帐号
    [root@hostnamectl ~]# usermod -U guilai
    [root@hostnamectl ~]# grep guilai /etc/shadow
    guilai:$6$8xpOiM55$1rmh9cE7t3ttiDvG.P5SUlcVBoaO29J48Np1pjwDHaemQN.OTuIwjQn9Fi0/.dEivY8J7XkWRvsCJddHvMeII0:18158:0:99999:7:::
    
    • -s:修改用户shell
    [root@hostnamectl ~]# usermod -s /bin/sh guilai
    [root@hostnamectl ~]# grep guilai /etc/passwd
    guilai:x:10002:1007:my world:/home/guilai:/bin/sh
    

    修改组信息命令groupmod

    • groupmod [options] GROUP
    • -g修改指定组的UID
    [root@hostnamectl ~]# grep Hermit /etc/group
    Hermit:x:1010:
    
    • -n groupname 修改组名
    [root@hostnamectl ~]# groupmod -n Devil Hermit
    [root@hostnamectl ~]# grep Devil /etc/group
    Devil:x:1010:
    

    切换用户命令su

    切换用户的方式 特点
    su USERNAME 非登录式切换,即不会读取目标用户的配置文件
    su - USERNAME 登录式切换,即会读取目标用户的配置文件。完全切换
    su - 不指定用户时默认切换至root用户
    配置文件类型 功能
    profile类 为交互式登录的shell提供配置,用来设定环境变量、运行命令或脚本
    bashrc类 为非交互式登录的shell提供配置,用来设定本地变量、定义命令别名
    • root su至其他用户不需要密码,非root用户su至其他用户时需要输入目标用户的密码

    • su [options] [-] [USER [arg]...]

    • su - username 登录式切换,即会读取目标用户的配置文件。完全切换

    [root@hostnamectl ~]# su - guilai
    上一次登录:四 9月 19 17:50:54 CST 2019pts/0 上
    [guilai@hostnamectl ~]$ pwd
    /home/guilai
    
    • su username 非登录式切换,即不会读取目标用户的配置文件
    [root@hostnamectl ~]# su guilai
    [guilai@hostnamectl root]$ pwd
    /root
    
    • su - :其他用户登陆root
    不指定用户时默认切换至root用户
    

    -c 'COMMAND' 切换身份执行命令,命令执行结束后又回到原来的身份

    [root@hostnamectl ~]# su - doom -c 'touch a'
    [root@hostnamectl ~]# ls /home/doom/
    a
    

    密码管理命令passwd

    • passwd [options] [USERNAME]
    • passwd 修改密码
    [root@hostnamectl ~]# passwd guilai
    更改用户 guilai 的密码 。
    新的 密码:
    
    • --stdin 从标准输入获取用户密码,例:echo "redhat"|passwd --stdin user1
    [root@hostnamectl ~]# echo '123' |passwd --stdin guilai
    更改用户 guilai 的密码 。
    passwd:所有的身份验证令牌已经成功更新。
    

    • -l: 锁定用户
    • -u : 解锁用户
    • -d : 删除用户密码

    • -n mindays 指定最短使用期限
    [root@hostnamectl ~]# passwd -n 10 guilai
    调整用户密码老化数据guilai。
    passwd: 操作成功
    
    • -x maxdays 指定最长使用期限
    [root@hostnamectl ~]# passwd -x 1000 guilai
    调整用户密码老化数据guilai。
    passwd: 操作成功
    [root@hostnamectl ~]# grep guilai /etc/shadow
    guilai:$6$tzRXztt8$V/dBaNOSefO.NwdL1.Rwqg2CnhSsrTlL.PlmJ2F/mY3CimCxzDeJ2m2qiWEfMbFyb4uPdSFr0aOZ3iJBV/h5H.:18158:10:1000:7:::
    
    • -w warndays 提前多少天开始警告
    [root@hostnamectl ~]# passwd -w 970 guilai
    调整用户密码老化数据guilai。
    passwd: 操作成功
    [root@hostnamectl ~]# grep guilai /etc/shadow
    guilai:$6$tzRXztt8$V/dBaNOSefO.NwdL1.Rwqg2CnhSsrTlL.PlmJ2F/mY3CimCxzDeJ2m2qiWEfMbFyb4uPdSFr0aOZ3iJBV/h5H.:18158:10:1000:970:::
    
    • -i inactivedays 非活动期限,密码过期后到禁用前的这段时间(修改密码缓冲时间)
    [root@hostnamectl ~]# passwd -i 30 guilai
    调整用户密码老化数据guilai。
    passwd: 操作成功
    

    改变用户密码过期信息命令chage

    • chage [options] USERNAME
    • -l:列出用户以及密码的有效期
    [root@hostnamectl ~]# passwd -i 30 guilai
    调整用户密码老化数据guilai。
    passwd: 操作成功
    [root@hostnamectl ~]# chage -l guilai
    最近一次密码修改时间					:9月 19, 2019
    密码过期时间					:6月 15, 2022
    密码失效时间					:7月 15, 2022
    帐户过期时间						:从不
    两次改变密码之间相距的最小天数		:10
    两次改变密码之间相距的最大天数		:1000
    在密码过期之前警告的天数	:970
    
    • -d:指定密码最后修改日期 (chage -d 30 表示在改变用户密码30天后密码自动失效或 YYYY-MM-DD 后失效)
    [root@hostnamectl ~]# chage -d 2019-09-20 guilai
    [root@hostnamectl ~]# chage -l guilai
    最近一次密码修改时间					:9月 20, 2019 // 最近一次修改密码时间
    密码过期时间					:6月 16, 2022
    密码失效时间					:7月 16, 2022
    帐户过期时间						:从不
    两次改变密码之间相距的最小天数		:10
    两次改变密码之间相距的最大天数		:1000
    在密码过期之前警告的天数	:970
    

    用户第一次登陆就要改密码

    [root@hostnamectl ~]# chage -d 0 guilai
    [root@hostnamectl ~]# chage -l guilai
    最近一次密码修改时间					:密码必须更改   
    密码过期时间					:密码必须更改
    密码失效时间					:密码必须更改
    帐户过期时间						:从不
    两次改变密码之间相距的最小天数		:10
    两次改变密码之间相距的最大天数		:1000
    在密码过期之前警告的天数	:970
    
    • -E:过期时间
    [root@hostnamectl ~]# chage -E 2019-09-30 guilai
    [root@hostnamectl ~]# chage -l guilai
    最近一次密码修改时间					:9月 20, 2019
    密码过期时间					:6月 16, 2022
    密码失效时间					:7月 16, 2022
    帐户过期时间						:9月 30, 2019  //过期时间
    两次改变密码之间相距的最小天数		:10
    两次改变密码之间相距的最大天数		:1000
    在密码过期之前警告的天数	:970
    
    • -I:非活动时间
    [root@hostnamectl ~]# chage -l guilai
    最近一次密码修改时间					:9月 20, 2019
    密码过期时间					:6月 16, 2022
    密码失效时间					:7月 17, 2022      //密码失效时间
    帐户过期时间						:9月 30, 2019
    两次改变密码之间相距的最小天数		:10
    两次改变密码之间相距的最大天数		:1000
    在密码过期之前警告的天数	:970
    
    
    • -m:最短使用期限
    [root@hostnamectl ~]# chage -m 7 guilai
    [root@hostnamectl ~]# chage -l guilai
    最近一次密码修改时间					:9月 20, 2019
    密码过期时间					:6月 16, 2022
    密码失效时间					:7月 17, 2022
    帐户过期时间						:9月 30, 2019
    两次改变密码之间相距的最小天数		:7             //最短使用期限 
    两次改变密码之间相距的最大天数		:1000
    在密码过期之前警告的天数	:970
    
    • -M:最长使用期限
    [root@hostnamectl ~]# chage -M 100 guilai
    [root@hostnamectl ~]# chage -l guilai
    最近一次密码修改时间					:9月 20, 2019
    密码过期时间					:12月 29, 2019
    密码失效时间					:1月 29, 2020
    帐户过期时间						:9月 30, 2019
    两次改变密码之间相距的最小天数		:7
    两次改变密码之间相距的最大天数		:100
    在密码过期之前警告的天数	:970                   //最长使用期限
    
    • -W:警告时间
    [root@hostnamectl ~]# chage -W 60 guilai
    [root@hostnamectl ~]# chage -l guilai
    最近一次密码修改时间					:9月 20, 2019
    密码过期时间					:12月 29, 2019
    密码失效时间					:1月 29, 2020
    帐户过期时间						:9月 30, 2019
    两次改变密码之间相距的最小天数		:7
    两次改变密码之间相距的最大天数		:100
    在密码过期之前警告的天数	:60                    //警告时间
    

    密码生成工具openssl

    • openssl command [ command_opts ] [ command_args ]

    • dgst :提取特征码

    [root@hostnamectl ~]# openssl dgst -md5 /etc/fstab 
    MD5(/etc/fstab)= cfd02cb5d1c01774a7284abc7a887f24
    
    • passwd :生成密码,"asdfghjk"是添加的杂质
      • openssl passwd -1 -salt string
    [root@hostnamectl ~]# openssl passwd -1 -salt asdfghjk
    Password: 
    $1$asdfghjk$k5FsdUb517DwcRnATU3hK.
    
    • rand:生成伪随机数
      -openssl rand -base64 NUM    //NUM表示随机数的长度
    [root@hostnamectl ~]# openssl rand -base64 10
    g2nSOFq1x35ABA==
    

    给组设定密码命令gpasswd

    • gpasswd [option] GROUP
      • gpasswd
    doom:x:1021:
    [root@hostnamectl ~]# gpasswd doom
    正在修改 doom 组的密码
    新密码:
    请重新输入新密码:
    
    • -a, --add USER   将用户添加至组
    [root@hostnamectl ~]# gpasswd -a guilai doom
    正在将用户“guilai”加入到“doom”组中
    
    • -d, --delete USER      将用户从组中删除
    [root@hostnamectl ~]# gpasswd -d guilai doom
    正在将用户“guilai”从“doom”组中删除
    
    • -r, --delete-password    删除组密码
    [root@hostnamectl ~]# gpasswd -r doom
    

    切换组命令newgrp

    • newgrp [-] [group]
    [root@hostnamectl ~]# gpasswd doom
    正在修改 doom 组的密码
    新密码:
    请重新输入新密码:
    [guilai@hostnamectl ~]$ id
    uid=1020(guilai) gid=1007(tianxaidiyi) 组=1007(tianxaidiyi),1008(swordsman) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [root@hostnamectl ~]# su - guilai
    上一次登录:四 9月 19 19:36:49 CST 2019pts/0 上
    [guilai@hostnamectl ~]$ newgrp doom
    密码:
    uid=1020(guilai) gid=1021(doom) 组=1021(doom),1007(tianxaidiyi),1008(swordsman) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [guilai@hostnamectl ~]$ 
    
  • 相关阅读:
    conio
    create file in Linux
    单向链表
    面向对象(Object Oriented,OO)
    LLVM每日谈之五 LLVM文档介绍
    Team Geek 阅读笔记之 第三章 Every Boat Needs a Captain
    重温堆和拷贝构造函数
    LLVM每日谈之六 LLVM的源码结构
    LLVM每日谈之七 Clang
    LLVM每日谈之三 如何创建一个LLVM工程
  • 原文地址:https://www.cnblogs.com/guilai/p/11552115.html
Copyright © 2020-2023  润新知