服务安全与监控
一、Linux基本防护
常用系统监控命令:
traceroute 路由追踪(查看到达目标主机的路由信息)
iostat 查看硬盘的读写状态
free 内存状态
uptime 查看CPU负载
swapon -s 查看交换分区信息
ss -antup 查看所有的网络连接信息
ss -ntulp 查看本机监听的所有端口
-n以数字显示端口号
-t显示tcp连接
-u显示udp连接
-p显示监听端口对应的程序名称
-a查看所有连接状态信息
~]# chage -l 账户名称 //查看账户信息
~]#chage -E yyyy-mm-dd 账户名称 //指定失效日期
~]#chage -d 0 tom //强制用户tom修改密码
[root@m52 ~]# passwd -l root //锁定用户 root 的密码(无法使用该用户ssh)
[root@m52 ~]# passwd -u root //解锁用户 root 的密码。
[root@m52 ~]# passwd -S root //看密码状态
修改tty登录的提示信息,隐藏系统版本
1)账户在登录Linux系统时,默认会显示登陆信息(包括操作系统内核信息)
/etc/issue这个配置文件里保存的就是这些登陆信息,修改该文件防止内核信息泄露。
[root@proxy ~]# cat /etc/issue //确认原始文件
[root@proxy ~]# cp /etc/issue /etc/issue.origin //备份文件
[root@proxy ~]# vim /etc/issue //修改文件内容
退出已登录的tty终端,或者重启Linux系统,刷新后的终端提示信息会变成自定义的文本内容
[root@proxy ~]# cat /etc/fstab
/dev/vda1 /boot xfs defaults,noexec 0 0
备注:
noexec属性可以让分区下的所有程序都不可执行,包括病毒与木马
noatime让分区下的所有文件都不再更新atime时间,atime时间为文件的访问时间
对于操作系统来说,文件系统也可以通过添加额外属性来提高性能与安全性。
锁定文件/etc/resolv.conf、/etc/hosts
1)语法格式:
chattr +i 文件名 //锁定文件(无法修改、删除等)
chattr -i 文件名 //解锁文件
chattr +a 文件名 //锁定后文件仅可追加
chattr -a 文件名 //解锁文件
lsattr 文件名 //查看文件特殊属性
- 使用+i锁定文件,使用lsattr查看属性
[root@proxy ~]# chattr +i /etc/resolv.conf
[root@proxy ~]# lsattr /etc/resolv.conf
----i---------- /etc/resolv.conf
3)使用+a锁定文件(仅可追加),使用lsattr查看属性
[root@proxy ~]# chattr +a /etc/hosts
[root@proxy ~]# lsattr /etc/hosts
-----a---------- /etc/hosts
4)测试文件锁定效果
[rhel6]#chkconfig 服务名 on
[rhel6]#chkconfig 服务名 off
[rhel6]#service 服务名 start
[rhel6]#service 服务名 stop
二、用户切换与提权
2.1 用户切换 su
普通用户执行提权命令:sudo 系统命令
普通用户查看可使用的提权命令:sudo -l
2.2 用户提权:
作用:配置系统的普通用户可以执行root用户的命令
主配置文件: /etc/sudoers
修改文件 vim /etc/sudoers 或 visudo
提权配置格式
普通用户名 主机名=命令列表(绝对路径)
%用户组名 主机名=命令列表(绝对路径)
2.3 别名设置
为sudo配置项定义别名(给多个值 起一个名字,先定义,后调用)[别名的名称必须全大写]
]#visudo
命令别名(Cmnd_Alias) 名字=命令列表
主机别名(Host_Alias) 名字=主机名列表
用户别名(User_Alias) 名字=用户名列表
Cmnd_Alias MGMWEB=/usr/bin/systemctl * httpd , /usr/bin/vim /etc/httpd/conf/httpd.conf
Cmnd_Alias MGMDB=/usr/bin/systemctl * mysqld , /usr/bin/vim /etc/my.cnf
Cmnd_Alias MGMSOFT=/usr/bin/rpm , /usr/bin/yum
2.3.1 配置用户环境alias别名设置
查看已设置的别名:alias [别名名称]
定义新的别名:alias 别名名称= '实际执行的命令行'
取消已设置的别名:unalias [别名名称]
影响指定用户的 bash 解释环境
~/.bashrc,每次开启 bash 终端时生效
影响所有用户的 bash 解释环境
/etc/bashrc,每次开启 bash 终端时生效
[root@server0 ~]# vim /root/.bashrc
alias hello='echo hello'
[root@server0 ~]# vim /home/student/.bashrc
alias hi='echo hi'
[root@server0 ~]# vim /etc/bashrc
alias abc='echo abc'
然后运行source /root/.bashrc 即可立即使用。
如果不运行source读取,需要重新登陆会话窗口才能使用。
2.4 启用日志
作用:记录普通用户执行过的提权命令
]# vim /etc/sudoers
Defaults logfile="/var/log/sudo.log"
三、SSH访问控制
vim /etc/ssh/sshd_config
17行Port 2222
19行ListenAddress 192.168.4.52 //监听的端口
PermitRootLogin no //禁止root登陆
MaxAuthTries 6 //登陆限时
LoginGraceTime 2m //每连接最多认证次数
[root@m52 ~]# systemctl restart sshd
]# netstat -utnlp | grep sshd
其他主机连接 ]# ssh -p 2222 root@192.168.4.52
3.2 黑白名单 (限制客户端连接时使用的用户及客户端地址)
白名单 : 仅允许使用列表里的用户连接
AllowUsers 用户列表
]# vim /etc/ssh/sshd_config
AllowUsers new root@192.168.4.254
]# systemctl restart sshd
黑名单 : 仅不允许使用列表里的用户连接
DenyUsers 用户列表
]# vim /etc/ssh/sshd_config
#AllowUsers new root@192.168.4.254
DenyUsers new root@192.168.4.254
]# systemctl restart sshd
3.3 认证登陆方式 (默认2种都开启了)
密钥对认证登陆(公钥加密 私钥解密)
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
确认密钥验证使用正常后,禁用口令验证
口令(用户密码) 65 PasswordAuthentication no/yes
配置密钥对认证登陆步骤
1 创建密钥对 ssh-keygen
2 把公钥传给目标主机ssh-copy-id root@xxxx
rm -rf /root/.ssh/* //清除密钥对文件
将服务器上用户kate创建的密码设为空,尝试SSH登录,也会失败:
[root@proxy ~]# passwd -d kate //清空用户口令
清除用户的密码 kate。
passwd: 操作成功
四、SELinux安全防护
4.1 selinux介绍
全称:Security-Enhanced Linux
美国NSA国家安全局主导开发,一套增强Linux系统安全的强制访问控制体系
集成到Linux内核(2.6及以上)中运行
RHEL7基于SELinux体系针对用户、进程、目录和文件
提供了预设的保护策略,以及管理工具
4.1.1 SELinux运行模式的切换
运行模式:
enforcing(强制)
permissive(宽松)
disabled(彻底禁用)
任何模式再切换到disabled(彻底禁用)模式,都必须要经历重起系统
切换运行模式 :
临时切换:setenforce 1|0 #暂时再本次开机有效
固定配置:/etc/selinux/config 文件 #不影响当前SELinux状态
[root@server0 ~]# getenforce #查看SELinux状态
Enforcing
[root@server0 ~]# setenforce 0 #当前修改SELinux状态
[root@server0 ~]# getenforce
Permissive
[root@server0 ~]# vim /etc/selinux/config #永久配置
SELINUX=permissive
4.2 查看安全上下文
文件 ls -lZ 文件名
目录 ls -ldZ 目录名
进程 ps aux -Z | grep -i 进程名
]# ls -lZ /etc/passwd
]# ls -ldZ /etc/
]# ps aux -Z | grep -i httpd
用户:角色:访问类型:选项...
system_u:object_r:passwd_file_t:s0
system_u:object_r:etc_t:s0
system_u:system_r:mysqld_t:s0
system_u:system_r:httpd_t:s0
4.3一般操作规律
mv 移动的文件,原有的上下文属性不变
cp 复制的文件,自动继承目标位置的上下文
4.4 修改安全上下文
chcon
]# chcon -R -t httpd_sys_content_t /var/www/html
]# chcon -t httpd_sys_content_t /var/www/html/a4.html
4.5 重置安全上下文
restorecon
]# restorecon -R /var/www/html
]# restorecon /var/www/html/a5.html
4.6 SElinux布尔值 (功能开关)
1 查看布尔值 getsebool -a
getsebool -a |grep 服务名
2 修改布尔值
setsebool -P 选项名 on|off
五、加密与解密
第一种:GPG对称加/解密 (加密与解密使用相同密钥)
usera 发送解密文件给 userb
第二种:GPG非对称加/解密 : 数据加密和解密使用不同的密钥
公钥加密 私钥解密
]$ ls -a ~ //查看家目录下的隐藏文件
]$ ls ~/.gnupg/ //查看密钥的相关配置
创建密钥对:#gpg --gen-key
导出公钥:#gpg --export -a > 文件名.pub
导入公钥:#gpg --import 接收到的公钥的保存路径
使用公钥加密:#gpg -e -r 目标用户 要发送的文件 // -r-->指定目标用户
发送加密文件:mv 或者 scp
使用私钥解密:#gpg -d 需要解密的文件的绝对路径
生成签名文件:# gpg -b xx.txt //生成签名文件
使用公钥验证签名文件: #gpg --verify 文件路径
gpg --help
例子:
准备用户:usera,userb
usera 发送方 加密数据
usera~]# rm -rf ~/.gnugp //清除原有的秘钥相关配置
1 导入公钥 ]# gpg --import /tmp/userb.pub
]# ls ~/.gnupg
2 使用公钥加密 gpg -e
[usera@pc117 ~]$ gpg -e -r userb test2.txt
3 发送加密文件 ]# mv / scp
]# mv test2.txt.gpg /tmp/
4 接收方userb 用户使用私钥解密 ]# gpg -d
]# gpg -d /tmp/test2.txt.gpg > ~/b.txt
]# cat ~/b.txt
GPG软件签名与验证
1 使用私钥签名
userb~]# gpg -b a1.txt //生成签名文件
]# ls a1.txt.sig
2 共享签名文件 公钥匙文件 原文件
$ cp xxx.sig /tmp/
3 导入公钥
4 使用公钥验证签名文件
六、AIDE入侵检测系统
AIDE介绍
aide --help
- 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 -y install aide //安装软件
修改配置文件,定义监控目录
配置文件路径:/etc/aide.conf
定义监控/app目录,但不监控/app目录下的f3文件。规则为:权限+所有者+所属组+sha512+修改时间+访问时间+改变时间
[root@A ~]# cp /etc/aide.conf /etc/aide.conf.bak #对配置文件修改前建议备份
[root@A ~]# sed -i '99,$s/^/#/' /etc/aide.conf //注释掉默认配置
[root@A ~]# vim /etc/aide.conf #编辑配置文件
# Example configuration file for AIDE.
@@define DBDIR /var/lib/aide #数据库目录
@@define LOGDIR /var/log/aide #日志目录
# The location of the database to be read.
database=file:@@{DBDIR}/aide.db.gz #数据库文件
…………省略…………
mon = p+u+g+sha512+m+a+c # 自定义规则监控:权限+所有者+所属组+sha512+修改时间+访问时间+改变时间
/app mon #定义/app目录使用规则 mon
!/app/f3 #但是/app目录下的f3文件不监控,“!”表示忽略这个文件的检查
]# aide --init //初始化检查
]# aide --check //入侵检测
七、linux安全之打补丁
创建补丁文件:
diff -u 旧文件 新文件
diff -u 旧文件 新文件 > 补丁文件.patch
]# patch -p数字 < 补丁文件 //打补丁--------->-p后的数字代表删除重复目录的个数
]# patch -RE < 补丁文件 //撤销补丁
其他创建补丁文件选项的使用:
-r 递归对比目录中的所有资源(可以对比目录)
-a 所有文件视为文本(包括二进制程序)
-N 无文件视为空文件(A目录下没有txt文件,B目录下有txt文件,diff比较两个目录时,默认会提示txt仅在B目录有(无法对比差异,修复文件)diff比较时使用N选项,则diff会拿B下的txt与A下的空文件对比,补丁信息会明确说明如何从空文件修改后变成txt文件,打补丁即可成功!)
-u 输出统一内容的头部信息(打补丁使用)
A 代码开发 B 使用者
A (准备环境)
mkdir {source1,source2} //同时建立俩个文件夹
B主机操作 ]# mkdir -p /demo/source1
A 主机操作 创建补丁文件
scp -r /demo/source1/* root@192.168.4.51:/demo/source1/
]# diff -uraN /demo/source1 /demo/source2 > /root/all.patch //生成补丁文件
]# cat /root/all.patch
]# scp /root/all.patch root@192.168.4.51:/tmp/
B 主机操作
]# cat /tmp/all.patch
]# cd /demo/source1
]# patch -p3 < /tmp/all.patch ----------> 打补丁
patching file find
patching file test.sh
patching file tmp.txt
[root@host51 source1]# ls
find test.sh tmp.txt
[root@host51 source1]# patch -RE < /tmp/all.patch ------------->撤销补丁
[root@host51 source1]# ls
find test.sh