02Linux权限

Posted 精致的灰(>_<)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了02Linux权限相关的知识,希望对你有一定的参考价值。

超级用户(root用户)是不受权限限制的,权限是用来限制普通用户的。


一、Linux下的两种用户

Linux下有两种用户:超级用户(又叫管理员用户)(root)、普通用户。
超级用户只能有一个,普通用户可以有多个。
Linux下的权限是用来限制普通用户的,所以:

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情,会受到权限的限制

超级用户的命令提示符是“#”,普通用户的命令提示符是“$"

1.1.添加普通用户并修改密码以及删除用户

使用useradd 用户名passwd 用户名两条指令可以实现创建普通用户和修改用户密码,当然这两条指令只能使用root用户或者用sudo指令短暂提升权限才行:

使用userdel -r 用户名指令可以删除用户,另外不加-r并不能删除该用户的所有信息,只是删除了/etc/passwd、/etc/shadow、/etc/group/、/etc/gshadow四个文件里的该账户和组的信息,实际上在/home文件下还保存着这个人的主目录,但是变成没有属主和属组的目录,也就是垃圾文件

1.2.切换用户

su 用户名这条指令可以用来切换用户,切换的时候要输入密码,注意这里输入的密码是不显示的。
如果想切回上次的用户,可通过Ctrl+D或者exit退出实现。
如果不加用户名,则默认切换为root用户,因为root用户只有一个。

从root用户切换到普通用户是不需要输入密码的。

1.3.使用sudo指令提升用户权限

sudo指令可以使普通用户短暂提升权限,执行一些需要root用户才能执行的命令。
语法为sudo 要执行的命令

如果普通用户想要使用这条指令,需要先将普通用户添加到信任列表。
使用root用户用vim打开文件/etc/sudoers进行添加:

在这条语句下添加普通用户:

wq保存后,在信任列表中的普通用户就可以使用su命令短暂提升权限了。


二、Linux下的权限

权限就是一件事情是否能被特定的人做。

从文件访问者角度来讲,可以分成三类:

  1. 文件和文件目录的所有者(文件拥有者user)。
  2. 文件拥有者所在的组的用户(文件所属组group)。
  3. 其他用户(other)。

如果一个用户属于文件所属组中的用户,那么这个用户就拥有这个文件所属组的权限。
所属组可以将文件设置为拥有者和所属组可见,而其他用户(除了文件拥有者和文件所属组之外的用户)不可见,这样就可以满足团队协作的要求
一般情况下,用户新建一个文件,文件的拥有者和所属组默认是这个用户自己。

2.1.文件的属性和权限

通过ll指令可以查看文件或目录的具体信息。

2.1.1.连接数

连接数对于目录文件,表示它的第一级子目录的个数。每个目录的默认连接数是2,因为每个目录下都有两个隐藏目录.和..分别表示当前目录和上一级目录,父目录里创建一个子目录,父目录的链接数增加1。
对于其他文件,表示指向它的链接文件的个数。

2.1.2.块(block)

在Linux系统中,文件由元数据和数据块组成。 数据块就是多个连续性的扇区(sector),扇区是文件存储的最小单位(每个512字节)。 块(block)的大小,最常见的是4KB,也就是连续8个sector组成,存储文件数据和目录数据。

所以,“total”的值,是指该目录下所有文件及其子目录所占用块数的总和。

2.1.3.文件类型

ll输出的七个字段中,第一个字段由10个字符组成的。其中第一个字符所代表的就是该文件的文件类型。
不同的字符代表不同的文件类型。

  • -:代表普通文件。
  • d:代表目录。
  • l:代表链接文件(类似于Windows当中的快捷方式)。
  • b:代表块设备文件(例如硬盘、光驱等)。
  • p:管道文件。
  • c:字符设备文件。
  • s:套接口文件。

2.1.4.文件权限

第一个字段的剩余9个字符三三为一组代表文件拥有者,所属组,其他用户的权限:

其中r为读的权限,w为写的权限,x为执行的权限,如果没有对应的权限则为-

对于文件而言:

  • 读权限(r)表示可读取此文件中的实际内容,例如,可以对文件执行 cat、more、less、head、tail 等文件查看命令。
  • 写权限(w)表示可以编辑、新增或者修改文件中的内容,例如,可以对文件执行 vim、echo 等修改文件数据的命令。
  • 执行权限(x)表示该文件具有被系统执行的权限。在 Linux 系统中,文件是否能被执行,是通过看此文件是否具有 x 权限来决定的,只要文件拥有 x 权限,则此文件就是可执行文件。比如gcc编译后的可执行文件如果没有x的权限,那它就无法被执行。

2.2.文件权限的表示方法

  1. 字符表示方法
    上面ll显示的rwx就是这种表示方式:
