Linux运维 第三阶段 (十三)nss&pam

本文涉及的产品
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

一、nssnetwork service switch网络服务转换)

 

authentication(认证,决定用户的用户名和密码是否能通过检验)

authorization(授权,决定用户是否能访问某服务)

audition(审计)

 

username-->UID

groupname-->GID

http-->80port

FQDN-->IPhosts文件,DNSmysqlNIS(networkinformation service)LDAP

命令route,iptables,netstat,这些命令如果不加-n选项,则会解析主机名及端口

应用程序app内置login程序,如果将认证的所有机制都内置到app里,那么只认证这一个功能将会使得app程序变得非常臃肿,维护不便,为简化引入中间层(独立出来作为框架),如:app-->nsswitch-->resolv_lib

 

#vim /etc/nsswitch.conf(可以为众多的名称解析机制提供名称解析库,到不同的仓库中查找,就需要不同的库文件支持)

passwd: files

shadow: files

hosts: files  dns

netgroup: nisplus

#services:  nisplus [NOTFOUND=return] filesNOTFOUND若换为UNAVAIL,则是服务不可用,才到files中查找,nis服务在就是nis说了算;其中,SUCCESS(表示serviceok,found name)NOTFOUND(表示service ok,name not found)UNAVAIL(表示service notavailable)TRYAGAIN(表示temporary service failure)

#ls /usr/lib  |  grep libnss(这些库文件才真正实现解析过程)

libnss_db.so

libnss_dns.so

libnss_files.so

libnss_ldap.so

libnss_nisplus.so

注:linux系统中mingetty仅提供虚拟终端,login程序提供输入账号密码的界面

#vim /etc/nssswitch.conf(在小系统中添加下列三行,再复制相应库文件/usr/lib/libnss.files.so即可完成名称解析)

passwd:    files

shadow:    files

group:     files

#man getentget entries from administrative database

#getent passwd

#getent shadow

#getent  hosts

#getent passwd  root(仅获取某一特定条目)

 

 

二、pampluggable authentication module可插入认证模块)

 

名称解析和认证(两套各自独立运行的机制,在某些应用中有关系,如linux登录认证借助于名称解析服务,很多的程序在认证时并不借助于名称解析服务)

名称解析(只告知到哪找)

认证(将输入的密码转为md5特征码,和文件中事先保存的比较,查验是否一致,这个过程是认证)

 

root-->nsswitch.conf-->passwd:  files

‘123456’-->nssswitch.conf-->shadow:  files

auth:123456-->md5(salt)-->compare(认证本身也可不借助名称解析服务,仅linux(login)登录认证借助;authentication认证有多种机制,某次认证仅使用一种(md5,mysql,ldap,nis,kerberos))

app-->PAM-->authenticationPAM认证框架,引入中间层思想)

 

#ls /lib/security/*

