当一个***者进入了你的系统并且种植了×××,通常会想办法来隐蔽这个×××
(除了×××自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),
通常***者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那
么***者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用
ps命令查不到正在运行的×××程序。如果***者发现管理员正在运行crontab
作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或
是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有
两款:Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很
强大的工具
? AIDE(Advanced Intrusion Detection Environment)
? 高级***检测环境)是一个***检测工具,主要用途是检查文件的完整性,审计计算机
上的那些文件被更改过了。
? AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE数据库
能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inode number)、
所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间
(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE还能够使用下列算法:
sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号.
? 这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件
系统、用户起始目录以及临时目录.
AIDE
?安装
yum install aide
?修改配置文件
vim /etc/aide.conf (指定对哪些文件进行检测)
/test/chameleon R
/bin/ps R+a
/usr/bin/crontab R+a
/etc PERMS
!/etc/mtab #“!”表示忽略这个文件的检查
R=p+i+n+u+g+s+m+c+md5 权限+索引节点+链接数+用户+组+大小+
最后一次修改时间+创建时间+md5校验值
NORMAL = R+rmd60+sha256
?初始化默认的AIDE的库:
/usr/local/bin/aide --init
?生成检查数据库(建议初始数据库存放到安全的地方)
cd /var/lib/aide
mv aide.db.new.gz aide.db.gz
?检测:
/usr/local/bin/aide --check
?更新数据库
aide --update
更改身份
?su 切换身份:su –l username –c ‘command’
?sudo
? 来自sudo包,man 5 sudoers
? sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使
用 sudo,会提示联系管理员
? sudo可以提供日志,记录每个用户使用sudo操作
? sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权
限和使用的主机
? sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入
场券”
? 通过visudo命令编辑配置文件,具有语法检查功能
visudo –c 检查语法
visudo -f /etc/sudoers.d/test
?配置文件:/etc/sudoers, /etc/sudoers.d/
?时间戳文件:/var/db/sudo
?日志文件:/var/log/secure
?配置文件支持使用通配符glob:
?:任意单一字符
- :匹配任意长度字符
\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 ,CmndAlias
?别名格式::[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
?示例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
示例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.1.6,192.168.1.8=(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介绍
?工作在第四层(传输层)的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(默认允许)
注意:一旦前面规则匹配,直接生效,将不再继续,留个终端,用于修改。
?基本语法:
?daemon_list@host: client_list [ :options :option… ]br/>?Daemon_list@host格式
?单个应用程序的二进制文件名,而非服务名,例如vsftpdbr/>?以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd
?ALL表示所有接受tcp_wrapper控制的服务程序
?主机有多个IP,可用@hostIP来实现控制
如:in.telnetd@192.168.0.254
?客户端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 激活一个执行命令
in.telnetd: ALL :spawn echo on " ‘date +%%F‘ "telnet login >> /data/telnet.log %在这里不支持,要用两个%,表示。
twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR 发送到客户端,默认至/dev/null
(替代命令)
in.telnetd: ALL:twist echo "forbidden telnet login"
?测试工具:
tcpdmatch [-d] daemon[@host] client
-d 测试当前目录下的hosts.allow和hosts.deny
?sshd: ALL :spawn echo "$(date +%%F) 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认证机制
?认证库:文本文件,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相关文件
?模块文件目录:/lib64/security/*.so
?环境相关的设置:/etc/security/
?主配置文件:/etc/pam.conf,默认不存在
?为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
?注意:如/etc/pam.d存在,/etc/pam.conf将失效
pam认证原理
?PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
?PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于
/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
?PAM认证过程:
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回传的
结果决定下一个动作(重新输入密码或者通过验证)