Linux下的用户、组及各种权限管理

0  引入

本次博客会详解用户,组等资源分配对象的概念,并且给出所有的用户、组的增、删、修改命令以及su的使用,还会讲到用户的权限管理,有普通的读、写、执行权限,还有特殊权限SUID、SGID、SBIT。扩展权限也会稍微提及。


目录

0  引入

1  用户、组及其密码的概念和详解

1.1  用户、组的概念

1.2  用户、组详解

1.2.1  UID、GID的规则

1.2.2  用户和组的关系

1.2.3  用户、组的密码配置文件

1.2.4  密码的复杂性策略

2  用户和组相关的管理命令

2.1  用户创建:useradd

2.2  组创建:groupadd

2.3  查看用户的ID信息:id

2.4  用户属性修改:usermod

2.5  给用户添加密码:passwd

2.6  删除用户:userdel

2. 7 组删除:groupdel

2.8  组密码设置和临时切换基本组:gpasswd和newgrp

2.9  修改用户的密码属性:chage,及其他用户管理、组指令

3 身份切换:su和sudo命令详解

3.1  su命令的使用

3.2  sudo命令及visudo详解

3.2.1  sudo命令的介绍和使用

3.2.2  visudo详解

3.2.3  visudo的使用方式

4  Linux文件系统权限管理

4.1  rwx权限及三类访问者的介绍

4.2  Linux的权限匹配模型:

4.3  权限的数字表示方法:

4.4  权限、属主、属组修改命令

4.4.1  文件权限修改:chmod

4.4.2  文件的属主更改:chown

4.4.3  文件的属组更改:chgrp

4.5  遮掩码:umask

5  特殊权限

5.1 安全上下文概念:

5.2  SUID、SGID以及Stiky概念引入

5.1  SUID

5.2  SGID

5.3  stiky

6  facl文件控制列表

7  隐藏权限


1  用户、组及其密码的概念和详解

1.1  用户、组的概念

在Linux上每访问一个文件,每修改一个文件或者每执行一个文件都是要基于执行这个操作的用户或用户所属的组的权限决定的。那么用户和组是什么呢?

用户(user):用户是通过shell调用系统资源的一个单位。不同于平常生活中的用户,在Linux系统中,一个人可以拥有多个用户,而一个人可以通过多个用户在操作系统中扮演着不一样的角色,更专业的来说就是一个人所拥有的每个用户被分配到的权限可以不同。

组(group):是用户的集合,这个集合可以为空集。通常情况下,系统管理员会将负责相似工作的用户加入到一个组中,这样会方便管理,也可以让组里的人员更方便的工作。

 

1.2  用户、组详解

 

1.2.1  UID、GID的规则

如同人们在日常生活中有自己的称呼一样,Linux的每个用户和组都自己的名字(特殊情况会出现只有uid,后面会举例说明),也如同人们会在工作中给员工一个唯一的编号来方便企业的管理,Linux中的用户拥有自己的uid,组拥有自己的gid。(在Linux中的uid可以映射多个用户名,gid可以映射多个组名)

在Linux中的UID和GID不是随便分配的,Linux建立了一些规则帮你分类UID和GID。

UID分配:

管理员:root,UID为0

普通用户:UID为1-65535

     其中普通用户又分为:

         系统用户:1-499(centos6系统),1-999(centos7系统),对守护进程获取资源进行权限分配,这类用户一般不会                                           登录系统

         登录用户:500+(centos6)   1000+(centos7)通过交互式方式登录

GID分配:

管理员组:root,0

普通组:1-65535

普通组又分为:系统组和非系统组。

    系统组:1-499(centos6系统) 1-999(centos7)

    非系统组:500+(centos6)  1000+(centos7)

 

1.2.2  用户和组的关系

对于一个用户而言可以有多个不同的组,包括一个基本组(也称主组)和多个附加组(也称额外组),基本组的组名和用户名相同,并且仅仅只包含一个用户,基本组意外的组属于用户的附加组。

 

1.2.3  用户、组的密码配置文件

在Linux中一切皆文件,因此要配置一个用户的信息,就需要配置对应的文件。以下就介绍用户、组的配置文件并且分析      其内容的组成。

文件及其内容
文件名 内容
/etc/group

