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
  • 附加组可以借助基本组的权限去对文件进行操作。
posted @ 2021-07-18 10:25  Carol-z  阅读(181)  评论(0编辑  收藏  举报