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

linux系统用户管理(一)的更多相关文章

  1. 实验三:Linux系统用户管理及VIM配置

    项目 内容 这个作业属于哪个课程 班级课程的主页链接 这个作业的要求在哪里 作业要求链接地址 学号-姓名 17043133-木腾飞 学习目标 1.学习Linux系统用户管理2.学习vim使用及配置 实 ...

  2. 实验三 Linux系统用户管理及VIM配置

    项目 内容 这个作业属于哪个课程 班级课程的主页链接 这个作业的要求在哪里 作业要求链接接地址 学号-姓名 17041428-朱槐健 作业学习目标  1.学习Linux系统用户管理 2.学习vim使用 ...

  3. Linux系统用户管理

    一.Linux账户 广义上讲,Linux的账户包括用户账户和组账户两种. Linux系统下的用户账户有两种,普通用户和超级用户.普通用户在系统中的任务就是普通工作,管理员在系统上的任务就是对普通用户和 ...

  4. linux系统用户管理(二)

    5.组命令管理**组账户信息保存在/etc/group和/etc/gshadow两个文件中 /etc/group 组账户信息 [root@localhost ~]# head -2 /etc/grou ...

  5. linux 下用户管理

    linux 下用户管理 一.用户的分类 1.超级用户:root UID=0 2.系统用户:不需要登录系统,对应用程序服务,主要维护系统的正常运行:UID = 1 ~ 499(RHEL7 = 1 ~ 9 ...

  6. linux系统--用户和用户组

    一.用户和用户组的概念 用户:使用操作系统的人 用户组:具有相同系统权限的一组用户.在linux系统中可以存在多个用户组 1.1 /etc/group 这里存储当前系统中所有用户组的信息 每一行对应一 ...

  7. shell实现增加删除Linux系统用户脚本(密码为随机)

    README shell环境下运行脚本,根据需求选择相应的功能. List \t\t create the userlist 这一步是必须执行的,脚本会识别本地当前目录下的文件 Useradd \t\ ...

  8. centos linux系统日常管理复习 CPU物理数逻辑核数,iftop ,iotop ,sar ,ps,netstat ,一网卡多IP,mii-tool 连接,ethtool速率,一个网卡配置多个IP,mii-tool 连接,ethtool速率 ,crontab备份, 第十八节课

    centos linux系统日常管理复习 物理CPU和每颗CPU的逻辑核数,uptime ,w,vmstat,iftop ,iotop ,sar ,ps,netstat ,一个网卡配置多个IP,mii ...

  9. centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课

    centos linux 系统日常管理4  scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法  第十七节课 rsync可以增量同步,scp不行 ...

随机推荐

  1. C语言历史

    如有错误,欢迎指出. 互帮互助,共同进步. 更新时间:2020-01-09 节选自<C语言程序设计现代方法>第2版 1.起源 C语言是贝尔实验室的Ken Thompson.Dennis R ...

  2. centos7.4 测试CPU压力--命令搞定

    直接输入命令CPU消耗增加: cat /dev/urandom | gzip - > /dev/null 停止: 直接Ctrl+c结束

  3. ZooKeeper解决的问题

    1.解决分布式单点问题 https://www.jianshu.com/p/08b76bd7a634 2.实现分布式环境数据的一致性.访问ZooKeeper树结构时,不同节点返回的数据是一致,不会引起 ...

  4. faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读

    参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...

  5. Java数据的存储

    在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register).这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进 ...

  6. D10 基本数据类型(各种职业的技能分析) 主要为 int 和 str

    在python中具有魔法的  职业  类型 召唤每种职业  在pychar 中 打出该职业的名称 按住Ctrl 光标在该职业名称上 点击就能看该职业的技能 1   数字   int a = " ...

  7. Shell程序实例集锦一

    2007-12-13 07:51:40 标签:实例 程序 Shell 休闲 职场 Shell程序实例集锦一      前言:下面这些hell实例都是自己写的或者用过的一些Shell小程序.整理整理. ...

  8. Java 面向对象 异常处理:RunTimeexception,try-catch,异常声明throws,自定义异常,throw和throws的区别,多异常处理(9)

    Java 面向对象 异常处理:RunTimeexception,try-catch,异常声明throws,自定义异常,throw和throws的区别,多异常处理(9)

  9. EXCEL启动慢

    启动太慢,一般是加载项的问题. 1.点击文件-EXCEL选项 2. 找到加载项,一般是COM加载项 3.选择com加载项 4.然后我出现了无法更改的情况,于是,我做了以下调整,进入office安装目录 ...

  10. TF分布式问题

    碰到一个没解决的问题. 用tensorflow 分布式异步更新模式训练模型, 模型中带正则项, 每个batch的损失函数为 \[\lambda \|W\|_1 + \frac 1 {N_j} \sum ...