在平时的工作环境中,网络中不时有搞怪man去搞一些破坏,如修改我们的二进制程序,洪水攻击等等,当我们遇到这些问题我们如何去解决它呢?
当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行crontab作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有两款:Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具。
AIDE(Adevanced Intrusion Detection Environment)高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了。
AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号。
建议:这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件系统、用户起始目录以及临时目录。
[root@centos6~]#yum install -y aide
/etc/aide.conf
The location of the database to be read. aide检查是从下面的文件中读取
database=/var/lib/aide/aide.db.gz
The location of the database to be written.aide更新数据库是写到下面文件中
database_out=/var/lib/aide/aide.db.new.gz
设定选项 | 解释 |
---|---|
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 |
定义检测属性时可以组合定义,相当于alias作用。
选项 | 解释 |
---|---|
-i,–init | 初始化数据库 |
-C,–check | 检查数据库 |
-u,–update | 更新数据库 |
初始化数据库:
[root@centos6~]#aide --init
查看/var/lib/aide/
目录下是否生成数据库
检查数据库时,必须把命令该为aide.db.gz
才能检查数据库。
[root@centos6/var/lib/aide]#mv aide.db.new.gz aide.db.gz
[root@centos6~]#aide -C
更新数据库
[root@centos6~]#aide -u
在生产环境中,一个人的力量总是不够的,我们可以把一些任务分配别的人员协同操作,这样办事效率也提高了。但是我们又不想把所有的权限都分给小伙伴,所以sudo就解决了这样一个问题。sudo能够授权指定用户在指定主机上运行某些命令;如果未授权用户使用sudo尝试登录,会提示管理员。这样方便了我们的管理。
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。<摘自:百度>
(1)提供日志,记录每个用户使用sudo操作
(2)为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。
(3)sudo提供用户一个使用时长,相当于“入场券”,如果超时,重新登录。默认为5分钟(如果想修改,只能自己编译安装时候修改)。
(4)sudo提供专门的修改文件工具visudo,默认是vi界面,如果想使用vim功能,可以自定环境变量“export EDORIT=vim”
。
(5)自己创建文件的权限为440,如果你忘记修改权限,visudo命令可以自动修改完成。
(6)修改配置文件是同时打开一个,不能打开多个。并且配置文件不建议直接去修改。
/etc/sudoers/
和/etc/sudoers.d/*
(1)配置文件支持使用通配符
? | 任意单个字符 |
* | 匹配任意长度 |
[] | 匹配单个字符 |
[!] | 除了的任意字符 |
|支持转义 |
(2)授权规则格式
用户 登入主机=(代表用户) 命令
选项 | 说明 |
---|---|
user | 运行命令着的身份 |
host | 通过哪些主机 |
(runas) | 以哪个用户身份运行 |
command | 运行哪些命令 |
user和runas格式
username
#uid
%group_name
%#group_name
User_Alias
Runas_Alias
host
ip或hostname
network
network/prefix(只有CentOS7支持)
Host_Alias
command
commandName
directory
sudoedit 可以对文件`/etc/sudoers`修改
CMD_Alias
注意:这里的命令一定要与执行的命令精确匹配,否则不成功。别名定义一定要大写字母开头,构成只能有字母和数字。
(3)别名
格式:Alias_Type NAME1 = item1, item2, item3 : NAME2 = item4, item5
注意:不同的别名之间需要使用冒号隔开。%wheel是一个组,权限和root一样,使用时一定要小心。如果在添加NOPASSWD不提供口令直接登录。sudo使用时登录需要认证,但是此时认证时运行者的口令。
时间戳文件/var/db/sudo/
日志文件/var/log/secure
(4)设定默认值defaults
示例:Defaults:laowang runas_default=tom
格式:sudo [-u user] COMMAND
选项 | 解释 |
---|---|
-u | 指定用户,默认root |
-l | 列出用户在主机上可用的和被禁止的命令 |
-v | 再延长有效期5分钟,更新时间戳 |
-k | 清除时间戳(197–01-01),西祠需要重新输入密码 |
-K | 与-k类似,但还要删除时间戳文件 |
-b | 在后台执行 |
-p | 改变询问密码的提示符号 %p代表用户 |
-V | 显示版本信息等配置信息 |
注意:在sudoers文件中,如果定义文件后面添加“*”表示所有,即这个文件后面可以添加任意字符 ,言外之意,就是可以看到别的文件。
Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性。TCP Wrappers 是一种对使用 /etc/inetd.sec 的替换方法。TCP Wrappers 提供防止主机名和主机地址欺骗的保护。欺骗是一种伪装成有效用户或主机以获得对系统进行未经授权的访问的方法。
(1)工作在第四层的TCP协议
(2)对有状态的特定服务进行安全检测并实现访问控制
(3)以库文件形式实现
(4)其进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的。
(1)先使用命令查看执行程序文件是哪个
which COMMAND
(2)使用命令ldd 对上述文件查找
ldd
which COMMAND|grep libwrap
1、配置文件
/etc/hosts.allow
和/etc/hosts.deny
2、检查顺序
在tcp_wrappers中检查顺序并不像前面的服务一样,前面的成功后面的就不再执行。而tcp_wrappers的检查顺序为
/etc/hosts.allow
–>/etc/hosts.deny
前面的规则一旦匹配成功,直接生效,将不再继续后面的执行;如果前面的没有成功,则继续向后执行。
3、基本语法
damon_list@host:client_list [:option:option…]
damon_list格式:
(1)单个应用程序的二进制文件名,而非服务名
(2)以逗号或空格分隔的应用程序文件名列表
(3)ALL 表示所有接受tcp_wrappers控制的服务程序
(4)主机有多个IP ,可用@hostIP来实现
如:[email protected]
client_host格式:
(1)以逗号或空格分隔的客户端列表
(2)基于IP地址
(3)基于主机名
(4)基于网络/掩码 192.168.159.0/255.255.255.0
(5)基于CIDR格式 192.168.159.0/24
(6)基于网络组 @munetwork
(7)内置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID
EXPECT用法
示例:
sshd:192.168.159.0/24 EXPECT 192.168.159.151
[:OPTIONS]选项
(1)deny 主要用在/etc/host.allow文件中,定义“拒绝”规则。
如:vsftpd:192.168.159.159:deny 先定义了这个IP可以访问但是又否定。
(2)allow 主要用在/etc/hosts.deny 定义“允许”规则
如:vsftpd:192.168.159.159:allow 先定义192.168.159.159不允许然后否定允许使用
(3)spawn 启动一个外部进程完成执行的操作
选项:
%c:客户端信息
%s:服务器端信息
%d:服务名
%p:守护进程的PID
注意:如果在配置文件中想使用“%”需要使用两个“%”;如果使用“:”则需要使用“\”进行转义。
示例:
在CentOS6主机上编辑/etc/hosts.allow
文件
[root@localhost~]#vim /etc/hosts.allow
sshd:192.168.4.135:spaw echo "
date%c to %s %d %p " >> /var/log/sshd.log
在CentOS7主机上连接
[root@centos7/var/log]#ssh 192.168.4.131
在CentOS6上查看是否生成sshd.log文件并且有内容
[root@localhost~]#cat /var/log/sshd.log
Thu Sep 14 09:33:18 CST 2017 192.168.4.135 to [email protected] sshd 29705
(4)twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端,默认输出至/dev/null
示例:
在CentOS6上配置/etc/hosts.allow
文件
[root@localhost~]#vim /etc/hosts.allow
vsftpd:192.168.4.135:twist /bin/echo "Do not login"
在CentOS7上连接
[root@centos7~]#ftp 192.168.4.131
Connected to 192.168.4.131 (192.168.4.131).
Do not login
ftp>
测试工具:
tcpdmatch [-d] daemon[@host] client
-d 测试当前目录下的host.allow和hosts.deny文件
[root@localhost~]#tcpdmatch -d /etc/hosts.deny 192.168.4.135
client: address 192.168.4.135
server: process hosts.deny
access: granted
[root@localhost~]#tcpdmatch -d /etc/hosts.allow 192.168.4.135
client: address 192.168.4.135
server: process hosts.allow
access: granted
PAM (Pluggable Authentication Modules)可插入认证模块是一套共享库,使本地系统管理员可以随意选择程序的认证方式.。提供了对所有服务进行认证的中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp,点对点协议(ppp)),su等应用程序中。系统管理员通过PAM配置文件来指定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块,主要调用一些函数,将不同的认证机制加入到系统中;PAM接口库则读取配置文件,将应用和相应PAM服务模块联系起来。
模块存放位置/lib64/security/
环境相关的配置/etc/security/
模块通过读取配置文件完成用户对系统资源的使用控制
主配置文件/etc/pam.conf
默认不存在
文档 /usr/share/doc/pam-*;man -k pam_ 查看所有pam的说明
注意:如果/etc/pam.d/和/etc/pam.conf两个文件同时存在,则只有/etc/pam.d/*下的文件起效。
PAM一般遵循的顺序:server–>PAM(配置文件)–>pam.*so;PAM认证首先要确定哪一项服务,然后加载相应PAM的配置文件(/etc/pam.d),最后调用认证文件(/lib64/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回传的结果决定下一个动作。
|type|control|module-path|argument|
(1)type类型
type | 解释 |
---|---|
Auth | 账号的认证和授权 |
Account | 与账号管理相关的非认证类的功能 |
Password | 用户修改密码复杂度检查机制等功能 |
Session | 用户获取之前或使用服务完成之后需要进行的一些附加操作,如打开或关闭数据的信息,监视目录等 |
-type | 表示因为缺失而不能加载的模块将不记录在系统日志,对于不总是安装在系统上的模块有用 |
(2)control PAM库如何处理与该服务相关的PAM模块成功或失败情况
control | 解释 |
---|---|
required | 一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type类型全部执行完毕再将放回给应用程序。即为必要条件 |
requisite | 一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。即一个必要条件 |
sufficient | 一票通过权,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其他模块,但是如果本模块返回失败可忽略,即充分条件 |
optional | 表明本模块为可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略 |
include | 调用其他的配置文件中定义的配置信息 |
还有另外一种方式:使用一个或多个“status=action”
status:检查结果的返回值
action:采取行为ok,done,die,bad,ignore,reset
action | 解释 |
---|---|
ok | 模块通过,继续检查 |
done | 模块通过,返回最后检查给应用 |
bad | 结果失败,继续检查 |
die | 结果失败,返回失败结果给应用 |
ingore | 结果忽略,不影响最后结果 |
reset | 忽略已经得到的结果 |
(3)modules-path
相对路径:/lib64/security目录下的模块可使用的相对路径;如pam_shells.so
绝对路径:如果编译安装以后模块存放的位置
建议:将来修改PAM文件时,备用一个ssh连接窗口,以免我们误操作。
(4)argument 用来给该模块传递参数
1、pam_shells:检查有效shell 会调用文件/etc/shells
示例
(a)先创建用户指定其bash为/bin/csh
[root@centos6~]#useradd -s /bin/bash wang
(b)在CentOS6上修改/etc/shells和/etc/pam.d/su文件
在认证前添加
auth required pam_shells.so
(c)在CnetOS6使用wang账户登录
[root@localhostsecurity]#su - wang
Password:
su: incorrect password
但是此时使用ssh还可以连接
[[email protected]]#ssh [email protected]
[email protected]'s password:
Last login: Thu Sep 14 13:42:35 2017 from 192.168.4.131
如果我们想彻底禁止wang登录把/etc/pam.d/su 和/etc/pam.d/sshd两个文件在auth前天添加如下一行:
auth required pam_shells.so
(d)如果让wang登录删除上述设置即可。
2、pam_securetty.so:只允许root用户在/etc/securetty列出的安全终端上登录
示例
允许telnet使用root登录
方法一:
修改配置文件/etc/pam.d/remote
配置文件
#auth required pam_securetty.so
方法二:
直接修改/etc/securetty
添加所需要登录的终端;如果连接的终端使用完毕后,后续的连接将不会执行。
3、pam_nologin.so:如果/etc/nologin文件存在,将导致非root用户不能登录
作用机理:如果用户shell是/etc/nologin时,当该用户登录时,会显示/etc/nologin.txt文件内容,并拒绝登录。
file=/PATH/TO/SOMEFILE
示例
修改配置文件login文件添加入下面一行:
auth required pam_nologin.so
在CentOS7使用wang登录
[root@centos7~]#ssh [email protected]
[email protected]'s password:
Connection closed by 192.168.4.131
如果想给非root用户提示信息可以编辑文件/etc/pam.d/nologin
account required pam_nologin.so file=/etc/nologin.txt
4、pam_limits.so:在用户级别对其可使用的资源的限制
(1)配置文件
/etc/security/limits.conf
/etc/security/limits.d/*.conf
(2)格式
|domain|type|item|value|
(a)domain 应用于哪些对象
username 单个用户
@group 组内所有用户
(b)type类型
soft软限制,普通用户可以自己修改;如果出现会有警告信息
hard硬限制,只有root能设定,且通过kernel强制生效
-:两者同时设定
(c)item 限制资源
core | limits the core file size (KB) |
data | max data size (KB) |
fsize | maximum filesize (KB) |
memlock | max locked-in-memory address space (KB) |
nofile | max number of open file descriptors |
rss | max resident set size (KB) |
stack | max stack size (KB) |
cpu | max CPU time (MIN) |
nproc | max number of processes |
as | address space limit (KB) |
maxlogins | max number of logins for this user |
maxsyslogins | max number of logins on the system |
priority | the priority to run user process with |
locks | max number of file locks the user can hold |
sigpending | max number of pending signals |
msgqueue | max memory used by POSIX message queues (bytes) |
nice | max nice priority allowed to raise to values: [-20, 19] |
rtprio | max realtime priority |
(4)value 指定具体值
ulimit命令的使用
选项 | 解释 |
---|---|
-a | 列出所有设定值 |
-n | 最多打开的文件描述符个数 |
-u | 最大用户进程数 |
-S | 使用’SOFT’资源限制 |
-H | 使用‘HARD’资源限制 |
5、pam_time.so
(1)格式:
|services;|ttys;|users;|times;|
(2)services 服务程序名称
(3)ttys 登录的终端 可是使用*
(4)users 用户
(5)times
格式:day/time-range
Mo Tu We Th Fr Sa Su Wk Wd Al
MoMo = no day
MoWk = all weekdays bar Monday 所有的工作日但是除了星期一
AllFr 所有添但是除了星期五
time-range:
格式:HHMM
如果开始时间小于结束时间,系统假设到了第二天。
可是使用模式 “&” “ |”“ !”
示例
编辑/etc/security/time.conf添加如下一行:
sshd;*;centos;Wk
编辑/etc/pam.d/sshd添加如下一行:
auth required pam_time_so
了解pam_group.so模块