[toc]

权限结构

1
2
我们可以把他理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容
访问的范围,或者说,权限是指某个特定的用户具有特定的系统资源使用权利。
权限 作用 代表数字
r 可读 4
w 可写 2
x 可执行 1
- 啥也不是 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 权限结构分布
-rw-r--r--. 1 root root 859 Nov 9 10:04 1.txt
rw- # 属主权限位
r-- # 属组权限位
r-- # 其他用户权限位

# 目录权限:
777-默认参数

# 文件权限:
666-默认参数

# 显示文件权限的代表数
## /root/1.txt(示例文件)
-rw-r--r--. 1 root root 859 Nov 9 10:04 1.txt

stat /root/1.txt -c %a #显示指定文件的权限代表数
644

权限修改

权限修改命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# chmod(change mode)
修改权限命令

## 语法结构
chmod 选项 文件/目录

## 选项
-R #递归修改(目录内的文件同时修改权限)
number #number=权限代表数(例:777)
u+r/w/x #'+'代表增加指定权限(原权限不变)
u-r/w/x #'-'代表减少指定权限(原权限不变)
a=r/w/x #'a='代表将各部分权限修改一致
ps:
u=user
g=group
o=other
a=all

rwx对于文件的影响

1
2
3
r		#可以读 不能写
w #可以写 不能读
x #啥也干不了(执行x权限需配合r权限)

rwx对于目录的影响

1
2
3
4
5
6
7
8
9
r		#只能查看目录下的内容 显示乱码且不能创建文件
w #无操作权限
x #无操作权限

# 目录权限必须组合使用
rw #可以查看 显示乱码
wx #可在目录下创建 无法查看
rx #可查看目录里的详细属性 不显示乱码
rwx #可以创建并查看

修改属主和属组

1
2
3
4
5
6
# chown(change owner)
修改属主和属组命令

## 语法结构
chown 属主:属组 文件或目录
-R #递归修改(目录内的文件同时修改权限)

权限提升

sudo提权

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# visudo(vi /etc/sudoers)
输入此命令编辑sudo管理文件

# 100行 针对单个用户
## Allow root to run any commands anywhere(允许root用户在任何地方运行任何命令)
# root ALL=(ALL) ALL
用户名 所有主机 所有命令
xxx ALL=(ALL) NOPASSWD:ALL # 免密执行sudo权限需在ALL前加上:'NOPASSWD:'

# 108行附近 针对多个用户
## Allows people in group wheel to run all commands(允许在wheel组里的普通用户执行所有命令)
# %wheel ALL=(ALL) ALL
组名 所有主机 所有命令
%heiheihei ALL=(ALL) NOPASSWD:ALL # 免密执行sudo权限需在ALL前加上:'NOPASSWD:'

# usermod 用户名 -G wheel
## 需将用户添加至指定附加组,提权才会生效

别名

1
2
3
4
5
6
7
8
9
10
11
12
# visudo(vi /etc/sudoers)

# 15行附近 针对多个用户
Host_Alias WEB = web01,web02,web03
User_Alias USER = xxx,yyy,xyz

## 为多个用户或命令创建别名,示例:
Cmnd_Alias SUDO = /bin/cp, /bin/mv, /bin/rm /bin...
## 语法结构
Cmnd_Alias 别名 = 命令路径或用户名
## 命令路径查询
which 命令

提权使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# sudo不识别别名,只识别系统命令
[xiaolong@localhost root]$ sudo ll
sudo: ll: command not found

[xiaolong@localhost root]$ sudo ls -l
total 10036
-rw-r--r--. 1 root root 859 Nov 9 10:04 1.txt

# 提权完毕后,需要加上sudo才能执行命令
[xiaolong@localhost root]$ ls -l
ls: cannot open directory .: Permission denied

[xiaolong@localhost root]$ sudo ls -l
total 10036
-rw-r--r--. 1 root root 859 Nov 9 10:04 1.txt

特殊权限

setuid

1
2
3
4
5
6
7
8
9
10
11
12
# setuid
# 属主位s权限的作用是:
让执行命令的用户以该命令的属主身份去运行

# 属主位s权限的标识
权限代表数字是4000
原来属主位有x权限,授权4000,属主权限x处显示是小写s
原来属主位无x权限,授权4000,属主权限x处显示是大写S

# 授权方式
chmod 4xxx 文件
chmod u+s 文件

setgid

1
2
3
4
5
6
7
8
9
10
11
12
# setgid
# 属组位s权限的作用:
将目录设置s权限后,此目录下创建的所有 文件/目录 的属组和当前目录的属组保持一致

# 属组位s权限的标识
权限代表数字是2000
原来属组位有x权限,授权2000,属主权限x处显示是小写s
原来属组位无x权限,授权2000,属主权限x处显示是大写S

# 如何授权
chmod 2000 目录
chmod g+s

sbit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# sbit(t权限)
# 其他用户位t权限的作用:
让多个用户都可以在此目录下创建自己文件/目录,并且每个用户只能删除自己的文件

# 其他用户位t权限的标识:
权限代表数字是1000
原其它用户权限位有x权限,授权1000,其他用户权限x处显示是小写t
原其它用户权限位无x权限,授权1000,其他用户权限x处显示是大写T

# 如何授权
chmod 1000
chmod o+t

# ps:
一个目录权限即使是777.如果带了粘滞位,除属主和root外,其他用户都无权限删除

chattr

1
2
3
4
5
6
7
8
9
10
11
12
13
# chattr
## 凌驾于root之上的特殊权限 i权限和a权限

# 权限作用

+/-i # 不能移动 不能删除 不能修改 只能拷贝
+/-a # 不能移动 不能删除 不能修改 只能追加内容和拷贝

# lsattr
## 查看是否有特殊权限

# PS:
遇到root无权限操作的时候,就用lsattr查询是否有特殊权限

umask

1
2
3
4
5
6
7
8
9
# umask(查看当前系统的默认umask)
创建文件或目录时的默认权限为:文件666/目录777减去umask

# 语法结构
umask number
## 根据number修改默认的umask值

# PS:
创建文件的时候比较特殊 umask个位数是奇数 会在最终权限的最后一位+1

练习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 创建三个用户分别是oldboy,olbgirl,oldman这些用户都属于oldboyedu组,他们的密码都是123
1.要求以上用户都可以在/home/oldboyedu目录里访问,创建,删除文件
2.其它用户一律不允许访问该目录
3.在该目录下新建的文件会属于oldboyedu组拥有

# 答题:
[root@localhost ~]# groupadd oldboyedu
[root@localhost ~]# useradd -g oldboyedu oldboy
[root@localhost ~]# useradd -g oldboyedu oldgirl
[root@localhost ~]# useradd -g oldboyedu oldman
[root@localhost /home/oldboyedu]# echo '123'|passwd --stdin oldboy
[root@localhost /home/oldboyedu]# echo '123'|passwd --stdin oldgirl
[root@localhost /home/oldboyedu]# echo '123'|passwd --stdin oldman
[root@localhost /home]# mkdir oldboyedu
[root@localhost /home]# chown root:oldboyedu oldboyedu
[root@localhost /home]# chmod 2770 oldboyedu