SUDO,PAM配置规范说明

sudo

sudo简介

  1. 说明

    sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如mount、reboot、shutdown、init、halt、user等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。
    备注:Ubuntu安装系统,默认禁用root账号而第一个普通用户就配置好sudo权限,centos默认启用root账号,因此普通用户需自行配置sudo权限

文件相关配置

  1. sudo配置文件

    /etc/sudoers
  2. 通配符

    ? 任意单一字符
    * 匹配任意长度字符
    [wxc] 匹配其中一个字符
    [!wxc] 除了这三个字符的其它字符
    \x 转义
    [[alpha]] 字母
  3. 格式

    • 格式定义

      root ALL=(ALL) ALL
    • 格式说明

      user: 运行命令者的身份
      host: 通过哪些主机
      (runas):以哪个用户的身份
      command: 运行哪些命令
    • 格式别名

      User和runas:
      username
      #uid
      %group_name
      %#gid
      user_alias|runas_alias
      host:
      ip或hostname
      network(/netmask)
      host_alias
      command:
      command name
      directory
      sudoedit
      Cmnd_Alias
    • sudo别名类型

      User_Alias
      Runas_Alias
      Host_Alias
      Cmnd_Alias
    • 别名格式

      [A-Z]([A-Z][0-9]_)*

案例

  1. 案例1:用户命令授权,配置visudo /etc/sudoers

    授权mount命令挂载:
    zxl ALL=(root) /usr/bin/mount /dev/cdrom /mnt/,/usr/bin/umount /mnt
    获取root所有权限
    zxl ALL=(root) ALL
    对授权的命令进行取反
    zxl ALL=(ALL) ALL,!/usr/bin/vim,!/usr/bin/su
  2. 案例2:别名授权,配置visudo /etc/sudoers

    #用户别名定义
    User_Alias SYSADER=wang,mage,%admins
    User_Alias DISKADER=tom
    #主机别名定义
    Host_Alias SERS=www.magedu.com,172.16.0.0/24
    #用户身份别名定义
    Runas_Alias OP=root
    #命令别名定义
    Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
    Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
    Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd [azA-Z]*, !/usr/bin/passwd root
    #别名运用方法root ALL=(ALL) ALL
    SYSADER SERS= SYDCMD,DSKCMD
    DISKADER ALL=(OP) DSKCMD
    #ADMINCMD命令访问无需密码验证,/usr/sbin/userdel命令需要密码验证
    ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
    #wang用户只能再指定ip地址内使用root授权命令
    wang 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd

PAM

pam简介

  • pam说明

    PAM(Pluggable Authentication Modules)即可插拔式认证模块,它是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。
    在不同版本的Linux统中部署PAM认证是有所不同的。
    它提供了对所有服务进行认证的中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp,点对点协议(PPP)),su等应用程序中。
    系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块(主要是引出一些函数pam_sm_xxxx( )供PAM接口库调用),将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来
  • PAM框架结构如图所示

    image-20220916090839563

  • 官网地址

    http://www.linux-pam.org/
  • 帮助文档

    官方在线文档:http://www.linux-pam.org/Linux-PAM-html/
    官方离线文档:http://www.linux-pam.org/documentation/

PAM工作原理

PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证。
  • 认证原理图如下图所示:

    image-20220916091531696

  • 认证过程讲解

    1.使用者执行/usr/bin/passwd 程序,并输入密码
    2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
    3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
    4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)

PAM 配置文件格式说明

  • 通用配置文件/etc/pam.conf格式,此格式不使用

    application type control module-path arguments
  • 专用配置文件/etc/pam.d/ 格式

    type control module-path arguments
    • application:指服务名,如:telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其它服务
    • type:指模块类型,即功能
    • control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
    • module-path: 用来指明本模块对应的程序文件的路径名
    • Arguments: 用来传递给该模块的参数

模块类型

[09:37:39 root@rocky8_12 ~]#vim /etc/pam.d/sshd
#type #Control #path
1 #%PAM-1.0
2 auth substack password-auth
3 auth include postlogin
4 account required pam_sepermit.so
5 account required pam_nologin.so
6 account include password-auth
7 password include password-auth
8 # pam_selinux.so close should be the first session rule
9 session required pam_selinux.so close
10 session required pam_loginuid.so
11 # pam_selinux.so open should only be followed by sessions to be executed in the user context
12 session required pam_selinux.so open env_params
13 session required pam_namespace.so
14 session optional pam_keyinit.so force revoke
15 session optional pam_motd.so
16 session include password-auth
17 session include postlogin

module-type

  • Auth 账号的认证和授权
  • Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
  • Password 用户修改密码时密码复杂度检查机制等功能
  • Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
  • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

module-Control

  • required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件
  • requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
  • sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的required和requisite
  • optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
  • include: 调用其他的配置文件中定义的配置信息

