【Linux修炼进程之权限篇】探讨Linux权限问题

发布于:2024-10-18 ⋅ 阅读:(14) ⋅ 点赞:(0)

【Linux修炼】——权限问题

目录

一:认识Linux下用户的分类

1.1:如何添加新用户【使用root用户创建添加】

1.2:su指令用法

二:Linux下权限是什么?

2.1:权限所认证的是身份(人+身份角色)

2.2:权限和事物(文件)的“属性”有关

2.3:谈权限所熟知的过程

三:文件权限值的表示方法

3.1:权限字符表示法

3.2:权限八进制数值表示法

四:对于权限的修改问题

4.1:修改权限的相关指令

4.1.1:chmod指令

4.1.2:chgrp指令

4.1.3:chown指令

4.2:文件的权限修改

4.2.1:普通文件的权限修改

4.2.2:目录文件的权限修改

五:关于权限的重要问题

5.1:为什么我们创建文件的默认权限是我们所看到的样子?

5.2:多个用户进行文件的共享时如何保证安全性?


一:认识Linux下用户的分类

Linux下有两种用户:超级用户(root)、普通用户。

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

1.1:如何添加新用户【使用root用户创建添加】

第一步[建立新用户]:adduser newname(用户姓名,根据自己情况而定)

第二步[给新用户设置密码]:passwd newname

第三步[输入新用户的密码,密码不回显(我们是看不到的)]:New password:******

第四步[再次输入新用户密码]:Retype new password:******

显示有 successfully 即创建新用户成功!

 

 第五步[测试新用户]:su newname

显示当前身份就是 zs 。表明我创建的新用户既可以使用了。

1.2:su指令用法

关于 root 账号与普通账号之间的切换:

语法:su [用户名]

功能:切换用户

实例:要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。


二:Linux下权限是什么?

权限:对于一件事情是否允许被你做。

注意:指定规则的 root,不受权限的约束!!! 

一个文件中各种数据大致表示情况:

2.1:权限所认证的是身份(人+身份角色)

因为权限所认证的是身份,即人+身份角色。

人:root用户,普通用户

身份角色/权限身份:拥有者(u / User),所属组(g / Group),其他人(o / Other).

人与具体身份有着对应的关系!!

 查看一个文件的拥有者和所属组情况:

那么 other 呢?——登录身份账号,进行文件身份匹配,若都不匹配,则是 other。即匹配过程是一个 if...else if...else 的过程。具体步骤:先匹配身份是否是拥有者,若匹配成功则匹配对应的拥有者权限属性,若不是则继续匹配是否是所属组,若所属组匹配成功就进行该文件所对应的所属组权限属性,若不是则剩下的一律匹配到 other 中,进行对应的other权限属性。

2.2:权限和事物(文件)的“属性”有关

所谓文件属性,一定有可读,可写,可执行三种属性。

读( r ):具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写( w ):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限。
执行( x ):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
“—”:表示不具有该项权限。

该红框框中的十个字符:表示一个文件的文件类型和文件的属性情况

Linux中的文件类型:

  • 以 - 开头:普通文件
  • 以 d 开头:目录文件
  • 以 b 开头:块设备文件
  • 以 c 开头:字符设备文件
  • 以 p 开头:管道文件
  • ....

十个字符中除却第一个字符还剩下的九个字符,其是由三种符号组合:r(可读),w(可写),x(可执行)

后面的九个字符三三为一组,表示三种身份的各自权限。

  • 第一个三【rwx / rw-】:拥有者权限
  • 第二个三【rwx / rw-】:所属组权限
  • 第三个三【r-x / r--】:other 权限 

九个字符中各个字符的位置的含义是确定的!

剩下的九个字符中表示的含义:

  • 第一个字符:拥有者的读权限
  • 第二个字符:拥有者的写权限
  • 第三个字符:拥有者的执行权限
  • 第四个字符:所属组的读权限
  • 第五个字符:所属组的写权限
  • 第六个字符:所属组的执行权限
  • 第七个字符:other 的读权限
  • 第八个字符:other 的写权限
  • 第九个字符:other 的执行权限

每一个位置只有是或者否,具有指定的权限:读权限(r / -) ,写权限(w / -),执行权限(x / -)

2.3:谈权限所熟知的过程

谈权限:

第一步:你是谁?【你的身份】

第二步:文件的所属组,拥有者是谁?【进行匹配】

第三步:拥有者,所属组和 other 分别各自的权限是什么?

实例:

第一步,我们知道我的身份是 alin

第二步,以dir1目录文件为例,该文件的拥有者是 alin,所属组是 alin

第三步,以dir1目录,拥有者权限情况为rwx(可读,可写,可执行),所属组权限情况为rwx(可读,可写,可执行),other 权限情况为r-x(可读,不可写,可执行)。


三:文件权限值的表示方法

3.1:权限字符表示法

我们知道在文件的权限三三为一组时,文件位置的含义都是确定的。每一组的第一个字符都代表的是否可读,是否可写,是否可执行。

即权限的字符表示方法:

3.2:权限八进制数值表示法

接下来以一个表格进一步来描述权限符号与八进制数值的关系。 


四:对于权限的修改问题

对于文件权限的修改,只能是由该文件的拥有者root来修改!

4.1:修改权限的相关指令

4.1.1:chmod指令

功能:设置文件的访问权限
语法格式:chmod [参数] 权限 文件名

