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   忽略已经得到的结果

  

时间: 2024-08-28 15:41:35

M25-10的相关文章

[转] 在React Native中使用ART

http://bbs.reactnative.cn/topic/306/%E5%9C%A8react-native%E4%B8%AD%E4%BD%BF%E7%94%A8art 前半个月捣腾了一下React Native ART 现在手上闲下来了和大家分享一下React Native中的ART使用心得 React Native ART 究竟是什么? 所谓ART,是一个在React中绘制矢量图形的JS类库.这个类库抽象了一系统的通用接口,统一了SVG,canvas,VML这类矢量图形在 React中

百度粉红色风科技上来看积分

http://www.ebay.com/cln/508gua_gvqjq/-/167266747010/2015.02.10 http://www.ebay.com/cln/jhu2290/-/167423283013/2015.02.10 http://www.ebay.com/cln/cha.m22/-/167166250017/2015.02.10 http://www.ebay.com/cln/fenyu56/-/167382503016/2015.02.10 http://www.eb

百度附件是分开就爱死了开发了

http://www.ebay.com/cln/m_m3154/-/167249028014/2015.02.10 http://www.ebay.com/cln/zhsu412/-/167238372018/2015.02.10 http://www.ebay.com/cln/mi.han5/-/167545028015/2015.02.10 http://www.ebay.com/cln/lij5252/-/167389481016/2015.02.10 http://www.ebay.co

使用 Chrome 浏览器插件 Web Scraper 10分钟轻松实现网页数据的爬取

本文标签: WebScraper Chrome浏览器插件 网页数据的爬取 使用Chrome 浏览器插件 Web Scraper 可以轻松实现网页数据的爬取,不写代码,鼠标操作,点哪爬哪,还不用考虑爬虫中的登陆.验证码.异步加载等复杂问题. Web Scraper插件 Web Scraper 官网中的简介: Web Scraper Extension (Free!)Using our extension you can create a plan (sitemap) how a web site

Install Hyper-V on Windows 10

? Enable Hyper-V to create virtual machines on Windows 10.Hyper-V can be enabled in many ways including using the Windows 10 control panel, PowerShell (my favorite) or using the Deployment Imaging Servicing and Management tool (DISM). This documents

10.4 补充范围内丢失的值

select y.yr.coalesce(x.cnt,0) as cntfrom (select min_year-mod(cast(min_year as int),10)+rn as yrfrom (select (select min(extract(year from hreadate))from emp) as min_year,id-1 as rnfrom t10) a) yleft join(select extract(year from hredate) as yr,count

10.6 监控io性能 - 10.7 free命令 - 10.8 ps命令 - 10.9 查看网络状态 - 10.10 linux下抓包

- 10.6 监控io性能 - 10.7 free命令 - 10.8 ps命令 - 10.9 查看网络状态 - 10.10 linux下抓包 - 扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.html  - tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html  # 10.6 监控io性能 ![mark](http://oqxf7c508.bkt.clouddn.com/b

Windows 10 UWP程序标题栏设置

原文:Windows 10 UWP程序标题栏设置 在Windows 10程序中,以前只能用于全屏方式的Metro程序现在可以运行在窗口模式下了,并且改了个新名字,叫Windows 通用程序(Universal Windows app),简称UWP程序.新的UWP程序虽然大体上还是和以前的Metro程序差不多的,但还是引入了一点新东西的,本文这里就介绍一下它的标题栏设置的几个特性. 隐藏标题栏: 将应用界面扩展至 Titlebar 区域 CoreApplication.GetCurrentView

How to enable C development in a Windows 10 development environment VM

To enable C development in a Windows 10 development environment VM, follow these steps: Start VS in the Windows 10 development environment VM. Choose "File" -> "New" -> "Project", choose "Open Visual Studio Install

设置UWP程序自启动(Automate launching Windows 10 UWP apps)

原文:设置UWP程序自启动(Automate launching Windows 10 UWP apps) 在开发UWP程序的过程中,有时候需要设置程序的自启.本人实现的步骤如下: 1.在VS中激活Protocol (Package.appxmanifest --> Declarations --> Add Protocol),图示如下: 2.编译并发布项目(Build and Deploy) 发布之后Protocol被激活,在(控制面板 --> 程序 --> 默认程序 -->