网络安全(二)-- Linux 基本安全防护技术

4.1. 概述

安全防护基础主要是会用Linux系统, 熟悉Linux基本操作命令。

在这个章节中,我们主要探讨自主访问控制(许可位、ACL)、文件属性、 PAM技术、能力机制等。

4.1.1. 补充命令

本章节中,涉及一些新的命令,一些通用的命令如下所述

  • whoami

    • 显示与当前的有效用户ID相关联的用户名
    • 简单的说,就是在操作之前确认一下我是谁
  • id

    • 查看用户的id
    • id username 查看username用户的id
  • useradd

    • 添加用户
    • -m : 一起创建用户的家目录
    • -s: 指定用户的登录shell类型, -s /bin/bash
    • 示例: uaseradd -m -s /bin/bash itcast
  • userdel

    • 删除已存在用户
    • -r: 用户主目录以及用户主目录下文件一起删除
    • 示例: userdel -r newuser
  • passwd

    • 修改用户口令
    • 两种典型用法:
      • 修改当前用户口令passwd
      • 修改指定用户口令passwd username

4.1.2. 常用术语

  • 访问、主体、客体

    • 访问: 两个实体间的信息流动
    • 主体: 发起访问的实体,主动的, 通常为代表某个用户的进程
    • 客体: 响应访问的实体,被动的, 通常为文件
  • 访问类型

访问就是信息的流动,可以分为读、写、执行三种类型

* 读(Read/r):
    * 信息由客体流向主体
* 写(Write/w):
    * 信息由主体流向客体
* 执行(Execute/x):
    * 将客体的内容引入内存并作为代码执行

补充说明 在有些文档中,目录文件的执行,称之为搜索(Search)对目录的内容进行搜索(查找)。

以 cat file 为例解读上述基本概念

4.2. 访问权限 (许可位)

在信息系统安全章节中,我们探讨了半天安全,本质上,安全就是控制“文件”(客体),的读、写,文件不被非授权人员读取,满足安全的机密性;文件不被非授权人员写,满足安全的完整性。所以读、写就构成了安全最基本的含义。

4.2.1. 文件权限(访问许可位)

我们探讨文件权限, 准确的描述是“用户A对文件B的访问权限” , 判断用户A是否被允许访问文件B。 可以分两步:

  • 先判断用户A的类别(所谓A的类别,就是A是属主? 属组? 还是其他?)
  • 在根据用户的类别,查看相应的许可位
4.2.1.1. 属主、属组、“其他”的概念

在探讨一个文件是否被允许访问,首先需要明确访问者的“身份类别",因为文件的访问许可就是以文件的属主、属组、其他来组织的。

以一下内容,参考自《Linux私房菜-基础篇》, 举例比较清晰

关于者和属组的关系, 我们可以使用目前“家庭”的观念来来进行解说。假讴有一家人,家里只有三兄弟,分别是王大毛、王二毛、王三毛三个人, 而这个家庭是登记在王大毛的名下的!所以,“王大毛家有三个人,分别是王大毛、王二毛,王三毛”, 而且这三个人都有自己的房间,并且共同拥有一个客厅喔!

  • 属主的概念: 由于王家三人各自拥有自己的房间, 所以, 王二毛虽然可以进入王三毛的房间,但是二毛不能翻三毛的抽屉喔!那样会被三毛K的! 因为抽屉里面可能有三毛自己私人的东西,例如情书啦,日记啦等等的,这是“私人的空间”,所以当然不能让二毛拿啦。

  • 属组的概念: 由于共同拥有客厅,所以王家三兄弟可以在客厅打开电规机啦、 翻阅报纸啦、坐在沙发上面发呆啦等等的! 反正,只要是在客厅的玩意儿,三兄弟都可以使用喔! 因为大家都是一家人嘛!

    这样说来应该有点晓得了喔! 那个“王大毛家”就是所谓的“属组”, 至于三兄弟就是分别为三个“属主”,而这三个属主是在同一个属组里面的喔! 而三个属主虽然在同一属组内,但是我们可以设定“权限” 好让某些用户个人的信息不被属组的属主查询,以保有个人“私人的空间”啦! 而设定属组共享,则可让大家共同分享喔!

  • “其他”的概念: 那么今天又有个人,叫做张小猪,他是张小猪家的人,与王家没有关系啦! 这个时候,除非王家认识张小猪,然后开门让张小猪进来王家,否则张小猪永进没有办法进入王家, 更不要说迚到王三毛的房间啦!不过,如果张小猪透过关系认识了三毛,并且跟王三毛成为好朊友,那么张小猪就可以透过三毛进入王家啦!呵呵!没错!那个张小猪就是所谓的“其他人,Others”啰!

    因此, 简单的说,在 Linux 里面,任何一个文件都具有"User, Group 及 Others”三种身份的个别权限, 我们可以将上面的说明以底下的图来解释:

 

