Linux学习随笔(基础篇)-- 文件权限

Linux学习随笔(基础篇)-- 文件权限

小土豆Linux学习随笔

—— 清听凌雪慕忆

Hi,大家好!

我是小土豆,一名Lad、IT搬砖工人。

深受周围IT牛的影响哈, 作者也坚定学习方向、自律,步履不停,永无休止。Linux运维、Python等的学习过程中,不断实操完善学习笔记,如有错误烦请各位大牛指正。同时,帮助更多的爱好者入门,共同进步!

文章目录

    • 1. Linux 文件权限
      • 1.1 文件权限
      • 1.2 权限在文件和目录区别
      • 1.3 字符与数字权限表示
        • 【示例1】
      • 1.4 字符数字转换示意图
        • 【示例1】
      • 1.5 常见的文件类型
    • 2. Linux文件的特殊权限
      • 2.1 SUID权限
        • 2.1.1 SUID作用
          • 【示例1】
        • 2.1.2 授权方式
          • 【示例2】
        • 2.1.3 小结
      • 2.2 SGID权限
        • 2.2.1 SGID作用
        • 2.2.2 授权方式
        • 2.2.3 小结
      • 2.3 SBIT权限
        • 2.3.1 SBIT作用
          • 【示例1】
        • 2.3.2 授权方式
          • 【示例2】
    • 3. Linux目录权限整合

1. Linux 文件权限

1.1 文件权限

​ 在Linux系统中,每个文件都有归属的所有者和所属组,并且规定了文件的所有者、所属组以及其他人对文件所拥有的可读(r)、可写(w)、可执行(x)等权限。

可读 :表示能够读取文件的实际内容;

可写:表示能够编辑、新增、修改、删除文件的实际内容;

可执行:表示能够运行一个脚本程序。

Linux学习随笔(基础篇)-- 文件权限_第1张图片

1.2 权限在文件和目录区别

可读、可写、可执行权限对应的命令在文件和目录上是有区别的 ,具体如下所示:

权限 文件 目录
读取(r) cat ls
写入(w) vim touch
执行(x) ./script cd

1.3 字符与数字权限表示

​ 文件的可读、可写、可执行权限的英文全称分别是read、write、execute,可以简写为r、w、x,亦可分别用数字4、2、1来表示,文件所有者、文件所属组及其他用户权限之间无关联 。

Linux学习随笔(基础篇)-- 文件权限_第2张图片

【示例1】

  • 若某个文件的权限为7,则代表可读、可写、可执行(4+2+1);若权限为6,则代表可读、可写(4+2)。
  • 现在一个文件,其所有者拥有可读、可写、可执行的权限,其文件所属组拥有可读、可写的权限;其他人只有可读的权限。那么,这个文件的权限就是rwxrw-r–,数字法表示即为764

减号是占位符,代表这里没有权限,在数字表示法中用0表示。

1.4 字符数字转换示意图

	以上可见,rw-转换后是420,r-x转换后是401,-w-转换后是020。然后,将这3组数字之间的每组数字进行相加,得出652,这便是转换后的数字表示权限。 

Linux学习随笔(基础篇)-- 文件权限_第3张图片
一定要心中牢记 ,文件的所有者、所属组和其他用户的权限之间无关联。

【示例1】

需求: 根据上面阐述,请分析Demo.txt文件信息 。

Linux学习随笔(基础篇)-- 文件权限_第4张图片

  • 上图所示:包含了文件的类型、访问权限、所有者(属主)、所属组(属组)、占用的磁盘大小、最后修改时间和文件名称等信息。

【文件分析】

  • 文件的类型:普通文件;
  • 所有者权限:可读、可写(rw-);
  • 所属组权限:可读(r–);
  • 其他人也有权限:可读(r–);
  • 文件的磁盘占用大小:19字节;
  • 最近一次的修改时间为6月27日的22:21;
  • 文件的名称:Demo.txt。

排在权限前面的减号(-)是文件类型(减号表示普通文件),经常会把它跟“无权限”混淆。

【拓展】:ls、ls -a、ls -l、ls -al、ll、ll -a区别

  • ls:仅罗列出当前文件名或目录名 ;
  • ls -a:罗列出目录下的所有文件,包括以 . 开头的隐含文件,相当于 ll -a;
  • ls -l:列出文件的详细信息,相当于 ll ;
  • ls -al:显示当前目录下的所有文件及文件夹包括隐藏的.和…等的详细信息 。

