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
- 附加组可以借助基本组的权限去对文件进行操作。