用户和组管理权限及文件访问控制


  与用户账户和组帐户相关的文件:

    1./etc/passwd

    2./etc/group

    3./etc/shadow

    4./etc/gshadow

    5./etc/default/useradd

    6./etc/login.defs

    7./etc/skel(Directory)


  1./etc/passwd:

   root:x:0:0:root:/root:/bin/bash

    1  2 3 4  5   6    7


   1:用户账户登录名称;

   2:使用"x"表示密码占位符;

   3:用户账户的UID;

   4:用户账户的GID,即该用户账户的基本组的ID;

   5:注释信息,如用户职位、用户完整名称等;

   6:用户账户的家目录的绝对路径;

   7:用户账户的默认登录shell;

   例:qhdlink:x:1001:1006::/home/qhdlink:/bin/bash


  2./etc/group

    root:x:0:

    1  2 3 4


    1:组账户名称;

    2:组账户密码占位符;

    3:组账户的GID;

    4:以该组为附加组的用户列表,多个用户名之间使用","分隔;

    

    例:centos:x:1004:qhdlink,fedora



  3./etc/shadow

                                            root:$6$1bJAWLkjSA8dkPR5$q5CjatV0j62iTzbfyHZUD0dmRTKa54Yb.E1GVz1uOk5mKjR/KaRV963jkGQ0T1MS.w

 1   2

xj7LLu3VpSSDW4bX8wd0: :0:99999:7: : :

              3 4  5  6 7 8  9                                                                                                    


   1:用户账户登录名;

   2:密码的加密算法+salt+密码的加密结果;

   3:最后一次修改密码的时间;其表示法为从1970年1月1日到当前系统时间所表示的日期的          天数;

   4:用户密码的最短使用期限;可以理解为多长时间内不能更改密码,0表示随时可以更改密          码;

   5:用户密码的最长使用期限;可以理解为多长时间内无需更改密码,也可以正常登录;

   6:用户密码的使用时间达到最长使用期限之前多少天开始,在用户登录到系统时发送警告消          息;

   7:用户密码过期之后的宽限期;可以理解为在密码过期之后的多少天内,登录系统时仍然可          以提示修改密码;

   8:用户密码的绝对失效时间;其表示法为从1970年1月1日到指定日期时间的天数;

   9:保留,未被使用;

   例:

