写在前面:

    博客书写牢记5W1H法则:What,Why,When,Where,Who,How。


本篇主要内容:

● 文件及目录基本权限;

● 文件及目录属主属组设置;

● umask含义与设置

本篇涉及命令列表:

⊙ chown

⊙ chgrp

⊙ chmod

⊙ umask


进程安全上下文:

   进程通常是由用户发起,运行程序文件产生的,此进程以用户的身份运行,那么运行进程的用户权限就是进程的权限了。

   而当进程去访问文件时,系统就可以根据运行进程的用户身份来判断进程拥有那些权限了:

      判断进程的发起者是否为文件属主---->是---->以属主身份来访问,应用属主权限;否---↓

      判断进程的发起者是否为文件属组成员--->是--->以属组身份来访问,应用属组权限;否---↓

      以“其他”身份来访问,应用“其他”权限。

      (linux系统设置了一些特殊权限:factl、suid、sgid、sticky,设置这些权限的文件不适用以上说法)


   用ls -l命令查看文件权限可以看到:

[root@localhost ~]# ls -l
total 4
-rw-------. 1 root root 2639 Mar  4 02:58 anaconda-ks.cfg
drwxr-xr-x. 2 root root   43 Mar  8 18:49 shell
drwxr-xr-x. 2 root root   32 Mar  8 02:33 test

   (1)文件系统的文件权限是对属主(owner,u)、属组(group,g)、其他(other,o)三种身份来设置的;

   (2)每一种身份都包含了rwx三种权限(可读、可写、可执行);

   (3)文件本身有属主和属组;上面属主和属组分别为root;


在linux中,文件与目录的rwx权限所对应的意义不太相同:

   文件:

      r:可获取文件的数据;

         即可以用less、more、cat等命令查看文件内容。

      w:可修改文件的数据;

         即可以用vi等编辑器对文件的数据进行修改。

         注:对文件的删除、mv权限看的是上级目录是否有wx权限,跟文件本身权限无关;而cp本目录文件到本目录涉及到在目录新建文件和读取文件两步操作,所以需要上级目录的wx权限,以及文件的r权限。

      x:可将文件运行为进程;

         即如果文件支持,可以作为程序运行。

   目录:

      r:仅可以查看内容列表;

         即可以使用ls等命令查看目录内的文件列表。但不能使用ls -l命令查看目录内文件列表的详细信息,也不能cd到目录内。

      w:可修改此目录下的文件;

         即可以在目录下创建、删除文件(前提是必须有x权限)。注意cp、mv命令也属于在目录下新建和删除文件操作的。cp目录下文件到其他目录只需要rx权限。

      x:可以查看详细内容列表;

         有x权限就可以cd到目录内,如果要使用ls -l命令查看文件列表详情,则需要r权限

rwx权限组合机制:

事实上,rwx的权限在linux中是以二进制存储的,我们也可以使用八进制来表示rwx权限的任意组合:

rwx权限二进制表示八进制表示
---0000
--x0011
-w-0102
-wx0113
r--1004
r-x1015
rw-1106
rwx1117

      由此,上述目录的ugo权限用八进制可以表示为:755


