Linux从入门到精通——Linux中文件的权限

一.文件权限存在的意义

给文件设定权限是Linux系统最底层安全设定方法之一,因为Linux是多人多任务的操作系统,很可能是不同的多个人在使用同一台主机,为了安全文件权限机制是必须的,它保证文件可以被可用的用户做相应的操作,也保证文件不会被没有不可用用户进行操作。

 

 

二.文件权限的查看

使用的命令为:

ls -l    file   或   ll   file  

ls -ld   dir   或   ll-d   dir  ## ll=ls-l ##

 

 

 

 

三.文件权限的读取

 

以上图的一行字符串中举例,具体分析一下权限信息都包含什么:


d      rwxr-xr-x     2         root     root        6     Jul 22 02:48     /mnt

[1]        [2]         [3]          [4]        [5]        [6]        [7]                 [8]


[1]   文件的类型

-          ##空文件,或者文本##
d          ##目录##
l           ##链接 ,类似于快捷方式,打开此类文件实际打开的是其源文件##
s      ##socket 套接字,程序都是封闭的,套接字可以理解为是程序对外交互的接口###
b          ##block  块设备,外界设备插入后会生成此类文件##
c          ##字符设备,例如打开一个Shell,界面上会显示字符,这样的设备就是字符设备,可以在/etc/pts里找到##

[2]   文件的权限

rwx        r-x           r-x
 1           2         3

1.[u] 文件的拥有者对文件能做什么操作
2.[g] 文件的所有组对文件能做什么操作
3.[o] 其他人对文件能做什么操作


[3]   对文件: 文件硬链接个数(文件内容被系统记录的次数)
       对目录: 目录中子目录的个数

[4]   文件的所有人


[5]   文件的所有组

[6]   对文件: 文件大小
       对目录:目录中子文件元数据(matedate)大小 ;元数据是文件的属性,在此数据记录格式中,每个字符是一个字节,而记录文件名时一个字符是一个字节

[7]   文件内容被修改的时间

[8]   文件或目录的名称

 

四.如何改变文件的所有人和所有组

 

使用的命令为:chown | chgrp

 

chown          username        file|dir       ###更改文件或目录的所有者

chown          user.group    file|dir       ###更改文件或目录的所有者和所有组

chown -R     user.group    file|dir       ###递归更改所有者和所有组,即当对目录进行该操作时,将更改目录下包括子目录内所有文件的所有者和所有组

chgrp           group            file|dir       ###更改文件或目录的所有组

chgrp -R      group          dir       ###递归更改文件的所有组,即当对目录进行该操作时,将更改该目录和所有子目录的所有组

 

 

 

将目录yasuo的所有者由root改为student

 

 

 

将文件file1的所有者和所有组同时更改为yasuo和legend

 

 

递归更改目录的所有者和所有组以及目录内子文件的所有者和所有组为yasuo 和 legend

五.改变文件的权限

1.对权限的理解

在上图中我们可以看到文件权限里的三个字母分别为r  w   x  那么这三个字母是什么意思呢,下面作以解释:

r         对文件:是否可以查看文件中的内容   --->cat file
          对目录:是否可以查看目录中有什么子文件或者子目录  --->ls dir

      对文件:是否可以改变文件里面记录的字符
          对目录:是否可以对目录中子目录或子文件的元数据进行更改

x       对文件:是否可以通过文件名称调用文件内记录的程序
          对目录:是否可以进入目录

注:一般来说如果一个文件有w权限那么就肯定会有r和x权限,即如果文件能写就肯定能读和操作,写的权限是在能读和能操作的基础上才能完成的,一般不会有只能写不能读或不能操作的文件,这样的权限是没有意义的

 

2.文件权限的更改方式

使用的命令为:chmod

常用命令参数举例:

chmod    <u|g|o> <+|-|=>  <r|w|x>        file|dir

chmod     u+x              /mnt/file           ###添加所有人的x权限

chmod     g-x            /mnt/file                ###删除所有组的x权限

chmod     ug-r                /mnt/file             ###删除所有人和所有组的r权限

chmod     u-r,g+x           /mnt/file             ###删除所有人的r权限,添加所有组的x权限

chmod     -r              /mnt/file              ###删除所有的r权限

chmod     o=r-x             /mnt/file              ###r-x表示设定权限为r和x而没有w,也可以用rx表示

chmod     -w               /mnt/file            ###-w比较特殊,它表示仅删除所有人的w权限,这一点注意区别###

chmod     -x                /mnt/file              ###删除所有的x权限

chmod     +r/w/x              /mnt/file              ###单独加一个权限时默认是加在所有者上的##

                                              ###g或者o使用=r-x是加不上去的,因为这是很危险,系统默认不允许,但是u使用该命令是可以的###

           ————权限的数字表示————

r=4

w=2

x=1

 

例如   r-x  r--  --x     可以表示为 541


7=rwx
6=rw-
5=r-x
4=r--
3=-wx
2=-w-
1=--x
0=---

          

六.umask

umask是系统建立文件时默认保留的权力,比如通过ls -ld 命令查看/mnt文件的权限为 rwx r-x r-x ,即755,而不是777,这是因为系统在建立目录时默认在权限上减去了22