1.5 常见的文件类型

​ 普通文件的范围特别广泛,比如纯文本信息、服务配置信息、日志信息以及Shell脚本等,都属于普通文件。几乎在每个目录下都能看到普通文件(-)和目录文件(d)的身影。

​ 块设备文件(b)和字符设备文件(c)一般是指硬件设备,比如鼠标、键盘、光驱、硬盘等,在/dev/目录中最为常见。应该很少有人会对鼠标、键盘进行硬件级别的管理吧。

Linux学习随笔(基础篇)-- 文件权限_第5张图片

2. Linux文件的特殊权限

在一些应用中,rwx权限无法满足功能需求, Linux中除了rwx权限外,另外还有三种特殊权限:SUID、SGID、SBIT 。此时可以对文件权限进行设置的特殊功能,可以与一般权限同时使用。

SUID, SGID,SBIT显示为小写字母 s,s,t, 在数字权限上与rwx类似,对应三位数的二进制,有权限的位置上为1,无权限的位置上为0。SUID,SGID,SBIT分别表示4,2,1。并且需要在最前面增加一位。

2.1 SUID权限

2.1.1 SUID作用

SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效)。

Linux学习随笔(基础篇)-- 文件权限_第6张图片

  • 用户密码保存在/etc/shadow文件中 , 发现它的默认权限是000 , 也就是说除root管理员以外,所有用户都没有查看或编辑该文件的权限。

Linux学习随笔(基础篇)-- 文件权限_第7张图片

  • 查看passwd命令属性时发现:

(1)普通用户仅有读取权限;

(2)所有者的权限由rwx变成了rws,其中x改变成s也就是该文件被赋予了SUID权限。

  • 如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S。

综上所述:

当s这个标志出现在文件所有者的x权限上时,此时就被称为Set UID,简称SUID。

【作用】

  • SUID权限仅对 二进制可执行文件,对目录无效 ;
  • 执行者对于该可执行文件需要具有x权限;
  • 在执行过程中,调用者会暂时获得该文件的拥有者权限;
  • 该权限只在程序执行的过程中有效, 执行完毕不再拥有所有者权限;
【示例1】
[root@localhost ~]# useradd lvbaoyuan
[root@localhost ~]# passwd lvbaoyuan
更改用户 lvbaoyuan 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# ll /bin/passwd           # 查看passwd命令权限
-rwsr-xr-x. 1 root root 27856 41 2020 /bin/passwd
[root@localhost ~]# su lvbaoyuan             # 切换到lvbaoyuan
[lvbaoyuan@localhost root]$ pwd         
/root
[lvbaoyuan@localhost root]$ passwd            # 修改密码
更改用户 lvbaoyuan 的密码 。
为 lvbaoyuan 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。            # 成功修改密码
[lvbaoyuan@localhost root]$ exit
exit
[root@localhost ~]# chmod u-s /bin/passwd     # 修改passwd的权限,去掉suid权限
[root@localhost ~]# ll /bin/passwd
-rwxr-xr-x. 1 root root 964536 41 2020 /bin/passwd            # 发现s变成了x
[root@localhost ~]# su lvbaoyuan              # 切换到lvbaoyuan
[lvbaoyuan@localhost root]$ passwd
更改用户 lvbaoyuan 的密码 。
为 lvbaoyuan 更改 STRESS 密码。
(当前)UNIX 密码:
passwd: 鉴定令牌操作错误                     # 密码无法进行修改
[lvbaoyuan@localhost root]$

**Question:**如果普通用户在使用passwd命令时,是以root用户身份去执行的话,那普通用户是不是可以修改其它用户的密码?

**答:**是不可以的,因为在passwd命令中,存在一种判断,此判断会在执行passwd命令时去判断执行的用户时是root还是普通用户,如果是普通用户,那么只能使用passwd命令,后面不可加上参数,如果是root用户,后面才可加上其它参数(参数就是用户)。那么普通用户就无法进行修改其它用户的密码。

2.1.2 授权方式

chmod命令(全称:change mode)其用于改变文件或目录权限的命令。默认只有文件的所有者和管理员可以设置文件权限,普通用户只能管理自己文件的权限属性。

【授权方式】

  • chmod u+s filename

  • chmod 4xxx filename