一般来说, 我们通常用简写字母来表示属主、属组、其他:

  • u: 属主
  • g: 属组
  • o: 其他

从ls命令输出,进行逐列介绍

 

Panda.Guo@2018-04-03 14:32:43 $ ls -l
drwxr-xr-x 2 panda panda 4096 6月   3 14:32 dir
-rwxr--r-- 1 panda panda    0 6月   3 13:43 file1
4.2.1.2. 权限(访问许可位)

许可位,共计4组组成, 每组3位,

  • S/Owner/Group/Other

  • S组

    • b3 → SUID;b2 → SGID;b1 -> Sticky
  • Owner组

    • b3 → Read;b2 → Write; b1 -> Execute
  • Group组

    • b3 → Read;b2 → Write; b1 -> Execute
  • Other组

    • b3 → Read;b2 → Write; b1 -> Execute;

4.2.2. 文件权限(许可位)表示方式

对于许可位,有两种表示方式:

数字表示方式

  • 用3组8进制的数字。来描述u/g/o三个部分的访问许可
    • 每组用3位,来表示这部分的rwx(访问类型)
    • 对应就是 b3 b2 b1 (4 2 1) ,
    • 哪一位被许可,则值为1
      • 例: 我们用644, 表示文件属主可读、写, 组可以读、 其他可读
      • 例: 我们用755, 表示文件属主可读、写、执行, 组可读、执行, 其他可读、可执行。

符号表示方式

  • 可以用r、w、x、-来表示文件的访问权限

    • 用r描述读
    • 用w描述写
    • 用x描述执行
    • 用-表示无权限
  • 实例解读文件访问许可

    • 添加用户itcast
      • sudo useradd -m -s /bin/bash itcast
    • 修改itcast 口令,为itcast

      • sudo passwd itcast
    • 以panda用户创建文件(644),验证文件属主可读写,以itcast用户协助验证other可读不可写。

Panda.Guo@2018-06-04 11:11:57 $touch file-name
Panda.Guo@2018-06-04 11:25:35 $ ls -l  file-name
-rw-r--r-- 1 panda panda 0 6月   4 11:03 file-name
Panda.Guo@2018-06-04 11:26:32 $ whoami
panda
Panda.Guo@2018-06-04 11:26:37 $ echo "Hello world" >> file-name
Panda.Guo@2018-06-04 11:26:53 $ cat file-name
Hello world
Panda.Guo@2018-06-04 11:27:07 $

以 itcast用户验证 others,只有r权限

Panda.Guo@2018-06-04 11:27:55 $ su  itcast
密码:
itcast@PandaGuo:/home/panda/tmp/itcast$ whoami
itcast
itcast@PandaGuo:/home/panda/tmp/itcast$ ls -l
总用量 8
drwxr-xr-x 2 panda panda 4096 6月   4 11:04 dir
-rw-r--r-- 1 panda panda   12 6月   4 11:26 file-name
itcast@PandaGuo:/home/panda/tmp/itcast$ cat file-name
Hello world
itcast@PandaGuo:/home/panda/tmp/itcast$ echo "itcast" >> file-name
bash: file-name: 权限不够

4.2.3. 变更文件的访问权限

通过修改文件的许可位,可以变更文件的访问权限。

变更许可位有两种方式, 一种数字类型,一种符号类型

  • 符号类型

我之前介绍, 文件的的访问许可由三组(u/g/o)、三个访问类型(r/w/x)组成。

Panda.Guo@2018-04-03 16:22:47 $ ls -l file1
-rw-r--r-- 1 panda panda 0 6月   3 16:22 file1
Panda.Guo@2018-04-03 16:22:58 $ chmod u+x file1 
Panda.Guo@2018-04-03 16:23:05 $ ls -l file1
-rwxr--r-- 1 panda panda 0 6月   3 16:22 file1
  • 数字类型:
Panda.Guo@2018-04-03 16:23:08 $ ls -l file2
-rw-r--r-- 1 panda panda 0 6月   3 16:22 file2
Panda.Guo@2018-04-03 16:23:43 $ chmod 666 file2
Panda.Guo@2018-04-03 16:23:53 $ ls -l file2
-rw-rw-rw- 1 panda panda 0 6月   3 16:22 file2

4.2.4. 粘着位sticky

设置目录的sticky位后, 该目录下的文件,只能被创建者删除

  • 对谁有效?

    • 只对目录有效。对其他的客体无效。
  • 如何设定?

    • chmod 1xxx file
  • 实例

  • 讨论: 粘着位的应用场景?

4.2.5. 讨论 (思考)

  • umask 为用户创建文件的掩码,代表用户创建文件的最终权限为(mode & ~umask), 那么您的观点,umask取值应为多少合适?

  • umask 设置只在当前终端中临时有效, 你有几种办法可以使其登录后默认生效

  • 答题: 有一个目录,要求任何人可以创建客体并可以对目录进行读/搜索访问,但只有创建者可以删除,试用8进制写出它应具有的许可位


4.3. 访问控制列表 -ACL

ACL是什么: 存储在文件扩展属性中的一组访问控制规则, (利用文件的扩展属性保存额外的访问控制权限)

4.3.1. 为什么需要ACL

我们需要一种更细粒度的访问控制方式, 对other组的用户成员,作出区分

  • 文件访问控制(许可位)是通过文件的属主user、属组group、其他other来实现访问权限控制的, 对于“其他”来说, 一个用户既不是文件属主,也不属于同一组,那么就统统属于“其他”, 这样的 ACL 提供一种更细粒度的权限控制方法。

实例分析

创建test01用户,test02用户, 访问itcast用户的文件,(相对于itcast用户,test01,test02用户为others用户), 无法做到对test01用户和test02用户的权限区别

4.3.2. ACL 基本操作

对于ACL基本操作来说,也就是ACL设定、ACL查询、ACL移除

我们可通过setfacl、getfacl 来设定和查询文件的访问控制列表

4.3.2.1. 设定/修改ACL

我们可以通过setfacl -m, 来设定文件的ACL, (注: 文件属主和特权用户可进行操作)

  • 基本用法: setfacl -m u:username:rwx filename
    • -m: 选项
    • u:itcast:rwx , 设定用户itcast,访问权限为rwx
      • u: 用户
      • g: 组
      • m: 掩码
    • filename, 文件,你想设定谁的ACL
itcast@itcast:~/class$ setfacl -m u:test01:rw ./hello

注意, 添加文件的acl后, 命令ls -l会发生变化, 如:

文件原始显示

itcast@itcast:~/class$ ls -l
-rw-r--r-- 1 itcast itcast 0 6月   4 17:40 file

添加文件acl后, 命令ls -l 变为:

itcast@itcast:~/class$ setfacl -m u:itcast:w file 
itcast@itcast:~/class$ ls -l file 
-rw-rw-r--+ 1 itcast itcast 0 6月   4 17:40 file

注意: 有+号,代表此文件被设定了ACL, 那么此时,文件file的权限,就受到ACL影响

4.3.2.2. ACL查询

我们可以通过 getfacl, 来获取文件的ACL

  • 基本用法 getfacl ./filename
itcast@itcast:~/class$ getfacl ./hello 
# file: hello
# owner: itcast
# group: itcast
user::rw-
user:test01:rw-
group::rw-
mask::rw-
other::r--

itcast@itcast:~/class$
  • 显示解读
    • user后面没有跟用户名,表示的是文件属主的权限
    • user 后面有用户名, 表示是指定用户的权限
    • group后面没有跟组名,表示的是文件属组的权限
    • mask表示的是额外访问控制权限的最大权限,mask可自定义,自定义之后,额外访问控制权限的最大权限不得超过mask的权限,否则超出的权限会被裁掉。详细见下一章节
4.3.2.3. ACL移除