组名称和gid的映射信息,在过去会保存组密码

/etc/passwd 保存用户的家目录等信息,在过去会保存用户密码
/etc/shadow 用户密码及其相关属性
/etc/gshadow 组密码及其相关属性

下面具体的分析文件的内容:

1./etc/passwd:

/etc/passwd文件中,每一行都是一块单独的用户信息。因为每行都是通过同类型的内容按固定的格式拼凑而成,所以只取出一行的信息分析。

[root@localhost ~]# head -n1 /etc/passwd
root:x:0:0:root:/root:/bin/bash

passwd文件中用冒号将字段隔开,每个字段的意义如下:

UID:都为x无意义:UID:GID:家目录:用户的默认shell

passwd文件过去是有保存加密密码的,但是现在的超级计算机有可能算出加密密码的初始值,所以现在的密码保存在更安全的shadow中,而很多的新的系统上用man 5 passwd命令查找到的说明还在说passwd的内容有密码字段,这是错误的。

 

2./etc/group

/etc/group同/etc/passwd也是一行一个信息块

[root@localhost ~]# head -n1 /etc/group
root:x:0:

字段意义如下:

组名称:组id

 

3./etc/shadow

/etc/shadow最重要的功能就是保存用户加密过的密码,并且/etc/shadow的默认权限为000,也就是说除了root没有用户可以访问或修改它。内容格式同/etc/passwd和/etc/group,不再赘述。

[root@localhost ~]# head -n1 /etc/shadow
root:$6$JISv7fvi$xH7yEgwzv1KgIhePH.F7Uw4tvISz/008dAawIBWb2aZLKyMb3cxQbCUjCkEt61g.PuaZGZUlzNY/f6D//oVRT.:17967:0:99999:7:::

各个字段意义为:

1.用户名:2.加了密的密码:3.最近一次更改密码的日期(若从为更改则为空):4.密码的最小使用期限:5.密码的最大使用期限:6.密码的警告时间段:7.密码禁用期(默认为空):8.账户的过期日期(默认为空):9.保留字段(默认为空)

其中各个日期的内容非常复杂,下面我用一张图来表示:

Linux下的用户、组及各种权限管理_第1张图片

  • 难理解的时间段详解:
  1. 密码的警告时间段:密码过期之前,提前警告用户的的天数,即图中最大试用期限当天-警告修改密码的日期;空字段或者 0 表示没有密码警告期。
  2. 密码禁用期:密码过期后,仍然接受此密码的天数(在此期间,用户应该在下次登录时修改密码)。 密码到期并且过了这个宽限期之后,使用用户的当前的密码将会不能登录。用户需要联系系统管理员。空字段表示没有强制密码过期。
  3. 密码过期当天:账户过期的日期,表示从1970年1月1日开始的天数。注意,账户过期不同于密码过期。账户过期时,用户将不被允许登录;密码过期时,用户将不被允许使用其密码登录。空字段表示账户永不过期。应该避免使用0,因为它既能理解成永不过期也能理解成在1970年1月1日过期。

 

如果最大密码使用期限小于最小密码使用期限,用户将会不能更改密码。

加了密的密码的也有各种不同的字段组成,其中各个字段用符号"$"间隔:

第1个和第2个分隔符中间的数字表示加密的算法,每个数字对映的算法如下表所示:

数字 对应的加密算法
1 md5
2 sha1
3 sha224
4 sh:256
5 sha384
6 sha512

 

第2个和第3个分隔符之间是一段随机数。

第三个分隔符之后":"之间的内容都为加密的密码。

 

4./etc/gshadow

/etc/shadow文件中每行默认只有组名和组包含的成员。万一出现了需要查看字段说明的情况,可以使用man 5 gshadow。

字段说明:

组名:加了密的密码(密码组成与shadow文件中的完全一致,可以参考上面的内容):组的管理员:成员

 

1.2.4  密码的复杂性策略

1.  使用数字、大写字母

2.  足够长

3.  使用随机密码(没有规律的)

4.  定期更换,不要使用近期曾经使用过的ima。

 

2  用户和组相关的管理命令

 

2.1  用户创建:useradd

