文件的权限讲解

1、文件的基本权限

权限的作用:

  • 通过对文件设定权限可以达到以下三种访问限制权限:
    • 只允许用户自己访问;
    • 允许一个预先指定的用户组中的用户访问;
    • 允许系统中的任何用户访问。

权限讲解

#查看一下权限
[root@master ~]# ls -ld /data/ /data/1.txt 
drwxr-xr-x 3 root root 100 6月  26 21:55 /data/
-rwxr-xr-x 1 root root   0 6月  26 06:59 /data/1.txt

文件的权限:

  • -rwxr-xr-x:
  • 第一个-:表示文件类型
    • -:表示文件类型
    • p:管道文件
    • d:目录文件
    • l:连接文件
    • s:套接字文件
    • c:字符设备文件
    • b:块设备文件
  • rwx:所有者权限
  • r-x:所属组权限
  • r-x:其他人权限
  • root:所有者
  • root:所属组

r:代表可读

w:代表可写

x:代表可执行;

r:可读 w:可写 x:可执行
对文件 可以cat、more、less 可以vim 执行程序
对目录 可以ls 可以mv/rm/cp 可以cd

文件的所有者:

  • 创建文件的用户,用户主对文件拥有一切的权限

文件的所属组:

  • 用户组:如果文件的所属有zhangsan、lisi等等用户,用户组对文件有的权限,
  • zhangsan和lisi;

其他人:

  • 除了所有者和所属组,剩下的就是其他人了;
#liangjiawei创建的文件,所有者和所属组都是liangjiawei
[liangjiawei@master ~]$ ll
总用量 0
-rw-rw-r-- 1 liangjiawei liangjiawei 0 6月  27 06:55 liangjiawei.txt

#如果目录没有开放w权限,那么用户是无法创建文件的
	#换句话来说,文件的增删改查是由上级目录的w决定的;
[liangjiawei@master ~]$ touch /data/liangjiawei
touch: 正在设置"/data/liangjiawei" 的时间: 权限不够
[liangjiawei@master ~]$ ll -ld /data
drwxr-xr-x 3 root root 100 6月  26 21:55 /data
	#因为liangjiawei用户对于data目录来说是其他人,而其他人是不具备w权限的,
	#所以它无法添加文件;

2、权限的命令相关

chown命令

作用:修改文件的所有者或者所属组

语法:chown+【所有者:所属组】+文件名

#改变文件所有者和所属组的几种表达方式;
[root@master ~]# chown user2: /data/1.txt 
[root@master ~]# ll /data/1.txt 
-rwxr-xr-x 1 user2 user2 0 6月  26 06:59 /data/1.txt

[root@master ~]# ll /data/1.txt 
-rwxr-xr-x 1 liangjiawei liangjiawei 0 6月  26 06:59 /data/1.txt

[root@master ~]# chown :user3 /data/1.txt 
[root@master ~]# ll /data/1.txt 
-rwxr-xr-x 1 liangjiawei user3 0 6月  26 06:59 /data/1.txt

[root@master ~]# chown root:root /data/1.txt 
[root@master ~]# ll /data/1.txt 
-rwxr-xr-x 1 root root 0 6月  26 06:59 /data/1.txt

[root@master ~]# chown liangjiawei  /data/1.txt 
[root@master ~]# ll /data/1.txt 
-rwxr-xr-x 1 liangjiawei root 0 6月  26 06:59 /data/1.txt

[root@master ~]# chown .liangjiawei  /data/1.txt 
[root@master ~]# ll /data/1.txt 
-rwxr-xr-x 1 liangjiawei liangjiawei 0 6月  26 06:59 /data/1.txt

chgrp命令

作用:修改文件或者目录的默认属组

语法:chgrp+用户组+文件名

选项:

  • -R:对目录进行操作
[root@master ~]# chgrp root /data/1.txt 
[root@master ~]# ll /data/1.txt 
-rwxr-xr-x 1 liangjiawei root 0 6月  26 06:59 /data/1.txt

文件权限的验证试验