pam_unix.so(比对文件,files

pam_ldap.so

pam_krb5.so

pam_winbind.so(在winAD域中找,activedirectory

pam_mysql.so(得手动安装)

 

#ls /etc/pam.d/*(定义支持几种认证机制,前一种机制通过后是否再继续第二种机制)

login

passwd

system-auth-ac

 

功能(以下四种并非每项都要有,在多数服务为保险起见,至少提供前两种authaccount):

auth(用户输入的账号密码是否匹配,认证过程只看auth开头的行)

account(审核用户账号是否仍然有效,是否过期或被锁定#passwd  -l  USERNAME

password(当用户修改密码时,查验用户改密码的动作是否被允许,并与规则比较是否符合密码复杂性要求)

session(定义真正工作过程的相关属性,如仅允许使用20分钟)

 

#vim /etc/pam.conf(此文件redhat中没有,这是总配置文件,可将/etc/pam.d/*目录下的所有文件内容整理到此文件中,格式如下)

service type  control  module-path module-arguments

#vim /etc/pam.d/login/etc/pam.d/SERVICE,文件名通常与服务名相同,且必须要小写,格式如下)

type control  module-path  module-arguments

 

crontrol(控制同一类型有多个时,每行之间如何建立关系,有如下几种):

required(必要条件,无论它通过还是不通过,若后面同组中还有其它条目继续检查,它通过了起不到决定作用)

requisite(必要条件,有一票否决权,若不通过则不过,若通过后面同组中有则继续检查)

sufficient(充分条件,它只参与投赞成票,通过则直接返回应用程序,不过继续检查)

optional(可选的,有无均可,ignore

include(将权力给其它文件,由其它文件决定,例如/etc/pam.d/login文件中有一行auth  include system-auth表示将system-auth文件中auth开头的行包含进来)

 

module-path(默认到/lib[64]/下找,也可写绝对路径)

 

module-arguments(定义模块工作的不同方式,如nullok,shadow,md5

 

#vim /etc/pam.d/system-auth-ac(此文件的软链接为/etc/pam.d/system-auth

auth       required      pam_env.so

auth       sufficient    pam_unix.so nulloktry_first_pass

auth       requisite     pam_succeed_if.souid >= 500 quiet

auth       required      pam_deny.so

注:12若过,则直接通过;134若过,则最终通过

 

#vim /etc/pam.d/other(此文件定义默认规则,先使用与服务名相同的文件中定义的规则,若最后没有匹配的,将使用此文件)

 

 

模块/lib/security

1pam_unix.sotraditionalpassword authenticationpam出现之前,login的认证是通过glibc的标准库实现的,pam_unix.so只是将此功能抽离出来放在pam中实现了而已)

nullok(如果空也ok

shadow(读写都以shadow方式)

md5(默认加密方式)

try_first_pass(之前输过密码,现在又要认证,则尝试使用之前输过的密码)

use_first_pass(之前输过密码,现在又要谁,直接使用之前输的密码)

2pam_permit.so(允许访问)

3pam_deny.so(拒绝访问,通常用于/etc/pam.d/other中)

4pam_cracklib.so(互联网以破坏为目的攻击别人称骇客crack;通过字典和规则(大小写字母,数字,其它字符)检查密码)

minlen=N(最短长度)

difok=N(密码与此前是否相同)

dcredit=N(至少要包含几个数字digit

ucredit=N(包含几个大写字母upper case

lcredit=N(包含几个不写字母lower case

ocredit=N(包含几个其它字符othercharacters

retry=N(最多尝试多少次)

例:

password   requisite     pam_cracklib.so  try_first_pass  retry=3

password   sufficient    pam_unix.so md5shadow nullok try_first_pass use_authtokuse_authok表示使用上一行检查并通过的密码,若未通过这行就不设置)

5pam_shells.so(限制用户登录时使用/etc/shells中的安全shell,其它shell不允许)

6pam_securetty.so(限制管理员登录到特殊的设备;/etc/securetty此文件中有root用户登录时能使用的tty,除此之外其它任何终端都登录不了,若将此文件中的tty2删除,则通过tty2就登录不上系统)

例:auth [user_unknown=ignore success=ok ignore=ignore default=bad]pam_securetty.so

auth      include      system-auth

7pam_listfile.so(到某个文件中验证用户账号是否合法,可独立定义一个文件限制哪一类用户能登录,哪一类用户不能登录,此模块应用于vsftpd服务中ftpusers文件中的用户)

item=[tty|user|rhost|ruser|group|shell](根据什么检查)

sense=[allow|deny](出现在文件中的用户是允许还是拒绝)

file=/path/filename

onerr=[succeed|fail](一旦出现故障,如文件不存在或逻辑错误,是succeed还是fail

例:auth required  pam_listfile.soitem=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed

 

举例:仅在规定组中的用户才能登陆系统

#cp /etc/pam.d/system-auth-ac /etc/pam.d/system-auth-ac.bak

#vim /etc/pam.d/system-auth-ac(在auth中插入一行,如下)

auth   required  pam_env.so(设置用户环境变量)

auth   required pam_listfile.so  item=group  sense=allow  file=/etc/pam_allowgroups

#vim /etc/pam_allowgroups

root

allowgrp

#groupadd allowgrp

#usermod -a  -G  allowgrp fedora(将允许的登录系统的用户加入到这个组中)

在不同终端测试

注:fedoraubuntu系统是不能使用root直接登录系统的,要想使用root直接登录,只需找到对应的pam文件将auth一行注释即可

 

8pam_rootok.so(管理员切到其它用户直接通过)

例:#vim  /etc/pam.d/su

auth           sufficient      pam_rootok.so

auth            include         system-auth

 

9pam_limits.so(在一次用户会话里,能被使用的资源限定,root也受此限定)

#vim /etc/security/limits.conf(此模块的配置文件,格式如下)

<domain>  <type> <item>  <value>

domain(表示对谁生效,USER@GROUP_NAME*

typesoft limits or hardlimits

item(对哪一种资源限制,nofile(maxnumber of open files)所能打开的最多文件个数,nproc(max number of processes)用户所能运行的最多进程个数,rss所能使用的最大实际内存集,as线性地址空间限制,cpu最大CPU时间单位MIN

value(值的上限)

例如:

*               soft    core            0

@student        -      maxlogins       4

注:普通用户只能调自己的软限制,命令#ulimit

#ulimit -n  [LIMIT](对nofile限制,Themaximum number of open file descriptors  (most systems do notallow this value to be set)

#ulimit -u  [LIMIT](对nproc限制,Themaximum number of processes available to a single user

#ulimit -aAll current limits are reported

core file size          (blocks, -c) 0

scheduling priority             (-e) 0

pending signals                 (-i) 4096

max locked memory       (kbytes, -l) 64

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

max user processes              (-u) 4096

 

10pam_env.soset/unsetenvironment variables,根据/etc/security/pam_env.conf为用户设置环境变量)

 

11pam_wheel.soonly permitroot access to members of group wheel,限定哪些用户可以suroot,为加强系统安全可以启用此项)

#cat /etc/group  |  grep wheelFreeBSD系统一般都定义了仅允许wheel组中的用户可以suroot

 

12pam_succeed_if.sotest accountcharacteristics,可限制>500的账号登录,而<500>0的账号不能登录)

 

13pam_time.sotimecontroled access

 

 

举例:在fedora系统中设置允许root登录

$su -  root

#vim /etc/pam.d/gdm(注释一行,如下)

#auth required  pam_succeed_if.so  user!=root quiet

#vim /etc/pam.d/gdm-password(注释一行,如下)

#auth required  pam_succeed_if.so  user!=root quiet

 

 

附图:

wKiom1Y7CJKSfFZkAAEW4elKgyM995.jpg

相关文档参考:PAM-SAGPAM-ADGPAM-MWGsystem administrator guide,application developers guide,modulewriters guide



本文转自 chaijowin 51CTO博客,原文链接:http://blog.51cto.com/jowin/1710047,如需转载请自行联系原作者

相关文章
|
29天前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
116 3
|
1月前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
2月前
|
运维 监控 网络协议
|
1月前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
52 3
|
2月前
|
存储 运维 搜索推荐
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
66 1
|
2月前
|
运维 网络协议 安全
Linux安全运维--一篇文章全部搞懂iptables
Linux安全运维--一篇文章全部搞懂iptables
53 1
|
3月前
|
运维 监控 Linux
深入理解Linux系统运维:命令行工具的力量
【9月更文挑战第14天】在Linux的世界里,命令行工具是系统管理员的瑞士军刀。本文将带你领略命令行的魅力,从基础操作到高级技巧,让你的运维工作更加高效和精准。准备好了吗?让我们一起开启这段探索之旅!
|
2月前
|
Web App开发 运维 安全
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
1Panel:一个现代化、开源的 Linux 服务器运维管理面板
106 0
|
4月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
188 3
下一篇
DataWorks