目录
一、管理用户账号和组账号
1.用户账号类型
2.UID号的范围
2.1 Centos7
2.2 Centos6
3.组账号
4.用户账号文件
4.1passwd
4.2shadow
5.添加用户账号——useradd
5.1通式
5.2原理
5.3选项
6.密码管理——passwd
6.1作用
6.2通式
6.3选项
7.修改用户账号的属性——usermod
7.1作用
7.2通式
7.3选项
7.4延伸——删除用户(userdel)
8.组管理
8.1添加组
8.2添加删除组成员——gpasswd
8.2.1定义
8.2.2通式
8.2.3选项
8.3查询账号信息
8.3.1groups
8.3.2id
8.3.3w
8.3.4who
8.3.5finger
8.3.6users
8.3.7演示
9. 用户账号的初始配置文件
9.1文件来源
9.2主要的用户初始配置文件
二、管理目录和文件的属性
1.访问人群分三类
2.权限分三种
2.1延伸
2.1.1一个文件可以被删除,和本身权限有关吗
2.1.2复制一个文件 当前用户一定要有读 r 的权限
2.1.3能不能操作 文件 文件夹 ,和你当前登录用户权限是有关系的
3.查看文件/目录的权限和归属
3.1修改权限——chmod
3.2修改所属主所属组
3.2.1通式
3.2.2举例
3.3延伸
3.4控制默认权限——umask
3.4.1延伸
3.4.2特殊权限
4.访问控制列表——ACL
知识点引入
Linux安全模型
Authentication:认证,验证用户身份 ——用户名和密码 登录身份
Authorization:授权,不同的用户设置不同权限
Accouting|Audition:审计 ——用户做了什么操作记录在日志中
运行程序不能使用超级管理员;程序用户存在的必要性 为了安全
系统如何区别三类用户
Linux系统是通过user id(UID)号对用户进行区分的;超级管理员的UID号默认是0
普通用户 [1000 - 60000]
超级管理员 0
程序用户 [1 - 999]
普通用户 [500 - 60000]
超级管理员 0
程序用户 [1 - 499]
GID(Group IDentify,组标识号)root 组账号的 GID 号为固定值 0,而程序组账号的 GID 号默认为 1~499,500~60000 的 GID 号默认分配给普通组使用。
基本组(私有组) 有且唯一,必须存在
附加组(公共组) 可有可无
使用id + 用户名 可以查看该用户的UID、GID、用户组、附加组等信息
用户名和基本组的名称一致 除非额外指定
保存用户名称、宿主目录、登录Shell等基本信息
文件位置:/etc/passwd
每一行对应一个用户的账号记录
[root@localhost ~]#head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/sbin/nologin
passwd /etc/passwd 存放用户信息(不存放密码)
总共有7段 每段用冒号" : " 隔开
例,liwu:x:1003:1003:普通用户:/home/liwu:/bin/bash
liwu:用户名
x:密码占位符
1003:uid号
1003:gid号
普通用户:备注信息
/home/liwu:家目录位置
/bin/bash:默认的Shell类型
/sbin/nologin:这个Shell类型不允许登录
保存用户的密码、账号有效期信息
文件位置:/etc/shadow
每一行对应一个用户的密码记录
[root@localhost ~]#head -2 /etc/shadow
root:$6$30tNNCqiqB2DDPTH$3RIOata9QaDdY9UGlGq50R3FxtqaJc1z2q2JT7RAtM.bki6dMxoXMXD8G8y4EqmitKiLKwT3f8HnkkooE/Ajx.::0:99999:7:::
bin:*:17110:0:99999:7:::
shadow /etc/shadow 存放用户的密码、账号有效期信息
总共有9段 每段用冒号“ : ” 隔开
root:$6$30tNNCqiqB2DDPTH$3RIOata9QaDdY9UGlGq50R3FxtqaJc1z2q2JT7RAtM.bki6dMxoXMXD8G8y4EqmitKiLKwT3f8HnkkooE/Ajx.: :0:99999:7: : :
root:用户名
$6$30tNNCqiqB2DDPTH$3RIOata9QaDdY9UGlGq50R3FxtqaJc1z2q2JT7RAtM.bki6dMxoXMXD8G8y4EqmitKiLKwT3f8HnkkooE/Ajx : 代表加密的密码 其中 * 和 !!代表不可登录
:最近一次修改密码的时间(距离1970年1月1日的时间,因为Linux是1970年1月1日诞生)
0 :代表x天以后可以修改密码(0表示随时可以修改;限制修改密码的权限)
99999 : 代表密码有效时间(代表永久有效)如果是7则代表7天有效期
7 : 代表密码过期前7天会提醒(默认每天开关机,每次开机会提醒一次)
: 代表密码过期x天后会被锁定 无法登录系统
: 代表用户的有效期 超过有效期不能登录系统
: 代表保留字段 未使用
useradd [选项] 用户名
useradd实际上是添加新用户,并对新用户进行一些个性化设置
选项 | 结果 |
-u | 指定用户的 UID 号,要求该 UID 号码未被其他用户使用 |
-d | 指定用户的宿主目录位置(当与-M 一起使用时,不生效) |
-e | 指定用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式 |
-g | 指定用户的基本组名(或使用 GID 号) |
-G | 指定用户的附加组名(或使用 GID 号) |
-M | 不建立宿主目录,即使/etc/login.defs 系统配置中已设定要建立宿主目录 |
-s | 指定用户的登录 Shell /sbin/nologin |
useradd -u
指定lisi的uid号为1111 并且不建立家目录
指定ky35的uid号为2222 并且不建立家目录 指定该用户不能登录
useradd -d
指定ky用户的家目录在/data/test下
useradd -e
指定ky2用户的失效时间为2023年12月27日
useradd -g
指定ky4用户的基本组为zhangsan
useradd -G
指定ky5用户的附加组为zhangsan
useradd -r
随机生成一个小于1000的程序用户ky6
useradd -c
指定ky8用户内的备注信息
useradd -p
密码加密
修改密码
免交互修改密码
passwd [选项] 用户名
[root@test1 /]# passwd lisi 修改lisi 用户密码输入两次密码
更改用户 lisi 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
选项 | 结果 |
-l | 锁定用户 |
-u | 解锁用户 |
-s | 查看用户状态(查看用户是否被锁定) |
-d | 清空密码(免密登录) |
[root@test1 /]# passwd -l lisi
[root@test1 /]# tail -1 /etc/shadow
lisi:!!:18809:0:99999:7:::
!!代表不可以登录
[root@test1 /]# passwd -d lisi
清除用户的密码 lisi。
passwd: 操作成功
[root@test1 /]# passwd -S lisi
lisi NP 2021-07-01 0 99999 7 -1 (密码为空。)
[root@test1 /]# passwd -u lisi
解锁用户 lisi 的密码。
passwd: 警告:未锁定的密码将是空的。
passwd: 不安全的操作(使用 -f 参数强制进行该操作)
[root@test1 /]# passwd -fu lisi
解锁用户 lisi 的密码。
passwd: 操作成功
[root@test1 dnf]# echo "123123"|passwd --stdin lisi
#免于交互(可以将密码打印在当前终端显示屏上)
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
对已有的属性进行修改
usermod [选项] 用户名
选项 | 结果 |
-l | 更改用户账号的登录名称 |
-L | 锁定用户 |
-u | 修改用户的 UID 号 |
-U | 解锁用户 |
-s | 指定用户的登录 Shell |
-d | 修改用户的宿主目录位置 |
-e | 修改用户的账户失效时间,可使用 YYYY-MM-DD 的日期格式 |
-g | 修改用户的基本组名(或使用 GID 号) |
-G | 修改用户的附加组名(或使用 GID 号) |
选项与useradd基本一致
usermod -l
锁定用户
usermod -u
指定wangwu用户的uid号为1111
usermod -s
修改Shell类型
/bin/bash 是默认Shell类型
/usr/sbin/nologin 是不允许登录
usermod和useradd的区别
useradd是对新建用户
usermod是对已有用户
userdel [选项] 用户
userdel -r 用户名—— 把家目录一起删除
groupadd
通式 groupadd [-g GID] 组账号名 指定组id
groups 查询当前组
设置组账号密码、添加/删除组成员
gpasswd [选项] 用户 组账号名
选项 | 结果 |
-a | 向组内添加一个用户 |
-d | 从组内删除一个用户成员 |
-M | 定义组成员列表,以逗号分隔(一次性添加多个组员) |
gpasswd -a
增加组员lisi 到root组中
gpasswd -M
一次性增加多个组员user1、user2、user3到root组中
groupdel 组帐号名 ——删除组账号
查询用户所属的组 groups [用户名]
查询用户身份表示
id [用户名]
查询已登录到主机的用户信息
w [选项] [用户名]
选项 | 用户名 |
-h | 不显示输出信息的标题 |
-l | 用长格式输出 |
-s | 用短格式输出,不显示登陆时间,JCPU 和 PCPU 时间 |
-V | 显示版本信息 |
只能显示当前登陆的用户信息
who [选项] [file]
选项 | 含义 |
-a | 列出所有信息,相当于所有选项 |
-b | 列出系统最近启动的时间日期 |
-l | 列出所有可登陆的终端信息 |
-m | 仅列出关于当前终端的信息,who -m命令等同于who am i |
-q | 列出在本地系统上的用户和用户数的清 |
-r | 显示当前系统的运行级别 |
-s | 仅显示名称、线路和时间字段信息,这是 who 命令的默认选项 |
-u | 显示当前每个用户的用户名、登陆终端、登陆时间、线路活动和进程标识 |
-T 或 -w | 显示 tty 终端的状态,“+”表示对任何人可写,“-”表示仅对 root 用户或所有者可写,“?”表示遇到线路故障 |
查询用户帐号的详细信息
finger [用户名]
查询已登录主机的用户信息
平均负载(load average)指的是在 1 分钟、5 分钟、15 分钟内系统的负载状况
标题 | 含义 |
USER | 登录到系统的用户 |
TTY | 登录终端 |
FROM | 表示用户从哪里登陆进来,一般显示远程登陆主机的 IP 地址或者主机名 |
LOGIN@ | 用户登陆的日期和时间 |
IDLE | 表示某个程序上次从终端开始执行到现在所持续的时间 |
JCPU | 和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间 |
PCPU | 当前进程所占用的 CPU 运算时间 |
WHAT | 当前用户正在执行的进程名称和选项,换句话说,就是表示用户当前执行的是什么命令 |
新建用户账号时,从/etc/skel 目录中复制而来
cat /etc/default/useradd
~/.bash_profile
~/.bashrc
~/.bash_logout
个性化配置文件~/.bash_profile ~/.bashrc ~/.bash_logout
开机前运行 | 关机前运行 |
~/.bash_profile | ~/.bash_logout |
~/.bashrc |
程序访问文件时的权限,取决于此程序的发起者
- 进程的发起者,同文件的属主:则应用文件属主权限
- 进程的发起者,属于文件属组;则应用文件属组权限
- 应用文件“其它”权限
root用户和普通用户 是否都可以看 (cat /etc/shadow)
只有root用户可以看cat /etc/shadow 而普通用户没有权限
1.访问人群分三类
- 所属主(u)拥有该文件或目录的用户账号
- 所属组(g)拥有该文件或目录的组账号
- 其他人(o)
2.权限分三种
- 读(r)允许查看文件内容、显示目录列表
- 写(w)允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
- 执行(x)允许运行程序、切换目录
- 如果文件夹有r 代表可以使用ls查看此目录中文件列表
- 如果文件夹有w 代表可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
- 如果文件夹有x 代表可以增删文件 x 执行是文件夹的最小权限(一定要有x)可以使用ls -l查看
- 此目录中文件元数据(须配合r权限)
和所在文件夹有关,所在文件夹需要拥有wx权限
cp test
[root@localhost ~]# ls -l install.log
-rw-r--r-- 1 root root 34298 04-02 00:23 install.log
-rw-r--r--文件类型、权限
root root属主、属组
权限项 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
字符表示 | r | w | x | r | w | x | r | w | x |
数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
权限分配 | 文件所有者 | 文件所属组 | 其他用户 |
r | w | x | r | w | x | r | w | x |
1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
4 | 2 | 1 |
选项 | 定义 |
-g | 属主 |
-u | 属组 |
-o |
其他人 |
a | 所有人 |
-R | 递归(所有都改) |
选项 | 定义 |
+ | 在原有基础上那个加上权限 |
- | 在原有基础上那个减去权限 |
= | 原有权限不看 就是 等号后面的权限 |
修改test的权限为4
chown 属主:属组 文件或文件夹 -R 递归 全改
chown lisi:lisi 文件名
属主和属组都改
chown 用户名:组名 文件;
如果只改属主
chown 用户名 文件;
如果只改属组
chown :组名 文件
chmod和chown的区别
chmod修改权限
chown修改属主属组
cp /etc/issue /data/dir 所需要的最小权限
cp x
/etc/ x
issue r
/data/ x
/dir/ wx
查看当前文件夹的默认权限
Linux文件夹最高权限777;文件最高权限666
当前data的文件夹权限是022,新建一个abc文件夹,abc文件夹的权限是Linux文件夹的最高权限减去022,得到755,所以755是当前文件夹abc的权限;新建一个test文件,test文件的权限是Linux文件最高权限减去022,得到644,644是当前test文件的权限。
umask显示的权限是123,建立文件夹test,文件夹test的权限是Linux系统文件夹最高权限777减去123,所以test文件夹的权限是654;建立一个123的文件,文件123的权限是Linux文件最高权限666减去123,得到543,再加1,得到最终权限是644
设置umask权限为333
建立ky35文件夹,ky35文件夹的权限是Linux系统文件夹最高权限777减去333,得到ky35文件夹权限是444
- 新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变
- 新建目录的默认权限: 777-umask
- 非特权用户umask默认是 002
- root的umask 默认是 022
t(sticky)表示粘贴位 只对文件夹有效
Sticky 位
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
chmod o+t /opt/aa
# 添加Sticky 位chmod o-t /opt/aa
#减少Sticky 位
s(suid)所属主
[root@localhost aa]#which passwd
/usr/bin/passwd
[root@localhost aa]#ll /usr/bin/passwd
#此处s表示当使用这个命令程序时,把当前用户当成文件的所属主
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
[root@localhost aa]#which vim
/usr/bin/vim
[root@localhost aa]#chmod u+s /usr/bin/vim
#给vim加上suid权限,代表所有用户可以使用vim打开并编辑所有文件
[root@localhost aa]#ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2289640 8月 2 2017 /usr/bin/vim
s(sgid)所属组
[root@localhost aa]#chmod g+s /usr/bin/vim
[root@localhost aa]#ll /usr/bin/vim
-rwxr-sr-x. 1 root root 2289640 8月 2 2017 /usr/bin/vim
ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
删除ACL访问控制列表
setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
选项 | 注释 | 含义 |
-m | modify-acl | 更改文件的访问控制列表 |
-M | modify-file=file | 从文件读取访问控制列表条目更改 |
-x | remove=acl | 根据文件中访问控制列表移除条目 |
-X | remove-file=file | 从文件读取访问控制列表条目并删除 |
-b | remove-all | 删除所有扩展访问控制列表条目 |
-k | remove-default | 移除默认访问控制列表 |
set=acl | 设定替换当前的文件访问控制列表 | |
set-file=file | 从文件中读取访问控制列表条目设定 | |
mask | 重新计算有效权限掩码 | |
-n | no-mask | 不重新计算有效权限掩码 |
-d | default | 应用到默认访问控制列表的操作 |
-R | recursive | 递归操作子目录 |
-L | logical | 依照系统逻辑,跟随符号链接 |
-P | physical | 依照自然逻辑,不跟随符号链接 |
restore=file | 恢复访问控制列表,和“getfacl -R”作用相反 | |
test | 测试模式,并不真正修改访问控制列表属性 | |
-v | version | 显示版本并退出 |
-h | help | 显示本帮助信息 |