Linux字符表示法说明
r - -仅可读
- w -仅可写
- - x仅可执行
r w -可读可写
r - x可读可执行
- w x可写可执行
r w x可读可写可执行
- - -无权限
  1. 8进制表示方法
    rwx中三个字符的位置是固定的,要么为真,要么为假,因此可以将这三个字符换为三个二进制位,进而换为一个八进制位进行表示。
字符表示法二进制八进制数值表示法说明
r - -1004仅可读
- w -0102仅可写
- - x0011仅可执行
r w -1106可读可写
r - x1015可读可执行
- w x0113可写可执行
r w x1117可读可写可执行
- - -0000无权限

2.3.修改文件的权限

语法: chmod 选项 权限 文件名或目录名
功能: 设置文件的访问权限。
常用选项: -R 递归修改目录文件的权限。

chmod指令有两种用法:

  1. 用户表示符 +/-= 权限字符 文件名
  • +:向权限范围增加权限代号所表示的权限。
  • -:向权限范围取消权限代号所表示的权限。
  • =:向权限范围赋予权限代号所表示的权限。

用户表示符:

  • u:拥有者。
  • g:所属组。
  • o:other。
  • a:所有用户

如果要同时设置不同类用户的访问权限,则用户和用户之间要用逗号隔开。

  1. 三位8进制数字 chmod 对应的三个八进制数 文件名:

八进制数可以转换为二进制,进而设置对应权限值。

2.4.修改文件的拥有者和所属组

修改拥有者:
语法: chown 选项 用户名 文件名或目录名
功能: 修改文件的拥有者。
常用选项: -R 递归修改目录文件的拥有者。

修改所属组:
语法: chgrp 选项 用户名 文件名或目录名
功能: 修改文件的所属组。
常用选项: -R 递归修改目录文件的所属组。

注意
修改文件的拥有者需要root用户进行操作,若是普通用户则需要sudo进行权限提升。
使用chown指令同时修改文件的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。

2.5.目录的权限

目录的可读可写可执行代表的含义与文件是不同的:

  • 读权限(r)表示具有读取目录结构列表的权限,可以看到目录中有哪些文件和子目录。一旦对目录拥有读权限,就可以在此目录下执行 ls 命令,查看目录中的内容。
  • 写权限(w)对于目录来说,w 权限是最高权限。对目录拥有 w 权限,表示可以对目录做以下操作:
  1. 在此目录中建立新的文件或子目录;
  2. 删除已存在的文件和目录(无论子文件或子目录的权限是怎样的);
  3. 对已存在的文件或目录做更名操作;
  4. 移动此目录下的文件和目录的位置。

一旦对目录拥有 w 权限,就可以在目录下执行 touch、rm、cp、mv 等命令。

  • 执行权限(x)目录是不能直接运行的,对目录赋予 x 权限,代表用户可以进入目录,也就是说,赋予 x 权限的用户或群组可以使用 cd 命令

无论是r还是w,都得先进入目录,所以如果没有x权限,rw会报错:

所以一个目录被创建的时候,默认都会给每个人带上x权限。

2.5.1.粘滞位

用户拥有某目录的可写权限,就可以删除该目录当中的文件,而不论该用户是否拥有该文件的可写权限。这是非常不合理的。

粘滞位解决了这个不合理的问题:

语法: chmod +t 目录名
功能: 给目录加上粘滞位。

加上粘滞位以后,目录的其他用户的可执行权限就由x变成了t

加上粘滞位以后,上面的问题就解决了:

当一个目录被设置为粘滞位,则该目录下的文件只能由:

  • root用户删除。
  • 该目录的拥有者删除。
  • 该文件的拥有者删除。

2.6.修改文件的权限掩码

文件在创建的时候都会有一个默认权限:

新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,后面三位就是权限的八进制数值表示方法。

这个权限由权限掩码决定,使用umask指令可以查看:

可以看到umask后三位为002,转化成二进制位也就是000 000 010,这个1代表其他用户的可读权限,而凡事在umask中出现的权限,就要在默认权限中去掉,因此新建文件的权限就要在默认权限0666基础上去掉其他用户的可读权限,变成0664,转成符号表示就是rw-rw-r–。同理目录就变成0775,也就是rwxrwxr-x

权限掩码是可以被设置的,指令为umask 权限的八进制表示

可以看到,将权限掩码设置为0777后,新创建的普通文件和目录文件就要去掉全部的权限。

超级用户的默认掩码为0022,普通用户的默认掩码为0002。

以上是关于02Linux权限的主要内容,如果未能解决你的问题,请参考以下文章

02Linux权限

02-Linux系统基本权限

教程4 - 验证和权限

linux[基础]-20-用户与文件权限-[文件隐藏权限]-[02]

gitlab 可以进行版本和权限控制,bug管理吗?供部门内部使用,而且是Linux和Windows平台都能使用

gitlab 权限说明