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下的权限
权限就是一件事情是否能被特定的人做。
从文件访问者角度来讲,可以分成三类:
- 文件和文件目录的所有者(文件拥有者user)。
- 文件拥有者所在的组的用户(文件所属组group)。
- 其他用户(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.文件权限的表示方法
- 字符表示方法
上面ll显示的rwx就是这种表示方式:
Linux字符表示法 | 说明 |
---|---|
r - - | 仅可读 |
- w - | 仅可写 |
- - x | 仅可执行 |
r w - | 可读可写 |
r - x | 可读可执行 |
- w x | 可写可执行 |
r w x | 可读可写可执行 |
- - - | 无权限 |
- 8进制表示方法
rwx中三个字符的位置是固定的,要么为真,要么为假,因此可以将这三个字符换为三个二进制位,进而换为一个八进制位进行表示。
字符表示法 | 二进制 | 八进制数值表示法 | 说明 |
---|---|---|---|
r - - | 100 | 4 | 仅可读 |
- w - | 010 | 2 | 仅可写 |
- - x | 001 | 1 | 仅可执行 |
r w - | 110 | 6 | 可读可写 |
r - x | 101 | 5 | 可读可执行 |
- w x | 011 | 3 | 可写可执行 |
r w x | 111 | 7 | 可读可写可执行 |
- - - | 000 | 0 | 无权限 |
2.3.修改文件的权限
语法: chmod 选项 权限 文件名或目录名
功能: 设置文件的访问权限。
常用选项: -R 递归修改目录文件的权限。
chmod指令有两种用法:
- 用户表示符 +/-= 权限字符 文件名
- +:向权限范围增加权限代号所表示的权限。
- -:向权限范围取消权限代号所表示的权限。
- =:向权限范围赋予权限代号所表示的权限。
用户表示符:
- u:拥有者。
- g:所属组。
- o:other。
- a:所有用户
如果要同时设置不同类用户的访问权限,则用户和用户之间要用逗号隔开。
- 三位8进制数字 chmod 对应的三个八进制数 文件名:
八进制数可以转换为二进制,进而设置对应权限值。
2.4.修改文件的拥有者和所属组
修改拥有者:
语法: chown 选项 用户名 文件名或目录名
功能: 修改文件的拥有者。
常用选项: -R 递归修改目录文件的拥有者。
修改所属组:
语法: chgrp 选项 用户名 文件名或目录名
功能: 修改文件的所属组。
常用选项: -R 递归修改目录文件的所属组。
注意:
修改文件的拥有者需要root用户进行操作,若是普通用户则需要sudo进行权限提升。
使用chown指令同时修改文件的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。
2.5.目录的权限
目录的可读可写可执行代表的含义与文件是不同的:
- 读权限(r)表示具有读取目录结构列表的权限,可以看到目录中有哪些文件和子目录。一旦对目录拥有读权限,就可以在此目录下执行 ls 命令,查看目录中的内容。
- 写权限(w)对于目录来说,w 权限是最高权限。对目录拥有 w 权限,表示可以对目录做以下操作:
- 在此目录中建立新的文件或子目录;
- 删除已存在的文件和目录(无论子文件或子目录的权限是怎样的);
- 对已存在的文件或目录做更名操作;
- 移动此目录下的文件和目录的位置。
一旦对目录拥有 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权限的主要内容,如果未能解决你的问题,请参考以下文章
linux[基础]-20-用户与文件权限-[文件隐藏权限]-[02]