【sudo】sudo: PAM authentication error: Module is unknown
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【sudo】sudo: PAM authentication error: Module is unknown相关的知识,希望对你有一定的参考价值。
参考技术A 是否使用PAM认证模块禁止wheel组之外用户su为root这表明只有wheel组的成员可以使用su命令成为root用户。
可以把用户添加到wheel组,以使它可以使用su命令成为root用户。
添加方法为:
解决方法:
sudo 命令的两个错误解决
https://blog.csdn.net/wojiuwangla/article/details/119112521
无法添加用户,报“useradd: cannot open /etc/passwd”问题解决过程记录 https://www.shuzhiduo.com/A/o75Nk3gXdW/
CentOS 7.7 - sudo: PAM account management error: Permission denied
https://unix.stackexchange.com/questions/609748/centos-7-7-sudo-pam-account-management-error-permission-denied
su ,sudo,TCP_Wrappers的相关命令用法及PAM认证机构
su,sudo,TCP_Wrappers的相关命令用法及PAM认证机构
su 切换身份:su –l username –c ‘command‘
sudo
来自sudo包
man 5 sudoers
sudo能够授权指定用户在指定主机上运行某些命令。如果
未授权用户尝试使用 sudo,会提示联系管理员
sudo可以提供日志,记录每个用户使用sudo操作
sudo为系统管理员提供配置文件,允许系统管理员集中地
管理用户的使用权限和使用的主机
sudo使用时间戳文件来完成类似“检票”的系统,默认存
活期为5分钟的“入场券”
通过visudo命令编辑配置文件,具有语法检查功能
visudo –c 检查语法
sudo
配置文件:/etc/sudoers, /etc/sudoers.d/
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob:
?:任意单一字符
* :匹配任意长度字符
[wxc]:匹配其中一个字符
[!wxc]:除了这三个字符的其它字符
\x : 转义
[[alpha]] :字母 示例: /bin/ls [[alpha]]*
配置文件规则有两类;
1、别名定义:不是必须的
2、授权规则:必须的
sudoers
授权规则格式:
用户 登入主机=(代表用户) 命令
示例:
root ALL=(ALL) ALL
格式说明:
user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身份
command: 运行哪些命令
别名
Users和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]_)*
别名定义:
Alias_Type NAME1 = item1, item2, item3 : NAME2 =
item4, item5
示例1:
Student ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
示例2:
student ALL=(root) /sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL
sudo示例
示例3
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL=(root) NETCMD
示例4
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
SYSADER SERS= SYDCMD,DSKCMD
DISKADER ALL=(OP) DSKCMD
sudo示例
示例4
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,
/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*,
!/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,
PASSWD:/usr/sbin/userdel
示例5
Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL
示例6
wang 192.168.175.136,192.168.175.138=(root)
/usr/sbin/,!/usr/sbin/useradd
示例7
wang ALL=(ALL) /bin/cat /var/log/messages*
sudo命令
ls -l /usr/bin/sudo
sudo –i –u wang 切换身份
sudo [-u user] COMMAND
-V 显示版本信息等配置信息
-u user 默认为root
-l,ll 列出用户在主机上可用的和被禁止的命令
-v 再延长密码有效期限5分钟,更新时间戳
-k 清除时间戳(1970-01-01),下次需要重新输密码
-K 与-k类似,还要删除时间戳文件
-b 在后台执行指令
-p 改变询问密码的提示符号
示例:-p ”password on %h for user %p:"
TCP_Wrappers介绍
作者:Wieste Venema,IBM,Google
工作在第四层(传输层)的TCP协议
对有状态连接的特定服务进行安全检测并实现访问控制
以库文件形式实现
某进程是否接受libwrap的控制取决于发起此进程的程序在编
译时是否针对libwrap进行编译的
判断服务程序是否能够由tcp_wrapper进行访问控制的方法:
ldd /PATH/TO/PROGRAM|grep libwrap.so
strings PATH/TO/PROGRAM|grep libwrap.so
TCP_Wrappers的使用
配置文件:/etc/hosts.allow, /etc/hosts.deny
帮助参考:man 5 hosts_access,man 5 hosts_options
检查顺序:hosts.allow,hosts.deny(默认允许)
注意:一旦前面规则匹配,直接生效,将不再继续
基本语法:
[email protected]: client_list [ :options :option… ]
单个应用程序的二进制文件名,而非服务名,例如vsftpd
以逗号或空格分隔的应用程序文件名列表,如
:sshd,vsftpd
ALL表示所有接受tcp_wrapper控制的服务程序
主机有多个IP,可用@hostIP来实现控制
TCP_Wrappers的使用
客户端Client_list格式
以逗号或空格分隔的客户端列表
基于IP地址:192.168.10.1 192.168.1.
基于主机名:www.magedu.com .magedu.com 较少用
基于网络/掩码:192.168.0.0/255.255.255.0
基于net/prefixlen: 192.168.1.0/24(CentOS7)
基于网络组(NIS 域):@mynetwork
内置ACL:ALL,LOCAL,KNOWN,UNKNOWN,
PARANOID
EXCEPT用法:
示例:vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT
172.16.100.1
示例
示例:只允许192.168.1.0/24的主机访问sshd
/etc/hosts.allow
sshd: 192.168.1.
/etc/hosts.deny
sshd :ALL
示例:只允许192.168.1.0/24的主机访问telnet和vsftpd服务
/etc/hosts.allow
vsftpd,in.telnetd: 192.168.1.
/etc/host.deny
vsftpd,in.telnetd: ALL
TCP_Wrappers的使用
[:options]选项:
帮助:man 5 hosts_options
deny 主要用在/etc/hosts.allow定义“拒绝”规则
如:vsftpd: 172.16. :deny
allow 主要用在/etc/hosts.deny定义“允许”规则
如:vsftpd:172.16. :allow
spawn 启动一个外部程序完成执行的操作
twist 实际动作是拒绝访问,使用指定的操作替换当前服
务,标准I/O和ERROR发送到客户端,默认至/dev/null
测试工具:
tcpdmatch [-d] daemon[@host] client
-d 测试当前目录下的hosts.allow和hosts.deny
示例
sshd: ALL :spawn echo "$(date) login attempt from
%c to %s,%d" >>/var/log/sshd.log
说明:
在/etc/hosts.allow中添加,允许登录,并记录日志
在/etc/hosts.deny中添加,拒绝登录,并记录日志
%c 客户端信息
%s 服务器端信息
%d 服务名
%p 守护进程的PID
vsftpd: 172.16. :twist /bin/echo “connection
prohibited”
PAM认证机制
PAM:Pluggable Authentication Modules
认证库:文本文件,MySQL,NIS,LDAP等
Sun公司于1995 年开发的一种与认证相关的通用框架机制
PAM 是关注如何为服务验证用户的 API,通过提供一些动
态链接库和一套统一的API,将系统提供的服务和该服务的
认证方式分开
使得系统管理员可以灵活地根据需要给不同的服务配置不
同的认证方式而无需更改服务程序
一种认证框架,自身不做认证
PAM认证机制
它提供了对所有服务进行认证的中央机制,适用于login,远
程登录(telnet,rlogin,fsh,ftp,点对点协议(PPP)),su等
应用程序中。系统管理员通过PAM配置文件来制定不同应用
程序的不同认证策略;应用程序开发者通过在服务程序中使
用PAM API(pam_xxxx( ))来实现对认证方法的调用;而
PAM服务模块的开发者则利用PAM SPI来编写模块(主要是
引出一些函数pam_sm_xxxx( )供PAM接口库调用),将不
同的认证机制加入到系统中;PAM接口库(libpam)则读取
配置文件,将应用程序和相应的PAM服务模块联系起来
PAM认证构架
pam认证原理
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文
件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配
置文件(位于/etc/pam.d下),最后调用认证文件(位于
/lib/security下)进行安全认证
PAM认证机制
PAM认证过程:
1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始呼叫PAM模块,PAM模块会搜寻passwd程序的
PAM相关设定文件,这个设定文件一般是在/etc/pam.d/里
边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passed
这个设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提
供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会
根据PAM回传的结果决定下一个动作(重新输入密码或者通
过验证)
PAM认证机制
PAM相关文件
模块文件目录:/lib64/security/*.so
环境相关的设置:/etc/security/
主配置文件:/etc/pam.conf,默认不存在
为每种应用模块提供一个专用的配置文件:
/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf将失效
PAM认证机制
通用配置文件/etc/pam.conf格式
application type control module-path arguments
专用配置文件/etc/pam.d/* 格式
type control module-path arguments
说明:
服务名(application)
telnet、login、ftp等,服务名字“OTHER”代表所有没
有在该文件中明确配置的其它服务
模块类型(module-type)
control PAM库该如何处理与该服务相关的PAM模块的成
功或失败情况
module-path 用来指明本模块对应的程序文件的路径名
Arguments 用来传递给该模块的参数
PAM认证机制
模块类型(module-type)
Auth 账号的认证和授权
Account 与账号管理相关的非认证类的功能,如:用来限
制/允许用户对某个服务的访问时间,当前有效的系统资源
(最多可以有多少个用户),限制用户的位置(例如:root用
户只能从控制台登录)
Password 用户修改密码时密码复杂度检查机制等功能
Session 用户获取到服务之前或使用服务完成之后需要进
行一些附加的操作,如:记录打开/关闭数据的信息,监视
目录等
-type 表示因为缺失而不能加载的模块将不记录到系统日
志,对于那些不总是安装在系统上的模块有用
Control:
PAM库如何处理与该服务相关的PAM模块成功或失败情况
两种方式实现:
简单和复杂
简单方式实现:一个关健词实现
required :一票否决,表示本模块必须返回成功才能通过
认证,但是如果该模块返回失败,失败结果也不会立即通
知用户,而是要等到同一type中的所有模块全部执行完毕
再将失败结果返回给应用程序。即为必要条件
PAM认证机制
requisite :一票否决,该模块必须返回成功才能通过认证,
但是一旦该模块返回失败,将不再执行同一type内的任何模
块,而是直接将控制权返回给应用程序。是一个必要条件
sufficient :一票通过,表明本模块返回成功则通过身份认
证的要求,不必再执行同一type内的其它模块,但如果本模
块返回失败可忽略,即为充分条件
optional :表明本模块是可选的,它的成功与否不会对身份
认证起关键作用,其返回值一般被忽略
include: 调用其他的配置文件中定义的配置信息
复杂详细实现:使用一个或多个“status=action”
[status1=action1 status2=action …]
Status:检查结果的返回状态
Action:采取行为 ok,done,die,bad,ignore,reset
ok 模块通过,继续检查
done 模块通过,返回最后结果给应用
bad 结果失败,继续检查
die 结果失败,返回失败结果给应用
ignore 结果忽略,不影响最后结果
reset 忽略已经得到的结果
PAM认证机制
module-path: 模块路径
相对路径:
/lib64/security目录下的模块可使用相对路径
如:pam_shells.so、pam_limits.so
绝对路径:
模块通过读取配置文件完成用户对系统资源的使用控制
/etc/security/*.conf
注意:修改PAM配置文件将马上生效
建议:编辑pam规则时,保持至少打开一个root会话,以防止
root身份验证错误
Arguments 用来传递给该模块的参数
user/share/doc/pam-*
rpm -qd pam
man –k pam_
man 模块名 如man rootok
《The Linux-PAM System Administrators‘ Guide》
PAM模块示例
模块: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
模块:pam_securetty.so
功能:只允许root用户在/etc/securetty列出的安全终端上
登陆
示例:允许root在telnet登陆
vi /etc/pam.d/login
#auth required pam_securetty.so #将这一行加上注释
或者/etc/securetty文件中加入
pts/0,pts/1…pts/n
模块:pam_nologin.so
功能:如果/etc/nologin文件存在,将导致非root用户不能登陆
,如果用户shell是/sbin/nologin 时,当该用户登陆时,会显
示/etc/nologin.txt文件内容,并拒绝登陆
块:pam_limits.so
功能:在用户级别实现对其可使用的资源的限制,例如:可
打开的文件数量,可运行的进程数量,可用内存空间
修改限制的实现方式:
(1) ulimit命令,立即生效,但无法保存
-n 最多的打开的文件描述符个数
-u 最大用户进程数
-S 使用 `soft‘(软)资源限制
-H 使用 `hard‘(硬)资源限制
(2) 配置文件:/etc/security/limits.conf,
/etc/security/limits.d/*.conf
配置文件:每行一个定义;
<domain> <type> <item> <value>
Username 单个用户
@group 组内所有用户
* 所有用户
<type> 限制的类型
Soft 软限制,普通用户自己可以修改
Hard 硬限制,由root用户设定,且通过kernel强制生效
- 二者同时限定
<item> 限制的资源
nofile 所能够同时打开的最大文件数量,默认为1024
nproc 所能够同时运行的进程的最大数量,默认为1024
<value> 指定具体值
示例:pam_limits.so
限制用户最多打开的文件数和运行进程数
/etc/pam.d/system-auth
session required pam_limits.so
vim /etc/security/limits.conf
apache – nofile 10240 apache用户可打开10240个文件
student hard nproc 20 不能运行超过20个进程
以上是关于【sudo】sudo: PAM authentication error: Module is unknown的主要内容,如果未能解决你的问题,请参考以下文章
pam_unix(sudo:auth):对话失败,auth 无法识别 [username] 的密码
Linux——系统安全及应用(账号安全su命令PAM认证sudo命令)