linux安全
来源:互联网 发布:linux关机重启命令 编辑:程序博客网 时间:2024/06/10 13:29
在平时的工作环境中,网络中不时有搞怪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
定义检测属性时可以组合定义,相当于alias作用。
3、aide命令介绍
初始化数据库:
[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和runas格式
username#uid%group_name%#group_nameUser_AliasRunas_Alias
host
ip或hostnamenetworknetwork/prefix(只有CentOS7支持)Host_Alias
command
commandNamedirectorysudoedit 可以对文件`/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
注意:在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 对上述文件查找
ldd
which 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来实现 如: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.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 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 loginftp>
测试工具:
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.135server: process hosts.denyaccess: granted
[root@localhost~]#tcpdmatch -d /etc/hosts.allow 192.168.4.135
client: address 192.168.4.135server: process hosts.allowaccess: 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类型
(2)control PAM库如何处理与该服务相关的PAM模块成功或失败情况
还有另外一种方式:使用一个或多个“status=action”
status:检查结果的返回值
action:采取行为ok,done,die,bad,ignore,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还可以连接
[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登录删除上述设置即可。
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 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
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 限制资源
(4)value 指定具体值
ulimit命令的使用
5、pam_time.so
(1)格式:
|services;|ttys;|users;|times;|
(2)services 服务程序名称
(3)ttys 登录的终端 可是使用*
(4)users 用户
(5)times
格式:day/time-rangeMo Tu We Th Fr Sa Su Wk Wd AlMoMo = 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模块
- LINUX 安全
- Linux安全
- Linux 安全
- linux安全
- Linux安全
- linux安全
- linux安全
- 【Linux-安全】服务器安全配置
- Linux用户安全
- Linux 内核安全
- Linux 安全指南
- linux安全必备步骤
- LINUX 基准安全清单
- linux安全配置
- LINUX 安全守则
- Linux安全设置
- linux的安全设置
- Linux安全综述
- Java 技术体系图
- ELK-002-Beats-Filebeat的HelloWorld
- (算法分析Week2)Two Sum[Easy]
- Linux 开机启动服务 命令
- 正负数的按位取反~(小技巧)
- linux安全
- HDU 6201 树形dp
- 【PAT】【Advanced Level】1128. N Queens Puzzle (20)
- 《人类简史》读书笔记
- hdu1027 next_permutation的应用
- num2str,mat2str, int2str, str2num
- 1.nginx的安装
- Java按值传递
- 比较好的学习网站