借东风
七星坛上卧龙登,一夜东风江水腾。
不是孔明施巧计,周郎安得逞才能?
基本权限
文件权限设置:可以使某个用户或者某个组能够对文件进行某些操作
权限对象:
u ===> 属主
g ===> 属组
o ===> 其他人
----------------
基本权限类型
r ---> read 读 ---> 4
w ---> write 写 ---> 2
x ---> exec 执行 --> 1
----------------
在命令行里面使用 ls -l 或者 ll 可以查看基本权限
- r w x rw- r-- alice hr file1.txt
文件类型 属主权限 属组权限 其他人权限 属主 属组 文件
----------------
文件类型:
- 普通文件(文本文件,二进制文件,压缩文件,图片。。。)
d 目录文件(蓝色)
b 设备文件 block device 设备文件,如硬盘,U盘;
c 设备文件 字符设备文件,比如我们的终端tty1,打印机。
l symbolic link 即符号链接文件,又称软链接文件 (浅蓝色)
s socket 即套接字文件,用于实现两个进程进行通信
p 管道文件
设置权限
chown # 改变文件或者目录的所属主和所属组
chmod # 改变文件或者目录的访问权限
更改属主与属组 ----- chown
chown alice.hr file1.txt # 修改属主和属组
chown tom file1.txt # 修改属主
chown .hr file1.txt # 修改属组
chown -R alice.hr dir1 # 递归修改,针对目录 即该目录及目录以下的文件都修改掉
更改权限 ---- chmod
使用符号
对象 赋值符 权限类型
u + r
g - w
chmod o = x file
a
上面是使用符号的用法
下面是代码演示
chmod u+x file1.txt # 属主增加执行权限
chmod a=rwx file.txt # 所有人都有读写执行权限 a 是 all 的意思,也就是 u g o 一起增加权限
chmod a=- file.txt # 所有人都没权限
chmod ug=rw o=r file.txt # 属主属组等于读写,其他人只读
使用数字
基本权限类型
r ---> read 读 ---> 4
w ---> write 写 ---> 2
x ---> exec 执行 --> 1
比如 777 第一个 7 是给属主 rwx 权限 第二个 7 是给属组 rwx 权限 第三个 7 是给其他人 rwx 权限
764 这个的话 属主 rwx 操作 属组 rw 操作 其他人 r 操作
其他的类似都是这样子的
eg:
chmod 644 file.txt
ll file.txt
-rw-r--r--. 1 tom it 0 Nov 1 15:30 file.txt
chmod 755 file.txt
-rwxr-wr-w. 1 tom it 0 Nov 1 15:30 file.txt
# 这个也可以使用 -R 进行递归修改 针对于目录 修改当前目录及目录下面的文件的权限
权限案例
rwx权限对目录和文件的影响
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
r(读取) | 可以读取文件的内容 | 可以列出目录的内容(文件名) |
w(写入) | 可以更改文件的内 | 可以创建目录或删除目录中的任一文件 |
x(执行) | 可以作为命令执行文件 | 可以访问目录中的内容(取决于目录中文件的权限) |
对文件:
r ------ cat vim tail head more less
w ------ vi vim echo > >>
x ------ bash /dir/file 注意:如果没有x权限,root用户都无法执行 chmod a-x file ./file 其他人对文件只有写的权限
对目录:
r ----- ls 如果只有r权限,可以看到目录下的内容,但是有报错信息
w ----- touch rm 可以对目录下的文件创建和删除但是要有执行权限
x ----- cd 进去目录
总结
目录:
o 用户 对目录只有 x 权限,可以使用 cd 进去到目录里面,在该目录下面不能使用ls 命令 ,因为我用root用户在该目录下面创建了一个 a.txt 默认权限是 644 ,所以 o 用户对使用cat a.txt 可以查看到内容(你得提前知道文件名不然ls也查看不到文件名)。echo vim touch rm这些命令在该目录下面不可用
给o用户对目录增加一个w权限,依旧不能使用ls命令,但是 touch,echo ,rm 等一些命令可以使用了。
当无 x 权限则不能使用cd进入目录里面
文件
只研究 x 权限
当属主无 x 权限的话 及 不能使用 ./file.sh 运行,但是可以使用 sh file.sh 执行脚本文件
但是对于o用户发生了跟上面一样的情况
对于上面这个现象,解释为:
1.sh+脚本名称,可以不必事先设定shell的执行权限。因为这个是将shell_test.sh作为参数传给sh(bash)命令来执行的。这时不是shell_test.sh自己来执行,而是被调用执行,所以不要可执行权限。
2.如果直接运行shell_test.sh,就会报权限问题
使用命令执行文件时,是不需要加-x可执行权限的,如果是直接执行文件,则需要加上-x可执行权限
老师之前说,sh脚本第一行需要写 #!/bin/bash,这个呢解释如下:
#!/bin/sh 和 #!/bin/bash 都是脚本文件的开头,用来指定脚本文件的解释器。其中 #!/bin/sh 指定的是 Bourne shell 解释器,而 #!/bin/bash 指定的是 Bash shell 解释器。其中Bash shell 是Bourne shell 的增强版
权限掩码
umask 用户掩码
#root用户默认最高权限
目录---777 文件---666
#查看umask
umask
0022 root账户默认
0002 普通用户默认
#通过计算得出root用户创建目录和文件的权限为:
也是现在root用户创建完目录和文件的默认权限:
目录:755
文件:644
#修改umask
umask 0111
高级权限
高级权限的类型
suid -> 4 提权(针对于二进制文件) 使用者使用该命令的时候,相当于该命令的所有者执行
# passwd 这个命令
ll /bin/passwd
-rwsr-xr-x. 1 root root 68816 4月 1 2020 /bin/passwd
# 其中第四位的s表明该命令拥有suid权限,当其他用户使用 passwd 命令的时候,系统会认为是 root 用户在执行这条命令
sgid -> 2 继承属组权限 就是该目录下面的文件都归属于父目录的属组
sticky -> 1 权限控制 对该目录设置此权限后,该目录下的文件只能所有者删除,其他人删除不了,也修改不了,root用户凌驾于一切
设置权限
a.字符
chmod u+s file # 提权 suid 只能作用于 u 上面+s
chmod g+s dir # 继承属组权限 只能对 g 上面+s
chmod o+t dir # 权限控制 只能对 o 设置
b.数字
chmod 4777 file
chmod 2777 dir
chmod 1777 dir
# 取消权限
chmod u-s file
chmod g-s dir
chmod o-t dir
suid
那么这个特殊权限的特殊性的作用是什么呢?
1、SUID权限仅对命令文件(二进制文件)有效;
2、执行者将具有该程序拥有者(owner)的权限。
sgid
把s放到文件的所属用户组的x位置上的话,就是SGID。那么SGID的功能是什么呢?和SUID一样,只是SGID是继承改程序的所属组。
SGID主要用在目录上-----如果用户在此目录下具有w权限的话,使用者在此目录下建立新文件,则创建的这个文件的群组与此目录的群组相同。
Sticky
这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。
SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。
目前两种给普通用户提权手段:
suid: 基本针对所有用户,任何用户在执行有suid权限的程序时(例如/usr/bin/rm),都是以root身份在执行。
sudo: 有针对性,例如针对某个用户以能够以root的身份执行某些命令。
放开所有命令使用权
[root@linux-server ~]# visudo #打开配置文件
90 ##
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 jack ALL=(ALL) NOPASSWD: ALL #添加内容
94 ## Allows members of the 'sys' group to run networking, software,
测试
[root@linux-server ~]# su - jack
Last login: Wed Nov 6 22:04:46 CST 2019 on pts/2
[jack@linux-server ~]$ sudo mkdir /test1
配置解释:
jack表示用户名
ALL=(ALL) #表示sudo可以切换到任意用户登陆所有计算机执行命令
NOPASSWD: ALL #表示所有命令都可以作为root身份执行时不需要root用户的密码
放开个别命令使用权
[root@linux-server ~]# visudo | vim /etc/sudoers
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
lisi ALL=(ALL) ALL
93 jack ALL=(ALL) NOPASSWD:ALL
94 alice ALL=(ALL) NOPASSWD:/usr/bin/mkdir, /usr/bin/rm, /usr/bin/touch
95
96 ## Allows members of the 'sys' group to run networking, software,
%wheel ALL=(ALL) ALL
将普通用户加入到wheel组
usermod -G wheel zhangsan
gpasswd -d zhangsan wheel
测试:
[root@linux-server ~]# su - alice
Last login: Fri Jul 24 00:52:13 CST 2020 on pts/1
[alice@linux-server ~]$ touch /file
touch: cannot touch ‘/file’: Permission denied
[alice@linux-server ~]$ sudo touch /file
访问控制权限
setfacl 针对个人设置权限 一个人查看一个文件的权限
getfacl 查看权限
已知文件:
[root@xiaoming tmp]# ll
-rw-r--r-- 1 root root 0 11月 26 11:25 a.txt
如果希望只有xiaoming用户可以rwx操作/tmp/a.txt文件
那么我们可以这样做
setfacl -m u:xiaoming:rwx /tmp/a.txt
-m 设置facl权限
u: 用户,也可以指定组 g
xiaoming: 需要指定的用户
rwx: 权限
让我们来看下现在xiaoming是否拥有这个权限:
1、尝试对该文件进行操作
2、getfacl /tmp/a.txt
[root@xiaoming /tmp]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:xiaoming:rwx
group::r--
mask::rwx
other::r--
我们可以看到 xiaoming 拥有了对该文件的rwx权限
那么如何收回权限呢
方法1、
setfacl -m u:xiaoming:--- a.txt
方法2、
setfacl -x u:xiaoming a.txt
我们也可以设置该文件为所有人所有组访问
setfacl -m ::rwx a.txt
总结
- 提权方法1:给某个命令提权
chmod u+s /usr/bin/rm #“命令”
缺点:一旦提权,所有用户都可以像root用户一样执行命令
- 提权方法2:给某个用户某些命令的权限
visudo
缺点:被提权的用户将会拥有某些或者全部root用户的权限
提权方法3:给某个用户设置针对某个文件的特殊权限
setfacl
getfacl