M25-10

懒人少语之第十周
💙PAM认证机制   
  `认证框架,可用于开发` 实现身份验证,用户的身份验证,服务的身份验证等. User => PAM会话例 => PAM-API 用户需要做好API的开发接口,由管理员来控制配置数据与PAM服务模块进行操作 PAM服务模块 => PAM-SPI (PAM开发人员来创建) 认证管理模块; 帐号管理模块; 会话管理模块; 口令管理模块 每个用户可以对其做独立的认证 PAM认证: Service(服务/记录的pam信息)->PAM(配置文件/管理员定义了各种规则)->pam_*.so(库文件/直接调用pam) PAM认证首先要确定那一项服务, 然后加载相应的PAM的配置文件(位于/etc/pam.d下), 最后调用认证文件(位于/lib/security下)进行安全认证 man 8 pam_time Linux-PAM_SAG.pdf `PAM手册.pdf` pam文档说明 /user/share/doc/pam-* rpm -qd pam `所有pam手册` man –k pam_* man 模块名 `man rootok` 《The Linux-PAM System Administrators‘ Guide》 🌙PAM相关文件 模块文件目录() /lib64/security/*.so pam_selinux.so `selinux相关的` pam_rootok.so `root相关的` pam_access.so `库文件` ... 环境相关的设置() /etc/security/ `仅部分,非全部所需` access.conf `access的库文件的配置文件` 主配置文件: /etc/pam.conf `默认不存在` 为每种应用模块提供一个专用的配置文件: /etc/pam.d/APP_NAME `有刚需的情况下则用该目录对应的配置` 用户使用某个独立的应用程序需要pam的文件的命令,会调用这个文件, 需要根据这个配置文件来提供操作 注意:如/etc/pam.d存在,/etc/pam.conf将失效 `应用模块存在,则主配置文件失效` 😠通用/主配置文件`/etc/pam.conf`格式,不推荐修改 application type control module-path arguments application `应用程序` 正因为有了/etc/pam.d/app_name应用程序所以才不需要在主配置上修改整理了. type `类型` control `控制规则` module-path `路径` arguments `参数` 😠专用配置文件`/etc/pam.d/*`格式 `立即生效` type control module-path arguments type `类型` control `控制规则` module-path `路径` arguments `参数` 参考🌙说明👇👇 😛PAM认证过程:`假若用了passwd模块` 1.使用者执行/usr/bin/passwd程序,并输入密码 使用激活;/etc/pam.d/passwd() 2.passwd开始呼叫PAM模块,PAM模块会搜寻passwd程序的PAM相关设定文件,这个设定文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd这个设置文件 唤醒PAM;里边包括pam_gnome_keyring.so库文件,所以会根据配置文件去调用该库() 3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证 类型选择;`Auth|Account|Password|Session|-type等` 4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证) 控制规则;`required|requisite|sufficient|optional|include等` 🌙说明: /etc/pam.d/服务名(application) telnet、login、ftp等,服务名字;"OTHER"代表所有没有在该文件中明确配置的其它服务 ⭐模块类型(module-type)`根据不同的 /etc/pam.d/ 下模块有不同的功能项` Auth `是否为有效帐号/身份验证`账号的认证和授权 Account `验证帐号是否有效`与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用户的位置(例如:root用户只能从控制台登录) Password `密码复杂度`用户修改密码时密码复杂度检查机制等功能 Session `用户在服务之前之后的操作`用户获取到服务之前或使用服务完成之后需要进行一些附加的操作,如:记录打开/关闭数据的信息,监视目录等 -type `带-的模块为无问题,表示模块非必要`表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用 ... ⭐控制规则(control) PAM库该如何处理与该服务相关的PAM模块的成功或失败情况 `上下关系,先看上再判断下Control` 根据不同的关键词`required/optional/include`等等有不同的操作功能 required 表示一票拒绝,全部拒绝,`不会立即通知,等同一type中的所有模块finsh后再将失败返回给应用程序` 假若这次成功了,还需检查后续Control,`并没有一票成功权` requisite 表示一票否决,`一次性,失败了全部失败,不再后续检查` 假若这次成功了,还需检查后续Control,`并没有一票成功权` sufficient 表示一票通过,`一个返回成功则全部直接成功` optional 表示可选,不会起关键作用,返回值可忽略 include 调用其它配置文件中定义的配置 ⭐路径(module-path) 用来指明本模块对应的程序文件的路径名 相对路径: /lib64/security目录下的模块可使用相对路径 如:pam_shells.so、pam_limits.so 绝对路径: 模块通过读取配置文件完成用户对系统资源的使用控制() /etc/security/*.conf 注意:修改PAM配置文件将马上生效() 建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误() ⭐参数(Arguments) 用来传递给该模块的参数 根据传进的参数不同,而操作即不同 比如你可以这样: auth required /lib/security/pam_securetty.so auth required /lib/security/pam_env.so auth sufficient /lib/security/pam_ldap.so auth required /lib/security/pam_unix.so try_first_pass ... 👆第一条pam_securetty.so模块检查它配置文件/etc/的安全性,并查看是否能使用该 登录终端列出,如果不是就拒绝root登录.但由于失败了会根据规则required来继续后续 工作,即为将所有模块调用了(即便成功一些)最终还是登录失败. 👆第二条pam_env.so模块基于管理员在/etc/security/pam_env.conf下设定的环境变量中, 该模块并非真的设置任何变量,只不过这么做是为了使用户通过SSH后有环境变量, 后续则不需用户自己再设置 👆第三条pam_ldap.so模块提示用户输入密码,后检查在/etc/ldap.conf中的目录进行身份验证, 若失败后执行pam_unix依旧成功,那么操作结果仍然当作成功.若一开始的pam_ldap成功了 则后边的pam_unix将不会被调用 `这是sufficient的功效` 👆第四条pam_unix.so try_first_pass;当pam_unix不提示用户使用密码时,则try_first_pass 告诉模块使用前一个模块给出的密码(pam_ldap),并登录,而当登录系统调用身份验证失败后, 就意味pam_unix的失败会导致pam_ldap一并失败.若成功了,那么操作则成功 auth为是否为有效帐号/身份验证() ⭐例子: 在/etc/pam.d/sshd下添加 auth required pam_shells.so `则表示会验证shells库的安全策略`通过检查sshd下有没有符合pam_shells规则 pam_shells.so `检查该/etc/shells里是否包含你用户用sshd登录的shell环境,不包含则拒绝登录` 如果用户shell在/etc中列出,它就允许访问系统() 在/etc/pam.d/su下添加 auth required pam_shells.so `则表示使用su切换观察shells的策略` 🌙例子解释: 模块:pam_shells 功能:检查有效shell man pam_shells 示例:不允许使用/bin/csh的用户本地登录 vim /etc/pam.d/login auth required pam_shells.so vim /etc/shells 去掉/bin/csh useradd –s /bin/csh testuser testuser将不可登录 tail /var/log/secure 🌙例子2: 模块:pam_securetty.so `针对root可登录的终端环境有哪些` 功能:只允许root用户在/etc/securetty列出的安全终端上登陆 `指定用户在某个终端登录` 示例:允许root在telnet登陆 vim /etc/pam.d/login #auth required pam_securetty.so #将这一行加上注释   或者/etc/securetty文件中加入   pts/0,pts/1…pts/n 🌙例子3: 模块:pam_nologin.so `非管理员不能登录,shell为nologin的用户显示提示并否决登录` 功能:如果/etc/nologin文件存在,将导致非root用户不能登陆, 如果用户shell是/sbin/nologin 时,当该用户登陆时, 会显示/etc/nologin.txt文件内容,并拒绝登陆 echo you login err > /etc/nologin `拒绝登录的会有该添加的提示` `指定文件nologin不可登陆的shell` account required pam_nologin.so `某服务用了该模块普通用户则将无法登录` account required pam_nologin.so file=/app/nologin.txt `指定文件` nologin.txt添加No_login文字,若在su服务下添加该模块后,则无法使用su切换登录并提示No_login文字() 🌙例子4: 模块:pam_limits.so `控制用户使用的资源` 功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间 修改限制的实现方式: (1) 💛ulimit命令,立即生效,但无法保存,当前shell生效 `内部命令,不同的shell有不同的控制` https://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/ -a 显示所有控制;显示当前资源限制设定 core file size (blocks, -c) 0 `设定core文件最大值,单位/区块` data seg size (kbytes, -d) unlimited `程序数据节区最大值,单位/kb` scheduling priority (-e) 0 `调度优先级` file size (blocks, -f) unlimited `文件大小,shell能建立的最大文件,单位/区块` pending signals (-i) 3791 `当前待处理的信号` max locked memory (kbytes, -l) 64 `最大任务锁住的物理内存大小,单位/kb` max memory size (kbytes, -m) unlimited `单个任务最大常驻物理内存大小,单位/kb` open files (-n) 1024 `一个任务最多同时打开文件数量/支持打开文件的个数/最大文件描述符数量` pipe size (512 bytes, -p) 8 `管道最大空间/管道缓冲区大小,单位/kb` POSIX message queues (bytes, -q) 819200 `支持最大POSIX消息队列` real-time priority (-r) 0 stack size (kbytes, -s) 8192 `进程栈最大值,单位/kb` cpu time (seconds, -t) unlimited `进程使用的cpu时间` max user processes (-u) 3791 `最大的所有用户进程数,有时候只小不大` virtual memory (kbytes, -v) unlimited `进程的最大地址空间` file locks (-x) unlimited `锁住文件最大个数` -n `设置最多的打开的文件描述符个数` -u `最大用户进程数` -S `使用soft(软)资源限制` `非强制性,设置可增加,但不超过硬资源` ulimit -Sn 32 `32个文件描述符` -H `使用hard(硬)资源限制` `强制性,一旦设置不能增加` ulimit -Hs 64 `线程栈大小为64K` (2) 配置文件:/etc/security/limits.conf `针对自己的配置文件,修改后永久生效` /etc/security/limits.d/*.conf 配置文件:每行一个定义; <domain> <type> <item> <value> <domain> `user; @group(组); *(所有用户); %group(组); ` <type> `指定类型,软,硬,- ... Soft(软限制); Hart(硬限制); -(软硬限制)` <item> `nofile(最大文件数量); nproc(最大进程数量); 内核;数据;大小;文件个数;内存;进程;地址空间;用户|系统最大登录次数;记录日志;nice;实时优先级` <value> `指定具体值,数字` 如: @student hard nproc 20 @sutdent -(包含软硬) maxlogins 4 wang hard nproc(进程) 10 `wang用户最多能用的进程数限制为10个` Resource temporarily 复杂详细实现:使用一个或多个“status=action” [status1=action1 status2=action …] Status: 检查结果的返回状态 Action: 采取行为ok,done,die,bad,ignore,reset ok 模块通过,继续检查 done 模块通过,返回最后结果给应用 bad 结果失败,继续检查 die 结果失败,返回失败结果给应用 ignore 结果忽略,不影响最后结果 reset 忽略已经得到的结果

  

posted @ 2017-09-17 12:32  illinux  阅读(152)  评论(0编辑  收藏  举报