Linux基本权限管理

说明:文章部分内容源自网络,仅作交流学习使用,如构成侵权请私聊

参考资料:《鸟哥的Linux私房菜第四版》《Linux操作系统(微课版)(RHEL8CentOS8)(第2版)》《菜鸟教程》

测试系统:RHEL 8.2

如果文章有错误之处欢迎大家批评指正

概述

其实权限管理和用户组管理本应该放在一起说明的,但是为了避免单篇的篇幅过长,故分开进行讨论。

在深入学习一个知识点的时候,我会更倾向于了解这个知识点的作用,否则的话学习起来是毫无兴趣的,那么在Linux里面为什么需要权限管理呢?我个人认为主要有以下两个方面的原因:

一、处于系统安全考虑

例如在上一篇内容提到的用户口令存储位置,其实用户的口令在一开始是存储在/etc/passwd里面的,但是/etc/passwd文件对于所有用户都有可读的权限,并不是那么安全。所以目前大多收的Linux系统都将口令存放在/etc/shadow里面了。

同时,在Linux里面可以登录的用户被分为两种类型,root用户和普通用户。root用户拥有操作系统的全部权限,给所有人root权限,显然也不太现实。

etc/passwd文件权限

etc/shadow文件权限

二、出于工作协同的考虑

Linux系统一般是部署在企业的服务器之上的,并不像个人PC一样只有你自己使用。比如在做软件开发的时候可能会用到协同工作软件SVN。因此就必须针对协同工作的员工设置好对应权限,避免出现某音剧情(程序员离职,删库跑路)

权限管理和用户管理之间有什么关系呢?菜鸟教程有个图片非常形象且生动,用户管理相当于对用户进行授权,权限管理相当于给了开门的权限。

 图片援引自菜鸟教程(Linux 文件基本属性 | 菜鸟教程 (runoob.com)),侵删

Linux的权限类型

查看Linux权限的命令有很多,比如使用stat + 文件名,比如使用ls -l,以下我们均使用ls -l 查看文件类型。当使用ls -l 查看家目录的时候能看到以下的内容。

[root@Server01 ~]# ls -l
总用量 8
drwxr-xr-x. 2 root root    6 9月   5 18:33 公共
drwxr-xr-x. 2 root root    6 9月   5 18:33 模板
drwxr-xr-x. 2 root root    6 9月   5 18:33 视频
drwxr-xr-x. 2 root root    6 9月   5 18:33 图片
drwxr-xr-x. 2 root root    6 9月   5 18:33 文档
drwxr-xr-x. 2 root root    6 9月   5 18:33 下载
drwxr-xr-x. 2 root root    6 9月   5 18:33 音乐
drwxr-xr-x. 2 root root    6 9月   5 18:33 桌面
-rw-------. 1 root root 2032 9月   5 18:31 anaconda-ks.cfg
-rw-r--r--. 1 root root 2187 9月   5 18:32 initial-setup-ks.cfg

我们从里面随机抓取一条内容来查看以下它所代表的含义

  1、文件类型(以下只列出常见文件类型)

  • d   代表目录
  • -    代表普通文件
  • l    代表链接文件,类似于快捷方式
  • b   文件里面可供存储的周边设备,可随机读取的设备
  • c   输入设备,如键盘,打印机等

2、文件的权限

文件权限之于不同的用户

在Linux里面的文件权限可以分为三大类,分别是所有者(文件拥有者)权限所属组(加入这个用户组的用户)权限其他用户权限

在每一类用户的权限又可以被分为以下三种类型

  • r (read)读权限            读取文件内容
  • w(write)写权限           编辑文件内容
  • x(execute)执行权限   文件具备被系统执行的权限

值得注意的是,rwx针对不同的文件有不同的含义,对应不同的命令。

rwx之于文件

在Linux里面文件指的是含有数据的地方,包括文本文件(例如使用vim file1创建的普通文本文件),数据库内容档,二进制可执行文件(例如shell脚本文件 1.sh)。

  • r 读取文件内容,如使用cat查看文件内容
  • w 编辑修改文件内容,如使用echo hello > file1,写入hello到file1中,但是不具备删除文件的权限,因为文件是存放在目录里面的,如果要删除文件需要有对应目录的w权限
  • x 执行权限,在Windows系统中一个文件是否可以被执行通常是看文件的扩展名,如.bat,.exe等,在Linux里面一个文件是否可被执行和扩展名无关,只关心这个文件是否具有x权限,最简单的例子就是当你使用vim写了一个  “.sh”  的脚本文件之后,如果想要直接运行,必须使用 chmod + x n.sh(n为假定的文件名)才可以。而扩展名在Linux中一般只是为了方便用户明白这个文件和哪个程序关联。

rwx之于目录

在Linux中目录主要的内容是记录文件名清单,文件名和目录有强烈的关联。

  • r 表示具有读取目录结构清单的权限。例如使用  “ls”  命令查看文件夹的内容
  • w 表示具有更改文件目录清单的权限,例如创建新的文件、删除已经存在的文件、更改文件名、移动该目录里的文件和目录
  • x 目录本身并不能被执行,因此目录的x权限一般代表能否使用  “cd ”  进入该目录

其他

