目录
Linux权限是Linux系统中非常重要的一个概念,它用于控制用户对文件和目录的访问权限;
Linux系统中的每个文件和目录都有一个所有者和一个用户组,同时还有三种不同的权限:读取、写入和执行,这些权限可以分别应用于文件所有者、用户组和其他用户;文件所有者可以通过更改文件权限来控制其他用户对文件的访问权限,在Linux系统中,root管理员可以执行所有可执行命令,不受任何权限和角色的约束;因此,合理的运用权限可以让我们的文件数据不受损害,保护系统安全;
Linux下有两种用户:
- 超级用户(root): 可以在Linux系统下做任何事情,不受限制;
- 普通用户: 在Linux下做有限的事情
- 超级用户的命令提示符 "#" ,普通用户的命令提示符 "$"
命令: su [用户名]
功能: 切换用户
若从普通用户user切换到root用户则使用 su root(root可以省略),若从root用户切换到普通用户user则使用 su user
- 文件与文件目录的所有者:u (user)
- 文件与文件目录的所有者所在的组的用户 : g?? (group)
- 其他用户: o?? (other)
root用户,普通用户扮演的角色是所有者,所属组,其他用户;用户对文件的权限不仅取决于该用户对于这个文件所扮演的角色,还取决于文件的属性(可读取? 可写入 可执行),即文件赋予角色什么权限;
文件的基本权限
- 读 --- r(read):读取操作对于文件而言具有读取文件内容的权限;对于目录而言,具有浏览该目录下文件信息的权限;
- 写 --- w(write):写入操作对于文件而言具有修改文件内容的权限;对于目录而言,具有在该目录下删除文件 创建文件 修改文件的权限;
- 执行 --- x(execute): 执行操作对于文件而言具有执行文件的权限;对于目录而言,具有进入目录的权限;
文件权限的表示方法:
文件的类型:
- d : 目录文件
- - :普通文件(包括源代码 图片 视频 库? .exe可执行文件 )
- l? :? 软链接文件(如windows的快捷方式)
- b :块设备文件(支持随机访问的文件为块设备文件例如磁盘 光驱)
- p :? 管道文件
- c :?? 字符设备文件(用于与字符设备驱动程序进行交互,例如键盘 显示器等)
注:Linux下的文件类型不通过后缀进行区分,但是某些工具(gcc g++ )需要考虑文件类型;
代表角色的符号为
u
(所有者)、g
(所属组)、o
(其他用户)、a
(所有用户);
代表权限的符号为r
(读权限)、w
(写权限)、x
(执行权限);符号+
(向权限范围增加权限代号所表示的权限)、-
(向权限范围取消权限代号所表示的权限)、=
(向权限范围赋予权限代号所表示的权限);
示例1: 文件名为file.txt文件的所有者(u)去掉读权限 # chmod u-r file.txt
示例2:文件名为file.txt的所属组(g)直接赋予写(w)权限 # chmod g=w file.txt
示例3:文件名为file.txt文件的其他用户(o)加上读权限与写权限 # chmod o+rw file.txt
示例4:将文件名为file.txt文件的所有用户加上读写权限 # chmod a+rw file.txt
第一个8进制数表示修改后的所有者权限,第二个8进制数表示修改后的所属组权限,第三个8进制数表示其他用户权限;
示例1: 将文件名为file.txt文件的所有用户去掉所有权限 # chmod 000 file.txt
示例2:将文件名为file.txt文件的所有者赋予读写的权限(二进制:110--- 八进制: 6)
&&将文件名为file.txt文件的所属组赋予读与执行的权限(二进制:101--- 八进制: 5)
&&将文件名为file.txt文件的其他用户赋予读的权限(二进制:100--- 八进制: 4)
# chmod 654 file.txt
更改文件的读取、写入、执行等权限只有文件的所有者与超级用户(root) 才可执行;
? chown? 用户名 文件名
上图说明即使是文件的所有者也无法更改文件的所有权;
?上图说明文件的所属组无法更改文件的所有权;
?上图说明无论root扮演何种角色,只有root用户可以修改文件的所有者;
chgrp? 用户名 文件名
上图说明无论root扮演何种角色,只有root用户可以修改文件的所属组;
总结:
Linux权限是约束普通用户的,
root
用户不会被扮演的角色所约束;对于普通用户,被权限约束了什么都干不了,即使该用户是这个文件的拥有者;对于root 用户
,即使没有权限,照样畅通无阻;
可执行权限:? 如果目录没有可执行权限, 则无法进入到目录中;
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容 ;
- 可写权限:如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件;
linux下创建一个文件或者目录之后是可以通过chmod等命令进行权限设置,来达到给文件所有者、用户组用户以及其他用户分配不同的访问权限;新创建的目录和文件本身也是有它的默认权限的,这个默认权限是什么,就是由权限掩码umask所确定的,权限掩码umask定制一个文件或者目录被创建时的默认权限;
为什么普通文件的默认权限是664,而不是777?
为什么目录文件的默认权限为775,而不是777?
指令:umask
功能:查看权限掩码
指令:umask 权限掩码
功能:临时修改权限掩码,系统重启后失效;
普通用户默认的文件权限掩码为
0002
,root用户默认的文件权限掩码为0022
- 第一位的0,表示文件或目录的「特殊权限」;
- 第二位的0,表示「用户权限」,即文件或目录的拥有者具有所有的rwx权限;
- 第三位的2,表示「用户组权限」即文件或目录的所属组被拿走了w权限,也就是所属组的权限是r-x;
- 第四位的2,表示「其他用户权限」即文件或目录的其他用户被拿走了w权限,也就是其他用户的权限是r-x;
起始权限是由系统设定的权限,普通文件的起始权限为666,目录文件的起始权限为777;
文件的默认权限即在起始权限中,去掉在权限掩码 umask 中出现的权限;
普通文件起始权限: (八进制) 666--->110 110 110 (二进制)
普通用户的权限掩码: (八进制) 002--->000 000 010 (二进制)
110 110 110
000 000 010 (去掉)
-----------------------------
110 110 100
普通用户创建普通文件的默认权限:110 110 100 ---> 664
目录文件起始权限: (八进制) 777-->111 111 111 (二进制)
普通用户的权限掩码: (八进制) 002--->000 000 010 (二进制)
111 111 111
000 000 010 (去掉)
-----------------------------
111 111 101
普通用户创建普通文件的默认权限:111 111 101 ---> 775
默认权限计算公式:默认权限 = 起始权限 & (~umask)
示例:
普通文件的起始权限:110 110 110 ---> 666
普通用户的权限掩码:000 000 010 ---> 002
权限掩码取反:111 111 101
起始权限 & 权限掩码取反 = 110 110 110
111 111 101 &
----------------------
110 110 100
由普通用户创建的普通文件的默认权限 110 110 100 ---> 664
每个用户在云服务器上存在一个家目录/home/xxx,用户在家目录中可以实现文件的增删查改,但是多人协作同一个项目需要公共路径来完成各自的任务,公共路径应该创建在何处?能在其他用户的家目录中吗?比如说在用户shuju的家目录里创建一个tmp文件作为公共路径即/home/shuju/tmp ,可以吗?答案是不行的,因为其他用户无法进入shuju的家目录中的权限,如果赋予其他用户权限,其他用户可能会对shuju的家目录造成一些破坏,这是无法防止的;
公共路径一般由root用户在根路径下进行创建,tmp文件夹是Linux操作系统创建的一个公共路径;
以root身份在根目录下创建Temp目录文件,将目录文件的所有者、所属组、以及其他用户直接赋予读取、写入、 执行等权限,切换到普通用户shuju,在Temp目录下创建普通文件file.txt,普通文件file.txt由普通用户shuju与zpl共同协作的文本,因此file.txt的其他用户赋予读取,写入权限,此时切换账号zpl,普通用户zpl就可完成对file.txt文件的读取,写入工作;
由目录的权限分析可得一个文件能否被删除,并不取决于文件本身,取决于文件所处的目录,目录的用户是否具有w权限;由于Temp目录对所有用户开放了所有权限,所以普通用户zpl可以删除普通用户shuju所创建的文件file.txt;
超级用户root为了实现多个用户之间的数据共享,多人协作,将other用户的rwx权限全部放开,但是删除公共路径下的文件与文件本身无关,为了防止程序员在公共目录里面互删,诞生了粘滞位;
通过命令: chmod +t 目录文件名 即称为为目录设置粘滞位,默认设置的是other用户的权限;粘滞位是针对目录而言的概念,通常需要为共享目录设置粘滞位;通过为目录设置粘滞位,可以在保证目录共享的同时防止其他用户删除共享目录中非所有者的文件;
当一个目录被设置粘滞位后,则该目录下的文件只能由:
- ??? 超级管理员(root)删除;
- ??? 该目录的所有者删除;
- ??? 该文件的所有者删除;