linux文件权限

借东风
七星坛上卧龙登,一夜东风江水腾。
不是孔明施巧计,周郎安得逞才能?

基本权限

文件权限设置:可以使某个用户或者某个组能够对文件进行某些操作

权限对象:
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 41 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值