首页 > 代码库 > 用户的权限管理

用户的权限管理

用户的权限管理

用户的权限管理中包含主要的四部分:普通权限、特殊权限、文件的特殊属性、FACL:

一、普通权限:

普通权限下的进程安全上下文包括如下几点:

1、判断进程的所有者是否想要操作所有者的属主,如果是,就按照属主的权限进行授权,如果不是,就转到第二条;

2、判断进程所有者是否想要操作文件属组中的成员,如果是,就按照属组的权限进行授权,如果不是,就转到第三条;

3、按照其他用户的权限进行授权。

权限包括使用权和所有权,具体构成如下:

1、MODE(Permission):使用权

使用权中的权限位为r(readable 可读)、w(writeable 可写)、x(executable 可执行)


目录中权限位的具体用法如下:

r:可以使用ls命令获取其中所有目录的文件名列表;ls -l命令来获取命令中文件的详细属性信息,不能使用cd命令进入其中,也不能在路径中引用该目录;

w:可以修改此文件的文件名或文件列表,即可以在此命令中创建、修改或删除文件名;

x;可以使用ls命令来获取文件中纤细的属性信息,可以自路径中引用该目录,也可以使用cd命令来进入其中。

注意:x权限是目录的基本权限,换言之,任何目录都必须给任何用户开放x权限,如果没有执行权限则不能引用路径。

2、OWNERSHP:所有权

所有权包括三类:属主的、属组的、其他用户的

属主所有权:资源掌控的某些特定用户,用group表示,简写为g;

属组所有权:资源掌控的某个特定用户,用owner(user)表示,简写为u;

其他用户的所有权:未曾掌控资源的那些用户,用other表示,简写为o,为了安全,对于其他用户的写权限可以不给的话就不给;

全部用户可以用all表示,简写为a。


文件(非目录)中权限位的具体用法如下:

r:可以查看或获取该文件中存放的数据;

w;可以修改文件中存储的数据;

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

其中使用ls -l(ll)命令可以显示文件的详细属性

权限的三种表达方式为:字符权限(如:rw-r--r--);8位二进制权限(如:110100100);十进制权限(如:644)

对于权限rw-r--r--的解释为:rw-(权限属主)、r--(文件属组)、r--(其他用户权限)

权限标识可以用三元组来表示,有权限用1表示,无权限用0表示,对于无权限在字符权限中可以用-来表示,具体例子如下:

---      000

--x      001

-w-      010

-wx      011

r--      100

r-x      101

rw-      110

rwx      111

注意:只有某个文件的属主才能修改文件的使用权限(root除外,root不受限定)


修改权限位的命令:chmod、chown、chgrp、install、mktemp

1、chmod:change mode

chmod修改文件的权限位(change file mode bits)

chmod格式为:

 chmod[OPTION]…MODE[,MODE]…FILE…()注意省略中MODE用逗号分隔

MODE的权限标识所有法为:u、g、o、a(all)

+、-、=三个标识的授权方式如下:

+:在所有的权限基础上添加新的权限;

-:在所有的权限基础上去除某些权限;

=:不考虑原有文件,直接将该权限设置为目标文件。

在MODE中,r、w、x表示具体的内容,具体如下所示:

例如:chmod u+w file 改变属主

      chmod g+rw file 改变属组

      chmod u+x,g-wx,o-x file  (注意用逗号隔开)

      chmod u=rx,g=r,o=r file

      chmod ug-x file

      chmod +x file 默认的为a添加执行权限

      chmod +w file 默认的只为属主添加写权限

注意:文件的执行权限,对于Linux文件系统来说是一种非常重要的安全网络标识,因为文件一旦具备了执行权限,移位着该文件可以被发起者执行为进程,所以默认情况下,文件都不具备执行权限。

 chmod [OPTION]…OCTAL-MODE FILE(八进制数字标识法)

 如果使用八进制数字标识法,则每次必须给足所有的权限位,如果给的权限位不完整,文件系统会自动补足,将给定的权限自动放在权限的右侧,左侧用0来补足。、

 例如:cmd 640 file

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

 chmod --reference=/PATH/TO/SAMEFILE DES_FILE

   例如:chmod --reference=a b

