1、用户账号和组账号概述
能不能打开文件和命令没有关系,和你的用户权限有关。
组账号:是方便操作,简化管理。
1.1 用户账号类型
分为三个:
- 超级管理员: 权限最高的用户 root
- 普通用户: 权限受到限制的用户 比如:lisi zhangsan
- 程序用户: 不是给人登录使用的,是给程序使用的
1.2 组账号
- 基本组:所有用户都必须有一个基本组,有且只有一个
- 附加组:附加组可有可无,也可以有多个附加组
1.3 uid和gid
uid:user identity ,用户的身份证号,可以重复。
gid:group identity ,用户组的身份证号
系统靠uid来区分用户身份的,用户的uid为0 就是超级管理员, 而不是因为用户账号叫root才是超级管理员。
uid的范围
uid的取值范围为:0-60000
uid的范围定义在此文件夹中: /etc/login.defs
| 分类 | centos7 | centos6 |
|---|---|---|
| 超级管理员 | 0 | 0 |
| 普通用户 | 1000开始 | 500开始 |
| 程序用户 | 1-999 | 1-499 |
// 为什么要有程序用户?为了网络的安全性
1.4 用户账号管理
用户相关的文件
主要分为4个,前两个比较重要:
- 用户信息文件: /etc/passwd
- 用户密码文件: /etc/shadow
- 组账户: /etc/group
- 组密码: /etc/gshadow
1.4.1 passwd文件
/etc/passwd 这是文件夹
passwd 的中文意思虽然叫密码,但并不存储密码,存储的是用户信息。
root: x:0:0:root:/root:/bin/bash
拆解(冒号隔开,共分为7段):
root:用户的名字
x :密码占位符
0 :uid
0 :gid
root:备注信息
/root:家目录位置
/bin/bash:登录时默认加载的shell类型
man 5 passwd # 可以查询该文件的信息
man 1 是命令
whoami 我是谁
1.4.2 shadow文件
位置: /etc/shadow 作用:存放密码,及密码策略(比如密码有效期)的文件。
上图共分为9段,下面为拆解:
第一列:zhangsan #用户名
第二列:表示加密的密码 #第二列是!或 * 代表该用户不可以登录到系统中;如果为空,代表该用户密码可以直接登录。
第三列:19818 上一次修改密码的时间 # 从1970-1-1开始计算,也就是linux诞生之日,一共是19818天。## 查询时间的命令:data -d ‘1970-1-1 19818 days’
第四列:0 不限制下次修改密码的时间 如果该项为3 , 今天修改密码后,想再次修改密码,需要等到3天以后。
第五列: 99999 ,密码有效期为99999天,约等于273年。# 如果设置的是3,代表3天后需要修改,否则无法登录
第六列:7 # 密码到期前7天 会提醒密码即将到期,请修改密码。
第七列:密码宽限时间 ,如果为3,表示密码有效期到期后,还可以最多使用3天。
第八列:用户的失效时间 从1970-1-1 到失效时间,共经过了多少天。
第九列:保留字段,暂未启用。
1.4.3 group文件
root: x:0:zhangsan # zhangsan是附加组。
2、命令
2.1 useradd
useradd 只能对新建用户,不适用于已有用户。
命令语法:
useradd [选项] [用户名]
# useradd有两个作用,一个是新建用户,还有一个是修改用户的属性信息
新建 添加用户:
- 自动建立一个 同名的基本组
- 自动建立一个同名的家目录,在/home下
| 选项 | 备注说明 |
|---|---|
| -u | 指定uid |
| -s | 指定登录的shell 类型 |
| -M | 不建立家目录 |
| -d | 指定家目录位置(可以是不存在的目录) |
| -e | 指定用户的账户失效时间,格式yy-mm-dd |
| -g | 指定用户的基本组名 |
| -G | 指定用户的附加组名 |
| -r | 随机生成 一个uid为1-999的用户,并且不建立家目录。 |
| -c | 添加备注信息 |
| -p | 密码 |
重要命令:
useradd -s /sbin/nologin #不允许登录
useradd lisi -u 1111 -s /sbin/nologin -M # 新建用户名称为lisi,uid为1111,不允许登录,不建立家目录
2.2 passwd
修改密码 这个passwd是命令,与上面提到的passwd文件不同, passwd文件与密码无关,但是passwd命令与密码有关。
命令语法:
passwd 用户名
# 如果不加用户名 就是修改当前用户的密码
| 选项 | 备注说明 |
|---|---|
| -d | 清空用户密码 #也就是在虚拟机中登录账户,不需要密码验证,不安全 |
| -l | 锁定用户 无法登录 #锁定后,登录列表中,不会再显示该账号 |
| -S(大写) | 如何查看用户 是否被锁定 |
| -u(小写) | 解锁用户 |
小拓展:免交互设置密码
echo “123123” | passwd --stdin lisi
// 这是组合命令 一次性设置密码
2.3 usermod
对已有用户的属性 进行修改,用usermod命令。
| 选项 | 备注说明 |
|---|---|
| -l | 更改用户的名称 #先写新名字,再写旧名字。 |
| -L | 锁定用户 |
| -u | 修改用户的uid号 |
| -U | 解锁用户 |
| -s | 指定用户的 登录 shell |
| -d | 修改用户的宿主目录位置 |
| -e | 修改用户的账户失效时间 yy-mm-dd |
| -g | 修改用户的基本组名 |
| -G | 修改用户的附加组名 |
小tips:
[:alnum:] 这个代表数字和字母,al是α,也就是字母;num代表数字。
[0-9a-zA-Z] 是正则表达式,也是代表数字和字母的意思。应用于文件里面的内容。
小拓展:tr命令
tr命令 主要功能是:删除、替换、压缩
选项:
-d 删除 #比如 tr -d 123,也就是只要出现123中的任意一个,就把对应的删除,并且不区分123 是连续还是非连续
-c 反补 #类似于反选,与后面条件里的内容完全相反
-s 压缩
-a 替换 #可以把对象1替换成对象2
2.4 userdel 删除用户
命令语法:
userdel 用户名
唯一的选项: -r
#意思是 删的时候将家目录 一起删掉
2.5 groups 组
查询用户所属的组
命令语法:
groups [用户名]
2.5.1 groupadd 添加组账号
[root@test1 /]# groupadd zhou //添加组账号
[root@test1 /]# tail -1 /etc/group
zhou:x:1002:
[root@test1 /]# groupadd -g 88 zhou //-g指定组id
[root@test1 /]# tail -1 /etc/group
2.5.2 groupdel 删除组账号
groupdel 组帐号名
[root@test1 /]# groupdel zhou //删除组账号
2.6 id
查询用户身份标识
命令语法:
id [用户名]
2.7 finger 查询
可以查询当前用户账号的详细信息。
命令语法:
finger [用户名]
// 安装finger命令:yum install finger -y
小tips:
w、who、users命令 也可以查看信息,
w显示的信息最详细、who次之、users显示的信息最少。
2.8 w
查询已登录到主机的用户信息。
[root@localhost ~]# w [选项] [用户名]
-h 不显示输出信息的标题
-l 用长格式输出
-s 用短格式输出,不显示登陆时间,JCPU 和 PCPU 时间
-V 显示版本信息
[root@localhost opt]# w
14:06:41 up 8:49, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 一19 ?xdm? 1:44 0.17s /usr/libexec/gnome-session-binary --session gnome-
root pts/3 192.168.125.1 09:57 1.00s 0.07s 0.02s w
| 标题 | 含义 |
|---|---|
| USER | 登录到系统的用户。 |
| TTY | 登录终端。 |
| FROM | 表示用户从哪里登陆进来,一般显示远程登陆主机的 IP 地址或者主机名。 |
| LOGIN@ | 用户登陆的日期和时间。 |
| IDLE | 表示某个程序上次从终端开始执行到现在所持续的时间。 |
| JCPU | 和该终端连接的所有进程占用的 CPU 运算时间。这个时间里并不包括过去的后台作业时间,但是包括当前正在运行的后台作业所占用的时间。 |
| PCPU | 当前进程所占用的 CPU 运算时间。 |
| WHAT | 当前用户正在执行的进程名称和选项,换句话说,就是表示用户当前执行的是什么命令。 |
// w 显示的信息最详细
2.9 who
相比较 w 命令,who 命令只能显示当前登陆的用户信息,但无法知晓每个用户正在执行的命令。
[root@localhost opt]# who
root :0 2024-04-22 19:09 (:0)
root pts/3 2024-04-28 09:57 (192.168.125.1)
| 选项 | 含义 |
|---|---|
| -a | 列出所有信息,相当于所有选项。 |
| -b | 列出系统最近启动的时间日期。 |
| -l | 列出所有可登陆的终端信息。 |
| -m | 仅列出关于当前终端的信息,who -m 命令等同于 who am i。 |
| -q | 列出在本地系统上的用户和用户数的清单。 |
| -r | 显示当前系统的运行级别。 |
| -s | 仅显示名称、线路和时间字段信息,这是 who 命令的默认选项。 |
| -u | 显示当前每个用户的用户名、登陆终端、登陆时间、线路活动和进程标识。 |
| -T 或 -w | 显示 tty 终端的状态,“+”表示对任何人可写,“-”表示仅对 root 用户或所有者可写,“?”表示遇到线路故障。 |
// who 显示的信息比w少,但比users多
2.10 user
[root@localhost ~]# users
root root
// users 显示的属性最少
2.11 配置文件来源
/etc/skel/
~/.bash_profile #开机启动时执行里面的命令
~/.bashrc #与上面profile一样,但是优先级没有profile高
~/.bash_logout #关机前执行操作
小拓展:
echo “ ” > .bash_history #意思是将打印的命令,赋值给bash_history ,因为打印的命令是空,也就是将对应的值清空。
3、文件/目录的权限和归属
因为权限涉及到安全性,所以权限非常重要!
查看权限的命令:ll (两个小写的L)
3.1 访问权限
- 读取 r :允许查看文件内容、显示目录列表
- 写入 w : 允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
- 可执行 x : 允许运行程序、切换目录。执行权限是最小权限,文件夹如果缺少执行权限,就没办法读、写,所以文件夹的权限一定要是奇数。
3.2 归属(所有权)
- 属主:文件主人/拥有者,对文件拥有最高权限。
- 属组:文件的拥有组
- 其他:除了上面两种外的其他用户
rwx r-- r-- 拆解:
r : 读 (read)
文件:可以查看里面的内容
文件夹: 可以用ls 看文件夹中的文件列表
w : 写 (write)
文件:可以修改文件的内容,写的同时要有读的权限
文件夹:新建文件(文件夹),删除文件(文件夹)、移动文件(文件夹)
x : 执行
文件:可以运行(命令、脚本) 颜色是绿色
文件夹:执行是最小的权限,没有执行,读写就无法使用。
1. 数字表示法:
按照 R W X 的顺序,有权限就写1,无权限就写0。比如,有读和写的权限,但没有执行的权限,就是1 1 0,将二进制 转换成十进制,就是6
数字法表示文件的权限:
| r | w | x | 十进制 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 |
| 0 | 1 | 0 | 2 |
| 0 | 1 | 1 | 3 |
| 1 | 0 | 0 | 4 |
| 1 | 0 | 1 | 5 |
| 1 | 1 | 0 | 6 |
| 1 | 1 | 1 | 7 |
根据上表可知,文件权限为000-111,换算成十进制,范围为:0-7
| 特殊数字 | 对应类型 |
|---|---|
| 4 | 读 r |
| 2 | 写 w |
| 1 | 执行 x |
2. 非数字表示法(chmod命令):
主要用chmod命令,可以修改文件权限
命令语法:
chmod [选项] + 指明属主、属组、其他 + [权限] + 文件
| 选项 | 备注说明 |
|---|---|
| -R | 递归 |
u 属主
g 属组
o 其他
a 所有人
涉及的表示法:
+ 加上
chmod u+r 文件名 #给属主加上 读 的权限
chmod a+r 文件名 #所有人都有 读 的权限
- 减去
chmod u-r 文件名 #属主在原有的基础上 减去 读 的权限
= 赋予
chmod u=r 文件名 #属主现在只有 读 的权限
chmod a+rwx #所有人赋予可读可写可执行的权限,但实际生产环境中,不允许这样设置!
chmod u+rwx #给属主赋予可读可写可执行的权限
上述方式 比较复杂,也可以采用数字表示法,用3位数字分别代表属主、属组、其他。
chmod 777 文件名 #也是对所有人赋予可读可写可执行的权限,等于chmod a+rwx
chmod 644 文件名
如果只写以为数字,比如:chmod 6 文件名,默认是对 其他 进行设置
注意: chmod 777 -R /
这个命令,不亚于删根,千万不要尝试。
扩展知识:
1、对文件而言,如果大家都没有执行权限,超级管理员也没有执行权限,只要一个人有执行权限,那么超级管理员也有。
2、删除一个文件和文件本身的权限有关系吗?
和文件本身没有关系,和文件所在的文件夹有关。
3.3 chown
修改文件的属主、属组
chown 属主 文件名 #只改变文件的属主
chown :属组 文件名 #只改变文件的属组,把:换成.是一个意思
chown 属主:属组 文件名 #属主和属组都改变,把:换成.是一个意思
选项:-R 也是递归的意思。
// 重点:注意区分chmod和chown! 这两个很重要,一定不要搞混。
- chmod 是针对权限
- chown 是针对属主、属组
3.4 umask
权限掩码。 作用: 规定了文件和文件夹的落地权限(也就是新建时 已经设置好的权限)
默认的umask 为0022(第一个0为特殊权限)。022是用户没有的权限,用最高权限 减去 umask 就是你的最终权限。
比如:
1、 文件夹的最高权限为777
777-022=755 ,所以文件夹落地的权限为755,也就是 rwx r-x r-x
2、 文件的最高权限为666, 因为执行权限x对于文件而言,非常危险。
666-022=644,文件默认的权限为644,也就是rw- r- - r- -
3、 把umask改成123,666-123=543 ,文件出现奇数,自动加1,偶数不变
// umask 后面跟上数值,可以设置umask的值
vim /etc/profile #所有用户生效
3.5 三种特殊权限
1、suid命令
任何人处理该文件时,把当前用户当作文件的属主。
2、guid命令
任何人处理该文件时,把当前用户当作文件的属组。
3、sticky 粘连位
拥有该权限的文件夹,该文件夹中的文件,只有自己(属主)和超级管理员可以删除,其他都不能删除。
3.6 访问控制列表ACL
getfacl test 可以查看test文件下的访问控制列表
setfacl 修改
| 选项 | 功能描述 |
|---|---|
| -m | 指定列表 |
| -b | 清空 |
| -X | 减去,删除 |