zoukankan      html  css  js  c++  java
  • Linux之用户管理

    1,Linux用户是什么?

    能正常登录LinuxWindows系统的都称之为用户。

    1.1,用户的作用究竟是什么呢?

    • 1,系统上的每一个进程(运行的程序),都需要一个特定的用户运行。
    • 2,因为root权限太大,容易造成故障,所以通常在公司是使用普通用户管理服务器。

    1.2,用户有哪些分类

    用户UID(User ID) 系统中约定的含义
    0 超级管理员,拥有最高权限,有着极强的破坏能力rm -rf /*
    1~200 系统用户,用来运行系统自带的进程,默认已创建
    201~999 系统用户,用来运行用户安装的程序,所以此类用户无需登录系统
    1000+ 普通用户,正常可以登录系统的用户,权限比较小,能执行的任务有限

    1.3 查询用户ID信息

    • 使用id命令查询当前登录用户的信息
    [root@Linux.net: ~]#id #当前用户
    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    
    [root@Linux.net: ~]#id carol #i查看其它用户信息
    uid=1000(carol) gid=1000(carol) groups=1000(carol)
    
    

    1.4 用户相关配置文件

    • 当我们创建一个新的用户,系统会将用户的信息存放在/etc/passwd中,而密码信息则单独存储在/etc/shadow中,也就是说这两个文件非常的重要,不要轻易的删除和修改。
      1.4.1 passwd文件
    • /etc/passwd 配置文件解释如下图,或者也可以使用命令man 5 passwd获取帮助

    1.4.2 shadow文件

    • /etc/shadow配置文件解释如下图,或者使用命令 man 5 shadow获取帮助

    • 如何使用change命令改变密码的属性

    
    -d //设置最近一次更改密码时间, 0下次登陆系统强制修改密码
    -m //设置用户两次改变密码之间使用"最小天数"
    -M //设置用户两次改变密码之间使用"最大天数" 
    -W //设置密码更改警告时间 将过期警告天数设为“警告天数” 
    -I //设置密码过期天数后, 密码为失效状态 
    -E //设置用户过期时间, 账户失效后无法登陆 
    -l //显示用户信息 
    
    
    #修改时间为2014年08月31日,和图中时间匹配,方便后续验证 
    [root@carol ~]# date -s '20140831' 
    Sun Aug 31 00:00:00 CST 2014 
    [root@carol ~]# date 
    Sun Aug 31 00:00:01 CST 2014 
    [root@carol ~]# usereadd bgx1 
    [root@carol ~]# echo "123" |passwd --stdin bgx1 
    [root@carol ~]# tail -1 /etc/shadow 
    bgx1:!!:16312:0:99999:7::: 
    
    
    #设置最近一次修改密码时间 
    [root@carol ~]# chage -d "2014-09-01" bgx1 
    [root@carol ~]# tail -n1 /etc/shadow 
    bgx1:!!:16314:0:99999:7::: 
    
    
    #设置最短使用密码时间 
    [root@carol ~]# chage -m 2 bgx1 
    [root@carol ~]# tail -n1 /etc/shadow 
    bgx1:!!:16314:2:99999:7::: 
    
    #设置密码最长使用时间 
    [root@carol ~]# chage -M 15 bgx1 
    [root@carol ~]# tail -n1 /etc/shadow 
    bgx1:!!:16314:2:15:7::: 
    
    #设置密码警告时间 
    [root@carol ~]# chage -W 6 bgx1 
    [root@carol ~]# tail -n1 /etc/shadow 
    bgx1:!!:16314:2:15:6::: 
    [root@carol ~]# chage -W 7 bgx1 
    [root@carol ~]# tail -n1 /etc/shadow 
    bgx1:!!:16314:2:15:7:::
    
    
    #设置密码过期时间 
    [root@carol ~]# chage -I 5 bgx1 
    [root@carol ~]# tail -n1 /etc/shadow 
    bgx1:!!:16314:2:15:6:5:: 
    
    #设置用户过期时间 
    [root@carol ~]# chage -E "20115-08-31" bgx1 
    [root@carol ~]# tail -n1 /etc/shadow bgx1:!!:16314:2:15:6:5:6627567: 
    [root@carol ~]# chage -l bgx1 
    Last password change : Sep 01, 2014 #最近一次更改密码时间 
    Password expires : Sep 16, 2014 #密码过期时间 
    Password inactive : Sep 21, 2014 #密码失效时间 
    Account expires : Aug 31, 2015 #用户失效时间 
    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 #密码过期前警告天数 
    
    
    #如何验证,只调整时间为如下进行验证: 
    1.验证普通用户是否能修改密码, 不需要调整时间。
    2.普通用户登陆系统后, 会提示警告密码还剩多少天过期 
    [root@carol ~]# date -s "2014-09-12" 
    
    3.普通用户登陆系统后, 强制要求修改密码 
    [root@carol ~]# date -s "2014-09-18" 
    
    4.普通用户登陆系统后, 提示账户已过期 
    [root@carol ~]# date -s "2014-09-23"
    
    

    2.用户管理相关命令

    • 2.1添加用户useradd

    在Linux系统中,用root身份可以去useradd普通用户。

    选项 功能描述
    -u 指定要创建用户的UID,不允许冲突
    -g 指定要创建用户基本组
    -G 指定要创建用户的附加组,逗号隔开可以添加多个附加组
    -d 指定要创建用户家目录
    -s 指定要创建用户注释信息
    -M 给创建的用户不创建家目录
    -r 创建系统账户,默认无家目录

    2.1.1 添加用户示例

    • 创建carol用户
    • 用户ID为6789
    • 基本组为 ops,附加组为dev
    • 注释信息hello linux
    • 登录bash类型:shell:/bin/bash
    [root@Linux.net: ~]#groupadd ops
    [root@Linux.net: ~]#groupadd dev
    [root@Linux.net: ~]#useradd -u 6789 -g ops -G dev -c "hello linux" -s /bin/bash carol
    
    
    • 创建一个mysql系统用户[201~999]
    • 该用户不需要家目录
    • 该用户不需要登录系统
    [root@Linux.net: ~]#useradd -r mysql -M -s /sbin/nologin 
    
    

    2.2 修改用户usermod

    修改Linux中的普通用户,在root账号使用usermod即可。

    选项 功能描述
    -u 指定要修改用户的UID
    -g 指定要修改用户的基本组
    -G 指定要修改用户附加组,使用逗号隔开多个附加组,覆盖原有的附加组
    -d 指定要修改的用家目录
    -s 指定要修改用户的base shell
    -c 指定要修改用户的注释信息
    -l 指定要修改用户的登录名
    -L 指定要锁定的用户(x)
    -U 指定要解锁的用户(x)

    2.3删除用户userdel

    删除Linux中的普通用户,在root账号使用userdel即可

    [root@Linux.net: ~]#userdel -r carol  #将carol连同其家目录一起删除
    
    

    2.4,设定密码passwd

    • 1,普通用户只允许变更自己的密码,无法修改其他人密码,密码长度必须8位字符
    • 2,管理员用户可以修改任何普通用户的密码,无论密码长度多长或多短
    • 密码保存套件工具:Lastpass官网

    2.4.1,交互设定密码

    *通过交互式为用户设定密码

    [root@Linux.net: ~]#paswd   #修改当前用户的密码
    [root@Linux.net: ~]#paswd root #给root用户修改密码
    [root@Linux.net: ~]#paswd carol  #给caro用户修改密码,普通用户只能自己改自己。
    
    

    2.4.2 非交互式设定密码

    • 非交互式设定简单密码
    [root@Linux.net: ~]#echo "123" | passwd --stdin carol
    
    
    • 非交互式设定随机密码
    [root@Linux.net: ~]#yum install -y expect
    
    [root@Linux.net: ~]echo $(mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4) |tee pass.txt
    
    [root@Linux.net: ~]echo $(mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4) |tee pass.txt | passwd --stdin  carol
    
    

    2.5,系统创建用户的流程

    • 系统在创建用户时,会参考两个配置文件:/etc/login.defs,/etc/default/useradd.

    • 如果在创建用户时指定了参数则会覆盖系统默认的配置,如果没有指定参数则遵循默认配置建立用户;

    • /etc/login.defs配置文件

    /etc/login.defs主要定义了创建用户时UID划分规则,密码加密类型,是否创建家目录等。

    [root@Linux.net: ~]#grep -Ev "^#|^&" /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 
    
    
    • /etc/default/useradd 主要定义
    • 创建家目录位置
    • 默认用户的Shell类型
    • 默认从哪个位置拷贝环境变量
    • 是否创建用户同名邮箱等
    [root@Linux.net: ~]#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文件
    

    2.5.1,用户环境变量丢失案例
    当我们不小心在家目录下执行rm -rf .*后,再次登录系统会发现提示符变成-bash-4.1$,这是因为删除了当前用户的环境变量造成的,通过如下方式恢复即可:

    -bash-4.1$ cp -a /etc/skel/.bash* ./
    -bash-4.1$ exit
    [root@Linux.net: ~]#
    
    

    默认linux创建用户,会从/etc/skel目录中拷贝对应的环境变量。由/etc/defaults/useradd配置文件定义,所以只需要从该目录中拷贝对应的环境变量文件即可恢复故障。

    3,用户组基本概述

    • 组是一种逻辑层面上的定义,逻辑上将多个用户归纳至一个组,当我们对组操作,其实就相当于对组中的所有用户进行操作。

    3.1组的分类

    组的分类 组解释
    默认组 创建用户时不指定组,则默认创建与用户同名的组
    基本组:用户有且只能有一个基本组,创建时可通过-g指定
    附加组 用户就可以有多个附加组,创建时通过-G指定

    3.1,组相关配置文件

    • 组账户信息保存在/etc/group/etc/gshawod两个文件中

    3.1.1,/etc/group配置文件

    • /etc/group配置文件解释图

    3.1.2 /etc/gshawod配置文件

    • /etc/gshawod配置文件解释图:

    4.用户组相关命令
    4.1 添加组groupadd

    使用root账户可以添加用户组
    | 选项 | 功能描述 |
    | ---- | ---- |
    | -f |如果组已经存在,会提示成功创建的状态 |
    |-g|为新组设置GID,若GID已经存在会提示GID已经存在|
    |-r|创建一个系统组|

    #1,添加一个GID为10000的test-group 组。
    [root@Linux.net: ~]#groupadd test-group -g 10000
    [root@Linux.net: ~]#tail -1 /etc/group
    test-group:x:10000:
    
    #2,添加一个test-group1组,并将其设为系统组
    [root@Linux.net: ~]#groupadd -r test-group1
    [root@Linux.net: ~]#tail -1 /etc/group
    test-group1:x:995:
    

    4.2,修改组groupmod

    使用root账户可以修改用户组

    选项 功能描述
    -f 如果组已经存在,会提示成功创建的状态
    -g 为新组设置GID,若GID已经存在会提示GID已经存在
    -r 创建一个系统组
    -n 改名为新的组
    #把test-group1组修改为system
    [root@Linux.net: ~]#groupmod -n system test-group1
    [root@Linux.net: ~]#tail -1 /etc/group
    system:x:995:
    
    #修改systm用户组的GID为5000
    [root@Linux.net: ~]#groupmod system -g 5000
    [root@Linux.net: ~]#tail -1 /etc/group
    system:x:5000:
    
    
    

    4.3,删除组groupdel

    使用root账户可以删除用户组

    #删除 test-group组
    [root@Linux.net: ~]#groupdel test-group
    
    #创建carol用户,设置主组为system,然后删除system组
    [root@Linux.net: ~]#useradd carol -g system
    [root@Linux.net: ~]#groupdel system
    groupdel: cannot remove the primary group of user 'carol'
    
    #如果组中存在用户是无法删除该组的,必须先删除组内用户再去删除组
    [root@Linux.net: ~]#userdel -r carol
    [root@Linux.net: ~]#groupdel system
    
    • 附加组可以借助基本组的权限去对文件进行操作。
  • 相关阅读:
    Kotlin 学习笔记(一)
    Android 中调用本地命令
    Android 6.0 中的 Wifi 连接
    Android 中的广播机制
    面向对象之继承和多态
    2016 年秋季助教总结
    2016 年年志
    C 语言学习 第12次作业总结
    程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
    程序员编程艺术第三十四~三十五章:格子取数问题,完美洗牌算法
  • 原文地址:https://www.cnblogs.com/qinghuani/p/15025976.html
Copyright © 2011-2022 走看看