使用格式:useradd [options] LOGIN

 
选项 意义或所衔接的参数
-u  衔接UID。如果没有指定UID则依次使用最近一次的UID+1,默认使用的UID的范围为[UID_MIN,UID_MAX]是定义在/etc/login.defs中的
-g 衔接GID。基本组,如果没指定,则使用与用户名相同的组名
-c 衔接字符串,为用户的注释信息
-d 衔接路径,指定用户的家目录
-s 衔接包含路径的shell文件,指定默认的shell,可用的shell列表在/etc/shells中
-G 衔接组名称,指定用户的附加组,如想指定多个附加组,则在组名称之间用逗号隔开
-D 表示修改用户的默认选项(修改的是/etc/default/useradd中的选项)
-s 修改用户的默认shell信息

 

2.2  组创建:groupadd

使用格式:groupadd [options] group

选项 意义或所衔接的参数
-g 衔接GID,指明添加组的组ID
-r 创建系统组

 

 

2.3  查看用户的ID信息:id

使用格式:id [OPTION]... [USER]

选项 意义或所衔接的参数
-u 只显示UID
-g 只显示主组GID
-G 只显示扩展组GID
-n 配合上面三个参数使用,将各种ID转化成名称,例如UID转换成用户名

 

2.4  用户属性修改:usermod

使用格式:usermod [options] LOGIN

选项 意义或所衔接的参数
-u

衔接UID,指定用户的新UID

-g

衔接GID,指定用户的新GID

-G 衔接新的附加组,若指定多个则使用逗号隔开,指定新的附加组后秒原来的附加组会被覆盖,若要保留原有的附加组,同时使用-a,表示追加附加组
-s 衔接新的默认shell路径,用来指定新的默认shell
-c 衔接注释信息,指定新的注释信息
-d 衔接新的家目录,指定新的家目录。注意:原有的家目录不会同时移动到新的家目录中,若要移动,则添加-m选型
-l 衔接新的用户名,指定新的名用户名
-L 衔接用户名,锁定那个用户,使其无法登陆(root管理员除外),若在锁定之后修改密码则会自动解锁。
-U 衔接用户名,解锁那个用户
-e 衔接日期,日期格式为YYYY-MM-DD,用来指定用户的过期日期
-f 衔接天数,,指定非活动期限

 

2.5  给用户添加密码:passwd

使用格式:passwd [options] UserName

选项 意义或所衔接的参数
-l

衔接用户名,锁定指定用户

-u 衔接用户名,解锁指定用户
-n 衔接天数,指定最短使用期限
-x 衔接天数,指定最大使用期限
-w 衔接天数,提前多少天开始警告
-i 衔接天数,非活动期限
--stdin

从标准输入接收用户的密码,使用例子如下:

        echo "PASSWD" | passwd --stdin USERNAME

 

 

2.6  删除用户:userdel

使用格式:userdel [options] LOGIN

选项 意义或所衔接的参数
-r 删除用户的家目录以及邮箱目录

 

 

2. 7 组删除:groupdel

使用格式:groupdel GROUP

并没有常用的参数

 

2.8  组密码设置和临时切换基本组:gpasswd和newgrp

gpasswd:

作用:组密码的作用是为用户切换基本组。在使用newgrp临时切换用户组的时候需要输入组密码。

使用格式:gpasswd [options] group 

默认不带参数时的功能为修改组密码。

选项 意义或所衔接的参数
-a 衔接用户名,将指定用户加入指定组中
-d 衔接用户名,将指定用户从指定组中删除
-A 衔接用户名,设置有组管理员权限的用户列表,若要指定多个管理员,用户名之间用逗号分隔

 

newgrp:

作用:让当前用户临时切换基本组

如果用户本不属于此组,则需要组的密码

 

2.9  修改用户的密码属性:chage,及其他用户管理、组指令

chage [OPTIONS] LOGIN

选项 意义或所衔接的参数
-d 衔接日期,日期格式为YYYY-MM-DD,修改用户的最近一次修改密码的时间,也可以衔接天数,天数为1970-1-1到修改密码日期的天数,如果天数为0则代表用户下次登陆时需要修改密码
-E 衔接日期,或天数,日期格式或天数的意义同上,用来指定账户的过期日期
-I 衔接天数,设置用户的密码禁用天数

其他的命令:chfn,chsh,finger