#首先把/data/目录开放全
[root@master ~]# chmod 777 /data/
[root@master ~]# ll -d /data/
drwxrwxrwx 3 root root 100 6月  26 21:55 /data/

#创建一个文件
	#文件的所有者、所属组都是root
[root@master ~]# touch /data/a.txt
[root@master ~]# ll /data/a.txt
-rw-r--r-- 1 root root 0 6月  27 07:26 /data/a.txt
[root@master ~]# echo "i learn linux "> /data/a.txt 

#切换liangjiawei用户,相当于文件的其他人
[liangjiawei@master ~]$ cat /data/a.txt 
i learn linux 

#但是不能修改
[liangjiawei@master ~]$ echo liangjiawei >> /data/a.txt 
-bash: /data/a.txt: 权限不够

#又是可以删除文件
[liangjiawei@master ~]$ rm -rf /data/a.txt 
[liangjiawei@master ~]$ ll /data/
总用量 0

chmod命令

作用:修改权限的命令

语法:chmod+【ugoa】【±=】+【rwx】+文件名

选项解释:

  • u:所有者
  • g:所属组
  • o:其他人
  • +:添加权限
  • -:减少权限
  • =:直接赋予权限
  • r:可读
  • w:可写
  • x:可执行
#直接赋予权限
[root@master ~]# chmod u=rwx,g=r-x,o=r-x /data/
[root@master ~]# ll -d /data/
drwxr--r-- 2 root root 6 6月  27 07:28 /data/

[root@master ~]# touch /data/aa.txt
[root@master ~]# ll /data/aa.txt 
-rw-r--r-- 1 root root 0 6月  27 07:32 /data/aa.txt


#减少权限
[root@master ~]# chmod u-w /data/aa.txt 
[root@master ~]# ll /data/aa.txt 
-r--r--r-- 1 root root 0 6月  27 07:32 /data/aa.txt

数字表示权限

八进制的换算规则

权限 二进制 八进制 描述
000 0 没有任何权限
–x 001 1 只有执行权限
-w- 010 2 只有写入权限
-wx 011 3 只有写入和执行权限
r– 100 4 只有只读权限
r-x 101 5 可读可执行权限
rw- 110 6 可读可写权限
rwx 111 7 可读可写可执行权限

因此对应的算法是:

  • r–>4
  • w–>2
  • x–>1
  • rwx–>7

所以满权限是rwxrwxrwx相当于数字法的777

#数字法修改文件的权限
[root@master ~]# chmod 755 /data/
[root@master ~]# ll -ld /data/
drwxr-xr-x 2 root root 20 6月  27 07:32 /data/
[root@master ~]# 

文件权限对于目录和文件的作用

权限 对文件的影响 对目录的影响
可读r 可以读取文件内容 可以列出目录内容
可写w 可以写入、修改文件内容 可以删除、创建目录下的文件
可执行x 可以作为程序执行内容 可以进入到目录

umask讲解

文件默认创建的权限是644

目录默认创建的权限是755

umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字

修改umask值

  • 可以在全局配置文件中修改/etc/profile
  • 也可以在用户家目录的.bash_profile文件中指定
  • 也可以使用umask命令
[root@master ~]# vim /etc/profile
............
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi
...........

#解释说明
if语句判断
$UID -gt 199:uid是否大于等于199
&&:这个代表并且的意思
"`/usr/bin/id -gn`" = "`/usr/bin/id -un`"  :这里代表用户的UID是否和GID相等,


#临时修改umask
[root@master ~]# umask
0022
[root@master ~]# umask -S
u=rwx,g=rx,o=rx

[root@master ~]# umask 033
[root@master ~]# umask -S
u=rwx,g=r,o=r

权限的算法:

  • 文件、或者目录默认的权限减去umask的值–>这种不够专业

默认的文件属性:666

umask值为022

那么正常的文件权限是:666-022=644

默认的目录属性是:777

umask值为022

那么正常的目录权限是:777-022=755

那么问题来了:如果默认的掩码值是033,那么对应的权限又是怎么说?

