在前一章当中我们讲述了用户和组的管理命令,以及对安全的安全上下文,介绍了如何添加用户以及删除和修改用户,对于组来说也亦是如此,添加或修改用户或组之后,我们可以设置其用户密码或组密码来认证其用户,最后我们讲述了如何进行切换用户,那么在这一章中我们开始讲述权限管理。

一、补充上一章的命令

  在上一章中有一些命令没有说完,在这章节中我们将它们一一详解,首先我们来说chsh命令。
  chsh命令是用于改变用户的登录shell,如果没有指定其shell,该命令就会相应的提示。格式为:

   # chsh [OPTIONS] /PATH/TO/SHELL

  该命令选项为:

   -s, --shell:指定用户所登录的shell;
   -l, --list-shells:显示/etc/shells中的shell列表;
   -u, --help:显示帮助;
   -v, --version:显示其版本信息;

  chfn,更改你的用户信息,存放在/etc/passwd文件中。finger命令是用户信息查找的程序。
  whoami显示当前的登录用户是哪一个。
  pwck是验证系统认证文件/etc/passwd和/etc/shadow的内容和格式的完整性。语法格式为:

   # pwck [OPTIONS] [passwd [shadow]]

  该命令的选项如下:

   -q:仅报告错误信息;
   -s:以用户ID排序文件;
   -r:只读方式运行指令;

  接下来是grpck命令,该命令是用户验证组文件的完整性,在验证之前需要锁定/etc/group和/etc/shadow这两个文件,之后该命令检查数据是否正确存放。有两个参数可以记一下:

   -r:只读模式; 
   -s:排序组ID。

二、权限管理

  权限管理就是用户的访问权限进行了其控制,我们使用CentOS中我们使用ll命令可以在该目录下详细查看文件权限、属主属组、大小和日期等,而在Debian中,ll命令是不存在的,因为ll是一个别名在CentOS中,要想查看用ls -l命令才可以,那么我们执行该命令之后,我们看到一列字符,由rwx组成,那便是权限的组成。

   rwxrwxrwx

  我们看到一共有九个字符串来组成,左边这三位是定义用户的权限,中间这三位是定义组的权限,最后的三位是定义其他人的权限,那么我们来总结一下权限的定义。

   rwxrwxrwx:
       左三位:定义user(owner)的权限;
	   中三位:定义group的权限;
	   右三位:定义other的权限;

  对于用户来说,访问某个目录下的文件时就会发起某一个命令进程,比如说发起一个cat命令,这个命令也是个程序,用户发起时它也是形成为一个进程来去运行,如果发起该进程的用户与该文件所定义的用户相同,就可以行使该用户的权限来查看文件内容。但如果用户发起的进程不属于这个用户的话,而是这个进程的用户是属于这个组的话,我们就可以行使该文件的属组权限来查看该文件。但如果这以上既不属于这个用户,又不属于这个组,就只能找其它人的权限来应用。所以,我们来总结一下进程的安全上下文:

   进程安全上下文:
	 进程对文件的访问权限的应用模型:
		进程的属主与文件的属主是否相同;如果相同,则应用属主权限;
		否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;
		否则,就只能应用other权限;

  我们知道了rwx的组成就代表了其权限的组成,其中r就是读权限(readable),w就是写的权限(writesble),x就是其执行的权限(excuteable),这些权限的组成对于文件和目录的意义是不一样的,我们先说一下对于文件的意义。
  对于文件来说,rwx的权限组成的意义为:

   r:可获取文件的数据;
   w:可修改文件的数据;
   x:可将此文件运行为一个进程;

  对于目录来说,rwx的权限组成的意义为:

   r:可以使用ls命令获取其下列所有的文件以及目录的列表;
   w:可以修改此目录下列的文件列表;比如创建或删除及重命名文件;
   x:可以cd至此目录中还可以使用ls -l来获取所有的文件信息属性的信息;

  需要注意的是,对于一个普通文件来说,x的权限是不应该拥有的,如果对普通的文本文件赋予x权限并且运行的话,瞬间就会给系统造成极大的负担,很有可能会损坏其系统。但是对于目录来说,x的权限是必须要有的,因为你得要进去该目录才能修改其目录下的目录或文件等。除非有特殊的需要,不然的话是必须得有。
  权限的组合是由u,g,o来组成,分别对于属主、属组和其他人,所以它的模式(mode)每一个都由rwx可以组成多样的权限。不过还有另一种的组合权限方法是由八进制组成的,范围由0到7,称之为权限组合机制,示例如下:

   权限组合机制:
	 --- 000 0
	 --x 001 1
	 -w- 010 2
	 -wx 011 3
	 r-- 100 4
	 r-x 101 5
	 rw- 110 6
	 rwx 111 7

  对于权限的管理的命令为chmod命令,该命令的语法格式如下:

   chmod [OPTION]... MODE[,MODE]... FILE
   chmod [OPTION]... OCTAL-MODE FILE
   chmod [OPTION]... --reference=RFILE FILE...

  主要针对的以上的三类用户,这三类用户我们也讲过,分别是:

    三类用户:
	  u:属主
	  g:属组
	  o:其他
	  a:所有

  我们先来说第一种格式,第一种格式为:

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

  其中的MODE表示的方法有两种,第一种为赋权表示法,其意思就是直接操作一类用户的所有权限位rwx:例如:u=w, g=w, o=。

   u=
   g=
   o=
   a=

  第二种方法为授权表示法:就是直接操作一类用户的其中一个的权限位r,w,x。

   u+, u-
   g+, g-
   o+, o-
   a+, a-

  其次我们说一下第二个命令的格式,第二种命令的格式为:

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

  这个并不是以上用字符,而是用数字,例如:

   # chmod 660 fstab

  最后一个命令主要是将源文件的权限递归到目标文件当中去,格式为:

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

  例如:

   # chmod --reference=/var/log/message fstab

  该命令的选项为:

   -R, --recursive:递归修改(不建议使用,除非只是目录)
    # chmod -R go= skel/  这时才有用

  需要注意的是:用户仅能修改属主为自己下列其文件的权限。

