Linux 用户和组的管理
Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须通过用户的账号和密码进入系统。用户的账号可以帮助系统管理员对使用系统的用户进行追踪,并控制用户对系统资源的访问。
一、用户管理
1.用户分类
1.1 超级用户
超级用户,也叫管理员,root
。该用户具有所有权限,UID=0 并且只能是0
1.2 系统用户
系统用户,也叫程序用户。一般有程序创建,用户程序或者服务运行时候的身份。默认不允许登录系统
- Centos6:
1<=UID<=499
Centos7:1<=UID<=999
1.3 普通用户
普通用户,一般由管理员创建,用于对系统进行有限的管理维护操作。默认可以登录系统
- Centos6:
500<=UID<=60000
Centos7:1000<=UID<=60000
2.用户的基本管理
2.1 创建新的用户:useradd
- 语法:
# useradd 选项 选项对应参数值 用户名
选项 | 全称 | 作用 |
---|---|---|
-u | uid | 指定用户uid |
-g | gid | 指定用户默认组(主组) |
-G | groups | 指定用户附加组,可多个 |
-d | home | 指定用户家目录,家目录的上级目录必须存在 eg: # useradd -d /home1/user01 user01 /home1/ 必须存在 |
-s | shell | 指定用户默认 shell 常用: /bin/bash 、/sbin/nologin eg: # useradd -s /sbin/nologin/ user01 |
创建一个用户后,系统会给该用户以下东西:
- UID(唯一标识)
- GID(用户默认组),若未指定默认组,则会创建一个跟用户名一样名称的组
- 用户的家目录,默认创将在
/home/用户名
- 拷贝相关文件到用户家目录
/etc/skel/*
用户信息保存在文件
/etc/passwd
中,并以:
分隔为7
列,内容是:- account :用户名称
- password:秘密,显示
X
,并非真正的密码,真实密码存放在/etc/shadow
中 - UID:用户编号
- GID:组编号
- GECOS:描述信息
- directory:用户家目录
- shell:用户的默认shell
用户的密码信息存储在
/etc/shadow
中,并以:
分隔为9列,内容是:- login name:登录的用户名
- encrypted password:加密后的密码(SHA512 散列加密算法),
!!
表示没有设置密码 - date of last password change:最后一次修改密码的时间(天数)
- minimum password age:密码最小修改时间间隔,
0
表示可以随时修改,3
表示密码修改后3
之内不允许再次修改 - maximum password age:密码有效期,默认
99999
可认为是永久有效,10
表示修改密码10
后必须再次修改密码,通过这个字段可以强制用户定期修改密码 - password warning period:密码过期前几天发出警告
- password inactivity period:密码宽限期,比如说,该字段规定的宽限天数是 10,则表示密码过期 10 天后失效;如果是 0,则表示密码过期后立即失效;如果是 -1,则表示密码永远不会失效
- account expiration date:账户失效时间,该字段表示,账号在此字段规定的时间之外,不论密码是否过期,都将无法使用!
- reserved field:保留
用户家目录文件说明:
局部配置文件(针对某个特定用户以及用户的所有进程)
~/.bashrc
当前用户的bash信息,当用户登录和每次打开新的shell时该文件被读取
~/.bash_profile
当前用户的环境变量,当用户登录时,该文件被读取
~/.bash_history
保存当前用户历史命令的文件
~/.bash_logout
当用户退出bash或者终端时,会首先执行该文件里的代码,然后再退出
补充:
全局配置文件(针对所有用户所有进程)
/etc/profile
系统和用户的环境变量信息,当用户第一次登录时,该文件被读取
/etc/bashrc
每个运行的bash信息(系统别名、函数及默认权限的定义),当bash被打开时,该文件被读取
2.2 更改账号信息: chage
选项 | 全称 | 作用 |
---|---|---|
-l | list | 列出账户信息 |
-d | lastday | 修改用户最后一次更改密码的时间,0表示下次登录修改密码 eg: # chage -d0 user01 |
-m | mindays | 密码最小修改时间间隔 |
-M | maxdays | 密码的有效期天数 |
-W | warndays | 密码过期几天前发出警告 |
-I | inactive | 允许密码过期几天 |
-E | expiredate | 修改账户过期时间 eg: # chage -E $(date -d '+20days' +%F) user03 eg: # chage -E '2020-01-01' user03 |
2.3用户密码设置:passwd
- 语法:
passwd 用户名
- 非交互添加密码 :
echo 123| passwd --stdin user01
2.4 修改用户信息: usermod
选项 | 全称 | 作用 |
---|---|---|
-u | uid | 指定用户uid |
-g | gid | 指定用户默认组 |
-G | groups | 指定用户附加组 |
-d | home | 指定用户家目录,新的家目录必须全部存在 eg: # usermod -d /home2/user02 user02 /home2/user02/必须存在 需要手动拷贝相关配置文件: # cp -a /etc/skel/. /home2/user02 |
-md | 不需要手动拷贝相关配置文件,但是上级目录必须存在 | |
-s | shell | 指定用户默认shell eg: # usermod -s /bin/bash/ user01 |
2.5 删除用户信息:userdel
- 语法:
userdel 选项 用户名
选项 | 全称 | 作用 |
---|---|---|
-r | remove | 删除用户并且移除家目录和邮箱 |
-f | force | 强制删除用户,即使该用户正在登陆 |
二、组管理
组的目的是为了方便管理用户,一个用户可以有多个附加组,但是只能有一个主组
- 文件创建成功后,该文件的属组就是创建者的主组
1.创建组:groupadd
语法: # groupad 选项 组名
选项 | 全称 | 作用 |
---|---|---|
-g | gid | 指定组的GID |
组信息保存在文件 /etc/group
中,以 :
分隔位4
列,内容是:
- group_name:组名
- password:组密码,真实密码保存在
/etc/gshadow
中 - GID:组编号
- user_list:组中的用户(附加组成员)
2.修改组信息:groupmod
选项 | 全称 | 作用 |
---|---|---|
-g | gid | 指定组的GID |
-n | new name | 修改组名 |
3.删除组:groupdel
语法:# groupdel 组名
只能删除不是任何用户主组的群组
4.组成员管理:gpasswd
语法: # gpasswd 组名 要设置的密码
选项 | 全称 | 作用 |
---|---|---|
-a | add | 添加单个用户 |
-M | members | 批量添加用户 eg: gpasswd -M user01,user02 sysadmin 注意:该命令会将之前该组中附加组成员删除 |
-d | delete | 移除用户 |
-A | administrators | 指定管理员 |
-r | remove | 删除组密码 |
三、其他
id
查看用户的UID、GID、附加组信息
su
切换用户
su 用户名
和 su - 用户名
区别:
su 用户名
只会切换身份, su -用户名
会将工作环境也切换为此用户的环境