qhdlink:$6$fyNBEETs$jPz2H0Qd2uxGu5h0jJt7//0iHh1L.Bij0rqxFmGg6Bu.5po5WaE8W4iFN0RsZwuPZ.ZuATwZOaGlF7cDAYFm7.:17472:0:99999:7:::


  4./etc/gshadow

    root:  :  :user1,myuser

     1  2  3  4

 

   1.组账户名称;

   2.组账户的加密密码;

   3.组管理员,现在废弃了;

   4.以该组为附加组的用户账户列表;

   例:centos:!::qhdlink,fedora


   gpasswd:设置组的密码及管理组成员;

   格式:gpasswd [option...] GROUPNAME

   -a USERNAME:将-a选项指定的用户添加至指定组;

   -d USERNAME:将-d选项指定的用户从指定的组中移除;


   newgrp:用一个新的组重新登录到系统;需要被指定的组有正确的密码设置;

   newgrp [-] [group]

   



 5./etc/default/useradd

    作用:定义创建用户时的用户属性的默认值的文件;

    GROUP=100

    //在创建用户时,如果没有为用户指定基本组,系统会为用户指定一个与用户名相同的组作为其      基本组;

    HOME=/home

    //在创建用户时,如果没有为用户指定家目录,则会在/home目录中创建一个与用户同名的目录作      为其家目录;

    INACTIVE=-1

   //在创建用户时,设定用户密码过期之后的宽限期,默认为-1,意为关闭用户密码过期宽限期的功      能,即宽限期为永远;

    EXPIRE=

   //在创建用户时,设定用户密码的绝对失效日期,默认没有启用;

    SHELL=/bin/bash

   //在创建用户时,设定用户的默认登录shell,默认值为/bin/bash;

    SKEL=/etc/skel

   //在创建用户时,为用户的家目录提供的默认文件的模版;

    CREATE_MAIL_SPOOL=yes

   //在创建用户时,是否直接为用户创建邮箱文件;默认创建;

   例:GROUP=100

      HOME=/home

      INACTIVE=-1

      EXPIRE=

      SHELL=/bin/bash

      SKEL=/etc/skel

      CREATE_MAIL_SPOOL=yes


  6./etc/login.defs  (Definations)

   作用:定义shadow_utils相关的属性,包括用户邮箱路径、密码的时间参数、UID和GID的范围,删    除用户账户的命令、是否设置私有组(仅包含一个用户并作为该用户主要组)、权限位掩码、家目录    创建开关、密码的加密算法;


   MAIL_DIR        /var/spool/mail

   //指定创建用户时为用户指定邮箱文件的路径;


   PASS_MAX_DAYS   99999

   PASS_MIN_DAYS    0

   PASS_MIN_LEN     5

   PASS_WARN_AGE    7

   //与密码的时间参数有关的设置;


   UID_MIN                  1000

   UID_MAX                  60000

   # System accounts

   SYS_UID_MIN                201

   SYS_UID_MAX                999


   GID_MIN                  1000

   GID_MAX                  60000

   # System accounts

   SYS_GID_MIN                201

   SYS_GID_MAX                999

   //指定默认的ID选择范围;


   USERDEL_CMD    /usr/sbin/userdel_local

   //指定删除用户时使用的命令;


   CREATE_HOME     yes

   //是否在创建用户时为用户创建家目录的开关;


   UMASK           077

   //指定用户家目录的默认权限的掩码;


   USERGROUPS_ENAB yes

   //是否开启私有组开关;


   ENCRYPT_METHOD SHA512

   //使用何种算法加密密码;

   例:

   # the permission mask will be initialized to 022.

   UMASK           077


   # This enables userdel to remove user groups if no members exist.

   #

   USERGROUPS_ENAB yes


   # Use SHA512 to encrypt password.

   ENCRYPT_METHOD SHA512 



 7./etc/skel

   作用:为新创建的用户的家目录提供默认的[shell配置]文件;


   文件系统的权限管理:

         普通权限

         特殊权限

         文件的扩展属性

         FACL(文件系统访问控制列表)


   DAC:自主访问控制;


   安全上下文:

   任何在计算机中执行的任务都是由进程实现的;

   进程有必要访问和使用文件或某些数据资源;


   进程和其要操作的文件之间的关系,就定义为安全上下文;

   在DAC模型中,定义安全上下文的方式很简单:


   所有权:

   任何启动进程的用户就是该进程的所有者;进程的所有者可以变更;

   任何创建文件的用户就是该文件的所有者;文件的所有者可以变更;


   使用权

   在文件上面定义的对该文件的特定使用过滤规则;

   三个权限:所有者权限,所属组权限,其他人权限;


   安全上下文的匹配规则:

   当某个进程试图操作某个文件时,DAC将做如下规则匹配:

   1.判断进程的所有者和文件的所有者是否为同一用户,如果是,则直接应用文件的所有者权限;

   2.如果不是,进一步判断进程的所有者是否为文件的所属组的成员,如果是,则直接应用文件的所     属组权限;

   3.如果不是,直接应用其他人权限;

   



 文件权限的构成:

   使用权:MODE,Permission

   三个基本权限:

   r:Readable,可读;

   w:Writable,可写;

   x:eXecutable,可执行;


   目录文件:

   r:可以使用ls命令获取其中所包含的所有文件的文件名列表;

   w:可以在此目录中进行文件名修改(创建,删除,修改);即:可以创建文件名,删除文件名及修      改文件名;

   x:可以使用ls -l命令来查看各个文件的属性信息;在路径中引用该目录;


   非目录文件:

   r:可以利用cat类的命令获取文件中存放的数据信息;

   w:可以修改(添加,修改,删除、覆盖)文件中存放的数据信息;

   x:可以将文件发起为进程;


   获取使用权和所有权的相关信息:

    ls -l[d] /PATH/TO/SOMEFILE

[root@localhost ~]# ls -ld 456

