Linux之用户管理
1,Linux用户是什么?
能正常登录
Linux或Windows系统的都称之为用户。
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
- 附加组可以借助基本组的权限去对文件进行操作。
 


                
            
        
浙公网安备 33010602011771号