首页 > 其他分享 >SUDO,PAM配置规范说明

SUDO,PAM配置规范说明

时间:2022-10-30 18:01:02浏览次数:62  
标签:SUDO 规范 PAM etc 模块 root pam size

sudo

sudo简介

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

文件相关配置

  1. sudo配置文件
/etc/sudoers
  1. 通配符
? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义
[[alpha]] 字母
  1. 格式
  • 格式定义
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
  1. 案例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框架结构如图所示
  • 官网地址
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下)进行安全认证。
  • 认证原理图如下图所示:
  • 认证过程讲解
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/

SUDO,PAM配置规范说明_应用程序

SUDO,PAM配置规范说明_应用程序_02

SUDO,PAM配置规范说明_linux_03

模块使用案例

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 [email protected]


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 [email protected]


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 模块

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

SUDO,PAM配置规范说明_应用程序_04

  • 查看哪些程序使用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服务



标签:SUDO,规范,PAM,etc,模块,root,pam,size
From: https://blog.51cto.com/u_8758878/5807593

相关文章

  • 找到多个名为spring_web的片段。这是不合法的相对排序。有关详细信息,请参阅Servlet规
    问题描述:解决办法:1:检查pom.xml中是否包含多个spring-web字段;2:删除掉多余的spring-web.jar,保留一个即可;......
  • 第一节 教师职业道德规范
    1.★教师劳动的特殊性:(1)教师劳动的目的和任务的特殊性。(把青少年培养成德智体美劳全面发展)(2)教师劳动对象的特殊性。(活生生的人)(3)教师劳动工具的特殊性。(工具还包括教师特......
  • idea中新建文件,文字改变,Java编码规范,CMD中的注意事项
    Java程序运行机制:1.编译制——C,C++解释制——网页-——Java先编译再解释新建文件src——右键第一个——第一个——name:HelloHello代码:publicclassHello{publ......
  • linux 主机名命名规范
    主要规则如下:主机名只允许包含ascii字符里的数字0-9,字母a-zA-Z,连字符-和.。其他都不允许。例如,不允许出现其他标点符号,不允许空格,不允许下划线,不允许中文字符。主机名的......
  • SUDO,PAM配置规范说明
    sudosudo简介说明sudo即superuserdo,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如mount、reboot、shutdown、init、halt、user等等。这样不仅减......
  • Pycharm 如何自动调整 Python 代码符合 pep8 编码规范
    前言学生时代,写的一手漂亮的好字,能给人留下好的印象。作为IT人,写的一手漂亮的代码也会给人留下美好的印象。代码就是自己的脸面,不管写质量怎样,首先要写的漂亮。Python......
  • 袋鼠云平台代码规范化编译部署的提效性改进实践
    一、前言作为全链路数字化技术与服务提供商,袋鼠云提供了从数据湖、大数据基础平台、离线开发、实时开发、数据服务、数据治理、指标管理、客户数据洞察、数据孪生可视化等......
  • Redis开发规范与性能优化
    目录一、键值设计二、命令使用三、客户端使用四、系统内核参数优化一、键值设计1.key名设计【建议】可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号......
  • es6代码规范
    1、关于取值取值在程序中非常常见,比如从对象obj中取值。constobj={a:1,b:2,c:3,d:4,e:5,}吐槽写法:consta=obj.a;constb=obj.b......
  • Vue学习笔记之Vue文件书写规范
    0x00概述本文转载,原文 0x01template模块1.1<template> 标签上不要写多余的属性(默认就是以html来解析)<!--Notrecommended--><templatelang="html"></temp......