> CentOS > CentOS入门 >

CentOS权限详解

一、Linux文件属性结构格式(以root用户家目录为例)   

  [root@localhost ~]# ls -l       # 显示文件名与相关属性命令

  total 120

  drwxr-xr-x  2 root root  4096 Dec 10 07:57 07:57:04

  drwxr-xr-x  2 root root  4096 Dec 10 07:57 10

  drwxr-xr-x  2 root root  4096 Dec 10 07:57 2015

  -rw-------. 1 root root  2454 Dec  6 22:43 anaconda-ks.cfg

  drwxr-xr-x  2 root root  4096 Dec 10 07:57 CST

  drwxr-xr-x  2 root root  4096 Dec 10 07:57 Dec

  drwxr-xr-x  2 root root  4096 Dec  6 22:50 Desktop

  drwxr-xr-x  2 root root  4096 Dec  6 22:50 Documents

  drwxr-xr-x  2 root root  4096 Dec  6 22:50 Downloads

  -rw-r--r--. 1 root root 45098 Dec  6 22:43 install.log

  -rw-r--r--. 1 root root  9963 Dec  6 22:39 install.log.syslog

  drwxr-xr-x  2 root root  4096 Dec  6 22:50 Music

  drwxr-xr-x  2 root root  4096 Dec  6 22:50 Pictures

  drwxr-xr-x  2 root root  4096 Dec  6 22:50 Public

  drwxr-xr-x  2 root root  4096 Dec  6 22:50 Templates

  drwxr-xr-x  2 root root  4096 Dec  6 22:50 Videos

        【显示格式】:

            总量:

            类型和权限  连接数  所有者   用户组   文件大小  修改日期   文件名

    1.total:所列出内容的磁盘占用空间总和值(kbytes为单位)

表示该目录的大小,不完全解释:该目录下所有文件及目录列表第五字段的和

     注意:不一定等于相加,此数字为占用blocksize的整数倍,和占用block个数有关

    2.类型和权限(permission):十位分四段表示

(1)文件类型:

   -:常规文件;即f,file;

    d: directory,目录文件;

   b: block device,块设备文件,支持以“block”为单位进行随机访问,如硬盘、软盘...

    c:character device,字符设备文件,支持以“character”为单位进行线性访问

串行端口接收设备,一次性读取,如键盘、鼠标...,用主、次设备号表示

        major number:主设备号,用于标识设备类型,进而确定要加载的驱动程序

        minor number:次设备号,用于标识同一类型中的不同的设备;

   l:symbolic link,符号链接文件;类似于Windows下的快捷方式

   p: pipe,命名管道;解决多个程序访问一个文件所造成的错误,FIFO(first-in-first-out)

    s: socket,套接字文件;通常被用在网络上的数据连接,

(2)权限组合机制:(8bites 二进制)

      第二道十个字符:每三个为一组,均为'rwx'三个参数组合

       rwxrwxrwx每个位置固定不定,若无则为空,用'-'符号表示

 r:readable, 读;w:writable, 写;x:excutable,执行

r=4    w-2   x=1 -=0

      【文件目录所属】

               文件拥有者:文件本身所归属用户

               文件所属用户组:和文件拥有者通用户组

               其他人:其他非本用户组的人员

    3.连接数:硬连接数量,表示有多少个文件名连接到此节点(i-node)

(1)硬链接:通过不同的名称(路径)指向同一个inode的连接方式

      inode号相同,大于一个

    1) 仅能股对文件创建,不能对目录创建

    2)所创建的硬链接,不能够跨文件系统,但时能够在不同的目录下

    3)创建时增加文件被连接次数,即为此处ls -l 第二字段数字

    4)cp会付支出新的inode和block,硬链接的inode不同,但时block相同

(2)软连接:类似Widows下快捷方式,存储为其他路径directory

    1)大小为路径的字符个数

    2)可用于目录,不会增加文件被连接次数

    3)可以跨文件系统

    4)所创建的软连接的权限为777,但时实际访问权限与被链接文件自身权限相关

    4.所有者:该文件或者目录的所属的账号

    5.所属组:该文件或者目录的所属的账号所在的基本组

    6.容量大小:默认单位为B