权限管理命令:

   属主属组信息(ownership)修改:(仅管理员有权限

      修改属主:chown

      修改属组:chgrp

   文件权限(permission):(仅属主有权限

      chmod


命令详情:

   chown

      change file owner and group

      chown [OPTION]... [OWNER][:[GROUP]] FILE...

      chown [OPTION]... --reference=RFILE FILE...

      -R, --recursive:递归修改

      命令实例:

     #修改hello文件的属主为fred用户,属组为fred组。也可以将“:”用“.”替换

chown fred:fred hello

      #递归修改dir目录及其内的所有文件属组为fred

chown -R :fred dir

     #将hello的属主属组信息修改为.bashrc文件的属主属组

chown --reference=.bashrc hello

   chgrp

      change group ownership

      chgrp [OPTION]... GROUP FILE...

      chgrp [OPTION]... --reference=RFILE FILE...

      用法与chown非常类似,参考chown实例。

   chmod

      change file mode bits

      chmod [OPTION]... MODE[,MODE]... FILE...

      chmod [OPTION]... OCTAL-MODE FILE...

      chmod [OPTION]... --reference=RFILE FILE...

      -R, --recursive:递归修改

      

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

      可以使用ugoa分别表示属主、属组、其他、所有用户来对文件或目录进行权限修改。并可以使用+-=来分别表示增加、移除、赋予相应权限。

      实例:

#设置file1文件的属主权限为rw:

[mageedu@localhost mageedu]$ ls -l file1
-r-xrw-r--. 1 mageedu mageedu 0 Mar  8 21:45 file1
[mageedu@localhost mageedu]$ chmod u=rw file1
[mageedu@localhost mageedu]$ ls -l file1
-rw-rw-r--. 1 mageedu mageedu 0 Mar  8 21:45 file1

#为file1文件的属组去除r权限:

[mageedu@localhost mageedu]$ ls -l file1
-rw-rw-r--. 1 mageedu mageedu 0 Mar  8 21:45 file1
[mageedu@localhost mageedu]$ chmod g-r file1
[mageedu@localhost mageedu]$ ls -l file1
-rw--w-r--. 1 mageedu mageedu 0 Mar  8 21:45 file1

#为dir1目录及其目录内文件目录的“其他”用户增加w权限:

[mageedu@localhost mageedu]$ ls -ld dir1/
drwxrwxr-x. 2 mageedu mageedu 18 Mar  8 21:50 dir1/
[mageedu@localhost mageedu]$ ls -l dir1/
total 0
-rw-rw-r--. 1 mageedu mageedu 0 Mar  8 21:50 file2
[mageedu@localhost mageedu]$ chmod -R o+w dir1/
[mageedu@localhost mageedu]$ ls -ld dir1/
drwxrwxrwx. 2 mageedu mageedu 18 Mar  8 21:50 dir1/
[mageedu@localhost mageedu]$ ls -l dir1/
total 0
-rw-rw-rw-. 1 mageedu mageedu 0 Mar  8 21:50 file2

#为file1文件的属主属组去除w权限:

[mageedu@localhost mageedu]$ ls -l file1 
-rw--w-r--. 1 mageedu mageedu 0 Mar  8 21:45 file1
[mageedu@localhost mageedu]$ chmod ug-w file1 
[mageedu@localhost mageedu]$ ls -l file1 
-r-----r--. 1 mageedu mageedu 0 Mar  8 21:45 file1

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

      可以使用八进制数字的方式一次性为属主属组和其他用户设置权限

      实例:

#直接为file1文件设置rw-rw-r--权限:

[mageedu@localhost mageedu]$ ls -l file1 
-r-----r--. 1 mageedu mageedu 0 Mar  8 21:45 file1
[mageedu@localhost mageedu]$ chmod 664 file1 
[mageedu@localhost mageedu]$ ls -l file1 
-rw-rw-r--. 1 mageedu mageedu 0 Mar  8 21:45 file1

      (3)chmod [OPTION]... --reference=RFILE FILE...

      修改FILE的属主属组其他权限与RFILE文件相同,与chown命令类似。


   umask

      Display or set file mode mask

      umask [-S] [mode]

      umask决定了用户新建文件的权限,如默认普通用户的umask为0002,第一位为特殊权限掩码,不懂可以先忽略,后三位分别为属主、属组、其他用户权限掩码。设置掩码时直接使用3位八进制即可。

      linux新建文件时,根据初始权限减去掩码得到文件权限,目录与文件的初始权限不同:

         文件初始权限无x权限,故初始权限为:666

         目录初始权限:777

      注意:如果文件的初始权限减去umask得到的结果,ug或o有执行权限,则对应权限加1。即无论如何,新建的文件不会有x权限。

      实例:

[fred@localhost test]$ umask 013
[fred@localhost test]$ touch file4
[fred@localhost test]$ ls -l file4
-rw-rw-r--. 1 fred fred 0 Mar  8 22:20 file4

上例中666-013=653 ---> rw-r-x-wx属组和其他用户都有x权限,所以都加1,权限变成了 rw-rw-r--