本章总结
- 用户账号管理(useradd、passwd、usermod)
- 组账号管理(groupadd、gpasswd、groupdel)
- 用户帐号文件与组账号文件
- 查询账号相关信息的命令(groups、id、finger、w)
- 设置目录与文件权限(chmod)
- 设置目录与文件归属(chown)
本章节重点
- 学会用命令建用户 useradd [选项] 用户名
- 学会修改文件的属性
一 、用户账户与组账号
1. 用户账号和组账号概述
Linux基于用户身份对资源访问进行控制
1.1 用户的类型
- 超级管理员 : 权限最高的用户 root
- 普通用户 : 权限受到限制的用户 lisi
- 程序用户 : 不是给人登录使用的,给程序使用的
1.2 组账号
一个用户必须有一个基本组,附加组可有可无,也可以有多个
- 基本组(私有组) :一定要有,有且只有一个 id zhangsna 可查看
- 附加组(公共组):可有可无,可以有多个
1.3 uid和gid
- uid :用户的身份证号
- gid :用户组的身份证号
系统是靠uid来区分用户身份的,用户的uid为0就是超级管理员 ,而不是因为他叫root
| centos 7 | centos 6 | |
|---|---|---|
| 超级管理员 | 0 | 0 |
| 普通用户 | 1000开始 1000-60000 | 500开始 |
| 程序用户 | 1-999 | 1-499 |
centos7 的 uid范围为0 - 60000
2. 用户账号管理
2.1 用户相关文件存储位置
2.1.1 用户信息文件 /etc/passwd
保存用户名称、宿主目录、登录shell等基本信息 (虽然叫密码但是存的是用户信息!)
每一行对应一个用户的账号记录
- 例
root:x:0:0:root:/root:/bin/bash(:隔开分为七段)
| 代码 | 含义 |
|---|---|
| root | 用户的名字 |
| x | 密码占位符 |
| 0 | uid |
| 0 | gid |
| root | 备注信息 |
| /root | 家目录位置 |
| /bin/bash | 登录时默认加载的shell类型 |
man 5 passwd 可以查询文件的信息
2.1.2 用户密码文件 /etc/shadow
保存用户的密码、密码策略文件、账号有效期等信息
每一行对应一个用户的密码记录
- 例
zhangsan:$6$3/06NuAjdnApLp2F$:19818:0:99999:7:::
| 代码 | 含义 |
|---|---|
| 第一列 zhangsan | 用户名 |
| 第二列 3/06NuAjdnApLp2F$ | 加密的密码 (如果第二列是!!或*代表该用户不可以登录到系统中;如果为空代表该用户密码可以直接登录) |
| 第三列 19818 | 上一次修改密码的时间 1970-1-1到修改密码那天一共过了19818天 (date -d ‘1970-1-1 19818 ’计算实际修改日期) |
| 第四列 0 | 不限制下次密码修改的时间 (如果该项为3,今天修改密码,想再次修改密码,需要3天以后) |
| 第五列 99999 | 密码有效期为99999天,约等于永久有效 (如果设置3,代表3天后需要修改,否则无法登录) |
| 第六列 7 | 密码到期前7天提醒你密码快到期了,请修改密码 |
| 第七列 | 密码宽限时间 (如果为3,还可以再登录3天) |
| 第八列 | 用户的失效时间 1970-1-1到失效时间经过了多少天 |
| 第九列 | 保留字段未启用 |
2.2 添加用户账号 useradd
新建一个用户
- 自动建立一个同名的基本组
- 自动建立一个同名的家目录 ,在/home下
: useradd [选项] 用户名
| 选项 | 效果 |
|---|---|
| -u | 指定uid |
| -s | 指定登录shell 类型 |
| -M | 不建立家目录 |
| 例 :useradd lisi -u 111 -s /sbin/nologin -M cxk | |
| -d | 指定家目录位置(可以是不存在的目录) |
| -e | 指定失效时间 格式是yy-mm-dd |
| -g | 指定基本组 |
| -G | 指定附加组 |
| -r | 随机生成一个uid 1-999的用户并且不建立家目录(了解) |
| -c | 添加备注信息 |
2.3 设置更改用户口令 passwd
:passwd [选项] 用户名
不加用户名修改当前用户的密码
| 选项 | 效果 |
|---|---|
| 不加 | 修改密码 |
| -d | 清空用户密码 (了解即可,市场环境中不用) |
| -l | 锁定用户 |
| -u | 解锁用户 -uf 强制解锁 |
| -S | 查看用户是否被锁定 |
- 一条命令改密码,免交互设置密码 :
echo “123123” | passwd lisi --stdin
2.4 对已有用户的属性进行修改 usermod
: usermod [选项] 用户名
| 选项 | 效果 |
|---|---|
| -l | 更改用户的名称 先写新名字 再写旧的名字 |
| -L | 锁定用户 |
| -U | 解锁用户 |
| -u | 指定uid |
| -s | 指定登录shell 类型 |
| -d | 修改家目录位置(可以是不存在的目录) |
| -e | 修改失效时间 格式是yy-mm-dd |
| -g | 修改基本组 |
| -G | 修改附加组 |
| -r | 随机生成一个uid 1-999的用户并且不建立家目录(了解) |
| -c | 添加备注信息 |
2.5 删除用户 userdel
: userdel [-r] 用户名
-r 连家目录一起删除
2.6 用户账号的初始配置文件
2.6.1 文件来源
- 新建用户账号时,从 /etc/skel 目录中复制而来
- cat / etc/default/useradd
2.6.2 主要的用户初始配置文件
用户宿主目录下的初始配置文件只对当前用户有效
- ①~./bash_profile
#此文件中的命令将在该用户每次登录时被执行,他会设置一些环境变量,并且会调用该用户的~/.bashrc文件 - ②~./bashrc #此文件中的命令将在该用户每次打开新的bash shell时(包括登录系统)被执行(登录 切换 新的bash环境)
- ③~./bash_logout #此文件中的命令将在该用户每次退出时bash shell时使用
3. 组管理
3.1 组账号文件
3.1.1 组账户 /etc/group
保存组帐号基本信息
3.1.2组密码 /etc/gshadow
保存组帐号的密码信息,基本不使用
3.2 添加组 groupadd
: groupadd [-g GID] 组账号名
3.3 组内管理 gpasswd
添加、设置、删除组成员
:gpasswd [选项] [用户名] 组账号名
| 选项 | 效果 |
|---|---|
| -a | 向组内添加一个用户 |
| -d | 从组内删除一个用户成员 |
| -M | 定义组成员列表,以逗号分隔 |
3.4 删除组账号 groupdel
: groupdel 组帐号名
4.查询账号信息
-
groups [用户名]查询用户所属的组 -
id [用户名]查询用户身份标识 -
finger [用户名]查询账号的详细信息 (看的内容比id多) 需要安装 yum install finger -y -
w 、who 、users查询已登录到主机的用户信息
二 、文件/目录的权限和归属
1. 访问权限
r读
- 对于文件而言:可以看文件里面的内容
- 文件夹:可以用ls看文件夹中的文件列表 ls -l
w写
- 文件:可以修改文件的内容
- 文件夹:新建文件(文件夹),删除文件(文件夹),移动文件(文件夹)
x执行
- 文件:可以运行(命令,脚本)颜色是绿色
- 文件夹:执行是最小的权限,没有执行 读写无法使用
:对文件而言:如果大家都没有执行权限,超级管理员也没有执行权限。只要有一个人有执行权限,那么超级管理员也有
:删除一个文件和文件本身权限有关系嘛? 和文件本身没关系,和文件所在文件夹有关
2. 归属(所有权)
属主:文件的主人:文件的拥有者
属组:文件的拥有组
其他人:除了上面两种外的用户
3. 修改文件权限 chmod
3.1 非数字法
:chmod [-R] 指明属主/属组/其他人+权限 文件 ( -R 递归 )
属主:u
属组:g
其他人:o
所有人:a
加上 +
减去 -
赋予 =
chmod u+r 文件名 #属主加上读权限
chmod u=r 文件名 #不管原来是什么,现在只有读权限
3.2 数字法表示
读 4
写 2
执行 1
chmod 777 文件名 #三个数字写全
阿里面试题:执行 cp /etc/issue /data/dir/ 所需要的最小权限?
/bin/cp 需要x权限
/etc/ 需要x权限
/etc/issue 需要r权限
/data 需要x权限
/data/dir 需要w,x权限
4. 修改属主属组 chown
| 命令 | 效果 |
|---|---|
| chown 属主 文件名/目录 | 只改变文件的属主 |
| chown :属组 文件名/目录 | 只改变文件的属组 |
| chown .属组 文件名/目录 | 只改变文件的属组 |
| chown 属主:属组 文件名/目录 | 属主属组都改变 |
| chown 属主.属组 文件名/目录 | 属主属组都改变 |
常用选项:-R递归修改指定目录下所有文件、子目录的归属
5. 权限掩码 umask
5.1 umask 作用
在linux中规定了新建文件夹和新建文件的落地权限
5.2 创建新文件和目录时,落地权限计算
默认umask 为0022 (第一个0与特殊权限有关,目前只需要看后三位),是你没有的权限。拿最高权限减去umask就是你的最终权限
☛的最高权限为777
777-022=755 所以文件夹落地的权限为755 rwx r-x r-x
☛的最高权限为666 (执行权限对于文件而言非常危险,为了安全考虑,所有文件默认没有x权限,如果想要执行权限需要手动添加)
666-022=644 所以文件落地的权限为644 rw- r-- r--
5.3 umask的使用
- 直接使用umask 可以看到当前的umask 设置
- umask 后面跟上数值,可以设置umask的值。例如umask 123
设置umask 123
文件夹权限与计算结果一样
777-123=654
文件权限,用666-umask 所得结果有奇数自动加一,偶数不变
666-123= 543 出现奇数再加1 ,偶数不变 即权限为644
注意:umask 123的设置是临时性的,想要永久修改需要把umask 123写进vim /etc/profile (所有用户生效)
6. 三种特殊权限
6.1 suid
SUID(Set owner User ID up on execution) 是针对文件所设置的一个特殊权限。只作用于二进制文件中。
功能:如果拥有该权限,把当前用户当成文件的属主
6.2 sgid
SGID属性和SUID一样,只是SUID作用于属主,而SGID作用于属组。
功能:如果拥有该权限,把当前用户当成文件的属组
6.3 sticky 粘贴位
拥有该权限的文件夹,该文件夹中的文件,只有自己和超级管理员可以删除,其他人不可以删除
三 、 acl 访问控制列表
ACL:Access Control List,实现灵活的权限管理。除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
作用:可以单独控制某一个用户的权限
用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
例子:给lisi用户添加读写权限
setfacl -m u:lisi:rw passwd