sudo
sudo简介
-
说明
sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如mount、reboot、shutdown、init、halt、user等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。 备注:Ubuntu安装系统,默认禁用root账号而第一个普通用户就配置好sudo权限,centos默认启用root账号,因此普通用户需自行配置sudo权限
文件相关配置
-
sudo配置文件
/etc/sudoers
-
通配符
? 任意单一字符 * 匹配任意长度字符 [wxc] 匹配其中一个字符 [!wxc] 除了这三个字符的其它字符 \x 转义 [[alpha]] 字母
-
格式
-
格式定义
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:用户命令授权,配置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:别名授权,配置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/
模块使用案例
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 模块
-
简介
功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用 内存空间
-
查看哪些程序使用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服务
-