3 身份切换:su和sudo命令详解

3.1  su命令的使用

在登陆一个终端时,想要切换当前的用户身份,不一定需要退出后重新登录,可以使用su来切换当前的用户。

  • 使用格式:su [options] [-] [user[args...]]
  • 切换用户的方式:

su UserName:非登陆式切换,即不会读取目标用户的配置文件

su -l UserName:登录式切换,会读取目标用户的配置文件,完全切换,'-l'参数可以省略为'-'

Note:root su至其他用户无需密码,非root用户切换时需要密码。

  • 换个身份执行命令:

su [-] UserName -c 'COMMAND'

3.2  sudo命令及visudo详解

3.2.1  sudo命令的介绍和使用

当我们想让一个普通用户可以执行一些只有root可以执行的指令,但又不能使其知道root密码时,可以使用sudo命令,这个命令需要输入普通用户自己的口令来执行root可以执行的指令,并且普通用户可以执行的特权指令是需要得到root的允许的,如果普通用户执行了不允许的指令,该行为会被反馈给超级用户。

  • 具体用法:sudo [-u USERNAME] COMMAND 

默认以root身份执行COMMAND。

3.2.2  visudo详解

sudo可以通过超级用户执行命令,但是并不是所有的命令都是可以执行的(否则系统安全危在旦夕),普通用户可以执行的特权指令需要被root授权,而授权的方式是通过修改/etc/sudoers文件。注意:为了避免这个文件配置错误而造成严重后果,这个文件无法被直接修改,需要通过visudo指令进入修改的界面,进入后的界面还是使用vim编辑器,visudo在保存时会检查文件中是否有语法错误,若有则会提醒错误信息并不保存。

3.2.3  visudo的使用方式

使用visudo进入编辑界面后的每一行都是一个规则,规则的格式为:

账号 登录者的来源主机名=(可切换的身份)可以通过sudo执行的命令

如:user1            ALL=(root)     /usr/bin/passwd

表示从任何主机访问过来的本地user1用户只允许切换root用户来执行/usr/bin/passwd命令。

说明几点内容:

  • 代表所有的ALL必须大写
  • 后面的命令必须为绝对路径
  • 前面的使用者账号可以是一个组,当是组的使用时,这样表示:%GROUP_NAME
  • 如果执行sudo的时候不需要输入密码,则可以在命令前面这样表示:NOPASSWD:COMMAND,强制密码验证则使用PASSWD:COMMAND,例如:

%wheel    ALL=(ALL)   NOPASSWD:ALL 

表示wheel组内的所有用户可以免密码切换为root执行任何命令

 

  • 使用者账号、执行的命令还可以使用一些别名来进行定义,定义方式为:

关键字User_Alias表示用户名别名:如User_Alias USER1 = user1,centos,suse

关键字Cmnd_Alias表示命令别名:如Cmnd_Alias COMM_G=/sbin/fdisk,/sbin/sfdisk

关键字Host_Alias表示住级别名:如Host_Alias HOST_NAME=magedu1,magedu2

 

编辑完成过后像vim那样保存退出,若有语法错误,visudo会进行提示及定位,让你选择修改错误还是依然保存,若无语法错误则可正常退出。

 

 

4  Linux文件系统权限管理

4.1  rwx权限及三类访问者的介绍

Linux下的文件系统的权限即文件和目录的权限,文件和目录的权限有三类,分别是:

  • 读权限:标记为r

  • 写权限:标记为w

  • 执行权限:标记为x

这些权限是针对三类用户的而定义的,这三类用户便是:

  • 属主(owner):标记为u,这一般指向用户名称
  • 属组(group):标记为g,这一般指向组名称
  • 其他(other):标记为o,是排除了属主用户和属组中的用户之后剩下来的用户

设置读、写或执行权限对文件和目录起着不一样的效果,具体效果如下:

对于文件来说:

r权限:设置了文件的r权限,就意味着可使用文件查看类工具获取该文件的内容

w权限:设置文件的了w权限之后就可以修改该文件的内容

x权限:设置了文件的x权限之后就可以将此文件提请内核来启动一个进程。

 

对于目录来说:

r:设置了目录的r权限之后就可以使用ls来查看此目录中的文件列表