chmod中的选项R(recursive):递归,将目标目录中的文件基子目录和子目录中的文件统一设置为指定的权限标识。

2、chown

   chown 可以修改文件的属主和属组(change file and group)

   chown的格式为:

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

   chown OWNER FILE 改变文件的属主或属组,其中可以存在省略

   chown :GROUP FILE 只改变属组

   chown OWNER FILE是将目标文件属主改为OWNER,同时将属组改为OWMER的基本组

   chown OWNER:GROUP FILE将目标文件的属主和属组改为OWNER和GROUP

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

chown中的选项R(recursive):递归,将目标目录中的文件基子目录和子目录中的文件统一设置为指定的权限标识。

注意:修改OWNERSHIP操作只有超级用户(root)可以执行

3、chgrp

chgrp只能修改文件的属组(change group ownership)

chgrp [OPTION]…GROUP FILE…

chgrp [OPTION]… --reference=RFILE FIKE…

4、install命令

安装、复制文件,为文件赋予执行权限(copy files and set attributes)

install的复制包括单源复制和多源复制,如下:

单源复制:install[OPTION]…[-t] SOURCE DEST

多源复制:install[OPTION]…-t DIRECTORY SOURCE…

          install[OPTION]…SOURCE…DIRECTORY…

创建目录:install [OPTION]… -d  DIRECTORY…

install常用选项如下:

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

-o,--owner=OWNER: 设定目标文件的属主,只能是root可用

-g,--group=GROUP: 设定目标文件的属组,仅root可用

注意:install命令不仅能复制目录,即其源不能为目录;如果其源为目录,则install经历了会进入目录,依次复制其中所有非目录文件到目录位置

5、mktemp命令

一般来说,临时文件都会创建在/tmp或/var下。在tmp目录中,无需手动删除,系统会定期自动清除这两个目录中的文件

mktemp的选项:-d,--directory:可以创建临时目录

例如:mktemp [-d] /PATH/TO/TMP.XXXXXX(至少3个XXX)


二、特殊权限

特殊权限包括SUID、SGID、STICKY,默认情况下,用户发起执行的一个进程,也就是说,该进程是以其发起者的身份在运行

1、SUID

功能作用:用户发起执行一个进程时,该程序文件如果拥有SUID权限的话,那么此程序发起的进程其属主为该程序文件的属主,而不是其发起者

SUID权限所显示的位置:文件的属主权限中的执行权限位;如果属主本就是执行权限,显示为s;否则,显示为S

管理文件的SUID权限为: chmod u+|-s FILE……

2、SGID

功能作用:如果某个目录对于一些用户有写权限并且设置了SGID权限时,则所有对此目录有写权限的用户在创建新的文件或目录以后,性文件的属组不在是创建用户的基本组,而是继承了该目录的组

SGID权限显示的位置:文件的属组权限中的执行权限位,如果属组本来及时执行权限,显示为s,否则显示为S

3、STICKY——粘滞位

STICKY的功能作用:如果某个目录中,有超过一个用户可以有写权限,则这多个用户都可以在该目录中随意创建、修改和删除文件名。如果为上述类似的目录设置了STICKY权限,则每个用户仍旧能够创建和修改文件名,但每个用户只能删除那些属主为其自身的文件名

sticky权限的显示位置:在文件权限的其他用户的执行权限位,如果原来就有执行权限,则显示为t,否则为T

管理文件的SYICKY权限:chmod o+|-t FILE…,具体表达格式如下:

Suid    sgid    sticky

---      000    0

--t      001    1

-s-      010    2

-st      011    3

S--      100    4