而建立文件会在减去22的基础上再减去111,所以建立一个文件之后默认的权限为 644 ,即rw- r-- r--

1.临时更改umask的命令为:umask

 

umask  077     ###临时设定系统预留权限为077

 

 

可以看到默认建立的目录权限为755,文件权限为644

 


2.永久更改umask的方法:

 
vim /etc/profile                   ##系统配置文件##

在配置文件的59行开始修改配置文件,效果如下:
59 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then 60 umask 002                    ##普通用户的umask## 61 else 62 umask 022                    ##超级用户的umask## 63 fi vim /etc/bashrc                  ##shell配置文件##
在配置文件的70行开始修改配置文件,效果如下:
70 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then 71 umask 002                    ###普通用户的umask### 72 else 73 umask 022                    ###超级用户的umask### 74 fi source /etc/profile               ###重加载修改后的文件使其生效### source /etc/bashrc

 

 

更改/etc/profile 文件

 

 

更改/etc/bashrc 文件

 

 

更改完配置文件之后重加载配置文件,再建立目录和文件可以看到,目录和文件的默认权限为700和600,说明更改的umask值已经生效,并且是永久生效

 

 


七.特殊权限

1.粘制位——sticky

作用:      只针对目录生效,当一个目录上有sticky权限时,在这个目录中的文件只能被文件的所有者删除

设定方式:

        chmod   o+t     dir
        chmod   1xxx     dir      ###xxx代表0~7的数字###

 

给目录yasuo加了粘制位后,更改文件zed所有人为carter,切换到用户garen,对zed文件无法删除,再切换到用户carter则可以删除文件

 

注意:如果要目录里的文件能删除,需要给目录777的最高权限


2.强制位——sgid     

作用: 

      对文件:    只针对于二进制可执行文件,当文件上有sgid时,任何人执行此文件产生的进程都属于文件的组
           对目录:   当目录上sgid权限时,任何人在此目录中建立的文件都属于目录的所有组
       

设定方式:

        chmod   g+s    file  |  dir
        chmod   2xxx   file |  dir

 

下面设计到二进制文件都以watch命令为例

给/bin/watch文件添加强制位,并修改文件所有组为legend,在添加强制位成功后可以看到颜色变为黄色高亮显示

 

 

watch命令产生的进程属于watch文件的所有组而不属于使用者root的root组

 

 

更改目录yasuo的所有组为league,给目录yasuo加了强制位后,新建立file文件,文件的所有组为league而不是root

 

 


3.冒险位——suid      
作用:    只针对于二进制可执行文件,当文件上有suid时,任何人执行这个文件中记录的程序产生的进程都属于文件的所有人而和文件的发起者没有关系

设定方式: 

     chmod   u+s    file
          chmod   4xxx   file

 

更改watch文件所有者为carter,对watch文件添加强制位,可以看到添加成功后文件名称变红色高亮显示

 

 

通过watch命令运行的进程属于用户carter,而不是root

 

注意:在linux中这是非常危险的,因为普通用户可以通过此操作以root用户身份执行各种命令,这是很不安全的

 


八.acl权限列表

1.作用:

      让特定的用户对特定的文件拥有特定权限

2.acl列表的查看

使用的命令为:getfacl

getfacl   file      ###查看acl开启的文件的权限

如何判断acl是否开启:


              -rw-rwxr--+ 1 root root 0 Jul 21 15:45 file
                              ^
               有+时代表acl列表开启了

 

 

acl列表包含的信息:

 

    # file: file          ###文件名称
    # owner: root        ###文件拥有者
    # group: root        ##文件拥有组
    user::rw-          ###文件拥有者的权限
    user::tom:rwx       ###指定用户的权限
    group:r--          ###文件拥有组的权限
    mask::rwx          ###能赋予用户的最大权力伐值
    other::r-             ###其他人的权限

 


3.acl列表的管理

使用的命令为:setfacl

 

    setfacl   -m   u:username:rwx   file     ##设定username对file拥有rwx权限

    setfacl   -m   g:group:rwx     file     ##设定group组成员对file拥有rwx权限    

    setfacl   -x    u:username     file        ##从acl列表删除username

    setfacl   -b               file           ##关闭file上的acl列表

 

 

设定指定用户carter对该文件有rwx权限

 

 

设定指定用户组legend对该文件有rwx权限

 

 

从该文件的acl列表上删除用户carter的指定权限

 

 

从该文件上删除acl权限列表,用ls -l 命令可以看到权限信息里的+ 已经没有了

 

 



4.mask值

在权限列表中mask表示能生效的权力值,当用chmod减小开启acl的文件权限时mask值会发生改变

 


此时实际生效的权限是rw

如果要恢复mask值,使用的命令为:

setfacl -m m:xxx  file     ##xxx表示要恢复的权限

 

 

 

 



5.acl的默认权限设定

    acl默认权限只针对目录设定,且acl权限只针对设定完成之后新建立的文件或目录生效,而已经存在的文件是不会继承默认权限的

 

posted on 2018-07-23 21:02  对方正在输入你的  阅读(258)  评论(0编辑  收藏  举报

导航