移除文件file1 的ACL, 可通过setfacl -x

  • 典型用法 setfacl -x u:itcast file
itcast@itcast:~/class$ setfacl -x u:test01 ./hello

实例展示

  1. 用户itcast创建hello文件

    itcast@itcast:~/class$ touch hello
    itcast@itcast:~/class$ ls -l 
    总用量 0
    -rw-rw-r-- 1 itcast itcast 0 8月  24 11:11 hello
    
  2. 验证用户test01对其只有r权限,

    test01@itcast:/home/itcast/class$ whoami 
    test01
    test01@itcast:/home/itcast/class$ ls -l hello 
    -rw-rw-r-- 1 itcast itcast 0 8月  24 11:11 hello
    test01@itcast:/home/itcast/class$ cat ./hello 
    hello world
    test01@itcast:/home/itcast/class$ echo "hello world" > ./hello
    bash: ./hello: 权限不够
    
  3. 设置hello文件ACL

    itcast@itcast:~/class$ setfacl -m u:test01:rw ./hello 
    
  4. 验证用户test01对文件的hello权限(rw)

    test01@itcast:/home/itcast/class$ whoami
    test01
    test01@itcast:/home/itcast/class$ ls -l ./hello 
    -rw-rw-r--+ 1 itcast itcast 12 8月  24 11:17 ./hello
    test01@itcast:/home/itcast/class$ getfacl ./hello 
    # file: hello
    # owner: itcast
    # group: itcast
    user::rw-
    user:test01:rw-
    group::rw-
    mask::rw-
    other::r--
    test01@itcast:/home/itcast/class$ cat ./hello 
    hello world
    test01@itcast:/home/itcast/class$ echo "hello test01" >> hello 
    test01@itcast:/home/itcast/class$ cat ./hello 
    hello world
    hello test01
    test01@itcast:/home/itcast/class$ 
    
  5. 验证用户test02对文件hello权限(r-)

4.3.3. 文件权限的有效次序

  • 当一个用户将要访问一个文件的时候(没有acl的情况下):
    • 首先应用Owner权限,当要访问的文件的属主和该用户一致的情况下,就以该属主的权限去执行文件
    • 其次应用Group的权限,当要访问的文件的属组和用户的属组一致的情况下,就以该属组的权限去执行文件
    • 最后应用Other的权限,如果Other有相应的权限的话,就以Other的权限去执行文件。
  • 当一个用户要访问一个文件的时候(有acl的情况下):

    • 如果用户是文件属主, 按文件属主的权限位判定访问控制
    • 如果用户不是文件属主, 而是符合ACL中的user项, 则按该项权限位判别且受mask限制。
    • 如果用户的属组属于group或者ACL中group项, 只要组或者ACL的group项,允许优先且受mask限制。
    • 否则应用Other的权限。

    上述内容,详见man acl 的 “ACCESS CHECK ALGORITHM”, 此处简单描述.

 此处用“用户”表述并不准确, 严格来说应该是“代表某个用户执行的那个进程的有效ID(euid)”, 为了便于大家理解,不引入太多的概念。

示例

  • 去掉文件属主panda,对文件file1的写权限
Panda.Guo@2018-04-03 18:22:56 $ ls -l file1 
-rw-rw-r--+ 1 panda panda 4 6月   3 17:57 file1
Panda.Guo@2018-04-03 18:23:06 $ chmod u-w file1  
Panda.Guo@2018-04-03 18:23:56 $ ls -l file1 
-r--rw-r--+ 1 panda panda 4 6月   3 17:57 file1
  • 权限验证
Panda.Guo@2018-04-03 18:24:01 $ cat file1
bbb
Panda.Guo@2018-04-03 18:24:08 $ echo "aaa" >> file1
bash: file1: 权限不够
  • 添加访问控制列表
Panda.Guo@2018-04-03 18:24:44 $ setfacl -m u:panda:rw file1
Panda.Guo@2018-04-03 18:24:49 $ getfacl file1
# file: file1
# owner: panda
# group: panda
user::r--
user:panda:rw-
user:itcast:rwx
group::r--
mask::rwx
other::r--
  • 权限验证
Panda.Guo@2018-04-03 18:24:56 $ echo "aaa" >> file1 
bash: file1: 权限不够

4.3.4. ACL中的mask

  • 设定