常规类型文件大小:

目录类型文件大小:目录自身的大小,为占用几个block的大小

连接类型文件大小:连接文件名称字符个数所占大小

    7.修改日期:该文件的创建日期或者最近的更改日期

显示完整的时间格式:ls -l  --full-time

Linux上的三种时间戳:

   access time:访问时间,查看该文件后所记录下来的时间

   modify time:内容数据时间,文件内容数据发生改变,一些log文件增加

   change time:状态时间,如权限数显更改发生改变,status time

    8.文件名:文件名称

如果文件名之前多了一个".",则表示隐藏文件

 

 

 

二、文件目录权限访问控制

   1.Linux进程对文件访问权限应用模型

        进程安全上下文:

进程的属主与文件的属主是否相同;如果相同,则应用属主权限;

否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;

否则,就只能应用other的权限;

    2.权限对文件和目录不同的含义

        (1)对于文件的含义

 r:可获取文件的数据;可以使用类似于cat命令查看文件内容

w: 可修改文件的数据;可以编或者删除此文件

x:可将此文件运行为进程;可以在命令提示符下当做命令提交给内核运行

        (2)对于目录的含义

 r:可使用ls命令获取其下的所有文件列表;

w: 可修改此目录下的文件列表;即创建或删除文件;

x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;

 

 

 

三、权限管理命令

    1.chmod:更改文件目录权限

用户类型:u:属主   g:属组   o:其它    a: 所有

       (1)chmod [OPTION]...  MODE[,MODE]... FILE…

  1)赋权表示法:直接操作一类用户的所有权限位rwx.

用等号表示:[u|g|o|a]=rwx中的一位或者多位

  2)授权表示法:直接操作一类用户的一个权限位r,w,x

用加减号表示:[u|g|o|a][+|-]rwx

       (2)chmod [OPTION]...  OCTAL-MODE FILE…

直接使用三位数字的方式给文件目录增加权限,分别表示所有者、所属组、其他人的权限

数字的表示方法同上:8bites 二进制表示权限的组合机制

r=4    w-2   x=1  -=0三位相加

       (3)chmod [OPTION]...  --reference=RFILE FILE…   参照某个文件的权限来进行授权操作

  -R, --recursive:递归修改

      注意:普通用户仅能修改属主为自己的那些文件的权限;root可以更改所有用户

    2.chown:更改文件目录的所有者,也可以更改所属组

       (1)chown [OPTION]... [OWNER][:[GROUP]] FILE…

  1)仅更改用户的所有者

  2)所有者:所属组,可以同时更改

    所有者.所属组,也可以上述操作,但小心文件名中有.系统识别错误

       (2)chown [OPTION]... --reference=RFILE FILE… 参照某个文件的权限来进行授权操作

   -R:递归修改

    3.chgrp:更改文件目录的所属组

(1)chgrp [OPTION]... GROUP FILE… 更改所属组

(2)chgrp [OPTION]... --reference=RFILE FILE…

          参照某个文件的权限来进行授权操作       

    4.install:复制和设置属性权限 copy files and set attributes

        (1)单源复制:

      install [OPTION]... [-T] SOURCE DEST

        (2)多源复制:

       install [OPTION]... SOURCE... DIRECTORY

                  install [OPTION]... -t DIRECTORY SOURCE…

        (3)创建目录:

       install [OPTION]... -d DIRECTORY...

        (4)OPTIONS:

              -m, --mode=MODE:设定目标文件权限,默认为755;

               -o, --owner=OWNER:设定目标文件属主;

               -g, --group=GROUP:设定目标文件属组;

    5.umask:文件的权限反向掩码,遮罩码

        (1)umask:查看当前umask

 系统默认为:0022表示特殊权限、所有者权限、所有组权限、其他人权限

 更改默认设置位置:/etc/login.defs

        (2)对文件目录的umask操作

  1) 文件:666-umask ,文件默认不能拥有执行权限

     如果减得的结果中有执行权限,则需要将其加1

  2) 目录:777-umask

 

 

 

