linux安全

在平时的工作环境中,网络中不时有搞怪man去搞一些破坏,如修改我们的二进制程序,洪水攻击等等,当我们遇到这些问题我们如何去解决它呢?

一、AIDE

当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行crontab作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有两款:Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具。

1、AIDE 概念

AIDE(Adevanced Intrusion Detection Environment)高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了。

2、工作机制

AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个文件的校验码或散列号。

建议:这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、/proc文件系统、用户起始目录以及临时目录。

二、AIDE使用介绍

1、安装AIDE包

[root@centos6~]#yum install -y aide

2、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作用。

3、aide命令介绍

选项 解释
-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尝试登录,会提示管理员。这样方便了我们的管理。

1、含义

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。<摘自:百度>

2、sudo的优点

(1)提供日志,记录每个用户使用sudo操作

(2)为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。

(3)sudo提供用户一个使用时长,相当于“入场券”,如果超时,重新登录。默认为5分钟(如果想修改,只能自己编译安装时候修改)。

(4)sudo提供专门的修改文件工具visudo,默认是vi界面,如果想使用vim功能,可以自定环境变量“export EDORIT=vim”

(5)自己创建文件的权限为440,如果你忘记修改权限,visudo命令可以自动修改完成。

(6)修改配置文件是同时打开一个,不能打开多个。并且配置文件不建议直接去修改。

3、配置文件

/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

4、sudo命令

格式:sudo [-u user] COMMAND

选项 解释
-u 指定用户,默认root
-l 列出用户在主机上可用的和被禁止的命令
-v 再延长有效期5分钟,更新时间戳
-k 清除时间戳(197–01-01),西祠需要重新输入密码
-K 与-k类似,但还要删除时间戳文件
-b 在后台执行
-p 改变询问密码的提示符号 %p代表用户
-V 显示版本信息等配置信息

注意:在sudoers文件中,如果定义文件后面添加“*”表示所有,即这个文件后面可以添加任意字符 ,言外之意,就是可以看到别的文件。

三、tcp_wrappers

1、概念

Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性。TCP Wrappers 是一种对使用 /etc/inetd.sec 的替换方法。TCP Wrappers 提供防止主机名和主机地址欺骗的保护。欺骗是一种伪装成有效用户或主机以获得对系统进行未经授权的访问的方法。

2、工作机制

(1)工作在第四层的TCP协议
(2)对有状态的特定服务进行安全检测并实现访问控制
(3)以库文件形式实现
(4)其进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的。

3、如何查看服务程序是否支持libwrap访问控制

(1)先使用命令查看执行程序文件是哪个

which COMMAND

(2)使用命令ldd 对上述文件查找

lddwhich COMMAND|grep libwrap

4、配置文件

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认证

1、概念

PAM (Pluggable Authentication Modules)可插入认证模块是一套共享库,使本地系统管理员可以随意选择程序的认证方式.。提供了对所有服务进行认证的中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp,点对点协议(ppp)),su等应用程序中。系统管理员通过PAM配置文件来指定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块,主要调用一些函数,将不同的认证机制加入到系统中;PAM接口库则读取配置文件,将应用和相应PAM服务模块联系起来。

2、配置文件

模块存放位置/lib64/security/

环境相关的配置/etc/security/ 模块通过读取配置文件完成用户对系统资源的使用控制

主配置文件/etc/pam.conf 默认不存在

文档 /usr/share/doc/pam-*;man -k pam_ 查看所有pam的说明

注意:如果/etc/pam.d/和/etc/pam.conf两个文件同时存在,则只有/etc/pam.d/*下的文件起效。

3、认证原理

PAM一般遵循的顺序:server–>PAM(配置文件)–>pam.*so;PAM认证首先要确定哪一项服务,然后加载相应PAM的配置文件(/etc/pam.d),最后调用认证文件(/lib64/security/)进行认证。

4、passwd程序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回传的结果决定下一个动作。

5、/etc/pam.d/目录下文件格式

|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 用来给该模块传递参数

6常用pam模块

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
如果开始时间小于结束时间,系统假设到了第二天。
可是使用模式  “&” “ |”“ !” 

示例

  • 禁止用户上班时间使用ssh服务

编辑/etc/security/time.conf添加如下一行:

sshd;*;centos;Wk

编辑/etc/pam.d/sshd添加如下一行:

auth       required     pam_time_so

了解pam_group.so模块

你可能感兴趣的:(openssl)