w:设置了目录的w权限之后就可以在此目录创建文件,也可以删除该目录中的文件

x:设置了目录的x权限之后就可以使用ls -l来查看此目录中的文件列表,也可进入cd至此目录

Linux的文件系统决定了目录拥有w权限就可以增删其下的文件,在Linux中目录占用一个或多个block,block的内容保存的是一条条目录项,每一条都包含了目录下文件的名称和对应的inode号。

如同上述所说,rwx权限是针对三类用户而设置的。使用ls -l即可查看当前目录中所有文件的权限,若要查看某个目录的需要在后面加上-d参数。下图给出两个指令的查看结果:

Linux下的用户、组及各种权限管理_第2张图片

注意上图中用文件的权限的内容,如果包含最一后一位的‘.’(点)符号的话总共有11位。这11个位中,第1位表示文件的类型,这里出现的'-'指普通文件,‘d’指目录文件;后面紧跟的9位表示的是文件属主的权限、属组的权限、其他人的权限,后面跟的一位有关于selinux安全上下文,这里不介绍。

图中的文件的属主和属组对应着9位权限中左边6位的权限,右边3位为除了属主和属组中的用户的其他用户。

下面了解一个概念,这对于我们学习Linux权限的管理很重要。

 

4.2  Linux的权限匹配模型:

(1) 判断进程的属主,是否为被访问的文件属主;如果是,则应用属主的权限。如果文件所在的文件系统设置了acl,则检查acl中是否有进程的属主的对应权限,若有则应用对应acl权限(这一步可以专门屏蔽某个用户,例如setfacl u:zxl:--- FILE 这样就可以屏蔽某个用户了,无论other的权限如何,zxl都没有rwx权限)。否则进入第2步;
 (2) 判断进程的属主,是否属于被访问的文件属组;如果是,则应用属组的权限。如果文件所在的文件系统设置了acl,则检查其中是否有进程的属主所在的属组的权限,若有则应用对用的acl权限(这一步也可以专门屏蔽某个组的用户)。否则进入第3步;
 (3) 应用other的权限;

以上的红字部分可以先不看,后面讲到acl(访问控制列表)时再来看这边的内容。

 

针对权限匹配模型,我们可以明白Linux的权限运作原理,可以知道如何合理的分配Linux的权限了。但是分配权限还需要一个知道很重要的概念------权限的数字表示方法。

 

4.3  权限的数字表示方法:

Linux的三类文件访问者都有各自的rwx分配状况,由计算机中的二进制来表示rwx的启用状况,需要对应的三位二进制数,有开启的权限为1,无开启的权限用0表示,权限的二进制表示结果例如下面所示(”-“表示没开启对应的权限):

---:000

r-x:101

--x:001

... ...

将二进制转换成十进制为:

---:0

r-x:5

--x:1

... ...

3位二进制数转换成的最大十进制数位7,因此每类访问者都可以用一个0-7的数字来表示其权限。如果一个文件的9个访问权限为:rwxrwxrwx,则可用777来表示之。

知道了该怎么算权限数,就可以用对应的指令来修改文件的权限了。接下来会介绍文件权限修改命令及文件的属主、属组修改。

 

4.4  权限、属主、属组修改命令

4.4.1  文件权限修改:chmod

介绍:chmod命令可以用来修改指定文件的权限,可以采用普通的修改模式,也可以使用八进制表示法来修改。

使用格式:chmod [OPTION]... OCTAL-MODE FILE...

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

常用的选项:

-R:表示递归

普通的修改模式:

修改某一类用户的所有权限:

    属主:u=[r|w|x]

    属组:g=[r|w|x]

    其他:o=[r|w|x]

    属主和属组:ug=[r|w|x]

    所有人a=[r|w|x]

修改某一类用户的某位权限(以下列出两个案例,剩下的设置方法参考上面修改所有权限的方法):

    u+[r|w|x]

    u-[r|w|x]

    ... ...

使用三位整数的修改模式:

修改所有用户的权限案例:

chmod 777 FILE

设置FILE权限为rwxrwxrwx。

chmod 640 FILE

设置FILE权限为rw-r-----。

参考某文件的修改方式:chmod [OPTIONS]... --reference=RFILE FILE...