三、从属关系管理命令

  从属关系管理的命令为chown和chgrp这两个命令,一个更改属主,另一个更改属组,前者不止可以改属主,还可以改属组,而后者就不可以,chown语法格式为:

   chown [OPTION]... [OWNER[:GROUP]] FILE...
   chown [OPTION]... --reference=RFILE FILE...

  该命令的选项为:

   -R:递归修改

  语法示例:

   # chown user1.user1 fatab
   # chown --reference anaconda-ks.cfg fatab

  我们现在介绍chgrp命令,该命令是修改属组的命令,不过chown命令也可以修改其属组的命令,这个命令简单了解一下就好。

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

  接下来是umask命令,这个名师文件权限的反向掩码,我们称为遮罩码,对于文件和目录来说,遮罩码的赋予的权限是不一样的,从文件来说默认是666,而对目录来说默认是777,这个值得注意,之所以文件文件用666去减,表示文件默认不能用于其执行权限;如果减得中间有执行权限,默认是要加一位数字的。
  umask命令:直接默认查看当前umask,如果设置umask的格式为:

   umask MASK

  值得注意的是:此类设定仅对当前shell进程有效。
  mktemp命令是建立随机目录的命令,命令格式:

   mktemp [OPTIONS]... [TEMPLATE]

常用选项:

-d:创建临时目录;

  注意:mktemp会将创建的临时文件名直接返回,因此,可直接通过命令引用保存起来。
  还有一个命令也是复制命令,叫做install命令,复制文件的同时还可以设置属性,有多种复制方法。
  单源复制:

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

  多源复制:

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

  创建目录:

   install [OPTION]... -D DIRECTORY...

  该命令的常用选项为:

   -m, --mode=MODE:设mktemp [OPTION]... [TEMPLATE]定目标文件权限,默认为755;
   -o, --owner=OWNER:设定目标文件属主;
   -g, --group=GROUP:设定目标文件属组;