我们借此来引入真正的权限的科学计算方法:

  • 将默认权限(目录777,文件666)和umask值都转换为2进制
  • 对umask取反
  • 将默认权限和umask取反后的值做与运算
  • 将得到的二进制值再转换8进制,即为权限,
如果掩码值:033
文件的权限:666
目录的权限:777

应该是与的结果,与就是相同才不变
文件权限:666	掩码值033
110 110 110		000 011 011
				111 100 100		#这个是掩码的取反值
110 110 110		#文件的满权限666
111 100 100		#掩码的取反值
-----------
110 100 100		#与的结果

最后得出的是644	这个就是掩码值033的最后文件权限;

3、文件的特殊权限讲解

suid讲解

  • suid只能设定在具有x权限的执行程序上
  • 对目录是无效的
  • 主要的作用是让程序运行的时候权限提前,变为所有者的权限
  • 设定:u+s或者u-s
    • 如果有执行权限,rws显示
    • 如果没有执行权限,rwS显示

通过案例分析

#正常来说,用户是可以自己修改自己的密码的,
	#修改自己的密码,代表要写入这两个文件,但是这两个的权限是完全是没有权限的;
[root@master ~]# ll /etc/passwd
-rw-r--r-- 1 root root 2349 6月  26 21:57 /etc/passwd
[root@master ~]# ll /etc/shadow
---------- 1 root root 1622 6月  27 06:27 /etc/shadow


#真正的原因就是passwd命令
[root@master ~]# which passwd
/usr/bin/passwd
[root@master ~]# ll  /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 1月  30 2014 /usr/bin/passwd

#我们切换一下liangjiawei用户,它也不可能用cat查看到/etc/shadow文件
[liangjiawei@master ~]$ cat  /etc/shadow
cat: /etc/shadow: 权限不够

#我们把cat命令设定suid就能完成
	#cat命令直接标红显示,十分危险