参考RFILE文件的权限,将FILE的权限修改为同RFILE的权限

4.4.2  文件的属主更改:chown

使用格式:chown [OPTION]... [OWNER][:[GROUP]] FILE...

其中[OWNER][:[GROUP]]有三种表示方法:

1、OWNER    只修改属主

2、OWNER:GROUP    修改属主和属组

3、GROUP    只修改属组

注:命令中的冒号可以使用点号

常用参数:

-R:递归到目录下

-f:不打印所有权不能更改的错误信息

4.4.3  文件的属组更改:chgrp

使用格式:chgrp [OPTION] GROUP FILE...

常用参数:

-R:递归到目录下

-f:不打印所有权不能更改的错误信息

 

4.5  遮掩码:umask

介绍:遮掩码,顾名思义就是为了遮住某些部份的数码。具体释义在创建一个文件或目录时默认去除的权限。umask也采用三位二进制表示每类访问者默认会被屏蔽的权限。文件或目录的默认权限需要通过如下公式得到:

公式:

文件的公式:666-umask

        注意:文件默认是不给执行权限的,如果某类访问者的权限减掉umask得到的结果中存在x权限,则将权限+1。例如

                   666-023=664。

文件夹的公式:777-umask

 

遮掩码可以通过umask命令来查看或修改:

使用格式:

umask:查看umask值

umask #:设定'#'为umask值,注意仅对当前的shell有效,若想永久生效就必须写入bash的配置文件中。

 

 

5  特殊权限

Linux中有三种特殊权限:SUID、SGID、Stiky,下面会介绍各个特殊权限的意义、作用及设置方法。

要想明白SUID、SGID的运作方式需要先了解Linux的安全上下文:

5.1 安全上下文概念:

(1)任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限。

(2)启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组。

(3)进程访问文件时的权限,取决于进程的发起者:

    (a) 判断进程的属主,是否为被访问的文件属主;如果是,则应用属主的权限。如果文件所在的文件系统设置了acl,                         则检查acl中是否有进程的属主的对应权限,若有则应用对应acl权限(这一步可以专门屏蔽某个用户,例如:                                setfacl u:zxl:--- FILE 这样就可以屏蔽某个用户了,无论other的权限如何,zxl都没有rwx权限)。否则进入第2步;
               (b) 判断进程的属主,是否属于被访问的文件属组;如果是,则应用属组的权限。如果文件所在的文件系统设置了                               acl,则检查其中是否有进程的属主所在的属组的权限,若有则应用对用的acl权限(这一步也可以专门屏蔽某个                           组的用户)。否则进入第3步;
               (c) 应用other的权限;

安全上下文的前提:进程有属主和属组,文件有属主和属组。

 

5.2  SUID、SGID以及Stiky概念引入

我们知道Linux下一切皆文件,修改用户的密码也是如此,用户的密码保存在/etc/shadow文件下,用户是通过passwd命令来修改这个文件的。我们可以查看一下/etc/shadow的权限。

我们可以看到该文件的权限为000,只有root用户可以更改这个文件。那么普通用户是怎么做到可以更改自己的密码的呢?

我们可以看下passwd命令文件的权限:

其中的属主权限中原应出现'x'的地方出现了一个's',这个's'就是SUID权限,其他两个特殊权限都像这样,SGID会将属组的'x'权限覆盖为's',Sticky将其他用户的'x'权限替换为't'。

根据安全上下文的概念来说,运行passwd后进程的属主为进程的发起者,进程的属组为进程发起者的组,那么普通用户的运行passwd进程是没有访问/etc/shadow的权限的,然而想要修改/etc/shadow就必须使用root身份,为了解决这个矛盾,SUID就可派上用场了。

SUID的作用:一个文件被设置了SUID权限后,当其被启动为进程之后,其进程的属主为原程序文件的属主。

现在,我们梳理下普通用户执行passwd指令来修改密码的过程:1.普通用户是/usr/bin/passwd中的其他访问者,有执行权限。2.使用passwd命令之后创建一个进程,这个进程是以原程序文件的属主root为属主的。3.普通用户通过root用户的身份修改/etc/shadow文件从而达到修改密码的目的。

