linux安全


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

1、AIDE

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

一、AIDE 概念

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

二、工做机制

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

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

2、AIDE使用介绍

一、安装AIDE包

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

二、AIDE的配置文件

/etc/aide.confcentos

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.gzbash

设定选项 解释
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做用。服务器

三、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

2、sudo

在生产环境中,一我的的力量老是不够的,咱们能够把一些任务分配别的人员协同操做,这样办事效率也提升了。可是咱们又不想把全部的权限都分给小伙伴,因此sudo就解决了这样一个问题。sudo可以受权指定用户在指定主机上运行某些命令;若是未受权用户使用sudo尝试登陆,会提示管理员。这样方便了咱们的管理。

一、含义

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

二、sudo的优势

(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命令

格式:sudo [-u user] COMMAND

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

注意:在sudoers文件中,若是定义文件后面添加“”表示全部,即这个文件后面能够添加任意字符 ,言外之意,就是能够看到别的文件。*

3、tcp_wrappers

一、概念

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

二、工做机制

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

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

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

which COMMAND

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

lddwhich COMMAND|grep libwrap

四、配置文件

一、配置文件

/etc/hosts.allow/etc/hosts.deny

二、检查顺序

在tcp_wrappers中检查顺序并不像前面的服务同样,前面的成功后面的就再也不执行。而tcp_wrappers的检查顺序为/etc/hosts.allow-->/etc/hosts.deny 前面的规则一旦匹配成功,直接生效,将再也不继续后面的执行;若是前面的没有成功,则继续向后执行。

三、基本语法 damon_list@host:client_list [:option:option...]

damon_list格式:

(1)单个应用程序的二进制文件名,而非服务名
(2)以逗号或空格分隔的应用程序文件名列表
(3)ALL 表示全部接受tcp_wrappers控制的服务程序
(4)主机有多个IP ,可用@hostIP来实现
      如:in.telnetd@192.168.159.131

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.allowsshd: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.logThu Sep 14 09:33:18 CST 2017 192.168.4.135 to sshd@192.168.4.131 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

4、PAM认证

一、概念

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/)进行认证。

四、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回传的结果决定下一个动做。

五、/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模块

一、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还能够链接

[root@localhostpam.d]#ssh wang@192.168.4.131

wang@192.168.4.131'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登陆删除上述设置便可。

二、pam_securetty.so:只容许root用户在/etc/securetty列出的安全终端上登陆

示例

容许telnet使用root登陆

方法一:

修改配置文件/etc/pam.d/remote配置文件

#auth required pam_securetty.so

方法二:

直接修改/etc/securetty添加所须要登陆的终端;若是链接的终端使用完毕后,后续的链接将不会执行。

三、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 wang@192.168.4.131

wang@192.168.4.131's password: 
Connection closed by 192.168.4.131

若是想给非root用户提示信息能够编辑文件/etc/pam.d/nologin

account    required     pam_nologin.so file=/etc/nologin.txt

四、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’资源限制

五、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模块

相关文章
相关标签/搜索