有多少文件名链接到此Inode。Inode ID:每个文件都会将它的权限和属性记录到文件系统的i-node中,但是目录树是使用文件名来记录(如,使用ls -l查看的文件内容详细信息),所以每个文件名就必须链接到一个Inode ID去,有点类似于Windows的快捷方式,之于什么是Inode我们将会在下一章进行详细介绍。当你创建一个目录文件的时候这个值是2,因为目录里面有 “.” 和“..”文件,.文件链接到当前目录,.. 链接到当前目录的父目录

Time代表的是文件的最近改动时间(Modify time)或者是文件的创建时间,这个不在本章节的讨论范围之内

修改Linux的文件权限

chmod

Linux的Chmod的名利格式有以下两种类型

命令格式:chmod + {u,g,o,a} + [+,-,=] {rwx} 文件或目录名

                 chmod  + 数字 +文件名

类型1:chmod + {u,g,o,a} + {+,-,=} {rwx} 文件或目录名

  • 参数一:修改文件权限范围
    • u 文件的拥有者
    • g 文件所在的组
    • o 除了拥有者和拥有组的其他用户
    • a 所有用户 //默认选项
  • 参数二:
    • + 增加权限
    • -  减少权限
    • = 设定权限
  • 参数三:具体的权限

示例:

[root@Server01 tmp]# ls -l
总用量 0
-rwxr-xr-x. 1 root root 0 11月 10 20220911 file1
[root@Server01 tmp]# chmod u-wx,g-x,o+w-x file1 
[root@Server01 tmp]# ls -l
总用量 0
-r--r--rw-. 1 root root 0 11月 10 20220911 file1

类型二:  chmod  + 数字 +文件名

在系统的底层是采用二进制来标识文件权限的,rwx只是为了方便用户查看,一组用户的权限包括rwx三个权限,因此可以使用一组三位二进制来表示,没有任何权限可以用000来表示,转换为十进制就是0,拥有读的权限可以用100来表示,转换为十进制就是4,拥有写的权限可以用010来表示,转换为十进制就是2,拥有执行的权限可以用001来表示,转换为十进制就是1。因此当用户的所有者拥有读、写、执行的全部权限,所属组和其他用户没有权限可以使用700来表示。同理大家可以思考一下,当创建一个新的文件的时候,它的权限一般为644,当创建一个目录的时候,它的权限一般为755。

PS:chmod也可以增加上“-R”参数的参数,递归修改文件权限

示例:

[root@Server01 tmp]# ls -l
总用量 1
-r--r--rw-.  1 root root    0 9月  22 03:28 file1.
[root@Server01 tmp]# chmod 700 file1 
[root@Server01 tmp]# ls -l
总用量 1
-rwx------.  1 root root    0 9月  22 03:28 file1

默认权限

新建一个文件时,这个文件的默认权限可以使用 umask 命令来查看

[root@Server01 tmp]# umask 
0022

这个0022其实是权限掩码,权限掩码的第一个0代表的是特殊权限,我们先忽略,后面三位分别对应着用户的所有者、所属组、其他用户的权限。权限掩码不太方便我们进行查看,我们可以加上 -S 选项,使用文字的方式显示掩码

[root@Server01 tmp]# umask -S
u=rwx,g=rx,o=rx
[root@Server01 tmp]# 

但是细心的朋友会发现,这个权限和我们创建文件的默认权限不一样,默认创建文件的时候,权限值一般为“rw-r--r--”

这里就不得不说一下权限掩码的计算方法了。权限掩码按照官方的算法需要经过复杂的运算。所以在实践当中还有一种更加简便的方法,以下就介绍一下这个简便算法的公式。

文件/目录的默认最大权限 - 文件/目录的掩码 = 文件/目录的权限

在这里有个概念要先明确,那就是文件/目录的默认最大权限

  • 对于文件来讲,默认拥有的最大权限是 rw-rw-rw-(666),因为执行权限是最高权限,一定要手动赋予。所以根据公式和默认权限掩码可以算出文件的默认权限为“666-022=644”,也就是“rw-r--r--”
  • 对于目录来讲,如果没有执行的权限,那就没办法进入对应的目录,所以目录拥有的默认最大权限为“rwxrwxrwx”(777),所以根据公式和默认权限掩码可以算出目录的默认权限为“777-022=755”,也就是“rwxr-xr-x”

Linux的默认权限配置位置我们早在用户和组管理的时候就有过介绍,也就是在“/etc/profile”里面,可以在此博文里查看“http://t.csdn.cn/eht5q ”

可不可以修改Linux的默认权限呢?当然也是可以的,比如直接修改/etc/profile文件,进行永久修改,或者使用umask + 权限掩码,临时修改。当然,正常情况下不建议修改,因为默认的权限是最安全的配置方式。

chown

命令格式 chown 【-R】 属主名 文件名  //-R为递归更改

示例:

1、将/home/user01目录复制至/tmp目录之下

[root@Server01 tmp]# cp -ar /home/user01/  /tmp/
[root@Server01 tmp]# ls -l
总用量 1
drwx------. 15 user01 user01 4096 9月  17 01:23 user01

2、修改/tmp/user01文件夹的所属者为root用户

[root@Server01 tmp]# chown root user01/
[root@Server01 tmp]# ls -l 
总用量 1
drwx------. 15 root user01 4096 9月  17 01:23 user01

chgrp

命令格式:chgrp 【-R】 属组名 文件名  //-R为递归更改

示例

修改/tmp/user01文件夹的所属组为root

[root@Server01 tmp]# chgrp root user01/ 
[root@Server01 tmp]# ls -l
总用量 1
drwx------. 15 root root 4096 9月  17 01:23 user01
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值