zoukankan      html  css  js  c++  java
  • linux系统用户管理(一)

    Linux系统用户管理
    1.用户管理*****
    2.Linux用户命令****
    3.用户创建的原理***
    4.密码管理***
    5.组命令管理**
    6.身份切换*****
    7.sudo提升权限*****

    我们现在所使用的操作系统都是多用户操作系统
    AAA 认证体系
    认证 授权 统计

    用户和组存在的意义

    1.系统上的每一个进程(运行的程序)都需要特定的用户运行
    2.每一个文件都有特定的用户拥有
    3.访问文件或目录受到用户的限制
    4.进程能够以何种方式访问某一个文件或目录,与进程所关联的用户有关

    查看当前登录的用户信息
    [root@localhost ~]# id
    uid=0(root) gid=0(root) groups=0(root)

    用户uidd的分类
    取值范围 0~65535
    0 超级管理员
    1-200 系统用户,由系统分配给系统进程使用
    201-999 系统用户,用来运行服务账户,不需要登录系统(动态分配)
    1000+ 常规用户

    注意:在Linux7之前的惯例是,UID1-499用于系统用户,而UID500+则用于普通用户

    组类别
    基本组 优先使用基本组,用户只能属于一个基本组,用户默认基本组
    附加组 基本组不能满足授权要求,创建附加组,用户可以属于多个附加组
    私有组 私有组,创建用户时如果没有指定基本组,系统会创建和用户同名的组

    1.用户管理

    账户信息存放在/etc/passwd,账户密码信息保存在/etc/shadow,这两个文件是linux系统中最重要的文件之一
    如果没有这两个文件或这两个文件出问题,会导致无法正常登陆

    /etc/passwd
    [root@localhost ~]# head -1 /etc/passwd
    root:x:0:0:root:/root:/bin/bash

    // /etc/passwd由":"分割成7个字符,每个字段的具体含义如下:
    字段名称 注释说明
    1.用户名称 //用户的账号名称
    2.密码占位符 //存放账户的口令,暂用x表示,密码保存在/etc/shadow
    3.用户的UID //用户标识号
    4.用户基本组GID //组标识号
    5.用户注释 //用户详细信息
    6.用户家目录 //用户家目录,root家目录是/root,普通用户家目录存在/home/username,可自定义
    7.用户登录Shell //用户登录linux使用的shell cat /etc/shells

    [root@localhost ~]# tail -1 /etc/shadow
    xiaoming:$6$jI/Vus00$xYy4ndP1w1i1iejisph8DDbTx0SfZu31MZq3MAXVJX9/gdFUT5cd4I45IWFeO5xVLg6KtlFqxcl6XCebVtuD80:18193:0:99999:7:::

    // /etc/shadow由":"分割成9个字符,每个字符的具体含义如下:
    字段名称 注释说明
    1.用户登录名 //用户的账号名称
    2.加密后的密码 //用户密码,这是加密过的口令(未设密码时为!!)
    3.最近一次密码更改时间 //从1970年到最近一次更改密码时间过了多少天
    4.密码最少使用几天 //密码最少使用几天才可以更改密码(0表示无限制)
    5.密码最长使用几天 //密码使用多少天需要修改密码(默认99999永不过期)
    6.密码到期前警告期限 //密码过期前多少天提醒用户更改密码(默认过期前7天警告)
    7.密码到期后保持活动的天数//在此期间,用户依然可以登录系统并更改密码,指定天数过后 ,账户被锁定
    8.账户到期时间 //从1970年起,账户在这个日期前可使用,到期后失效
    9.标志 //保留

    密码格式
    $a$b$c
    a 表示加密算法
    b salt随机值
    c 加密后的值

    使用chage更改用户密码密码使用情况
    -d 设置最近一次更改密码时间,0下次登录系统强制修改密码
    -m 设置用户两次改变密码之间使用“最小天数”
    -M 设置用户两次改变密码之间使用“最大天数”
    -W 设置密码更改警告时间,将过期警告天数设为“警告天数”
    -I 设置密码过期天数后,密码为失效状态
    -E 设置用户过期时间,账户失效后无法登陆
    -l 显示用户信息

    //修改时间为2014年08月31日,和图中时间匹配,方便后续验证
    [root@localhost ~]# date -s '20140831' #修改当前系统时间为2014年08月31日
    Sun Aug 31 00:00:00 CST 2014
    [root@localhost ~]# date #查看当前系统时间
    Sun Aug 31 00:00:08 CST 2014
    [root@localhost ~]# useradd oldboy1 #创建用户
    [root@localhost ~]# echo "123"|passwd --stdin oldboy1 #给oldboy1用户创建密码123
    Changing password for user oldboy1.
    passwd: all authentication tokens updated successfully.
    [root@localhost ~]# tail -1 /etc/shadow #查看创建用户的密码信息
    oldboy1:$6$nMLlslZx$.olzO0byVVK7PANHO1R4w.ZPGIz4ZZC6NB5eQ7FcJhNwXLgj4pVru4tbFAdiDMrCtZsBpfWdunDo6q0ioCgbL0:16312:0:99999:7:::

    //设置最近一次修改密码时间
    [root@localhost ~]# chage -d '2019-09-01' oldboy1
    [root@localhost ~]# chage -l oldboy1
    Last password change : Sep 01, 2019
    Password expires : never
    Password inactive : never
    Account expires : never
    Minimum number of days between password change : 0
    Maximum number of days between password change : 99999
    Number of days of warning before password expires : 7

    //设置密码最短使用时间
    [root@localhost ~]# chage -m 2 oldboy1
    [root@localhost ~]# chage -l oldboy1
    Last password change : Sep 01, 2019
    Password expires : never
    Password inactive : never
    Account expires : never
    Minimum number of days between password change : 2
    Maximum number of days between password change : 99999
    Number of days of warning before password expires : 7

    //设置密码最长使用时间
    [root@localhost ~]# chage -M '15' oldboy1
    [root@localhost ~]# chage -l oldboy1
    Last password change : Sep 01, 2019
    Password expires : Sep 16, 2019
    Password inactive : never
    Account expires : never
    Minimum number of days between password change : 2
    Maximum number of days between password change : 15
    Number of days of warning before password expires : 7

    //设置密码警告时间
    [root@localhost ~]# chage -W '6' oldboy1
    [root@localhost ~]# tail -1 /etc/shadow
    oldboy1:$6$nMLlslZx$.olzO0byVVK7PANHO1R4w.ZPGIz4ZZC6NB5eQ7FcJhNwXLgj4pVru4tbFAdiDMrCtZsBpfWdunDo6q0ioCgbL0:18140:2:15:6:::

    //设置密码过期时间
    [root@localhost ~]# chage -I '5' oldboy1
    [root@localhost ~]# chage -l oldboy1
    Last password change : Sep 01, 2019
    Password expires : Sep 16, 2019
    Password inactive : Sep 21, 2019
    Account expires : never
    Minimum number of days between password change : 2
    Maximum number of days between password change : 15
    Number of days of warning before password expires : 6

    //设置账号过期时间
    [root@localhost ~]# chage -E '2020-01-01' oldboy1
    [root@localhost ~]# chage -l oldboy1
    Last password change : Sep 01, 2019
    Password expires : Sep 16, 2019
    Password inactive : Sep 21, 2019
    Account expires : Jan 01, 2020
    Minimum number of days between password change : 2
    Maximum number of days between password change : 15
    Number of days of warning before password expires : 6

    //如何验证,只调整时间为如下进行验证:
    1.验证普通用户是否能修改密码,不需要调整时间
    2.普通用户登录系统后,会提示警告密码还剩多少天过期
    [root@localhost ~]# date -s '2019-09-14 '

    3.普通用户登录系统后,强制要求修改密码
    [root@localhost ~]# date -s '2019-09-18 '

    4.普通用户登录系统后,提示账户已过期

    2.LInu用户命令
    添加用户前需要确定
    确定用户的默认组是否有特殊要求
    确定用户是否允许登录
    确定用户的密码策略
    确定用户的有效期
    确定用户的UID是否有特殊要求1.使用useradd命令新增账户,注意:adduser命令软链接到useradd

    '-u' 指定用户的UID,不能和现有ID冲突
    '-g' 指定用户用户默认基本组
    '-G' 指定用户附加组,用逗号隔开添加多个附加组
    '-d' 指定用户家目录
    '-c' 指定用户注释信息
    '-M' 不建立家目录
    '-s' 指定用户默认shell
    '-r' 创建系统账户,没有家目录

    //创建oldboy用户,指定UID5001,基本组,students附加组sa、dba,注释信息"2018 new student",shell:bash
    [root@localhost ~]# useradd -u 5001 -g students -G sa,dba -c '2018 new student' -d /home/oldboy -s /bin/bash oldboy
    [root@localhost ~]# tail -1 /etc/passwd
    oldboy:x:5001:1005:2018 new student:/home/oldboy:/bin/bash

    //创建系统用户,-M不建立用户家目录 -s指定nologin使其不登录
    [root@localhost ~]# useradd -M -s /sbin/nologin mysql
    [root@localhost ~]# useradd -r -g dba -s /sbin/nologin dba
    [root@localhost ~]# tail -2 /etc/passwd
    mysql:x:5002:5002::/home/mysql:/sbin/nologin
    dba:x:998:1004::/home/dba:/sbin/nologin

    使用usermod命令修改用户组
    '-u' 修改用户的UID
    '-g' 修改用户所属的基本组GID
    '-G' 修改用户附加组
    '-a' 追加更多的附加组,使用逗号隔开多个附加组,覆盖原有的附加组
    '-md' 家目录迁移,必须的-d一起使用,移动用户的家目录到新的位置
    '-d' 指定用户家目录的新位置
    '-c' 修改用户的注释信息
    '-s' 更改用户使用的shell
    '-l' 更改用户登录名
    '-L' 锁定用户
    '-U' 解锁用户

    //修改用户mysql的UID为250
    [root@localhost ~]# usermod -u 250 mysql
    [root@localhost ~]# tail -2 /etc/passwd
    mysql:x:250:5002::/home/mysql:/sbin/nologin

    //修改用户oldboy的基本组为root
    [root@localhost ~]# usermod -g root oldboy
    [root@localhost ~]# id oldboy
    uid=5001(oldboy) gid=0(root) groups=0(root),1003(sa),1004(dba)

    //修改用户oldboy的附加组,添加students组
    [root@localhost ~]# usermod -G students,sa,dba,mysql oldboy
    [root@localhost ~]# id oldboy
    uid=5001(oldboy) gid=0(root) groups=0(root),1003(sa),1004(dba),1005(students)

    //追加用户oldboy的附加组sa、dba
    [root@localhost ~]# usermod -G students oldboy
    [root@localhost ~]# usermod -aG sa,dba oldboy
    [root@localhost ~]# id oldboy
    uid=5001(oldboy) gid=0(root) groups=0(root),1003(sa),1004(dba),1005(students)

    //将用户oldboy从/home目录迁移到/目录下
    [root@localhost ~]# usermod -md /oldboy oldboy
    [root@localhost ~]# ls /
    bin dev home lib64 mnt opt root sbin sys usr
    boot etc lib media oldboy proc run srv tmp var

    //修改用户oldboy的shell,使其无法登录
    [root@localhost ~]# usermod -s /sbin/nologin oldboy
    [root@localhost ~]# grep oldboy /etc/passwd
    oldboy1:x:1001:1001::/home/oldboy1:/bin/bash
    oldboy:x:5001:0:2018 new student:/oldboy:/sbin/nologin

    //更改用户oldboy登录名为oldgirl
    [root@localhost ~]# usermod -l oldgirl oldboy
    [root@localhost ~]# grep oldboy /etc/passwd
    oldboy1:x:1001:1001::/home/oldboy1:/bin/bash
    oldgirl:x:5001:0:2018 new student:/oldboy:/sbin/nologin

    //修改用户oldgirl的注释信息
    [root@localhost ~]# usermod -L oldgirl
    [root@localhost ~]# grep oldgirl /etc/passwd
    oldgirl:x:5001:0:2019 new stu:/oldboy:/bin/bash

    //锁定oldboy用户
    usermod -L oldgirl

    使用finger命名查询用户信息以及登录信息
    yum install -y finger #安装finger命令
    [root@localhost ~]# finger oldgirl #查看oldgirl用户及登录信息
    Login: oldgirl Name: 2019 new stu
    Directory: /oldboy Shell: /bin/bash
    Last login Mon Oct 28 14:45 (CST) on pts/1 from 10.0.1.26
    No mail.
    No Plan.

    使用chfn修改用户信息
    [root@localhost ~]# chfn oldgirl
    Changing finger information for oldgirl.
    Name [2019 new stu]: 2019 new teacher
    Office []: oldboy 2009
    Office Phone []: 1234567
    Home Phone []: 132131231

    Finger information changed.

    使用finger再次检查
    [root@localhost ~]# finger oldgirl
    Login: oldgirl Name: 2019 new teacher
    Directory: /oldboy Shell: /bin/bash
    Office: oldboy 2009, 123-4567 Home Phone: 132131231
    Last login Mon Oct 28 14:45 (CST) on pts/1 from 10.0.1.26
    No mail.
    No Plan.

    使用chsh命令更改用户登录shell
    [root@localhost ~]# chsh oldgirl
    Changing shell for oldgirl.
    New shell [/bin/bash]: /sbin/nologin
    chsh: Warning: "/sbin/nologin" is not listed in /etc/shells.
    Shell changed.
    [root@localhost ~]# grep oldgirl /etc/passwd
    oldgirl:x:5001:0:2019 new teacher,oldboy 2009,1234567,132131231:/oldboy:/sbin/nologin

    检查用户的登录情况
    [root@localhost ~]# who
    root pts/0 2019-10-28 15:05 (10.0.1.26)
    root pts/1 2019-10-28 15:30 (10.0.1.26)

    [root@localhost ~]# w
    15:51:16 up 47 min, 2 users, load average: 0.00, 0.01, 0.05
    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
    root pts/0 10.0.1.26 15:05 22:12 0.25s 0.02s -bash
    root pts/1 10.0.1.26 15:30 4.00s 0.24s 0.00s w

    使用userdel删除账户
    语法:userdel [-r] username//-r 同时删除家目录
    [root@localhost ~]# userdel ts
    [root@localhost ~]# ls -lhd /home/ts/
    drwx------ 2 5003 5004 62 Oct 28 15:56 /home/ts/

    //连同家目录一起删除
    [root@localhost ~]# userdel -r ts

    3.用户创建的原理
    Linux创建用户默认会读取/etc/default/useradd的配置文件,如果当我指定参数时,使用指定参数,如果不指定参数,默认使用/etc/
    default/useradd中的配置。当我们使用useradd命令创建用户时,用户家目录下会产生相应的.bash_*文件。这些文件默认是从/etc/
    skel目录中复制。如需变更环境拷贝目录站点可修改:/etc/default/useradd的配置文件。
    注意:如果执行useradd命令新建用户时,指定了参数,就会覆盖/etc/default/useradd中默认的配置

    [root@localhost ~]#
    [root@localhost ~]# egrep -v "^#|^$" /etc/login.defs
    MAIL_DIR /var/spool/mail
    PASS_MAX_DAYS 99999
    PASS_MIN_DAYS 0
    PASS_MIN_LEN 5
    PASS_WARN_AGE 7
    UID_MIN 1000
    UID_MAX 60000
    SYS_UID_MIN 201
    SYS_UID_MAX 999
    GID_MIN 1000
    GID_MAX 60000
    SYS_GID_MIN 201
    SYS_GID_MAX 999
    CREATE_HOME yes
    UMASK 077
    USERGROUPS_ENAB yes
    ENCRYPT_METHOD SHA512

    [root@localhost ~]# cat /etc/default/useradd
    # useradd defaults file
    GROUP=100
    HOME=/home //把用户的家目录建在/home中
    INACTIVE=-1 //是否启用账号过期停权,-1表示不启用
    EXPIRE= //账号终止日期,不设置表示不启用
    SHELL=/bin/bash //新用户默认所有的shell类型
    SKEL=/etc/skel //配置新用户家目录的默认文件存放路径
    CREATE_MAIL_SPOOL=yes //创建mail文件

    //用户登录linux操作系统,环境变量误删,出现-bash-4.2$,如今解决
    -bash-4.2$ cp -a /etc/skel/.bash* ./
    -bash-4.2$ exit

    4.密码管理
    创建完账户后,默认是没有密码的,所以该账户是没有办法登录操作系统。只有使用passwd设置好密码后方可登录系统。
    使用passwd为用户创建密码时,为了安全起见,请尽量设置复杂一些,可以按照如下规则设置密码:

    1.长度大于10位字符
    2.密码中包含大小写字母数字以及特殊字符“!”,"@","$"等;
    3.不规则性(不要出现自己名字、公司名字、自己电话、等等简单的密码)

    需要注意
    1.普通用户只能更改自己的密码
    2.管理员root能更改任何人的密码
    使用passwd命令能修改用户密码
    语法:passwd[username]

    //'passwd'后面不加username则是修改当前账户的密码。
    //如果你登录的是root账户,后面可以指定需要修改密码的账户
    //只有root才可以修改其他账户的密码,普通账户只能修改自己的密码,普通用户没有修改其他用户的权限

    随机密码生成工具几种方式
    //1.系统内置变量生成随机密码
    [root@localhost ~]# echo $RANDOM|md5sum |cut -c 1-10
    ae02560755

    //2.mkpasswd密码生成工具
    //-l密码长度默认7位,-d数字,-c小字母,-C大字母
    [root@localhost ~]# yum install -y expect
    [root@localhost ~]# mkpasswd -l 15 -c 3 -d 5
    448crm3Zteq2Fs

    推荐密码保存工具客户端,支持windows,MacOS、手机以及浏览器插件Lastpass官方网站
    https://www.lastpass.com/zh

  • 相关阅读:
    [BZOJ 4318] OSU!
    [BZOJ 4720][NOIP 2016] 换教室
    [Tyvj 1729] 文艺平衡树
    [BZOJ 1500]维修数列 [Splay Tree从进阶到住院]
    [学习笔记] CDQ分治 从感性理解到彻底晕菜
    [COGS 1752] 摩基亚Mokia
    [Tyvj 1730] 二逼平衡树
    [学习笔记] Splay Tree 从入门到放弃
    [Tyvj 1728] 普通平衡树
    [BZOJ 3594] 方伯伯的玉米田
  • 原文地址:https://www.cnblogs.com/xmtxh/p/11755170.html
Copyright © 2011-2022 走看看