AIDE,sudo,TCP_Wrappers,PAM认证等系统安全访问机制
AIDE
高级入侵检测环境:是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了。
AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号。
配置文件:/etc/aide.conf
# These are the default rules.
#p: permissions
#i: inode:
#n: number of links
#u: user
#g: group
#s: size
#b: block count
#m: mtime
#a: atime
#c: ctime
#S: check for growing size
#acl: Access Control Lists
#selinux SELinux security context
#xattrs: Extended file attributes
#md5: md5 checksum
#sha1: sha1 checksum
#sha256: sha256 checksum
#sha512: sha512 checksum
#rmd160: rmd160 checksum
#tiger: tiger checksum
#haval: haval checksum (MHASH only)
#gost: gost checksum (MHASH only)
#crc32: crc32 checksum (MHASH only)
#whirlpool: whirlpool checksum (MHASH only)
#R: p+i+n+u+g+s+m+c+acl+selinux+xattrs+md5
#L: p+i+n+u+g+acl+selinux+xattrs
#E: Empty group
#>: Growing logfile p+u+g+i+n+S+acl+selinux+xattrs
1、安装
# yum install aide
2、配置需要监控的文件夹
[root@centos6 ~]# vim /etc/aide.conf
/data/* R
3、生成数据库并改名为现在使用的文件名
[root@centos6 ~]# cd /var/lib/aide/
[root@centos6 aide]# aide --init
AIDE, version 0.14
### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
[root@centos6 aide]# ls
aide.db.new.gz
[root@centos6 aide]# mv aide.db.new.gz aide.db.gz
4、检查文件完整性,建议将aide数据库存放到安全的地方
# aide --check
5、更新数据库
# aide --update
sudo
能够授权指定用户在指定主机上代表指定用户执行某些指令。
sudo命令
- -V 详细信息
- -u username 代表的用户
- -l 列出用户在主机上可用的命令
- -v 刷新密码时间戳
- -K 删除密码有效期时间戳
- -k 重置时间戳到1970年
- -b 在后台执行指令
- -p 改变询问密码的提示符
- %p 表示用户名
- %h 表示主机名
- -i -u username 切换身份
visudo:编辑/etc/sudoers
-v:检查语法合格性
-f file:编辑文件
配置文件:/etc/sudoers, /etc/sudoers.d/*,支持使用通配符
授权格式:用户 主机=(代表用户) 命令
用户和代表用户:
- username
- #uid
- %group_name
- %#gid
- user_alias|runas_alias
主机:
- ip或hostname
- network(/netmask)
- host_alias
命令:
- command name
- directory
- sudoedit
- Cmnd_Alias
root ALL=(ALL) ALL #系统默认为root用户开的后门,root用户可以在任意主机上以任意用户的身份执行任意操作
别名:
类型:User_Alias, Runas_Alias, Host_Alias ,Cmnd_Alias
格式:必须以大小的A-Z开头,中间可以是大小的A-Z,数字和下划线
[root@centos6 sudoers.d]# visudo -f netadmin
User_Alias NETADMIN = user1,user2,user3
Cmnd_Alias NETCMD = /sbin/ip,/sbin/route,/sbin/ifconfig,/bin/netstat,/usr/sbin/ss
Host_Alias HOST = 192.168.0.6
Runas_Alias OP = root NETADMIN HOST=(OP) NETCMD
日志文件:/var/log/secure
*注意
user4 ALL=(root) /bin/cat /var/log/messages*
这样授权是错误的,以下命令也可以执行
# /bin/cat /var/log/messages /etc/shadow
所以我们如果想实现这样的需求就需要按照以下这样的写法:
dongfei ALL=(root) /bin/cat /var/log/messages*,!/bin/cat /var/log/messages* *
[dongfei@centos6 ~]$ sudo cat /var/log/messages /etc/shadow
Sorry, user dongfei is not allowed to execute '/bin/cat /var/log/messages /etc/shadow' as root on centos6.
TCP_Wrappers
作者:Wieste Venema
简介:工作在第四层(传输层)的TCP协议,对有状态连接的特定服务进行安全检测并实现访问控制;某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译。
检查sshd服务是否能够被TCP_Wrappers控制
[dongfei@centos6 ~]$ which sshd
/usr/sbin/sshd
[dongfei@centos6 ~]$ ldd /usr/sbin/sshd |grep libwrap.so
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f61ba6aa000) #sshd服务依赖libwrap.so库,可以被控制
配置文件:/etc/hosts.allow(白名单), /etc/hosts.deny(黑名单)
规则:先检查白名单,如果被白名单匹配则允许访问;如果白名单没有匹配到则交给黑名单匹配,如果匹配则拒绝;如果都没有匹配到则使用默认策略(默认允许)。
配置语法:服务列表@主机IP:客户端地址列表 [:选项]
服务列表@主机IP:
- 单个应用程序的二进制文件名,而非服务名,例如vsftpd
- 以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd
- ALL表示所有接受tcp_wrapper控制的服务程序
- 主机有多个IP,可用@hostIP来实现控制
客户端列表:
- 以逗号或空格分隔的客户端列表
- 基于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
- ALL 表示所有主机
- LOACAL 表示本地网络,匹配任何主机名中不带"."的主机
- UNKNOWN 不能将主机名解析为IP
- KNOWN 能将主机名解析为IP
- EXCEPT 排除
选项:
- deny 拒绝
- spawn 触发一个操作
- twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端,默认至/dev/null
tcpdmatch:在本地测试
tcpdmatch [-d] daemon[@host] client
-d 测试当前目录下的hosts.allow和hosts.deny
[root@centos6 data]# cat hosts.allow
[root@centos6 data]# cat hosts.deny
sshd:192.168.0.7
[root@centos6 data]# tcpdmatch -d sshd 192.168.0.7 #如果客户端是192.168.0.7是否可以访问本机的sshd服务
client: address 192.168.0.7
server: process sshd
access: denied(拒绝)
[root@centos6 data]# tcpdmatch -d sshd 192.168.0.8
client: address 192.168.0.8
server: process sshd
access: granted
PAM
它提供了对所有服务进行认证的中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp,点对点协议(PPP)),su等应用程序中。系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块(主要是引出一些函数pam_sm_xxxx( )供PAM接口库调用),将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来。
模块文件目录:/lib64/security/*.so
环境相关的设置:/etc/security/
主配置文件:/etc/pam.conf,默认不存在
为每种应用模块提供一个专用的配置文件:/etc/pam.d/*
PAM认证过程:
- 使用者执行/usr/bin/passwd 程序,并输入密码
- passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
- 经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
- 将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
专用配置文件/etc/pam.d/*格式
module-type control module-path arguments
- 模块类型(module-type):检查功能类别
- Auth 账号的认证和授权
- Account 与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,当前有效的系统资源(最多可以有多少个用户),限制用户的位置(例如:root用户只能从控制台登录)
- Password 用户修改密码时密码复杂度检查机制等功能
- Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作,如:记录打开/关闭数据的信息,监视目录等
- -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用
- control PAM库该如何处理与该服务相关的PAM模块的成功或失败情况 (简单机制)
- required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕再将失败结果返回给应用程序。即为必要条件
- requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
- sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件
- optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
- include: 调用其他的配置文件中定义的配置信息
- module-path 用来指明本模块对应的程序文件的路径名
- /lib64/security目录下的模块可使用相对路径,直接指定模块;如果是在其他位置需要给定绝对路径
- Arguments 用来传递给该模块的参数
pam_shells模块
检查用户的shell是否安全,如果在/etc/shells文件中的shell为安全shell
[root@centos7 pam.d]# vim sshd
auth required pam_shells.so #要求用户必须使用安全的shell登录,即用户的shell在/etc/sheels文件中
pam_securetty.so模块
只允许root用户在/etc/securetty列出的安全终端上登陆。
pam_nologin.so模块
1、如果/etc/nologin文件存在,将导致非root用户不能登陆;
2、如果用户shell是/sbin/nologin 时,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆。
pam_limits.so模块
此模块通过读取配置文件完成用户对系统资源(可打开的文件数量,可运行的进程数量,可用内存空间)的使用控制。
ulimit命令
- -n 最多的打开的文件描述符个数
- -u 最大用户进程数
- -S 使用 soft(软)资源限制
- -H 使用 hard(硬)资源限制
配置文件:(/etc/security/limits.conf,/etc/security/limits.d/*)
格式:对象 类型 资源 值
对象
- Username 单个用户
- @group 组内所有用户
- * 表示所有用户
类型
- Soft 软限制,普通用户自己可以修改
- Hard 硬限制,由root用户设定,且通过kernel强制生效
资源
- nofile 所能够同时打开的最大文件数量,默认为1024
- nproc 所能够同时运行的进程的最大数量,默认为1024
个人学习笔记 2018-05-24 09:40:14
AIDE,sudo,TCP_Wrappers,PAM认证等系统安全访问机制的更多相关文章
- centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享
FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP.这样FTP客户端和服务器建立 ...
- PAM认证
PAM认证 摘自: http://www.cnblogs.com/shenxm/p/8451889.html PAM(Pluggable Authentication Modules) Sun公司于1 ...
- PAM认证机制
PAM:Pluggable Authentication Modules 认证库:文本文件,MySQL,NIS,LDAP等 Sun公司于1995 年开发的一种与认证相关的通用框架机制 PAM 是关注如 ...
- 什么是PAM认证
PAM(Pluggable Authentication Modules )是由 Sun 提出的一种用于实现应用程序的认证机制.其核心是一套共享库,目的是提供一个框架和一套编程接口,将认证工作由程序员 ...
- Vsftpd: 基于PAM认证的虚拟用户和匿名用户
目录 环境说明效果说明及截图①. 安装组件②. 系统账户建立③. 编辑vsftpd的配置文件④. 生成虚拟用户的数据库文件⑤. 生成一个使用vsftpd_login.db数据文件的PAM认证文件⑥. ...
- PAM认证机制详情
PAM(Pluggable Authentication Modules)认证机制详情 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.介绍PAM PAM(Plugga ...
- (3)MEF插件系统中通信机制的设计和实现
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 一般的WinForm中通过C#自带的Event机制便能很好的实 ...
- Mac系统Finder访问资源库文件夹
Mac在Lion版本之后,默认隐藏了“资源库”文件夹,如果有时我们又需要访问它,该怎么办呢? 方法一 打开“Finder”,打开“前往”菜单时按住“Option”键. 方法二 我们也可设置Finder ...
- Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了A ...
随机推荐
- C++ 播放音频流(PCM裸流)
直接上代码,如果有需要可以直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用了(注意将声道和频率与你自己的文件对应哦).当然我自己也用VS2008(VS2013好用太多,强烈推荐还是用V ...
- uoj problem 14 DZY Loves Graph
题目: DZY开始有 \(n\) 个点,现在他对这 \(n\) 个点进行了 \(m\) 次操作,对于第 \(i\) 个操作(从 \(1\) 开始编号)有可能的三种情况: Add a b: 表示在 \( ...
- BestCoder Round #92 比赛记录
上午考完试后看到了晚上的BestCoder比赛,全机房都来参加 感觉压力好大啊QAQ,要被虐了. 7:00 比赛开始了,迅速点进了T1 大呼这好水啊!告诉了同桌怎么看中文题面 然后就开始码码码,4分1 ...
- 【C++ Primer 5th】Chapter 1
1. 每个C++都包含至少一个函数,其中一个必须为main函数,且 main 函数的返回类型必须为 int. 2. 函数定义包括:返回类型,函数名,形参列表,函数体 3. main 函数返回值用来指示 ...
- 【转】 Pro Android学习笔记(六九):HTTP服务(3):HTTP POST MultiPart
目录(?)[-] 建立测试环境 开发环境导入第三方JAR HTTP Post Multipart小例子 HTTP POST不仅可以通过键值对传递参数,还可以携带更为复杂的参数,例如文件.HTTP Po ...
- swift-get-nodes简单使用
在参考http://blog.csdn.net/cywosp/article/details/12850645文章对对象的具体物理磁盘位置进行查找时,发现两个问题: 1. 在使用swift+keyst ...
- 二 Flask快速入门
1: 外部可访问的服务器: 如果你运行了这个服务器,你会发现它只能从你自己的计算机上访问,网络中其它任何的地方都不能访问.在调试模式下,用户可以在你的计算机上执行任意 Python 代码.因此,这个行 ...
- UML核心元素--参与者
定义:参与者是在系统之外与系统交互的某人或某事物.参与者在建模过程中处于核心地位. 1.系统之外:系统之外的定义说明在参与者和系统之间存在明确的边界,参与者只能存在于边界之外,边界之内的所有人和事务都 ...
- Break 、Continue 和ReadOnly、Const和Ref和Out params
Break和Continue区别 之前对于Break和Continue:ReadOnly和Const:ref和out,params之类的基础东东学习过,但是一直没有仔细去研究到底是怎么一回事儿,最近在 ...
- HTML5小知识
1.HTML5一种“妥协的”语法 2.特点: 标签不区分大小写 元素可以省略结束标签 元素属性可以省略属性值 属性的属性值可以不适用引号