具体用法:用户表示符+/-=权限字符

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

用户表示符号:   

  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

权限字符:

  • r:可读
  • w:可写
  • x:可执行

4.1.2:chgrp指令

功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名

常用选项:

  • -R 递归修改文件或目录的所属组
  • 注意:只能由root账号修改

实例:

不是root账号修改不会成功:

使用root账号修改:

4.1.3:chown指令

功能:修改文件的拥有者,同时也可以一次性修改文件的拥有者和所属组
格式:chown [参数] 用户名 文件名

常用选项:

  • -R 递归修改文件或目录的拥有者
  • 注意:只能由root账号修改

实例:

改变文件的拥有者:

一次性修改文件的拥有者和所属组:chown 用户名:所属组 文件

4.2:文件的权限修改

文件的权限修改主要靠 chmod指令

4.2.1:普通文件的权限修改

对于普通文件的rwx:

  • r:具有读取该文件内容的权限
  • w:具有修改文件内容的权限
  • x:具有执行文件的权限

以上述几个普通文件为例:

因为现在我的身份是 alin,可查看这些文件的拥有者是否是 alin 即发现在文件 rt1.txt,rtest.c 文件中alin的身份是other,即在这两个文件中的权限是 r-- [仅可读]。在rtest.exe可执行文件中权限是 r-x[可读可执行];但是在文件 t1.txt,t2.txt,test.c alin的身份是拥有者,即在这三个文件中的权限是rw-[可读可写],在test.exe可执行文件中权限是 rwx[可读可写可执行]。

修改权限:

chmod u-rwx,g-rwx,o-rwx t1.txt:将 t1.txt 的所有权限都关闭【自封该文件】

此时除了root用户,谁也不能操作该文件。

chmod u+rw,g+rw,o+rx t1.txt:操作t1.txt文件,给该文件的拥有者和所属组增加可读可写权限,给文件的 other 增加可读可执行权限。

因为我们的权限可以使用八进制来表示。所以 chmod 000 t1.txt:操作t1.txt文件,将该文件的所有权限都关闭【自封该文件】

chmod 444 t1.txt:操作t1.txt文件,将该文件的拥有者、所属组和 other 设置权限为只可读

当操作没有权限的文件时系统文件肯定会报错的。例如alin在rt1.txt文件中身份是 other,其权限仅是只可读。所以当将信息写入该文件时会报错!

4.2.2:目录文件的权限修改

对于目录文件的rwx:

  • r【可读权限】: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
  • w【可写权限】: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
  • x【可执行权限】: 如果目录没有可执行权限, 则无法cd到目录中.

检测可读权限【 r 】:是否能查看目录中的文件内容.

检测可写权限【 w 】:是否能在目录中创建文件, 在目录中删除文件.

检测可执行权限【 x 】:是否能cd进入到目录中.

五:关于权限的重要问题

5.1:为什么我们创建文件的默认权限是我们所看到的样子?

  • 为什么普通文件:664【rw- rw- r--】
  • 为什么目录文件:775【rwx rwx r-x】

解决法:

首先Linux会默认给普通文件的起始权限是666【rw- rw- rw- / 110 110 110】,默认给目录文件的起始权限是777【rwx rwx rwx / 111 111 111】。

但是Linux系统中有一个 umask 权限掩码这一情况。所谓权限掩码,就是凡在 umask中出现的权限,不会在最终的文件权限中出现!

umask 指令

功能:查看或修改文件掩码

格式:umask 权限值

说明:超级用户默认掩码值为0022,普通用户默认为0002

实例:

  • umask                //查看
  • umask 0555       //设置

=>

文件的最终权限 = 起始权限 & (~umask)

=>

修改 umask 默认权限值:

若使得创建的文件都只能写,不能读,不能被执行【-w- -w- -w- / 010 010 010】,对其取反:101 101 101 / 555。所以此时将umask = 0555即可

该问题被称之为 起始权限问题.

重点理解在 umask.

5.2:多个用户进行文件的共享时如何保证安全性?

        普通用户自己的家目录权限是700,即我在我的家目录创建的文件别人看不到。但是有时候我们多个用户想进行文件数据的共享。

那么在根目录下创建一个文件【只能使用root账号创建】,所有权限都放开:chmod 777 shared_file

在多个用户共享一个文件下,一个用户写的文件,另一个用户也能看见。

但是有一个问题:在多个用户共享一个文件下,一个用户写的文件,另一个用户竟然能删掉???

这使得文件的安全行不可靠。

那么如何解决呢?

=>一个文件能否被删除,并不由文件本身决定,而是由这个文件所处的目录决定。那么如何规避用户与用户之间的安全行呢?

最好的方法就是:粘滞位[ t ]        (即,在共享目录下,我们可以创建文件,但不可删除文件 chmod o+t shared_file)

粘滞位:给目录设置,一般是大家可以进行操作的共享目录,在该目录中各用户进行各自的增删改查。

粘滞位实例:

在shared_file目录文件中,alin用户创建一个文件。

另一个用户tmp_user想要删除alin创建的文件

发现只能查看而删除不成功!此时安全性就大大的提高了。

。有了粘滞位,则只允许文件的拥有者或者root能删这个文件,其他人一律不允许,t 是一种特殊的 x 可执行权限
所以,一个文件能否被删除,取决于该文件所处的目录权限。