SGID的作用也相似于SUID,他可以将原进程的属组改为原程序文件的属组,但是SGID不仅仅只有这个功能,在后面会给出其所有作用。

而stiky文件的功能却与SUID,SGID千差万别,后面会给出其作用。

5.1  SUID

SUID的作用:一个文件被设置了SUID权限后,当其被启动为进程之后,其进程的属主为原程序文件的属主。

SUID的设定方式:

使用普通的权限设定法:chmod u+s FILE...

                                        chmod u-s FILE...

使用4位整数表示:chmod 4700 FILE

                               三个特殊权限也构成一个数字。SUID=4,SGID=2,Stiky=1,若要用整数表示特殊权限必须将后面                                               的普通权限也加上。

注意:当文件的原有属主根本没有执行权限时,表示SUID的原来的小写s将会变为大写S。SGID和Stiky也是一样。

5.2  SGID

SGID的作用:1.一个文件被设置了SGID权限后,当其被启动为进程之后,其进程的属组为原程序文件的属组。2.若一个目录被设置了SGID权限,那么在此目录中创建的文件所属的组为此目录的组。

SGID的设定方式:

使用普通的权限设定法:chmod g+s FILE...

                                        chmod g-s FILE...

使用4位整数表示:chmod 2700 FILE

 

SGID的使用环境:一个小组的成员一起办公使用同一个目录时,若在一个没有设置SGID的目录下,则会出现创建的文件所属的组都是小组成员自己的基组,如果要让其他的小组成员可以读自己的文件时,就需要设置其他人的读权限或者请求root用户修改自己文件的属组,这是极其麻烦的。因此,面对上述环境,我们可以使用SGID来设置办公的目录,使每位用户可以不用刻意设置自己文件的访问权限而让组内的其他人访问到。

5.3  stiky

stiky位的作用:对于一个多人可写的目录,如果设置了stiky,则每个用户仅能删除自己的文件。

stiky的设定方式:

使用普通的权限设定法:chmod o+t FILE...

                                        chmod o-t FILE...

使用4位整数表示:chmod 1700 FILE

stiky的使用环境:stiky可以有效的保护目录下每个人的文件,例如:公司中有个员工不想好好干了,想搞事情,他就可能会想到把工作组目录中的其他人的文件删掉,让别人不能按时完成任务而丢工资,此时stiky位就可以有效保护组内其他人的劳动成果,使其只能删除自己的文件。

 

6  facl文件控制列表

概念:acl是在原来的u,g,o之外,另一层让普通用户能控制赋权给另外的用户或组的赋权机制。

注意:只有当文件系统启用了acl特性之后才能使用acl访问控制列表

使用环境:当我们想针对一个文件给某个既不是属主也不是属组内的用户赋予特定的访问权限时,就需要设置other权限,但是other权限却给了所有其他访问者同样的权限。如果想单单给特定的用户(不是文件的属主)赋予特定的权限就可以使用facl。

setfacl命令:用来设置文件facl的命令

赋权给用户:
            setfacl  -m  u:USERNAME:MODE  FILE...
           赋权级组:
            setfacl  -m  g:GROUPNAME:MODE FILE.

撤销赋权:
            setfacl  -x u:USERNAME  FILE...
            setfacl  -x  g:GROUPNAME  FILE...
            ..

getfacl命令:用来取得文件facl的命令

使用格式:getfacl FILE...

得到结果的格式:user:USERNAME:MODE
                                        group:GROUPNAME:MODE

 

7  隐藏权限

隐藏权限需要通过chattr和lsattr来设置和查看。

使用格式:

追加文件的隐藏权限:chattr +[OPTION] FILE...

移除文件的隐藏权限:chattr -[OPTION] FILE...

列出文件的隐藏权限:lsattr FILE

隐藏权限选项及其作用:

选项 作用
i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件而不能新建或删除文件
a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S 文件内容变更后立即同步到硬盘(sync)
s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
A 不在修改这个文件或目录的最后访问时间(atime)
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 使用dump命令备份时忽略本文件/目录
c 默认将文件或目录进行压缩
u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t 让文件系统支持尾部合并
X 可以直接访问压缩文件中的内容

 

 


 

本文中的隐藏权限的选项表参考了《Linux就该这么学》。

你可能感兴趣的:(Linux运维)