Linux基线安全加固操作实践
一、工具篇
1、Pacct
设置日志文件可以对每个用户的每一条命令进行记录,这一功能默认是不开放的,为了打开它,需要安装pacct工具:
accton命令是Linux系统进程管理命令之一,它的作用是打开进程统计,如果不带任何参数,即关闭进程统计,通过yum搜索,实际目前该工具已更名为:psacct:
psacct是一个工具包,里面包含有针对用户连接时间、进程执行情况等进行统计的工具。它可以记录用户登录信息。用户所执行的程序,程序执行情况信息等。它包含以下一些命令:
ac:登录账号的简要信息。accton:打开或关闭进程账号记录功能。last:显示曾经登录过的用户。lastcomm:显示已执行过的命令。sa:进程账号记录信息的摘要。dump-utmp:输出utmp文件内容。dump-acct:输出acct或pacct文件内容。在Linux系统中启动进程统计使用accton命令,必须用root身份来运行。accton命令的形式为accton file,file必须事先存在。先使用touch命令创建pacct文件。
注意: 若要开启指定用户的动作监控,需在该用户环境下创建文件并指定记录,sudo执行accton开启监控。
# which accton
/sbin/accton
#touch /var/log/pacct
# accton /var/log/pacct
Turning on process accounting, file set to '/var/log/pacct'. #开启用户操作监控
# lastcomm root -f /var/log/pacct ##验证
lastcomm root pts/0 0.00 secs Mon Nov 18 11:04
ssh S X root pts/1 0.00 secs Mon Nov 18 11:03
ssh S X root pts/1 0.01 secs Mon Nov 18 10:58
timeout root __ 0.00 secs Mon Nov 18 11:02
df root __ 0.00 secs Mon Nov 18 11:02
accton S root pts/0 0.00 secs Mon Nov 18 11:01
一旦accton被激活,就可以使用lastcomm命令监测系统中任何时候执行的命令。若要关闭统计,可以使用不带任何参数的accton命令进行关闭:accton。
2、rsyslog和系统日志工具 Syslog-ng
我的7.4.1708安装:rsyslog.x86_64 0:8.24.0-41.el7_7.2
要想执行syslog命令,需要安装syslog-ng,
CentOS 5.8搭建日志管理服务器(syslog-ng+logzilla)参见:https://www.linuxidc.com/Linux/2012-06/62198.htm
syslog-ng 相比传统的系统工具syslog,具有众多高级的功能:更好的网络支持,更加方便的配置,集中式的网络日志存储,并且更具有弹性。比如,使用syslogd时,所有的iptables日志与其他内核日志一起全部存储到了kern.log文件里。Syslog-ng则可以让你有选择性的将iptables部分分出到另外的日志文件中。Syslogd仅能使用UDP协议,Syslog-ng 可以使用UDP和TCP协议。所以你可以在加密的网络隧道中传输日志到集中日志服务器。
syslog-ng的一个设计原则就是建立更好的消息过滤粒度,syslog-ng能够进行基于内容和优先权/facility的过滤。另一个设计原则是更容易进行不同防火墙网段的信息转发,它支持主机链,即使日志消息经过了许多计算机的转发,也可以找出原发主机地址和整个转发链。最后的一个设计原则就是尽量使配置文件强大和简洁。
wget http://www.balabit.com/downloads/files/eventlog/0.2/eventlog_0.2.12.tar.gz
wget http://www.balabit.com/downloads/files/libol/0.3/libol-0.3.18.tar.gz
wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.3.5/source/syslog-ng_3.3.5.tar.gz
wget http://php-syslog-ng.googlecode.com/files/logzilla_v2.9.9o.tgz
注意:日志集中管理服务syslog-ng采用的是C/S架构,所以客户端也需要安装syslog-ng;
Linux系统中syslog服务采用udp 514端口,但在启动syslog时报以下错误:
去掉配置文件中冲突的内容:log { source(src); }中的source内容,重启服务后正常。
验证:
1)如果你用syslog-ng日志服务,编辑/etc/syslog-ng/syslog-ng.conf
@version: maj.minfilter f_msgs {
level(err) or facility(kern) and level(debug) or facility(daemon) and level(notice);
};destination msgs { file("/var/adm/msgs"); };filter f_msgs {
level(err) or facility(kern) and level(debug) or facility(daemon) and level(notice);
};destination msgs { file("/var/adm/msgs");
};log {filter(f_msgs);destination(msgs);};
配置文件说明:
options {flush_lines (0);time_reopen (10);log_fifo_size (1000);long_hostnames (off);use_dns (no);use_fqdn (no);create_dirs (yes); #此行改为yeskeep_hostname (yes);
};
......
source s_log {udp(ip(0.0.0.0) port(514));
};
......
destination d_log {file("/data/syslog-ng/kevin.log");
};
......
log { source(s_log); destination(d_log); }; ##注意这里的s_log必须跟上述source后跟的一致配置说明:
options 为全局配置参数
source 是日志从本机的哪个IP哪个端口接收信息
destination 接收到信息保存在哪个文件
log 就是将来源信息写入到目的文件中
现场启动报错:
/etc/init.d/syslog-ng start
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Plugin module not found in 'module-path'; module-path='/lib64/syslog-ng', module='afsql'
Error in configuration, unresolved source reference; source='src'[FAILED]
上述模块报错不用管。
查看配置文件:
options {flush_lines (0);time_reopen (10);log_fifo_size (1000);long_hostnames (off);use_dns (no);use_fqdn (no);create_dirs (no); ##如果这里配置为yes,下面的日志文件会自动创建,权限为666keep_hostname (yes);
};source s_sys { ##用于下方日志引用file ("/proc/kmsg" program_override("kernel: "));unix-stream ("/dev/log");internal();# udp(ip(0.0.0.0) port(514)); ##默认为udp514
};destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages"); };
destination d_auth { file("/var/log/secure"); };
destination d_mail { file("/var/log/maillog" flush_lines(10)); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_kern { file("/var/log/kern"); };
destination d_mlal { usertty("*"); };filter f_kernel { facility(kern); };
filter f_default { level(info..emerg) andnot (facility(mail)or facility(authpriv)or facility(cron)); };
filter f_auth { facility(authpriv); };
filter f_mail { facility(mail); };
filter f_emergency { level(emerg); };
filter f_news { facility(uucp) or(facility(news)and level(crit..emerg)); };
filter f_boot { facility(local7); };
filter f_cron { facility(cron); };
filter f_msgs {
level(err) or facility(kern) and level(debug) or facility(daemon) and level(notice);
};
destination msgs { file("/var/adm/msgs"); ##如果option里开启自动创建,则无需手动,否则
};
log {source(s_sys); filter(f_msgs); destination(msgs); ##注意这里的source后内容必须与前面的一 致。
};
#log { source(s_sys); filter(f_kernel); destination(d_cons); };
log { source(s_sys); filter(f_kernel); destination(d_kern); };
log { source(s_sys); filter(f_default); destination(d_mesg); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
log { source(s_sys); filter(f_emergency); destination(d_mlal); };
log { source(s_sys); filter(f_news); destination(d_spol); };
log { source(s_sys); filter(f_boot); destination(d_boot); };
log { source(s_sys); filter(f_cron); destination(d_cron); };
另外注意:如果客户端和syslog-ng服务端在同一主机,需建立【管道】,建立两者之间的通信,即将客户端服务器例如nginx等日志通过管道文件传输到日志服务器上。
【syslog-ng客户端配置】:也需要安装syslog-ng
options {flush_lines (0);time_reopen (10);log_fifo_size (1000);long_hostnames (off);use_dns (no);use_fqdn (no);create_dirs (yes); #修改为yeskeep_hostname (yes);
};
......
source s_slog {pipe("/data/kevin/log.pipe"); ##配置管道,随后手动创建
};
......
destination d_slog { udp(192.168.120.5 port(514)); }; #ip为syslog-ng服务端ip地址
......
log { source(s_sys); destination(msgs); };
然后在客户端创建管道文件:
mkdir /data/kevin && mkfifo /data/kevin/log.pipe
启动syslog-ng服务:/etc/init.d/syslog-ng start
验证测试:例如将客户端nginx服务日志信息导入到管道文件中
tail -f /etc/nginx/logs/access.log >> /data/kevin/log.pipe &
然后去syslon-ng的服务端查看,发现日志是否已经传过来了,执行:
tail -f //var/adm/msgs ##日志传输是实时的
多日志传输或更多详情,参见:https://www.cnblogs.com/kevingrace/p/6519504.html
2)如果用的默认syslog,编辑/etc/syslog.conf
修改:*.err;kern.debug;daemon.notice /var/adm/messages
3)如果用rsyslog服务,编辑etc/rsyslog.conf
*.err;kern.debug;daemon.notice /var/adm/messages
3、弱密码修改
生成环境一般对弱密码零容忍,因此弱密码必须修改加固,那怎样编制无规律的密码呢?Linux提供了一个mkpasswd工具可以按你的需求生成随机密码:
首先需要安装软件expect:
Centos:yum install -y expect
Ubuntu:apt-get install -y expect
安装完毕后:执行mkpasswd -l 16 -s 1 -d 2 -c 3-C 4
附参数说明:
-l:指定长度-d:数字的个数-c:小写字母个数-C:大写字母个数
-s:特殊字符个数
4、禁ping
1)备份配置文件
cp -p /etc/sysctl.conf /etc/sysctl.conf.bak
2.执行命令
sysctl -w net.ipv4.conf.all.accept_redirects="0"禁止icmp重定向报文
sysctl -w net.ipv4.conf.all.accept_source_route="0"禁止icmp源路由
二、配置修改
2.1、远程登录限制
1)禁止root用户远程登录
#禁止root用户远程telnet登录
vi /etc/pam.d/login //新增第5行
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth substack system-auth
auth include postlogin
auth required pam_securetty.so #新增这一行
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
session include postlogin
-session optional pam_ck_connector.so
~
#禁止使用telnet协议
rpm -qa |grep telnet
vi /etc/xinetd.d/telnet,#修改
disable = yes。
#禁止root用户远程ssh登录
vi /etc/ssh/sshd_config #配置:
PermitRootLogin no
#重启服务
/etc/init.d/sshd restart
2)命令行界面超时时间
vi /etc/profile //配置如下,单位s
export TMOUT=180
3)禁用ctrl+alt+del组合键:
#centos7/redhat7/Fedora
rm /usr/lib/systemd/system/ctrl-alt-del.target
#禁止使用Ctrl+Alt+Del快捷键重启服务器
cp /etc/inittab /etc/inittabbak
vi /etc/inittab #注释掉下面这一行
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
init q #重新reload配置文件Commands:0 Power-off the machine6 Reboot the machine2, 3, 4, 5 Start runlevelX.target unit1, s, S Enter rescue modeq, Q Reload init daemon configurationu, U Reexecute init daemon#其他版本
vi /etc/inittab //释如下行,然后重启
#ca::ctrlaltdel:/sbin/shutdown***
3)限制远程登录IP
vim /etc/hosts.deny //写入
sshd:all:deny
vim etc/hosts.allow //按如下示例配置
all:192.168.4.44:allow #允许单个IP;
sshd:192.168.1.:allow #允许192.168.1的整个网段的PC通过SSH来访问本机
4)关闭IP伪装和绑定多IP功能
vi /etc/host.conf ##Redhat 默认没有/etc/host.conf文件,要先新建一个host.conf文件
multi off #关闭多IP绑定
nospoof on #关闭IP伪装
5)nfs访问
vim etc/hosts.allow //按如下示例配置
portmap: 允许访问的IP
6)版本信息隐藏
#ssh
2.2 权限限制
1)锁定不需要的用户
常见可锁定系统默认的:
adm,lp,mail,uucp,operator,games,gopher,ftp,nobody
rpm,dbus,avahi,mailnull,smmsp,nscd,vcsa,rpc,rpcuser,nfsnobody
sshd,pcap,ntp,haldaemon,distcache,apache,webalizer,squid,xfs,gdm
sabayon,named
usermod -L username #锁定
usermod –U username #解锁
2)账户认证失败次数限制
#Redhat,CentOS,Fedora:
vi /etc/pam.d/system-auth #配置:
auth required pam_tally.so deny=5 unlock_time=600
account required pam_tally.so
#Suse9:
vi /etc/pam.d/passwd#配置:
auth required pam_tally.so deny=5 unlock_time=600
account required pam_tally.so#Ubuntu,Suse10,Suse11,Suse12:
vi /etc/pam.d/common-auth#配置:
auth required pam_tally.so deny=5 unlock_time=600 no_lock_time
vi /etc/pam.d/common-account配置:
account required pam_tally.so=#配置SSH方式账户认证失败次数限制
vi /etc/pam.d/sshd #如下配置
auth required pam_tally.so deny=5 unlock_time=600 no_lock_time
account required pam_tally.so
#centos6以上
auth required pam_tally2.so deny=5 unlock_time=600
account required pam_tally2.so
3)命令和账户别名配置
vi /etc/aliase #删除或注释掉下面的行,禁用不必要的别名
#games: root
#ingres: root
#system: root
#toor: root
#uucp: root
#manager: root
#dumper: root
#operator: root
#decode: root
#root: marcvi /etc/mail/aliases #同上
#games: root
#ingres: root
#system: root
#toor: root
#uucp: root
#manager: root
#dumper: root
#operator: root
#decode: root
#root: marc/usr/bin/newaliases #使改变生效
4)使用yum update更新系统时不升级内核,只更新软件包
cp /etc/yum.conf /etc/yum.confbak
vi /etc/yum.conf #在的最后添 exclude=kernel*
yum--exclude-kernel* update #或直接在yum的命令后面加上如下的参数
#验证
cat /etc/issue #查看系统版本
uname -a #查看内核版本
2.3 日志配置
Linux基线安全加固操作实践相关推荐
- Linux系统安全加固浅谈
对于企业来说,安全加固是一门必做的安全措施.主要分为:账号安全.认证授权.协议安全.审计安全.总的来说,就是4A(统一安全管理平台解决方案),账号管理.认证管理.授权管理.审计管理.用漏洞扫描工具扫描 ...
- 服务器的安全基线、加固及应急响应总结
Windows安全基线及加固(例子为win server 2008): 1.身份鉴别 1)更改缺省账号:对于管理员帐号,要求更改缺省 Administrator 帐户名称 2)禁用guest账号 3) ...
- linux安全pdf,linux系统安全加固.pdf
通用 linux 系统安全加固手册 系统安全加固手册 1 帐户安全配置要求 1 帐户安全配置要求 1.1 创建/etc/shadow 影子口令文件 1.1 创建/etc/shadow 影子口令文件 配 ...
- 字符设备驱动基础篇4——字符设备驱动读写接口的操作实践
以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 参考资料:http://www.cnblogs.com/biaohc/p/6575074.html. 一.细节 1.自动分配主设备号 注册函 ...
- 1 Linux SSH安全加固
Linux SSH 安全加固,这里使用CentOS7.5 做演示 一.配置SSH双因素登录 1.确定系统时钟是正确的 2.安装相关依赖 yum install -y git gcc aut ...
- Linux 快照 (snapshot) 原理与实践(二) 快照功能实践
文章目录 0. 概要 1. 准备演示数据 2. 创建 snapshot-origin 目标 3. 创建 snapshot 目标 4. 验证 COW 操作 4.1 第一次写数据 4.2 第二次写数据 5 ...
- Linux 快照 (snapshot) 原理与实践(一) 快照基本原理
文章目录 0. 背景 1. 如何理解快照(snapshot)? 2. 快照 (snapshot) 的原理 2.1 全量快照 1. 克隆 (Clone) 2. 镜像分离 (Split Mirror) 2 ...
- Linux 环境配置的最佳实践
Linux 环境配置的最佳实践 Linux 基础知识 硬链接 & 软链接 Linux 目录 基本指令 Linux 环境配置 安装 zsh 和 oh-my-zsh 开发环境安装(必用) nvm ...
- Linux图形显示DRM子系统环境实践
前言 学习Linux图形DRM子系统,还是需要有一个运行DRM框架的linux系统,这样无论在学习DRM应用程序还是驱动程序时,可以实际动手修改调试,运行看到效果,学习起来也是比较有动力和成就感的.下 ...
最新文章
- vue父组件调用子组件的方法
- 判定是否互为字符重排
- Struts2拦截器属性excludeMethods、includeMethods配置无效之解决方法
- VTK:几何对象之PolyLine
- 《Python编程从入门到实践》记录之字典遍历
- 算法:位运算加减乘除
- NServiceBus主机
- Android开发 - ImageView加载Base64编码的图片
- 实体框架 6.0:异步、IQueryable操作符和特性改进
- pie函数--Matplotlib
- Python 基础学习Chapter6
- 易捷行云亮相北京卫视,战略性新兴产业引发持续关注
- java查找字符位置_java 查找字符串所在的位置代码
- 用python实现纸牌游戏的随机抽牌洗牌过程(item系列几个内置方法的实例)
- 【历史上的今天】1 月 25 日:电子游戏起源;《吃豆人》作者出生;“蠕虫王”问世
- mathmatica中ListLinePlot函数画图不能混合是咋回事啊
- java f else_java else if 为什么比 switch 效率低?最好可以解释下原理
- How to debug apps on Kindle Fire on OS X
- 古代官员常用计算机笔,古代官员也有年终奖清朝皇帝一般会赏赐
- CentOS7 win7 双系统安装