drwxr-xr-x. 2 root root 6 11月  8 16:56 456


    rwxr-xr-x:三个权限位(属主/所有者,属组/所属组,其他用户)

    

    属主权限:rwx,此权限位标识为user,简写为u;

    属组权限:r-x,此权限位标识为group,简写为g;

    其他用户权限:r-x,此权限位标识为other,简写为o;


    所有的权限位可以统一用all标识,简写为a;


    注意:"-"表示在该权限位上不具备指定权限;


    rwx组合称为"权限标识三元组";


   数字权限标识:二进制数字标识,在对应的权限位上有权限则为1,无权限则为0;


   ---     000   0

   --x     001   1

   -w-     010   2

   -wx     011   3

   r--    100   4     

   r-x    101   5

   rw-    110   6

   rwx     111   7


   使用符号标识权限和数字表示权限的区别:

   1.使用符号标识法可以只标识某个特定的权限位,也可以同时标识所有的权限位;

   示例:

    u=rx; ug=rwx; u=rwx,g=rx,o=r; a=rwx

   2.使用数字标识法只能同时标识所有权限位;

   示例:

    755; 644; 7 == 007 ; 75 == 075


   修改文件的使用权:

   chmod  -  change file mode bits

   格式:

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

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

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


   MODE:符号权限标识法:

   u, g, o, a:表示权限位;

   +, -, =:表示授权方式;

   +:表示在指定的权限位上增加指定权限;如果新增的权限是已经存在的权限,则结果相比较授权      之前无变化;

   -:表示在指定的权限位上撤销指定权限;如果被撤销权限在原权限位并不存在,则结果相比较授      权之前无变化;

   =:表示在指定的权限位上精确授权;此种授权方式不考虑该权限位原有的权限设定的;

    r, w, x:表示具体的权限;


  示例:

   # chmod u+r,g+w,o+r 1.txt

   # chmod u-x,g-x,o-wx  2.txt

   # chmod u+rw,g+rw,o+r  3.txt

   # chmod u=r,g=r,o=rwx  4.txt


  注意:

   chmod +|- r|x FILE:在所有的权限位上增加或撤销读或执行权限;

   chmod +|- w FILE:仅在所有者权限位上增加或撤销写权限;


  注意:对于文件来说,执行权限是非常重要的安全上下文标识;因此默认情况下,所有的非目录文件       都不应该有执行权限;因为一旦非目录具有了执行权限,则意味着该文件可以被执行,发起为       进程,则可以按需使用系统资源;


  OCTAL-MODE:八进制数字权限标识法

  示例:

  # chmod 640 root.txt


  --reference=RFILE:

  示例:

  # chmod --reference=/etc/shadow root.txt 

  //参考/etc/shadow文件的权限位root.txt设置相同权限;


  常用选项:

  -R, --recursive:递归地设置目标文件或目录的权限;


  修改文件的所有权:

  chown

  chown - change file owner and group //修改文件的属主和属组

  格式:

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

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


  示例:

  ~]# chown user3 test1:将所有者设置为user3

  ~]# chown user3: test2:将所有者设置为user3,将所有者的主组设为所属组

  ~]# chown :user3 test3将文件test的所属组设为user3

  ~]# chown user3:myuser test4将所有者设置为user3


  注意:在使用chown命令时,特别的,可以使用"."代替":";

   例;chown user.myuser user3


  常用选项:

  -R, --recursive:递归地设置目标文件或目录的所有权;


  注意:对于文件来说,普通用户可以修改所有者为自己的文件的使用权,但无法修改文件的所有权;   修改文件所有权的操作只有root可以完成;


  chgrp(不常用)

  chgrp - change group ownership

  格式:

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

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


  注意:chown和chgrp命令所指定的用户和组,既可以是用户名和组名,也可以是UID和GID;


  mkdir:

  -m MODE:在创建目录时为其指定权限;


  install命令:

  install - copy files and set attributes

  格式:

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

  单源复制,为复制后的文件增加执行权限;

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

  多源复制,为复制后的文件增加执行权限;

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

  创建目录;


  常用选项:

  -g, --group=GROUP

  set group ownership, instead of process' current group

  //设定目标文件的所属组为指定组,而不是进程所有者的主要组;


  -m, --mode=MODE

  set permission mode (as in chmod), instead of rwxr-xr-x

  //设定目标文件的权限,而不是rwxr-xr-x;


  -o, --owner=OWNER

  set ownership (super-user only)

  //设定目标文件的所有者,仅root可用;


  注意:install命令,不能复制目录,即不能以目录为源文件;如果其源文件是一个目录,则install   命令会进入该目录,依次复制其中的所有非目录文件到目标位置;


  特殊权限:

  SUID,SGID,STICKY


  1.SUID:SUID仅设置在可执行的文件上。

  默认情况下,当用户执行此类可执行文件时,被发起的进程的所有者不是进程发起者,而是可执行文   件的所有者;换句话说,进程以文件所有者的身份运行;


 SUID权限所显示的位置:文件的属主的权限位中的执行权限位上;如果属主本来就具有执行权限,则  显示为"s";如果属主本来没有执行权限,则显示为"S";


 管理SUID权限:

  1.符号标识法:chmod u+s FILE

  2.数字标识法:chmod 4755 FILE


  2.SGID:SGID可以设置在可执行文件或目录的属组权限位的执行权限上。

  如果某个目录设置了SGID权限,并且对于某些用户有写权限,则所有在此目录中创建的新文件和目录   的所属组均为其父目录的所属组,而并非进程发起者的主要组;


  SGID权限的显示位置:文件的属组权限位上的执行权限上;如果属组本来就有执行权限,则显示     为"s",否则,就显示为"S";


 管理SGID权限:

  1.符号标识法:chmod g+s DIR

  2.数字标识法:chmod 2770 DIR


  3.STICKY:STICKY仅设置在目录的其他用户权限位的执行权限上。

  如果在某个目录上的权限设置为多个用户都拥有写权限,那就意味着凡是拥有写权限的用户都能直接   管理该目录中的所有文件名,包括改名文件及删除文件名等操作;因此需要在这样的目录上设置     STICKY特殊权限;如果此类目录设置了STICKY,则所有用户即便拥有写权限,也仅能删除或改名所有   者为其自身的文件;


  STICKY权限的显示位置:在目录的其他用户的权限位的执行权限上;如果该权限位本来有执行权限,   则显示为"t",否则,显示为"T";


 管理STICKY权限:

 1.符号标识法:chmod o+t DIR

 2.数字标识法:chmod 1777 DIR


 权限遮罩码:umask

 作用:在创建目录或文件时,被创建出来的目录或文件的默认权限上删除遮罩码上所对应的权限;


 注意:在创建目录或文件时,默认不设置特殊权限;


 对于目录文件:默认的权限为:0777-umask   0777-0033 = 0744

 对于非目录文件:默认的权限为:0666-umask 0666-0033 = 0644


 umask [OCTAL-MODE]


 默认设置遮罩码的文件:/etc/bashrc

 规则:如果用户的UID大于199并且用户的用户名和主要组的组名相同,则遮罩码为002;否则遮罩码为  022;


 文件的扩展属性:

 lsattr:

  lsattr - list file attributes on a Linux second extended file system

 格式:

  lsattr [ -RVadv ] [ files...  ]


 chattr:

  chattr - change file attributes on a Linux file system

 格式:

  chattr [ -RVf ] [ -v version ] [ mode ] files...


  mode可以是:+-=[aAcCdDeijsStTu]

   +

   -

   =


   a:在向文件写数据时,只能以附加的方式进行写操作;文件的内容不能被更改和删除;一般会为      日志文件设置此属性;

   A:atime,文件的访问时间戳控制属性;对于并发访问量较大或者并发访问频率较高的文件,应该      设置此属性以降低IO成本;防止IO瓶颈;

   c:设置是否自动压缩之后再存储;

   C:是否开启"写时复制";

   d:使用dump备份文件系统是,跳过属性设置为d的文件;

   D:设置文件在文件系统中的异步写操作;

   i:设置文件不能被删除,改名及设定链接关系;

   s:设置文件的保密性删除;

   u:与s属性相反,如果此类文件被删除,则在存储器中会继续保存其内容;


 FACL:

  Filesystem Access Control List,文件系统访问控制列表;

  想要应用此功能,必须让文件系统能够支持;


  FACL为文件系统的额外赋权机制;


  在原有的u,g,o权限位之外,让普通用户能够控制权限赋予另外的某个指定的用户或组的一种赋权机   制;


  这种机制在CentOS或者RHEL7之后的发行版本中,才逐渐成熟;


  与FACL相关的命令:

  getfacl:

  getfacl - get file access control lists

  格式:

  getfacl [-aceEsRLPtpndvh] file ...


  setfacl

  setfacl - set file access control lists

  格式:

  setfacl [-bkndRLPvh] [{-m|-x} acl_spec] file ...

  setfacl --restore=file


  常用选项:

  -m acl_spec:为指定文件设置acl_spec;

  -x acl_spec:将acl_spec从指定文件上移除;

 为文件赋予指定用户的额外访问权限:

例:

[qhdlink@localhost ~]$ setfacl -m u:gentoo:rwx /tmp/project.plan

[qhdlink@localhost ~]$ ll /tmp

总用量 64

-rw-rwxr--+ 1 qhdlink qhdlink    11 11月  9 21:58 project.plan

[qhdlink@localhost ~]$ getfacl /tmp/project.plan

getfacl: Removing leading '/' from absolute path names

# file: tmp/project.plan

# owner: qhdlink

# group: qhdlink

user::rw-

user:gentoo:rwx

group::rw-

mask::rwx

other::r--


  acl_spec:acl_specification,acl规格,访问控制列表;

  u:USERNAME:MODE

  g:GROUPNAME:MODE


  MODE一般是使用符号权限标识法标识的权限;


  


   注意:如果设置了FACL之后,再修改目标文件的使用权限,那么FACL中设置的权限条目可能受到影    响而导致授权失败;因此,为了保证没有此项干扰,应该先调整目标文件或目录的权限,再设置    FACL;