S-t      101    5

Ss-      110    6

Sst      111    7

特殊权限还有另一种修改方式:将特殊权限对应的八进制数字放置于普通权限八进制数字的前面即可

例如:想要把某个目录加上粘滞位:chmod 1755 DIRECTORY…

4、umask——权限遮罩码

在创建文件或目录时默认的权限生成标准,root的权限遮罩码为0022,普通用户遮罩码为0002。对于普通用户,不考虑特殊权限位,对于新创建的文件或目录,不遮挡属主的任何权限;遮住了属组的写权限和其他用户的写权限

例如:# mkdir test -->rwxr-xr-x

      # touch test.txt---->rw-r--r--

可以理解为,将遮罩码的值变为二进制,凡是有1的位置,其权限在创建文件时,就不设置,默认情况下,文件的遮罩码已经有了一个0111,在此基础之上再次运用umask来遮罩

例如:000011011   -------110100100    644

                  -------111100100    744


三、文件的特殊属性

1、查看文件的特殊属性

 lsattr: list file attributes on a linux second extended file system

 格式:lsattr [-RVadv][files…]

2、修改设置文件的特殊属性

 chattr: change file attributes on a linux file system

 格式:chattr [-Rvf] [-v version] [mode] files…

 格式中,mode会使用+、-、=的方式来设置,整个chattr命令最关键最核心的设置就是[mode]部分,[aAcCdDeijsStTu]都是所需要的属性

 其中的+、-、=的意义如下:

   +:在保有属性设定的基础上,添加新属性

   -:从原有属性设置中移除指定的属性

   =:不考虑原有的属性设置,直接将文件的属性更新为指定的属性内容

chattr的选项如下:

  a: append,设置这个属性的文件,其内容不能别修改和删除,只能以追加的方式向文件中写数据,多数的服务器日志类文件会设置为此属性

  A:atime,文件的访问时间戳,IO瓶颈,设置A属性,可以说的文件在访问时不更改文件的时间戳,、从而可以有效的防止IO瓶颈的发生

  c: 设置文件是否压缩后再进行存储

  C: 设置文件是否开启“写时复制”属性

  d: 设置文件在使用dump进行备份的时候,不会称为备份目标

  D: 设置文件在文件系统中的异步写操作(一般不设置)

  i: 设置文件不能被删除、修改、设定链接关系

  s:设置文件的保密性删除,一旦设置s属性的设置被删除,其对应存储设备中的使用空间会被一并收回

  u: 跟s属性相反,如果这样的而文件被删除,则其存储于设备中的数据会被留存 

chattr中,最常用的属性为i和a ,例如:chattr +i FILE

chattr中,常用选项R,递归的设置指定目录中的所有文件和子目录的属性


四、FACL(File Access Control List)

FACL为为文件赋予额外的权限机制,文件访问控制列表

文件的额外赋权机制为:在原有的u、g、o权限位之外,让普通用户能够控制权限赋予另外的用户和组的一种赋权机制。一般在CentOS或RHEL7版本以后的发行版中,才逐渐成熟

与FACL有关的命令有getfacl、Setfacl,具体表示如下:

getfacl :get file access control lists

格式:Getfacl [-aceEsRLPndvh] file…

其中,MODE一般采用权限符号标识法:有u:USERNAME:MODE、g:GROUPNAME:MODE

为用户赋予额外权限:setfacl -m  u:USERNAME:MODE FILE…

为组赋予额外权限: setfacl -m  g:GROUPNAME:MODE FILE…

撤销为用户赋予的额外权限:setfacl -x u:USERNAME

撤销为组赋予的额外权限:setfacl -x g:GROUPNAME

注意:如果设置了FACL之后再修改目标文件的使用权限,那么FACL中设置的条目就可能受到影响而导致要求不符,因此,如果真的需要设置FACL,就要在已经确定命令文件的使用权限以后再行设置。


用户的权限管理