Panda.Guo@2018-04-03 19:37:38 $ setfacl  -m m::r -m u:itcast:rwx ./file1
Panda.Guo@2018-04-03 19:38:38 $ getfacl ./file1 
# file: file1
# owner: panda
# group: panda
user::r--
user:panda:rw-            #effective:r--
user:itcast:rwx            #effective:r--
group::r--
mask::r--
other::r--

Panda.Guo@2018-04-03 19:38:46 $ 
  • 验证
Panda.Guo@2018-04-03 17:56:40 $ su itcast
密码:
itcast@PandaGuo:/home/panda/tmp/itcast$ ls
chown  dir  file1  file2  file3
itcast@PandaGuo:/home/panda/tmp/itcast$ cat file1 
aa
itcast@PandaGuo:/home/panda/tmp/itcast$ echo "bbb" > file1
bash: file1: 权限不够

4.3.5. 参考资料

$ man acl
$ man setfacl
$ man getfacl

4.3.6. 讨论(思考)

  • 访问控制列表的应用场景

4.4. 文件属性

我们在之前探讨信息安全时提到,完整性在Linux系统上,就是控制写,也就是一个文件不被非授权人员所篡改,我们就可以认为它是完整的。有些文件属性设定后,就可以避免对文件修改(超级用户也被允许),可以很好的满足我们对完整性的需求。

4.4.1. 什么是文件属性

  • 特定的文件系统中支持的,对文件、文件夹等文件额外施加的一些访问控制

4.4.2. 文件都有那些属性

在特定的文件系统上, 当前文件具备那些可用的文件属性, 这个以EXT4文件系统为例:

 Panda.Guo@2018-06-05 13:42:39 $ man ext4

在帮助信息中, 检索关键字 "FILE ATTRIBUTES" 可以看到Ext系列文件系统中支持的文件属性, 以下作为拣选:

属性描述
a (append only)仅允许以追加的方式打开文件
A (no atime updates)这个属性不允许更新文件的atime
c (compressed)启用这个属性时,文件在磁盘上会自动压缩
d (no dump)不能使用dump命令备份文件
D (synchronous directory updates)设置了文件夹的D属性时,更改会在同步保存在磁盘上
e (extent format)它表明,该文件使用磁盘上的块的映射扩展
i (immutable)在文件上启用这个属性时,我们不能更改、重命名或者删除这个文件
j (data journaling)设置了这个属性时,文件的数据首先保存在日志中,然后再写入文件
S (synchronous updates)设置了这个属性时,变更或更改同步保存到磁盘上

4.4.3. 文件属性管理(添加、删除、查看)

有两个命令 lsattr 和 chattr 用来管理属性。下面是常用属性的列表。

chattr属性中可以使用的不同选项 :

-R 递归地修改文件夹和子文件夹的属性
-V chattr命令会输出带有版本信息的冗余信息
-f 忽略大部分错误信息

在chattr中用于设置或者取消属性的 操作符

'+' 符号用来为文件和文件夹设置属性,
'-' 符号用来移除或者取消属性
'=' 使它们成为文件有的唯一属性。

chattr 和 lsattr 命令的基本语法 :

# chattr <options> <attributes> <file or Directory >
# lsattr <File or Directory>
  • 使用‘i’属性使文件不可更改
Panda.Guo@2018-06-05 14:05:14 $ ls -l file
-rw-r--r-- 1 panda panda 12 6月   5 14:05 file
Panda.Guo@2018-06-05 14:05:28 $ cat file 
Hello World
Panda.Guo@2018-06-05 14:05:31 $ sudo chattr  +i file 
Panda.Guo@2018-06-05 14:05:46 $ sudo lsattr file 
----i---------e---- file

对 file 文件添加 “i” 属性

  • 修改 file 文件
Panda.Guo@2018-06-05 14:05:51 $ echo "Hello 2 " >> file 
bash: file: 不允许的操作
Panda.Guo@2018-06-05 14:09:05 $ cat file 
Hello World
  • 删除 file 文件
Panda.Guo@2018-06-05 14:09:17 $ rm file 
rm: 无法删除'file': 不允许的操作
  • 对 file 文件创建硬连接
Panda.Guo@2018-06-05 14:09:22 $ ln file  file-link
ln: 无法创建硬链接'file-link' => 'file': 不允许的操作
  • 以root用户,删除file 文件