【示例2】
[lvbaoyuan@localhost root]$ su root
密码:
[root@localhost ~]# cd /opt
[root@localhost opt]# touch testfile    #  创建一个名为testfile的文件
[root@localhost opt]# ll     #   查看详细信息
总用量 0
drwxr-xr-x. 2 root root 6 1031 2018 rh
-rw-r--r--. 1 root root 0 629 22:08 testfile         # 没有属主权限位没有执行权限
[root@localhost opt]# chmod u+s testfile         # 在属主权限位上加上s
[root@localhost opt]# ll           #  查看详细信息
总用量 0
drwxr-xr-x. 2 root root 6 1031 2018 rh
-rwSr--r--. 1 root root 0 629 22:08 testfile           #  没有执行权限,所以就显示(大写)S
[root@localhost opt]# chmod u+x testfile           #   再添加执行权限
[root@localhost opt]# ll            #  查看详细信息
总用量 0
drwxr-xr-x. 2 root root 6 1031 2018 rh
-rwsr--r--. 1 root root 0 629 22:08 testfile          #   大写S变为小写s,增加了执行权限
[root@localhost opt]# touch testfile2       #  创建一个名为testfile2的文件
[root@localhost opt]# ll          #  查看详细信息
总用量 0
-rwsr--r--. 1 root root 0 516 23:40 filename
-rw-r--r--. 1 root root 0 516 23:46 filename2   #  正常创建的权限:644
[root@localhost opt]# chmod 4764 testfile2          #  增加SUID权限,并且增加属主的执行权限,并赋予写入权限
[root@localhost opt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 1031 2018 rh
-rwsr--r--. 1 root root 0 629 22:08 testfile
-rwsrw-r--. 1 root root 0 629 22:09 testfile2       #  属主中变成小写s
[root@localhost opt]#

2.1.3 小结

2.2 SGID权限

2.2.1 SGID作用

设置给目录使用的,主要目的就是为了使用户无法删除其它用户所创建的文件或目录。

如果该属组权限位上有执行权限,则会显示(小写)s。

如果该属组权限位上没有执行权限,则会显示(大写)S。

当s出现在文件的所属组x权限位置时,表示所属组有SGID的权限。

【作用】

  • 既可以作用于目录,也可以作用于可执行文件;
  • 只要父目录有SGID权限,所有的子目录都会递归继承;
  • 执行者对于该可执行文件需要具有x权限;
  • 在执行过程中,调用者会暂时获得该文件的所属组权限;

####【示例1】

[root@localhost opt]# mkdir test_folder              # 创建test_folder目录
[root@localhost opt]# ll
总用量 0
drwxr-xr-x. 2 root root 6 1031 2018 rh
-rwsr--r--. 1 root root 0 629 22:08 testfile
-rwsrw-r--. 1 root root 0 629 22:09 testfile2
drwxr-xr-x. 2 root root 6 629 22:40 test_folder         #   查看权限
[root@localhost opt]# chmod 777 test_folder               #   查看权限为777
[root@localhost opt]# ll  -d test_folder
drwxrwxrwx. 2 root root 6 629 22:40 test_folder         #  权限已修改
[root@localhost opt]# cd test_folder                    # 切换到test_folder目录
[root@localhost test_folder]# touch test_file3
[root@localhost test_folder]# ll
总用量 0
-rw-r--r--. 1 root root 0 629 22:43 test_file3
[root@localhost test_folder]# mkdir demo1    # 创建demo1目录
[root@localhost test_folder]# ll
总用量 0
drwxr-xr-x. 2 root root 6 629 22:44 demo1            # demo1文件的属主和说数组都是root
-rw-r--r--. 1 root root 0 629 22:43 test_file3
[root@localhost test_folder]# su lvbaoyuan       #  切换lvbaoyuan用户
[lvbaoyuan@localhost test_folder]$ cd ..            #  返回上一级
[lvbaoyuan@localhost opt]$ cd test_folder        # 切换到test_folder目录
[lvbaoyuan@localhost test_folder]$ mkdir demo2      # 创建demo2目录
[lvbaoyuan@localhost test_folder]$ ll
总用量 0
drwxr-xr-x. 2 root      root      6 629 22:44 demo1
drwxrwxr-x. 2 lvbaoyuan lvbaoyuan 6 629 22:47 demo2      #  demo2文件的属主和属组都是lvbaoyuan用户
-rw-r--r--. 1 root      root      0 629 22:43 test_file3
[lvbaoyuan@localhost test_folder]$ exit            #   返回root用户
exit
[root@localhost test_folder]# cd ..
[root@localhost opt]# chmod g+s test_folder            #  将test_folder目录增加sgid权限
[root@localhost opt]# ll -d test_folder
drwxrwsrwx. 4 root root 50 629 22:47 test_folder     #  drwxrwsrwx.   :   属组的权限已增加了s
[root@localhost opt]# su lvbaoyuan    #  切换lvbaoyuan用户
[lvbaoyuan@localhost opt]$ cd test_folder
[lvbaoyuan@localhost test_folder]$ mkdir demo3    # 创建demo3目录
[lvbaoyuan@localhost test_folder]$ ll
总用量 0
drwxr-xr-x. 2 root      root      6 629 22:44 demo1
drwxrwxr-x. 2 lvbaoyuan lvbaoyuan 6 629 22:47 demo2
drwxrwsr-x. 2 lvbaoyuan root      6 629 22:49 demo3            #demo3的所属组用户已变为跟test_folder目录一致的用户
-rw-r--r--. 1 root      root      0 629 22:43 test_file3
[lvbaoyuan@localhost test_folder]$

Linux学习随笔(基础篇)-- 文件权限_第8张图片

2.2.2 授权方式

【授权方式】

  • chmod g+s filename # 取消授权则为g-s

  • chmod 2xxx filename

2.2.3 小结

  • 针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。
  • 当某个目录设置了SGID后,在该目录中新建的文件不在是创建该文件的默认所属组。
  • 使用SGID可以使得多个用户之间共享一个目录的所有文件变得简单。

2.3 SBIT权限

2.3.1 SBIT作用

SBIT全称sticky bit,沾滞位的意思。

如果该其它用户权限位上有执行权限,则会显示(小写)t。

如果该其它用户权限位上没有执行权限,则会显示(大写)T。

当t出现在其他组的x权限位置时,表示其他组具有SBIT的权限。

【作用】

  • 和SUID,SGID不同的是,只能用于目录

  • 使用者在该目录下,仅自己与root才有权力删除新建的目录或文件 。

    最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件。

【示例1】

只作用在目录上,当一个目录的没有设置sticky bit权限时,并且该目录对所有用户都有读、写、执行权限时,普通用户在该目录下所创建的文件或目录都会被其它用户删除。

[root@localhost opt]# mkdir demo_folder
[root@localhost opt]# ll -d demo_folder
drwxr-xr-x. 2 root root 6 629 23:16 demo_folder
[root@localhost opt]# chmod 777 demo_folder
[root@localhost opt]# ll -d demo_folder
drwxrwxrwx. 2 root root 6 629 23:16 demo_folder
[root@localhost opt]# cd demo_folder
[root@localhost demo_folder]# ll
总用量 0
[root@localhost demo_folder]# mkdir demo_1
[root@localhost demo_folder]# su lvbaoyuan
[lvbaoyuan@localhost demo_folder]$ touch demo.py   # 新建文件
[lvbaoyuan@localhost demo_folder]$ ll
总用量 0
drwxr-xr-x. 2 root      root      6 629 23:18 demo_1
-rw-rw-r--. 1 lvbaoyuan lvbaoyuan 0 629 23:20 demo.py
[lvbaoyuan@localhost demo_folder]$ exit
exit
[root@localhost /]# useradd lad
[root@localhost /]# pwd
/
[root@localhost /]# cd opt
[root@localhost opt]# su lad   # 创建新用户lad
[lad@localhost opt]$ ll
总用量 0
drwxrwxrwx. 3 root root 35 629 23:20 demo_folder
drwxr-xr-x. 2 root root  6 1031 2018 rh
-rwsr--r--. 1 root root  0 629 22:08 testfile
-rwsrw-r--. 1 root root  0 629 22:09 testfile2
drwxrwsrwx. 5 root root 63 629 22:49 test_folder
[lad@localhost opt]$ cd demo_folder
[lad@localhost demo_folder]$ ll
总用量 0
drwxr-xr-x. 2 root      root      6 629 23:18 demo_1
-rw-rw-r--. 1 lvbaoyuan lvbaoyuan 0 629 23:20 demo.py   #可以看到lvbaoyuan用户所创建文件demo.py
[lad@localhost demo_folder]$ rm -rf demo.py
[lad@localhost demo_folder]$ ll
总用量 0
drwxr-xr-x. 2 root root 6 629 23:18 demo_1    #demo.py文件已被删除
[lad@localhost demo_folder]$

2.3.2 授权方式

【授权方式】

  • chmod o+t filename # 取消授权则为g-s

  • chmod 1xxx filename

【示例2】

当一个目录设置了sticky bit权限时,普通用户在该目录下所创建的文件或目录,只能被该文件或目录的属主用户或root用户删除,其它用户无法删除别的用户所创建的目录或文件。

[root@localhost opt]# ll
总用量 0
drwxrwxrwx. 3 root root 20 629 23:23 demo_folder   # 权限为777
drwxr-xr-x. 2 root root  6 1031 2018 rh
-rwsr--r--. 1 root root  0 629 22:08 testfile
-rwsrw-r--. 1 root root  0 629 22:09 testfile2
drwxrwsrwx. 5 root root 63 629 22:49 test_folder   
[root@localhost opt]# chmod o+t demo_folder   # 增加sticky bit权限
[root@localhost opt]# ll -d demo_folder    # 查看demo_folder目录详细信息
drwxrwxrwt. 3 root root 20 629 23:23 demo_folder    # 其它用户上权限多了sticky bit权限
[root@localhost opt]# cd demo_folder
[root@localhost demo_folder]# touch demo1.py   # 创建一个文件
[root@localhost demo_folder]# ll
总用量 0
drwxr-xr-x. 2 root root 6 629 23:18 demo_1
-rw-r--r--. 1 root root 0 629 23:31 demo1.py
[root@localhost demo_folder]# exit
exit
[lvbaoyuan@localhost root]$ su lvbaoyuan
密码:
su: 鉴定故障
[lvbaoyuan@localhost root]$ cd /opt/demo_folder
[lvbaoyuan@localhost demo_folder]$ touch demo2.py    # 创建一个文件
[lvbaoyuan@localhost demo_folder]$ ll   
总用量 0
drwxr-xr-x. 2 root      root      6 629 23:18 demo_1
-rw-r--r--. 1 root      root      0 629 23:31 demo1.py
-rw-rw-r--. 1 lvbaoyuan lvbaoyuan 0 629 23:32 demo2.py
[lvbaoyuan@localhost demo_folder]$ exit
exit
[root@localhost ~]# passwd lad     对新建的lad用户设置密码
更改用户 lad 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# su lad    #   切换到lad用户
[lad@localhost root]$ cd /opt/demo_folder    # 进入demo_folder目录
[lad@localhost demo_folder]$ ll
总用量 0
drwxr-xr-x. 2 root      root      6 629 23:18 demo_1
-rw-r--r--. 1 root      root      0 629 23:31 demo1.py  # 可以查看到root用户创建的文件
-rw-rw-r--. 1 lvbaoyuan lvbaoyuan 0 629 23:32 demo2.py  # 可以查看到lvbaoyuan用户创建的文件
[lad@localhost demo_folder]$ rm -rf *.py    # 对目录下的.py格式文件进行删除
rm: 无法删除"demo1.py": 不允许的操作
rm: 无法删除"demo2.py": 不允许的操作      # 无法进行删除
[lad@localhost demo_folder]$

SUID、SGID、SBIT特殊权限的设置参数

参数 作用
u+s 设置SUID权限
u-s 取消SUID权限
g+s 设置SGID权限
g-s 取消SGID权限
o+t 设置SBIT权限
o-t 取消SBIT权限

3. Linux目录权限整合

【拓展】:Linux目录权限整合

​ SUID、SGID、SBIT对应的数字表示法,分别为4、2、1。这样777还不是最大权限,最大权限应该是7777,其中第1个数字代表的是特殊权限位。Linux目录权限数字表示法是由“特殊权限+一般权限”构成的。

如:rwxr-xr-t权限

最后一位是t,这说明该文件的一般权限为rwxr-xr-x,并带有SBIT特殊权限。对于可读(r)、可写(w)、可执行(x)权限的数字计算方法大家应该很熟悉了—rwxr-xr-x即755,而SBIT特殊权限位是1,则合并后的结果为1755。

下面就以数字权限67645537来形象化的了解数字与字符权限之间的转换。

  • 将权限的字符表示法转换为数字表示法

Linux学习随笔(基础篇)-- 文件权限_第9张图片

  • 将权限的数字表示法转换为字符标识法

Linux学习随笔(基础篇)-- 文件权限_第10张图片

你可能感兴趣的:(Linux,运维技术栈,linux,运维,centos)