module-path

  • 模块文件所在绝对路径:
  • 模块文件所在相对路径:/lib64/security目录下的模块可使用相对路径,如:pam_shells.so、pam_limits.so
  • 有些模块有自已的专有配置文件,在/etc/security/*.conf目 录下

Arguments

  • debug :该模块应当用syslog( )将调试信息写入到系统日志文件中
  • no_warn :表明该模块不应把警告信息发送给应用程序
  • use_first_pass :该模块不能提示用户输入密码,只能从前一个模块得到输入密码
  • try_first_pass :该模块首先用前一个模块从用户得到密码,如果该密码验证不通过,再提示用户输入新密码
  • use_mapped_pass 该模块不能提示用户输入密码,而是使用映射过的密码
  • expose_account 允许该模块显示用户的帐号名等信息,一般只能在安全的环境下使用,因为泄漏用户名会对安全造成一定程度的威胁

执行过程总结概括

程序调用 → pam配置文件:/etc/pam.d/ → 通过配置文件调用模块:/usr/lib64/security/ → 如果复杂模块会有专门配置文件进行配置:/etc/security/

image-20220916154054957

image-20220916154146452

image-20220916154239450

模块使用案例

pam_nologin.so 模块

  • 简介

    功能:如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文
    件内容,并拒绝登陆
  • 查看哪些程序使用nologin模块

    [15:24:54 root@rocky8_31 ~]#cd /etc/pam.d/
    [15:26:24 root@rocky8_31 pam.d]#grep pam_nologin *
    cockpit:account required pam_nologin.so
    gdm-autologin:account required pam_nologin.so
    gdm-fingerprint:account required pam_nologin.so
    gdm-password:account required pam_nologin.so
    gdm-pin:account required pam_nologin.so
    gdm-smartcard:account required pam_nologin.so
    login:account required pam_nologin.so
    remote:account required pam_nologin.so
    sshd:account required pam_nologin.so
    vmtoolsd:account required pam_nologin.so
  • 验证nologin模块功能

    [D:\~]$ ssh zxl@192.168.100.31
    Connecting to 192.168.100.31:22...
    Connection established.
    To escape to local shell, press Ctrl+Alt+].
    非root用户不能登录
    Connection closing...Socket close.
    Connection closed by foreign host.
    Disconnected from remote host(192.168.100.31:22) at 15:32:32.
    Type `help' to learn how to use Xshell prompt.
    [D:\~]$ ssh root@192.168.100.31
    Connecting to 192.168.100.31:22...
    Connection established.
    To escape to local shell, press Ctrl+Alt+].
    非root用户不能登录
    Activate the web console with: systemctl enable --now cockpit.socket
    This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
    To register this system, run: insights-client --register
    Last login: Fri Sep 16 15:24:54 2022 from 192.168.100.1

pam_limits.so 模块

  • 简介

    功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用
    内存空间

    image-20220916161300646

  • 查看哪些程序使用limits模块

    [15:57:22 root@rocky8_31 ~]#grep pam_limits /etc/pam.d/*
    /etc/pam.d/fingerprint-auth:session required pam_limits.so
    /etc/pam.d/password-auth:session required pam_limits.so
    /etc/pam.d/runuser:session required pam_limits.so
    /etc/pam.d/system-auth:session required pam_limits.so
  • 验证limit模块功能

    • 查看用户默认资源

      [16:08:43 root@rocky8_31 ~]#ulimit -a
      core file size (blocks, -c) 0
      data seg size (kbytes, -d) unlimited
      scheduling priority (-e) 0
      file size (blocks, -f) unlimited
      pending signals (-i) 10972
      max locked memory (kbytes, -l) 64
      max memory size (kbytes, -m) unlimited
      open files (-n) 1024
      pipe size (512 bytes, -p) 8
      POSIX message queues (bytes, -q) 819200
      real-time priority (-r) 0
      stack size (kbytes, -s) 8192
      cpu time (seconds, -t) unlimited
      max user processes (-u) 10972
      virtual memory (kbytes, -v) unlimited
      file locks (-x) unlimited
    • ulimit命令

      • 说明

        ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。
        ulimit的设定值是 per-process 的,也就是说,每个进程有自己的limits值。
        使用ulimit进行修改,立即生效。
        ulimit只影响shell进程及其子进程,用户登出后失效。
        可以在profile中加入ulimit的设置,变相的做到永久生效。
      • 命令参数

        -H 设置硬件资源限制.
        -S 设置软件资源限制.
        -a 显示当前所有的资源限制.
        -c size:设置core文件的最大值.单位:blocks
        -d size:设置数据段的最大值.单位:kbytes
        -f size:设置创建文件的最大值.单位:blocks
        -l size:设置在内存中锁定进程的最大值.单位:kbytes
        -m size:设置可以使用的常驻内存的最大值.单位:kbytes
        -n size:设置内核可以同时打开的文件描述符的最大值.单位:n
        -p size:设置管道缓冲区的最大值.单位:kbytes
        -s size:设置堆栈的最大值.单位:kbytes
        -t size:设置CPU使用时间的最大上限.单位:seconds
        -u size:最大用户进程数
        -v size:设置虚拟内存的最大值.单位:kbytes
        unlimited 是一个特殊值,用于表示不限制
        #说明
        查询时,若不加H或S参数,默认显示的是软限制
        修改时,若不加H或S参数,两个参数一起改变
    • 临时修改limit资源

      16:44:31 root@rocky8_31 ~]#ulimit -u
      10972
      You have new mail in /var/spool/mail/root
      [17:03:59 root@rocky8_31 ~]#ulimit -u 5000
      [17:04:28 root@rocky8_31 ~]#ulimit -u
      5000
    • 永久修改limit资源

      [17:04:32 root@rocky8_31 ~]#vim /etc/security/limits.conf
      [17:06:35 root@rocky8_31 ~]#grep ^[*] /etc/security/limits.conf
      * soft core unlimited
      * hard core unlimited
      * soft nproc 1000000
      * hard nproc 1000000
      * soft nofile 1000000
      * hard nofile 1000000
      * soft memlock 32000
      * hard memlock 32000
      * soft msgqueue 8192000
      * hard msgqueue 8192000
      #退出当前窗口重新登录
      [17:07:46 root@rocky8_31 ~]#ulimit -a
      core file size (blocks, -c) unlimited
      data seg size (kbytes, -d) unlimited
      scheduling priority (-e) 0
      file size (blocks, -f) unlimited
      pending signals (-i) 10972
      max locked memory (kbytes, -l) 32000
      max memory size (kbytes, -m) unlimited
      open files (-n) 1000000
      pipe size (512 bytes, -p) 8
      POSIX message queues (bytes, -q) 8192000
      real-time priority (-r) 0
      stack size (kbytes, -s) 8192
      cpu time (seconds, -t) unlimited
      max user processes (-u) 1000000
      virtual memory (kbytes, -v) unlimited
      file locks (-x) unlimited
    • 配置文件

      • pam_limits的设定值是基于 per-process 的

        /etc/security/limits.conf
        /etc/security/limits.d/*.conf
      • 文件格式

        #每行一个定义
        <domain> <type> <item> <value>
      • 格式说明:

        Username 单个用户
        @group 组内所有用户
        * 所有用户
        % 仅用于限制 maxlogins limit , 可以使用 %group 语法. 只用 % 相当于 * 对所有用户
        maxsyslogins limit限制. %group 表示限制此组中的所有用户总的最大登录数
      • 限制的类型

        Soft 软限制,普通用户自己可以修改
        Hard 硬限制,由root用户设定,且通过kernel强制生效
        - 二者同时限定
      • 限制的资源

        nofile 所能够同时打开的最大文件数量,默认为1024
        nproc 所能够同时运行的进程的最大数量,默认为1024

    通过systemd服务

本文作者:天梯的脚印

本文链接:https://www.cnblogs.com/zxl1024320609/p/16834625.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   天梯的脚印  阅读(358)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 世间美好与你环环相扣 柏松
イエスタデイ(翻自 Official髭男dism) - 茶泡饭,春茶,kobasolo
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 藤原聡

作曲 : 藤原聡

何度失ったって

取り返して見せるよ

雨上がり 虹がかかった空みたいな

君の笑みを

例えばその代償に

誰かの表情を

曇らせてしまったっていい

悪者は僕だけでいい

本当はいつでも

誰もと思いやりあっていたい

でもそんな悠長な理想論は

ここで捨てなくちゃな

遥か先で 君へ 狙いを定めた恐怖を

遥か先で 君へ 狙いを定めた恐怖を

どれだけ僕は

はらい切れるんだろう?

半信半疑で 世間体

半信半疑で 世間体

気にしてばっかのイエスタデイ

ポケットの中で怯えたこの手は

まだ忘れられないまま

「何度傷ついたって

「何度傷ついたって

仕方ないよ」と言って

うつむいて君が溢した

儚くなまぬるい涙

ただの一粒だって

僕を不甲斐なさで 溺れさせて

理性を奪うには十分過ぎた

街のクラクションもサイレンも

街のクラクションもサイレンも

届きやしないほど

遥か先へ進め 身勝手すぎる恋だと

遥か先へ進め 身勝手すぎる恋だと

世界が後ろから指差しても

振り向かず進め必死で

振り向かず進め必死で

君の元へ急ぐよ

道の途中で聞こえたSOS さえ

気づかないふりで

バイバイイエスタデイ ごめんね

バイバイイエスタデイ ごめんね

名残惜しいけど行くよ

いつかの憧れと違う僕でも

ただ1人だけ 君だけ

守るための強さを

何よりも望んでいた この手に今

遥か先へ進め

遥か先へ進め

幼すぎる恋だと

世界が後ろから指差しても

迷わずに進め 進め

2人だけの宇宙へと

ポケットの中で震えたこの手で今

君を連れ出して

未来の僕は知らない

だから視線は止まらない

謎めいた表現技法

意味深な君の気性

アイラブユーさえ

アイラブユーさえ

風に 飛ばされそうな時でも

不器用ながら繋いだ この手はもう

決して離さずに

虹の先へ