Panda.Guo@2018-06-05 14:09:45 $ su 
密码:
root@PandaGuo:/home/panda/tmp/itcast# whoami
root
root@PandaGuo:/home/panda/tmp/itcast# rm file 
rm: 无法删除'file': 不允许的操作
  • 对于已经设置 i 属性的文件,如果需要修改、删除等操作,需要以特权用户移除i属性后,再进行相应操作
Panda.Guo@2018-06-05 14:12:42 $ lsattr file 
----i---------e---- file
Panda.Guo@2018-06-05 14:12:51 $ sudo chattr -i file 
Panda.Guo@2018-06-05 14:13:01 $ lsattr file 
--------------e---- file
Panda.Guo@2018-06-05 14:13:12 $ rm file 
Panda.Guo@2018-06-05 14:13:14 $ ls file
ls: 无法访问'file': 没有那个文件或目录

讨论

  • 文件属性a、i的应用场景

4.5. PAM技术

在探讨PAM技术之前, 我们先探讨一个术语“标识&鉴别”

  • 标识:登录系统的用户需要标识, 标识解决“我是谁”的话题
  • 鉴别:鉴别解决“我是我”的话题

4.5.1. PAM是什么

Pluggable Authentication Modules , 可插拔的鉴权模块, sun提出的一种鉴权机制。

它通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。

Panda.Guo@2018-06-05 14:48:40 $ ls /lib/x86_64-linux-gnu/security/

4.5.2. 如何使用 PAM

Pam使用非常简单, 就是修改相应配置文件,添加pam 模块的配置。

Panda.Guo@2018-06-05 15:02:59 $ ls /etc/pam.d/

关于pam配置相关的帮助信息

Panda.Guo@2018-06-05 15:03:59 $ man pam.conf

以 common-password 配置文件简单介绍配置方式

Panda.Guo@2018-06-05 15:04:55 $ vi  /etc/pam.d/common-password

4.5.3. PAM 配置实例 - 弱口令防护

典型的弱口令防护策略: pam_cracklib

弱口令防护,简单说就是增加口令负责度

  • 口令长度不小于8位
  • 口令是大、小字母、数字和特殊字符组成
  • 口令不得与账户名相同
Panda.Guo@2018-06-05 15:05:09 $ sudo vi /etc/pam.d/common-password
password  required  pam_cracklib.so retry=3 minlen=8 difok=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 reject_username

通过 man pam_cracklib 查看cracklib 选项信息

  • 配置描述

    • retry=3 键入口令错误时,重复次数
    • minlen=8 口令最小长度
    • lcredit=-1 小写字符至少为1
    • ucredit=-1 大写字母至少为1
    • dcredit=-1 数字至少为1
    • ocredit=-1 特殊字符至少为1
    • difok=3 新旧口令差别至少3个字符
    • reject_username 口令中,不允许包括用户名称(正序和逆序)
  • 讨论: root用户要不要受口令复杂度的限制。

4.5.4. PAM 配置实例 - 暴力破解防护

字典攻击、暴力破解的防护,简单说,就是当你尝试口令错误达到一定次数, 我锁定你账户,延迟一段时间再允许你进行登录即可

  • 连续登录失败5次后,账户锁定10分钟;
Panda.Guo@2018-06-05 15:14:57 $ sudo vi /etc/pam.d/su
auth required pam_tally.so unlock_time=600  deny=5

可通过 man pam_tally 查看选项信息

  • 配置描述

    • unlock_time: 用户锁定时间
    • deny: 口令输入错误的重复次数
  • 讨论: 锁定时间不是越长越好

4.5.5. 附录: 配置格式

配置文件有许多配置项(每行对应一个配置项)组成,每一行又分为四列(每列对应一栏):

  • 第一栏,认证鉴别接口类型:(四类接口)

    • auth:表示鉴别类接口模块类型用于检查用户和密码,并分配权限

    • account:表示账户类接口,主要负责账户合法性检查,确认帐号是否过期,是否有权限登录系统等;

    • session:会话类接口。实现从用户登录成功到退出的会话控制;

    • password:口令类接口。控制用户更改密码的全过程。

每行只能指定一种接口类型

  • 第二栏,control_flag控制位:

他的四种可能的取值分别为required、Requisite、sufficient或_optional:

* required:表示该行以及所涉及模块的成功是用户通过鉴别的必要条件,只有当对应于应用程序的所有带 required标记的模块全部成功后,该程序才能通过鉴别。

* requisite:与required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。

* sufficient:表示该行以及所涉及模块验证成功是用户通过鉴别的充分条件。也就是说只要标记为sufficient的模块一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。

    * optional:他表示即便该行所涉及的模块验证失败用户仍能通过认证。在PAM体系中,带有该标记的模块失败后将继续处理下一模块。也就是说即使本行指定的模块验证失败,也允许用户享受应用程序提供的服务。

第三栏,module_path即所使用模块的全路径名称

第四栏,options用于向特定模块传递相关的选项,然后由模块分析解释这些选项

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/217953.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NPS内网穿透教程

1.简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协议&#xff08;访问内网网站、本地支付接口调试、ssh访问、远程桌面&#xff0c;内网dns解析等等……&#xff09;&#xff0c;此外还支持内网ht…

python socket编程6 - 使用PyQt6 开发UI界面实现TCP server和TCP client单机通讯的例子

使用PyQt6 开发UI界面实现TCP server和TCP client单机通讯的示例。 一、PyQt6 实现的界面 二、TCP server代码的修改示意 界面提供网络参数的配置&#xff0c;以及提供人机交互过程中的数据获取和显示。 1、把上面的server代码封装成两个部分 A、class Server 负责接受UI界面…

JS浮点数精度问题及解决方案

前端面试大全JS浮点数精度问题及解决方案 &#x1f31f;经典真题 &#x1f31f;浮点数精度常见问题 &#x1f31f;为什么会有这样的问题 &#x1f31f;真题解答 &#x1f31f;总结 &#x1f31f;经典真题 为什么 console.log(0.20.10.3) 得到的值为 false &#x1f31f;…

Spring Security 6.x 系列(9)—— 基于过滤器链的源码分析(二)

一、前言 在本系列文章&#xff1a; Spring Security 6.x 系列&#xff08;4&#xff09;—— 基于过滤器链的源码分析&#xff08;一&#xff09;中着重分析了Spring Security在Spring Boot 的自动配置、 DefaultSecurityFilterChain 的构造流程、FilterChainProxy 的构造流…

12.4 C++ 作业

完成沙发床的多继承 #include <iostream>using namespace std;//封装 沙发 类 class Sofa { private:string *sitting; public://无参构造函数Sofa(){cout << "Sofa::无参构造函数" << endl;}//有参构造函数Sofa(string s):sitting(new string(s)…

手机升级到iOS15.8后无法在xcode(14.2)上真机调试

之前手机是iOS14.2的系统,在xcode上进行真机测试运行良好&#xff0c;因为想要使用Xcode的Instruments功能&#xff0c;今天将系统更新到了iOS15.8 &#xff0c;结果崩了 说是Xcode和手机系统不兼容不能进行真机测试。在网上查不好些方法&#xff0c;靠谱的就是下载相关版本的…

C语言小游戏:三子棋

目录 &#x1f30d;前言 &#x1f685;目录设计 &#x1f48e;游戏逻辑设置 ⚔三子棋棋盘设计 ⚔三子棋运行逻辑 &#x1f440;怎么设置人下棋 &#x1f440;怎么设置电脑下棋 ✈如何判断输赢 ✍结语 &#x1f30d;前言 Hello,csdn的各位小伙伴你们好啊!这次小赵给大…

ArcGIS平滑处理栅格数据

一、实验背景 基于栅格数据的空间分析&#xff0c;常常需要根据特定的分析场景对栅格数据进行处理&#xff0c;如栅格数据的噪声处理。噪声是属性值具有突跃特征的像元位置&#xff0c;直接对带有噪声的栅格数据进行分析会对结果造成较大的影响。而降噪的主要方法之一是平滑&a…

12.4_黑马MybatisPlus笔记(下)

目录 11 12 thinking&#xff1a;关于Mybatis Plus中BaseMapper和IService&#xff1f; 13 ​编辑 thinking&#xff1a;CollUtil.isNotEmpty? 14 thinking&#xff1a;Collection、Collections、Collector、Collectors&#xff1f; thinking&#xff1a;groupBy&#…

