网络安全(二)-- 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用于向特定模块传递相关的选项,然后由模块分析解释这些选项

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】STL简介(了解)【STL的概念,STL的历史缘由,STL六大组件、STL的重要性、以及如何学习STL、STL的缺陷的讲解】

这里写自定义目录标题 一、什么是STL二、STL的版本1. 原始版本2. P. J. 版本3. RW版本★ 4. SGI版本 三、STL的六大组件四、STL的重要性五、如何学习STL六、STL的缺陷 一、什么是STL STL ( standard template libaray - 标准模板库 )&#xff1a;是C标准库 的重要组成部分&…

红队攻防之隐匿真实IP

0x01 前言 安全态势日益严峻&#xff0c;各大组织普遍采用了综合的安全产品&#xff0c;如态势感知系统、WAF和硬件防火墙等&#xff0c;这些措施加大了渗透测试和攻防演练的难度。即使是一些基本的漏洞验证、端口扫描&#xff0c;也可能导致测试IP被限制&#xff0c;从而阻碍…

DFT新手教程:VASP中ISIF取值设置

新手初学VASP计算时首先接触到的就是结构优化的计算任务。 在结构优化中&#xff0c;INCAR中的关键参数包括 IBRION &#xff0c;NSW&#xff0c;ISIF&#xff0c;EDIFF和EDIFFG 各个参数均可在vaspwiki查到可设置的参数以及该参数所具有的设置的含义。 https://www.vasp.at/…

佛罗里达大学利用神经网络,解密 GPCR-G 蛋白偶联选择性

内容一览&#xff1a;G 蛋白偶联受体 (GPCRs) 是一种将细胞膜外的刺激&#xff0c;传递到细胞膜内的跨膜蛋白&#xff0c;广泛参与到人体生理活动当中。近日&#xff0c;佛罗里达大学的研究者测定了 GPCRs 和 G 蛋白的结合选择性&#xff0c;并开发了预测二者选择性的算法&…

JVM简单了解内存溢出

JVM oracle官网文档&#xff1a;https://docs.oracle.com/en/java/javase/index.html 什么是JVM JVM(Java Virtual Machine)原名Java虚拟机&#xff0c;是一个可以执行Java字节码的虚拟计算机。它的作用是在不同平台上实现Java程序的跨平台运行&#xff0c;即使在不同的硬件…

MX6ULL学习笔记 (七) 中断实验

前言&#xff1a; 本章我们就来学习一 下如何在 Linux 下使用中断。在linux内核里面使用中断&#xff0c;不同于我们以往在别的裸机开发一样&#xff0c;需要进行各种寄存器的配置&#xff0c;中断使能之类的&#xff0c;而在Linux 内核中&#xff0c;提供了完善的中断框架…

AWS攻略——使用中转网关(Transit Gateway)连接同区域(Region)VPC

文章目录 环境准备创建VPC 配置中转网关给每个VPC创建Transit Gateway专属挂载子网创建中转网关创建中转网关挂载修改VPC的路由 验证创建业务Private子网创建可被外网访问的环境测试子网连通性Public子网到Private子网Private子网到Private子网 知识点参考资料 在《AWS攻略——…

java日历功能

java 日历功能 功能概述java代码打印结果 功能概述 输入年份和月份&#xff0c;打印该月份所有日期&#xff0c;头部信息为星期一至星期日 java代码 package com.java.core.demoTest; import java.util.Calendar; import java.util.Scanner;// 打印日历 public class Calend…

计算机网络之IP篇

目录 一、IP 的基本认识 二、DNS 三、ARP 四、DHCP 五、NAT 六、ICMP 七、IGMP 七、ping 的工作原理 ping-----查询报文的使用 traceroute —— 差错报文类型的使用 八、断网了还能 ping 通 127.0.0.1 吗&#xff1f; 8.1、什么是 127.0.0.1 &#xff1f; 8.2、为…

小程序1rpx边框不完美