[root@master ~]# which cat
/usr/bin/cat
[root@master ~]# chmod u+s /usr/bin/cat
[root@master ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 54080 6月  30 2016 /usr/bin/cat

[root@master ~]# su - liangjiawei
上一次登录:日 6月 27 08:32:42 CST 2021pts/0 上
[liangjiawei@master ~]$ cat /etc/shadow
root:$6$U7Z0DI9f$T/Zc075ODe.HAdo1ZIasuBkpJxSbE1AOBXC9MjJJcjYNqGeanfwMOEWPjVTiISBovP7ErxZYaqiANPehcXz7B1:18804:0:99999:7:::

SGID讲解

  • 可以对二进制执行程序设定
  • 也可以对目录设定
  • 主要创建文件的时候,默认的所属组是目录的所属组,继承上级目录的所属组
  • 设定:g+s或者是g-s
    • 如果有执行权限,rws显示
    • 如果没有执行权限,rwS显示
#把/data/目录设定一个sgid
[root@master ~]# chmod 4777 /data/
[root@master ~]# ll /data/ -d
drwsrwsrwx 2 root root 20 6月  27 07:32 /data/

#切换liangjiawei用户创建文件,发现所属组都是root的
[root@master ~]# su - liangjiawei
上一次登录:日 6月 27 08:33:55 CST 2021pts/0 上
[liangjiawei@master ~]$ cd /data/
[liangjiawei@master data]$ touch liangjiawei
[liangjiawei@master data]$ ll liangjiawei
-rw-rw-r-- 1 liangjiawei root 0 6月  27 08:37 liangjiawei

SBIT讲解

  • 针对的是目录,对文件是无效的
  • 主要的作用是禁止文件的其他人删除、修改文件;
  • 设定:o+t或者o-t
    • 如果有执行权限rwt显示
    • 如果没有执行权限rwT显示
#系统目录默认的是/tmp具有sbit
[root@master ~]# ll -d /tmp/
drwxrwxrwt. 10 root root 4096 6月  27 08:38 /tmp/


#用户user2在tmp下创建文件
[root@master ~]# su - user2
上一次登录:六 6月 26 12:16:23 CST 2021pts/0 上
最后一次失败的登录:六 6月 26 21:30:08 CST 2021从 192.168.75.1ssh:notty 上
最有一次成功登录后有 1 次失败的登录尝试。
su: 警告:无法更改到 /home/user2 目录: 没有那个文件或目录
-bash-4.2$ touch /tmp/user2
-bash-4.2$ ll /tmp/user2
-rw-rw-r-- 1 user2 user2 0 6月  27 08:39 /tmp/user2
-bash-4.2$ echo hahah >> /tmp/user2 
-bash-4.2$ cat /tmp/user2 
hahah

#用户liangjiawei无法修改或者删除user2的文件
[root@master ~]# su - liangjiawei
上一次登录:日 6月 27 08:37:06 CST 2021pts/0 上
[liangjiawei@master ~]$ echo liangjiawei > /tmp/user2 
-bash: /tmp/user2: 权限不够
[liangjiawei@master ~]$ rm -rf /tmp/user2 
rm: 无法删除"/tmp/user2": 不允许的操作


4、文件扩展ACL权限

acl:是文件控制访问,

  • 文件的权限除了所有者、所属组,其他人的权限之外
  • 还有一个额外的控制访问;

setfacl命令

作用:设置文件控制访问;

语法:setfacl+【选项】+【ugo】:【用户】:【rwx】+文件名

选项:

  • -m:添加acl权限
  • -x:取消一条acl权限
  • -b:取消文件的acl权限
  • -d:默认的acl权限
  • -R:递归acl全向
#给文件设置acl权限;
[root@master data]# setfacl -m u:liangjiawei:rwx aa.txt 

#删除一条acl规则
[root@master data]# setfacl -x u:user2 aa.txt 
[root@master data]# getfacl  aa.txt 
# file: aa.txt
# owner: root
# group: root
user::r--
user:liangjiawei:rwx
group::r--
mask::rwx
other::r--


#删除所有的acl权限
[root@master data]# setfacl -b aa.txt 
[root@master data]# getfacl aa.txt 
# file: aa.txt
# owner: root
# group: root
user::r--
group::r--
other::r--


getfacl命令

作用:查看默认的acl权限

语法:getfacl+文件名

[root@master data]# getfacl aa.txt 
# file: aa.txt
# owner: root
# group: root
user::r--
user:user2:rw-
user:liangjiawei:rwx
group::r--
mask::rwx
other::r--

5、实战:root都无法删除的文件

问题:

众所周知,root是linux系统的最高管理者;

所以还有一些措施来限制root;

chattr命令

作用:给文件设置隐藏权限

语法:chattr+【选项】+文件名

选项:

  • +a:只能追加内容,不能修改和删除内容;
  • -a:取消a限权
  • +i:不能操作,不能增加内容,不能删除内容;
  • -i:取消i权限

lsattr命令

作用:查看隐藏权限

语法:lsattr+文件名

[root@master data]# lsattr  aa.txt 
---------------- aa.txt

测试:连root都无法删除的文件

#给aa.txt文件设置i权限
[root@master data]# chattr +i aa.txt 
[root@master data]# echo aaa >> aa.txt 
-bash: aa.txt: 权限不够


#尝试删除文件、
[root@master data]# rm -rf aa.txt 
rm: 无法删除"aa.txt": 不允许的操作

#再换个,让文件设置a权限
	#root是可以追加文件到aa.txt
[root@master data]# chattr +a  aa.txt 
[root@master data]# echo aaaa >> aa.txt 
[root@master data]# cat aa.txt 
aaaa
	#我们尝试修改文件内容
[root@master data]# echo bb > aa.txt 
-bash: aa.txt: 不允许的操作
	#我们在尝试删除文件
[root@master data]# rm -rf aa.txt 
rm: 无法删除"aa.txt": 不允许的操作
	#添加a属性也无法删除文件
	
#查看文件的隐藏属性
[root@master data]# lsattr aa.txt 
-----a---------- aa.txt

你可能感兴趣的:(Linux-基础知识篇)