风格迁移网络修改流程(自用版)

一. AdaAttN-Revisit Attention Mechanism in Arbitrary Neural Style Transfer&#xff08;ICCV2021&#xff09; 下载vgg_normalised.pth打开visdom python -m visdom.server在 train_adaattn.sh 中配置 content_path、style_path 和 image_encoder_path&#xff0c;分别表…

FFmpeg在Centos服务器上离线安装(包含所需依赖)并实现拉取rtsp流与推送至rtmp服务器

场景 Windows上使用FFmpeg实现rtsp视频流推流到RTMP流媒体服务器(EasyCVR流媒体服务器)&#xff1a; Windows上使用FFmpeg实现rtsp视频流推流到RTMP流媒体服务器(EasyCVR流媒体服务器)_rtsp 转流-CSDN博客 上面讲了在windows上ffmpeg的应用示例&#xff0c;如果是在centos服…

Hadoop进阶学习---HDFS分布式文件存储系统

1.hdfs分布式文件存储的特点 分布式存储:一次写入,多次读取 HDFS文件系统可存储超大文件,时效性较差. HDFS基友硬件故障检测和自动快速恢复功能. HDFS为数据存储提供很强的扩展能力. HDFS存储一般为一次写入,多次读取,只支持追加写入,不支持随机修改. HDFS可以在普通廉价的机器…

canvas绘制小丑

说明&#xff1a; 借鉴博主基于canvas绘制一个爱心(10行代码就够了) - 掘金 (juejin.cn) 代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&quo…

震坤行2023安全月活动顺利收官

震坤行2023安全月活动顺利收官 2023年6月&#xff0c;是第22个全国“安全生产月”&#xff0c;主题为 “人人讲安全、个个会应急”。震坤行工业超市(上海)有限公司基于国家 “安全生产月”的主题要求&#xff0c;以及公司具体的安全形势&#xff0c;于6月1日在全公司范围内正式…

EM32DX-E4【C#】

1外观&#xff1a; ecat总线&#xff0c;分布式io 2电源&#xff1a; 靠近SW拨码&#xff1a;24V 中间&#xff1a;0V 靠近面板&#xff1a;PE接地 3DI&#xff1a; 6000H DI输入寄存器 16-bit &#xff08;16位输入&#xff09; 00H U8 子索引总数 01H Unsigned16 IN1…

TCP 半连接队列和全连接队列

在 TCP 三次握手的时候&#xff0c;Linux 内核会维护两个队列&#xff0c;分别是&#xff1a; 半连接队列&#xff0c;也称 SYN 队列&#xff1b; 全连接队列&#xff0c;也称 accept 队列&#xff1b; 服务端收到客户端发起的 SYN 请求后&#xff0c;内核会把该连接存储到半连…

数据库系统概论期末经典大题讲解(用关系代数进行查询)

今天也是结束的最为密集的考试周&#xff0c;在分析过程中自己也有些许解题的感悟&#xff0c;在此分享出来&#xff0c;希望能帮到大家期末取得好成绩。 一.专门的关系运算 1.选择&#xff08;σ&#xff09; 选择操作符用于从关系中选择满足特定条件的元组 例如&#xff0c;…

计算机组成原理学习-总线总结

复习本章时&#xff0c;思考以下问题&#xff1a; 1)引入总线结构有什么好处&#xff1f;2)引入总线结构会导致什么问题&#xff1f;如何解决&#xff1f;

【专题】【中值定理-还原大法】

1&#xff09;构造辅助函数 2&#xff09;罗尔定理&#xff1a; 闭区间连续&#xff0c;开区间可导 F&#xff08;a&#xff09;F&#xff08;b&#xff09; 3&#xff09;F‘&#xff08;ξ&#xff09;0&#xff0c;原命题得证 极限保号性&#xff1a;

WPS论文写作——公式和公式序号格式化

首先新建一个表格&#xff0c;表格尺寸按你的需求来确定&#xff0c;直接 插入--》表格 即可。 然后在表格对应位置填上公式&#xff08;公式要用公式编辑器&#xff09;和公式序号&#xff0c;然后可以按照单独的单元格或者整行或整列等来设置样式&#xff0c;比如居中对齐、…