Linux运维养成记-服务器安全运维
目录
- 1. 删除特殊用户和用户组
- 2. 关闭系统不需要的服务
- 3. 合理使用 sudo 命令
- 4. 删减系统登录信息
- 5. ssh远程登录安全
- 6. 合理利用 history
- 7. 防火墙
- 7.1 iptables
- 7.1.1 iptables 概述
- 7.1.2 iptables 语法
- 7.2 tcp_wrappers
- 8. 锁定系统重要文件
- 9. /tmp、/var/tmp、/dev/shm 安全设定
- 10. 服务器遭受攻击后处理思路
1. 删除特殊用户和用户组
在安装系统完成后,系统默认会设置一些不必要的用户和用户组,如果某些用户及用户组是我们不需要的,应立即删除,因为用户越多,系统就越不安全,黑客可能利用这些账户威胁服务器。
Linux 系统中可以删除的默认用户和用户组大致如下:
- 可删用户:adm、lp、sync、shutdown、halt、news、uucp、operator、games 等
- 可删用户组:adm、lp、news、uucp、games、dip等
删除用户用命令userdel
,删除用户组用命令groupdel
。
此外,如果某些用户不需要登录功能,我们需要禁止此用户登录功能:
usermod -s /sbin/nologin 用户
2. 关闭系统不需要的服务
对服务器来说,服务越多越不安全,因此我们可以关闭不需要的服务来提高服务器的安全性能。
关闭服务可以通过chkconfig
命令实现,例如:
chkconfig --level 345 apach off #重启服务器后生效,关闭 apach 服务
为了系统能够正常运行,建议启动如下表中的服务:
服务名称 | 服务内容 |
---|---|
acpid | 用于电源管理,建议开启 |
apmd | 高级电源管理,可监控电池性能 |
kudzu | 检测硬件是否发生变化 |
crond | 定时任务 |
atd | 一次性的定时任务 |
keytables | 用于装载镜像键盘,可选择启动 |
iptables | 防火墙,必须启动 |
xinetd | 支持网络服务的核心守护进程 |
xfs | 使用 X Window 桌面系统必须启动 |
network | 启动网络服务,必须启动 |
sshd | 提供 ssh 远程管理 |
syslog | 记录系统日志服务,必须启动 |
3. 合理使用 sudo 命令
sudo
命令可以分配给普通用户一些合理的权限,让普通用户可以执行一些 root 用户执行的权限,比如重启系统,添加用户,配置系统文件等,正因如此,我们应合理使用sudo
命令,并对sudo
要进行授权。要对sudo
进行授权需要用到/etc/sudoers
文件,在文件中添加相关配置参数即可。
例如:
#例 1 普通用户 Bob 只能在 Server1 这台主机上执行 reboot,shutdown 命令
Bob Server1=/usr/sbin/reboot,/usr/sbin/shutdown #例 2 普通用户 Bob 能在 任何主机上执行 reboot,shutdown 命令
Bob ALL=/usr/sbin/reboot,/usr/sbin/shutdown#例 2 Bob 可以在任何主机上执行所有命令,且不需要密码登录,还能切到root用户下(sudo su-)
Bob ALL=(ALL) NOPASSWD: ALL#Bob 可以在任何主机上提权到 root 下执行chown 命令,不用密码,但执行 useradd 要密码
Bob ALL=(root) NOPASSWD: /bin/chown,/usr/sbin/useradd#例 3 user 用户组的用户以 root 权限修改其他用户密码,这里表示组要用百分号%
%users ALL=(root) /usr/bin/passwd
4. 删减系统登录信息
系统中有 4 个文件,/etc/issue
、/etc/issue.net
、/etc/redhat-release
和/etc/motd
,它们都记录了系统的版本号相关的一些信息,我们可以通过删除或更改来保证系统版本信息安全.
当用户通过本地终端或本地虚拟控制台登录系统时会显示/etc/issue
里的内容,当用户通过 ssh
远程登录系统时,会显示/etc/issue.net
内容,默认情况issue.net
不会显示,如果要显示可以在/etc/ssh/sshd_config
文件中加入以下代码:
Banner /etc/issue.net
/etc/redhat-release
文件同样记录了系统名称及版本号,建议删除。
/etc/motd
文件是系统公告信息,用户每次登录后,/etc/motd
文件内容就会显示,利用这个文件可以发布一些有关软件,硬件升级信息以及系统维护信息。
5. ssh远程登录安全
有关 ssh
对应的配置文件是/etc/ssh/sshd_config
,下面介绍几个有关安全方面的配置。
- Port 22 :用来设置监听端口,为了安全,我们通常会更改默认 22 端口
- Protocol 2 :设置使用版本为 SSH2,因为 SSH1 版本有缺陷,这里用Protocol 2
- KeyRegenerationInterval 1h :如果使用密钥登录,此设置为多久后自动生成密钥防止盗用
- PermitRootLogin no :设置 root 用户不能 ssh 登录,root 远程登录是很危险的
- PrintMotd yes :用来设置显示
/etc/motd
内信息 - MaxStartups 5 :同时允许 5 个尚未登入的联机,连上 ssh 但未输入密码属于联机
- MaxAuthTries 3 :允许最大登录失败重试的次数为 3 次
- AllowUsers <用户名> :指定通过远程访问的用户,多个用户用空格分开
- AllowGroups<组名> :指定通过远程访问的用户组,多用户组用空格分开
- DenyUsers<用户名> :指定禁止访问的用户,多个用户用空格分开
- DenyGroups<用户组> :指定禁止访问的用户组,多个用户组用空格分开
6. 合理利用 history
通过history
命令我们可以查看用户的历史操作,shell 命令操作记录保存在.hash_history
文件中,但黑客攻击服务器后会将此文件删除,导致无法进行审计,因此,我们需要合理保护备份该文件,下面为history
日志文件的安全配置方法。
默认 history
命令只能查看操作记录,并未记录操作时间,因此需要编辑/etc/bashrc
文件:
HISTFILESIZE=4000 #定义在.bash_history文件保留命令的记录总数
HISTSIZE=4000 #定义 history 命令输出的记录总数
HISTTIMEFORMAT='%F %T' #定义时间格式,与命令 date +%F %T 输出一样
export HISTTIMEFORMAT
为防止黑客删除.bash_history
文件,我们可以将用户的历史记录保存在一个安全的地方,以供系统审计,将以下代码加到/etc/profile
文件中,当用户登录时可实现此功能。
USER_IP=`who am i 2>/dev/null |awk -F"[()]" '{print $2}'`
HISTDIR=/usr/share/.history
if [ -z $USER_IP ]
thenUSER_IP=`hostname`
fi
if [ ! -d $HISTDIR ]
thenmkdir -p $HISTDIRchmod 777 $HISTDIR
fi
if [ ! -d $HISTDIR/$LOGNAME ]
thenmkdir -p $HISTDIR/$LOGNAME
fi
export HISTSIZE=4000
DT=`date +%Y%m%d_%H%M`
export HISTFILE="$HISTDIR/$LOGNAME/$USER_IP.history.$DT"
export HISTFORMAT=“[%Y.%m.%d %H:%M:%S]”
chmod 600 $HISTDIR/$LOGNAME/*.history* 2>/dev/null
此代码将每个用户的 shell 命令历史保存在/usr/share/.history
目录中,每个用户一个文件夹,并且文件夹记录着登录 IP以及shell操作时间。
7. 防火墙
Linux 本身有 2 道防火墙,通过 IP 过滤机制的iptables
实现第一层防护,iptables
通过监视系统运行状况,阻挡网络中的一些恶意攻击,保护系统。通过第一层防护后就是tcp_wrappers
防护层了,tcp_wrappers
可以实现对系统中提供某些服务的开放或关闭,从而保护系统。
7.1 iptables
7.1.1 iptables 概述
默认iptables
规则表有:
- fileter 表(过滤规则表)
- nat 表(地址转换规则表)
- mangle 表(修改数据标记位规则表)
- raw 表(跟踪数据表规则表)
每个规则表中包含多个数据链:
- INPUT (入站数据过滤)
- OUTPUT(出站数据过滤)
- FORWARD (转发数据过滤)
- PREROUTING (路由前过滤)
- POSTROUTING (路由后过滤)
防火规则需要用到这些具体的数据链。
下面是关于防火墙过滤的框架:
- 如果外部主机发送数据给防火墙,数据会经过
PREROUTING
和INPUT
数据链 - 如果防火墙主机发数据到外部主机,数据会经过
OUTPUT
和POSTROUTING
数据链 - 如果防火墙作为路由负责转发,数据会经过
FORWARD
和POSTROUTING
数据链
7.1.2 iptables 语法
用法:iptables [-t 表名] {-A | -D | -I | -F | -L | -Z | -P} 链名 rule-specification
选项 | 解释 |
---|---|
-t | 指定规则表,不加-t 默认使用 fileter 表 |
-A | 追加防火墙规则 |
-D | 删除防火墙规则 |
-I | 插入防火墙规则 |
-F | 清空防火墙规则 |
-L | 列出防火墙规则 |
-R | 替换防火墙规则 |
-Z | 清空防火墙数据表统计信息 |
-P | 设置链默认规则 |
匹配参数如下:
参数 | 解释 |
---|---|
[!] -p | 匹配协议,!表示取反 |
[!] -s | 匹配源地址 |
[!] -d | 匹配目标地址 |
[!] -i | 匹配如站网卡接口 |
[!] -o | 匹配出站网卡接口 |
[!] --sport | 匹配源端口 |
[!] --dport | 匹配目标端口 |
[!] --src-range | 匹配源地址范围 |
[!] --dst-range | 匹配目标地址范围 |
[!] --Mac-source | 匹配 mac 地址 |
[!] --state | 匹配状态(INVALID、ESTABLISHED、NEW、RELATED) |
触发动作如下:
动作 | 解释 |
---|---|
ACCEPT | 允许数据包通过 |
DROP | 丢弃数据包 |
REJECT | 拒绝数据包通过 |
LOG | 将数据包信息记录 syslog 日志 |
DNAT | 目标地址转换 |
SNAT | 源地址转换 |
iptables
具体使用示例如下:
#查看fileter表的所有规则
iptables -nL
#查看 nat 表所有规则
iptables -t nat -nL
#清空 fileter 表中所有规则
iptables -F
#往 fileter 表中添加新规则,丢弃 192.168.1.1 发来的数据包
iptables -A INPUT -s 192.168.1.1 -j DROP
#往 fileter 表中插入规则,拒绝 192.168.1.1ping 防火墙本机
iptables -A INPUT -s 192.168.1.1 -p icmp -j REJECT
#查看 fileter 表中规则编号
iptables -nL --line-number
#删除 filter 表中INPUt 链第一条规则
iptables -D INPUT 1
#将 192.168.1.1 主机发给防火墙本机 22端口的数据包信息记录到 messages 日志
iptables -I INPUT -s 192.168.1.1 -p tcp --dport 22 -j LOG
在 Linux 系统中我们可以在/etc/services
文件中找到各个服务与对应的标准端口号。
防火墙规则默认保存在/etc/sysconfig/iptables
文件下。
7.2 tcp_wrappers
Linux中某个服务是否可以使用 tcp_wrappers
防火墙,取决于服务是否应用了 libwrapped 库文件,如果应用则可以使用。系统中一些服务默认可以使用的有:sshd、vsftpd、tcpd、xinetd、sendmail 等。
tcp_wrapper
防火墙的实现是通过/etc/hosts.allow
和/etc/hosts.deny
两个文件完成的,使用格式如下:
service:host [:action]
参数含义:
- service:服务名,如 sshd、vsftpd 等
- host:主机名或 IP 地址,可以是多个
- action:复合条件采取的动作
配置文件常用关键字:
- ALL:所有服务或所有 IP
- ALL EXCEPT:所有服务或 IP 除了这项指定的
例:
ALL:ALL EXCEPT 192.168.1.1 #除了 192.168.1.1 其余主机可以使用所有服务
针对/etc/hosts.allow
和/etc/hosts.deny
两个文件,Linux 会先判断/etc/hosts.allow
后判断/etc/hosts.deny
,前者满足则不会在去判断后者。如果想要sshd
服务只能在某些主机使用则可以用以下配置:
#etc/hosts.allow文件中写入
sshd: 172.20.190.51
sshd: 172.20.190.52
sshd: www.pdca.net#/etc/hosts.deny文件写入
sshd: ALL
8. 锁定系统重要文件
Linux 系统中通过chattr
命令可以修改文件或目录的属性,此文件要 root 用户执行,从而提高安全性,通过lsattr
命令可以查看文件的属性,下面是对这两个命令的详解。
chattr
命令格式如下:
chattr [-RV] [-v version] [mode] 文件或目录
主要参数解释:
- -R:递归修改所有文件及其子目录
- -V:详细显示修改内容,打印输出
以下是chattr
命令常用参数,用来控制文件属性
参数 | 解释 |
---|---|
+ | 在原有参数基础上追加参数 |
- | 在原有参数基础上移除参数 |
= | 更新为指定参数 |
a | 设定此参数,只能向文件中添加数据,而不能删除,常用于服务器日志文件安全 |
c | 即 compress,设定文件是否压缩后存储,读取时需要经过自动解压操作 |
i | 即 immutable,设定文件不能修改,删除,重命名,设连接 |
s | 安全的删除文件或目录,即删除后的文件后,收回硬盘空间 |
u | 与 s 相反,删除后的文件系统保留其数据块以便以后恢复 |
这些参数中经常用到a
,i
,其中 i
参数不允许任何用户进行操作,即使 root 也不行。
以下是lsattr
命令格式:
lsattr [-adlRvV] 文件或目录
常用参数解释:
参数 | 解释 |
---|---|
-a | 列出目录所有文件,包括隐藏文件 |
-d | 显示指定目录属性 |
-R | 递归显示目录及其下面文件和子目录的属性值 |
-v | 显示文件目录版本 |
对于一些重要的目录和文件可以加上i
,a
属性,例如:
chattr -R -i /bin /boot /lib /sbin
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/hosts
chattr +i /etc/resolv.conf
chattr +i /etc/fstab
chattr +i /etc/sudoers
chattr +a /var/log/messages
9. /tmp、/var/tmp、/dev/shm 安全设定
一些攻击者会利用/tmp
、/var/tmp
目录植入木马,由于此目录会影响系统上一些程序的正常运行,我们不能修改目录的读写执行权限,/dev/shm
是一个共享内存设备,如果黑客通过此文件直接操作系统内存后果不堪设想。
对于/tmp
是一个独立的磁盘分区时,我们可以修改/etc/fstab
文件中/tmp
分区的挂载属性,加上nosuid
、noexec
、nodev
三个选项,修改如下:
LABLE=/tmp /tmp ext4 rw,nosuid,noexec,nodev 0 0
其中nosuid
、noexec
、nodev
选项表示不允许任何 suid 程序,在这个分区也不能执行任何脚本程序,以及不存在设备文件。
设置属性完成后,重新挂载该分区生效。
10. 服务器遭受攻击后处理思路
- 切断网络
- 查找攻击源
通过分析系统日志和登录日志文件,查看可疑信息,同时查看端口打开情况,进程运行情况,分析可疑程序。 - 分析入侵原因和途径
分析此次入侵是系统漏洞还是程序漏洞查清攻击途径,找到攻击源 - 备份用户数据
服务器遭受攻击后,需要立刻在服务器备份用户数据,同时查看这些数据中有没有攻击源,如果有要彻底删除。 - 重装系统
重装系统才是彻底清除攻击源的不错办法
Linux运维养成记-服务器安全运维相关推荐
- 服务器运维事项,云服务器的运维工作要注意的事项
从字面意思来看,云服务器的运维指的是对云服务器的运营和维护. 运维,是以技术为依托.通过技术软件来实现服务器稳定安全工作的服务. 在日常的运维工作中,云服务器的配置以及技术需求,决定了运维需要技术人员 ...
- linux创建运维账户流程,Linux运维养成记-账户与权限管理
1. Linux 账户及组的概念 Linux 系统是通过用户的 ID 来识别每个账号,默认 ID 长度为 32 位,从 0 开始,用户的 ID及 UID 限制在 60000 以下,其中 Linux 账 ...
- 运维搭建邮件服务器,系统运维|如何在 Ubuntu 环境下搭建邮件服务器(二)
本教程的第 2 部分将介绍如何使用 Dovecot 将邮件从 Postfix 服务器移动到用户的收件箱. 在第一部分中,我们安装并测试了 Postfix SMTP 服务器.Postfix 或任何 SM ...
- 全国道路运证基本信息查询服务器,道路运政管理信息系统.doc
广东省道路运政管理信息系统--道路运输企业质量信誉考核子系统操作手册 PAGE PAGE 109 广东省道路运政管理信息系统 道路运输企业质量信誉考核子系统操作手册 二○一○年七月 目 录 TOC \ ...
- Android 养成记-1.5 二维码生成+添加logo+识别+扫码
先看图说话: 1.二维码生成: public void generateQRcode() throws FileNotFoundException {String mLink = text.getTe ...
- 网维无盘服务器错误代码,网维大师9添加副服务器提示258错误
不知道大家网吧或者在做网吧维护时,有没碰到网维大师9系列时添加副服务器提示代码258错误的尴尬情况,小编一个朋友就碰到这个问题,并且在天下网吧的QQ群里提出来了,然后天下网吧的热心朋友给出了来自亨特学 ...
- 网维无盘服务器教程,网维入门教程之无盘原理
原标题:网维入门教程之无盘原理 导读: 摘要: 启动原理客户机自检,加载PXE BOOT ROM PXE 请求 DHCP 服务器分配IP 客户机获取IP建立TCP/IP连接 通过 TFTP 获取开机镜 ...
- Linux服务器常见运维性能测试(3)CPU测试super_pi、sysbench
Linux服务器常见运维性能测试(3)CPU测试 常见性能测试软件 CPU测试:super_pi (计算圆周率) CPU测试:sysbench(CPU功能测试部分) 下载安装 sysbench综合测试 ...
- Linux服务器常见运维性能测试(1)综合跑分unixbench、superbench
Linux服务器常见运维性能测试及压力测试拷机稳定性系列(1)综合跑分unixbench.superbench 常见性能测试软件 综合测试:1.UnixBench 测试项 安装及使用 综合测试:2.s ...
最新文章
- Linux命令学习之nslookup
- expect spawn、linux expect 用法
- Spark 简介与安装部署
- C语言面试题分享(3)
- row number函数_Hive排名函数ROW_NUMBER,RANK 和 DENSE_RANK的区别
- 克隆后 mysql uuid_mysql主从复制失败(uuid)
- Tomcat找不到Controller里面的路径
- LCD12864 液晶显示-汉字及自定义显示(并口)
- 什么是AHP 层次分析法?
- php洗车分销系统_全国首个PHP宝塔IDC分销系统
- 拉普拉斯变换和Z变换表
- windows10系统瘦身记
- Intel CPU平台和架构介绍
- 拼多多回应漏洞:比薅羊毛更快的是“资损200亿”谣言的传播速度
- 藏语计算机基础知识,2017年青海民族大学计算机学院738藏语与现代汉语基础考研题库...
- 梯度累加是什么意思-详解
- 一个不错的故事(上)
- 计算机专业英语时间跨度,这是我见过的最变态的英语考试,没有之一
- impala查询报错问题 EOFException: Cannot seek after EOF 求解
- java 淘口令_淘口令解析丶Java教程网-IT开发者们的技术天堂
热门文章
- N1盒子单臂路由设置
- ros入门 工程目录结构、节点通信方式、基本操作命令
- 事务的隔离级别(附Redis的简述)
- airpods二代圆点按钮是啥_AirPods 2 使用技巧(基础篇)| 如何分辨两代 AirPods?
- MySQL数据库基础学习小终结:连接查询、表结构的修改、约束条件、MySQL与python交互
- Dedecms信息泄露漏洞(CVE-2018-6910)
- Weka安装及简单应用
- led台灯哪个牌子效果最好?2022最新国产led灯品牌排行
- Java串口助手 带UI界面 Java串口调试工具 FPV
- 算法--分治法归并排序 python