问题展示 原因 rpx类似rem&#xff0c;渲染后实际转换成px之后可能存在小数&#xff0c;在不同的设备上多多少少会存在渲染的问题。而1rpx的问题就更加明显&#xff0c;因为不足1个物理像素的话&#xff0c;在IOS会进行四舍五入&#xff0c;而安卓好像统一向上取整&#xff0c…

人工智能|网络爬虫——用Python爬取电影数据并可视化分析

一、获取数据 1.技术工具 IDE编辑器&#xff1a;vscode 发送请求&#xff1a;requests 解析工具&#xff1a;xpath def Get_Detail(Details_Url):Detail_Url Base_Url Details_UrlOne_Detail requests.get(urlDetail_Url, headersHeaders)One_Detail_Html One_Detail.cont…

[MySQL--基础]多表查询

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录&#xff1a;生活中最大的挑战就是发现自己是谁。然后&#xff0c;坚定不移地成为那个人。 ⭐个人主页&#xff1a;欧_aita ψ(._. )>⭐个人专栏&#xff1a; 数据结构与算法 MySQL数据库 多表查询 前言多表关系概述&#x1f…

为什么 SQL 不适合图数据库

背景 “为什么你们的图形产品不支持 SQL 或类似 SQL 的查询语言&#xff1f;” 过去&#xff0c;我们的一些客户经常问这个问题&#xff0c;但随着时间的推移&#xff0c;这个问题变得越来越少。 尽管一度被忽视&#xff0c;但图数据库拥有无缝设计并适应其底层数据结构的查询…

四层LVS与七层Nginx负载均衡的区别

一、四层负载均衡与七层负载均衡&#xff1a; &#xff08;1&#xff09;四层负载均衡&#xff1a; 四层负载均衡工作在 OSI 七层模型的第四层&#xff08;传输层&#xff09;&#xff0c;指的是负载均衡设备通过报文中的目标IP地址、端口和负载均衡算法&#xff0c;选择到达的…

赛事回顾 | 首届“智航杯“全国无人机智能算法竞赛落幕

11月28日&#xff0c;首届“智航杯”全国无人机智能算法竞赛实物赛在海南省三亚市成功落下帷幕。此次竞赛自2023年4月启动以来&#xff0c;共有来自全国145所高等院校和50多所企事业单位的1253支团队、3655人报名参赛&#xff0c;最终有6支队伍脱颖而出&#xff0c;入围了实物赛…

Elasticsearch:评估 RAG - 指标之旅

作者&#xff1a;Quentin Herreros&#xff0c;Thomas Veasey&#xff0c;Thanos Papaoikonomou 2020年&#xff0c;Meta发表了一篇题为 “知识密集型NLP任务的检索增强生成” 的论文。 本文介绍了一种通过利用外部数据库将语言模型 (LLM) 知识扩展到初始训练数据之外的方法。 …

11.9每日一题(无穷比无穷型的极限:提出并消去无穷因子、抓大头、拆多项式)

注&#xff1a;1、 为x的绝对值&#xff0c;因为x趋向负无穷&#xff0c;所以为 -x 2、用有理运算法则拆分式子时&#xff0c;注意判断极限是否存在

Python 网络爬虫(二):HTTP 基础知识

《Python入门核心技术》专栏总目录・点这里 文章目录 1. HTTP 协议简述2. HTTP 请求过程3. HTTP 的结构3.1 请求行3.2 请求头3.3 请求体3.4 状态行3.5 响应头3.6 响应体 4. Cookie 状态管理5. HTTP 请求示例6. 总结 大家好&#xff0c;我是水滴~~ 在准备学习网络爬虫之前&…

springboot慢性胃炎管理系统-计算机毕设 附源码 35541

SpringBoot慢性胃炎管理系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;医疗行业当然也不例外。慢性胃炎管理系统是以实际运用为开发背景&#xff0c;运用软件工程…

PLC通过485Modbus转Profinet网关与温控表通讯在发酵罐的应用

前提&#xff1a;在自动化控制系统中&#xff0c;PLC通常需要和各种设备进行数据通讯&#xff0c;其中就包括温控表。而这些设备之间的通讯常常需要通过485Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;来实现。 方案&#xff1a;在一些应用场合中&#xff0c;Profi…