四、特殊权限

    1.SUID:运行某程序时,相应进程的属主是程序文件本身的属主

  chmod  u+s  FILE  增加SUID权限

  chmod  u+s  FILE  删除SUID权限

如果FILE本身就有可执行权限,则SUID显示为a,否则为S

    2.SGID:运行程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属属组

chmod  g+s  FILE    

chmod  g-s  FILE

    3.sticky:在一个公共目录,每个用户都可以创建文件,删除文件,但不能删除别人的

注意:该权限仅能针对目录Directory

chmod  o+t DIR    

chmod  o-t   DIR

    4.SUID、SGID仅能对文件操作,sticky仅能对目录操作

SUID=w  SGID=2  sticky=1

 

 

 

五、关于权限问题的一些问题思考与验证

思考:用户对目录有写权限,但对目录下的文件没有写权限时,能否修改此文件内容?  能否删除此文件?能否用vim修改

    1.当属主和属组相同时:都是gentoo,用gento操作

1)切换到普通用户gentoo,在/tmp下建立测试目录test和测试文件test.txt

[root@localhost ~]# su - gentoo

[gentoo@localhost ~]$ cd /tmp

[gentoo@localhost tmp]$ mkdir test

[gentoo@localhost tmp]$ touch test/test.txt

2)更改权限,确保前提目录test有写权限,文件test.txt没有写权限

[gentoo@localhost tmp]$ ll | grep test

drwxrwxr-x  2 gentoo gentoo 4096 Dec 12 10:19 test

[gentoo@localhost tmp]$ cd test

[gentoo@localhost test]$ chmod 500 test.txt

[gentoo@localhost test]$ ll

total 0

-r-x------ 1 gentoo gentoo 0 Dec 12 10:19 test.txt

3)用echo写入命令写入

[gentoo@localhost test]$ echo 'hello' > test.txt

-bash: test.txt: Permission denied 

4)尝试用vim写入操作

[gentoo@localhost test]$ vim test.txt

-- INSERT -- W10: Warning: Changing a readonly file

     退出强制保存

E45: 'readonly' option is set (add ! to override)

结果可以写入,文件属主、属组、权限都没改变

    2.当属主和属组不同时:文件属主是gentoo,属组是slckware,用gentoo用户操作

1)同上操作在/tmp/test下建立测试文件test1,更改权限和属组为slackware

2) 用echo写入命令写入

[gentoo@localhost test]$ echo 'hello' >  test1

-bash: test1: Permission denied

3)尝试用vim写入操作

[gentoo@localhost test]$ vim test.txt

-- INSERT -- W10: Warning: Changing a readonly file 4

     强制退出并保存

E45: 'readonly' option is set (add ! to override)

结果可以写入,文件属主、属组、权限都没改变

      3.当属主和属组不同时:文件属主是gentoo,属组是slckware,用slckware用户操作

[root@localhost test]# chmod g+r test1   

[root@localhost test]# su - slackware

[slackware@localhost ~]$ cd /tmp/test

[slackware@localhost test]$ ll

total 4

-r-xr----- 1 gentoo slackware 7 Dec 12 11:11 test1

[slackware@localhost test]$ vim test1

[slackware@localhost test]$ ll

total 4

-r-xr----- 1 slackware slackware 21 Dec 12 11:17 test1

  结论:

1.情况一和情况二所得结论相同:都不能echo写入修改文件内容,但是结果可以写入,而文件属主、属组、权限均未发生改变

2.情况三,不同的用户在没有写权限的情况下对其组内的其他用户文件进行操作,echo不能写入

但时vim可以强制写入,但此时文件已经不是原来文件,覆盖写入,属主发生变化。

slackware作为普通用户,没有chown权限,可能为vim的内存空间重新写入覆盖文件

此时,文件权限没变,属主发生变化

(责任编辑:IT)