CentOS 7系统加固详细方案SSH FTP MYSQL加固

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: CentOS 7系统加固详细方案SSH FTP MYSQL加固

一、删除后门账户 修改强口令

1、修改改密码长度需要编译login.defs文件

vi /etc/login.defs
PASS_MIN_LEN 8

2、注释掉不需要的用户和用户组

或者

检查是否存在除root之外UID为0的用户

使用如下代码,对passwd文件进行检索:

awk -F ':' '($3==0){print $1)' /etc/passwd

将检索出来的不是root的用户使用userdel命令全部删除。

3、限制su命令:如果您不想任何人能够su作为root,可以编辑/etc/pam.d/su文件,增加如下两行:

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=isd

二、更改权限设置

1、chattr命令给下面的文件加上不可更改属性,从而防止非授权用户获得权限。

# chattr +i /etc/passwd
# chattr +i /etc/shadow
# chattr +i /etc/group
# chattr +i /etc/gshadow

dd22d4173e6b6845f3bff05d79c30f68_2c4949b8a5e94e308e856a2eee01358f.png

2、禁止Ctrl Alt Delete重新启动机器命令

修改/etc/inittab文件,将”ca::ctrlaltdel:/sbin/shutdown -t3 -r now”一行注释掉。


f0a12e29da9f2b93381b0c2da2f81753_ab163024b9f6496fa5f8d7cf5bb5744e.png


重新设置/etc/rc.d/init.d/目录下所有文件的许可权限,运行如下命令:# chmod -R 700 /etc/rc.d/init.d/*

a705ef6f562c6e6e97f4b341b3c0ec8a_7462ca48b06b4c9bb7662d13fba32d1e.png

三、远程登陆

1、#不允许使用低版本的SSH协议

vi /etc/ssh/ssd_config
将#protocol 2,1改为
protocol 2

2、#取消root直接远程登录

vi /etc/ssh/sshd_config
  PermitRootLogin no

3、#禁用.rhosts 文件

Vi /etc/ssh/sshd_config
IgnoreRhosts yes

4、#禁用基于主机的认证

Vi /etc/ssh/sshd_config

HostbasedAuthentication no

5、#禁用空密码:

PermitEmptyPasswords no
禁止帐号使用空密码进行远程登录SSH

6、设置访问控制策略限制能够管理本机的IP地址

检查方法:

#cat /etc/ssh/sshd_config  查看有无AllowUsers的语句
备份方法:
#cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
加固方法:
#vi /etc/ssh/sshd_config,添加以下语句
AllowUsers  *@127.*.*.*     此句意为:仅允许127.0.0.0/8网段所有用户通过ssh访问  

保存后重启ssh服务

#service sshd restart

7、限制FTP登录

检查方法:

#cat /etc/vsftpd/ftpusers 确认是否包含用户名,这些用户名不允许登录FTP服务

备份方法:

#cp -p /etc/vsftpd/ftpusers /etc/vsftpd/ftpusers_bak

加固方法:

#vi /etc/vsftpd/ftpusers 添加行,每行包含一个用户名,添加的用户将被禁止登录FTP服务(红色字体为修改部分)

四、服务器

1、服务器禁止ping

 cp  /etc/rc.d/rc.local  /etc/rc.d/rc.localbak     
 vi  /etc/rc.d/rc.local        #在文件末尾增加下面这一行
 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all   

参数0表示允许 1表示禁止

五、限制访问

1、在 /etc/hosts.allow中加入

all:127.0.0.1

这样就会允许来自127.0.0.1的客户来访问。

在 /etc/hosts.deny中加入

all:0.0.0.0

就限制了来自0.0.0.0的所有的所有的IP。

设置好后,要重新启动

# /etc/rc.d/init.d/xinetd restart

#/etc/rc.d/init.d/network restart

六、FTP加固

1、禁止匿名登录

anonymous_enable=NO

d4552d418fd3ab4567ef25c0edd8f37f_12cb74896c654d538f8b591ab0954473.png


2、设置本地用户的文件生成掩码为022,默认值为077

local_umask=022

4b8e7e69ac15ac498046da1c7c6cd400_9d62df80f1a7411da1e1d7a323df72a6.png


3、禁止激活上传和下载日志

xferlog_enable=NO

04d110a8c600ba949a4f2e295e29945e_2d45b55e3d1d4f2ebd898311e7db2f6e.png


4、禁止匿名用户上传

为了禁止匿名用户上传,需要在/etc/vsftpd中激活两个配置选项,分别是:

anon_upload_enable=NO

//禁止匿名用户上传

0d500e9a5a590bd9024e06b86cf9b154_ff4cb8d6ce73481e8577c4747dcc73b5.png

anon_mkdir_write_enable=NO

//关闭匿名用户的写和创建目录的权限

若要以上两项设置生效,同时还要求:

write_enable=NO

//禁止匿名用户对文件系统的上传目录具有写权限

添加如下的配置语句:

anon_world_readable_only=YES

//上面的配置语句用于禁止放开匿名用户的浏览权限

重新启动vsftpd.

5、设置客户端连接时的端口范围

例如下面的配置:

pasv_min_port=50000 (改成1)

pasv_max_port=60000(改成2)

将使客户端连接时的端口范围在50000和60000之间。这提高了系统的安全性。


6、设置chroot

在 默认配置中,本地用户可以切换到自家目录以外的目录进行浏览,并在权限许可的范围内进行下载和上传。这样的设置对于一个FTP服务器来说是不安全的。如果希望用户登录后不能切换到自家目录以外的目录,则需要设置chroot选项,涉及如下选项:

chroot_local_user

chroot_list_enable

chroot_list_file

有两种设置chroot的方法:

(1)设置对所有的本地用户执行chroot(即活动范围限制在自家目录)只要将chroot_local_user的值设 为YES即可, 即:

chroot_local_user=YES

836cbcddbd0d29b3d1c7b9d4b4094957_ce3274e1c13142118f6eabce04b9ea3c.png


(2)设置指定的用户执行chroot需要如下的设置:

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file= /etc/vsftpd.chroot_list

这样,只有/etc/vsftpd.chroot_list文件中指定的用户才执行chroot。

注意 :上面所提及的文件/etc/vsftpd.chroot_list和下面将要提及的文件 /etc/vsftpd.user_list的格式要求均为每个 用户名占一行。


7、只允许指定的主机访问

在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:

only_from <主机表>

例如:only_from 192.168.1.0

表示只允许192.168.1.0网段内的主机访问。

2)指定不能访问的主机

在配置文件/etc/xinetd.d/vsftpd的{}中添加如下的配置语句:

no_access <主机表>

例如:no_access 192.168.1.0

表示只有192.168.1.0网段内的主机不能访问。

(因为现在情况是vsftpd服务不是由xinetd管理的,所以没有这个配置文件;vsftpd使用standalone模式启动,则有这个配置文件)


七、一些需要禁用的PHP危险函数(disable_functions)

phpinfo()

功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。

危险等级:中


passthru()

功能描述:允许执行一个外部程序并回显输出,类似于 exec()。

危险等级:高


exec()

功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。

危险等级:高


system()

功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。

危险等级:高


chroot()

功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式

PHP 时才能工作,且该函数不适用于 Windows 系统。

危险等级:高


scandir()

功能描述:列出指定路径中的文件和目录。

危险等级:中


chgrp()

功能描述:改变文件或目录所属的用户组。

危险等级:高


chown()

功能描述:改变文件或目录的所有者。

危险等级:高


shell_exec()

功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。

危险等级:高


proc_open()

功能描述:执行一个命令并打开文件指针用于读取以及写入。

危险等级:高


proc_get_status()

功能描述:获取使用 proc_open() 所打开进程的信息。

危险等级:高


error_log()

功能描述:将错误信息发送到指定位置(文件)。

安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode,

执行任意命令。

危险等级:低


ini_alter()

功能描述:是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。

具体参见 ini_set()。

危险等级:高


ini_set()

功能描述:可用于修改、设置 PHP 环境配置参数。

危险等级:高


ini_restore()

功能描述:可用于恢复 PHP 环境配置参数到其初始值。

危险等级:高


dl()

功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。

危险等级:高


pfsockopen()

功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。

危险等级:高


syslog()

功能描述:可调用 UNIX 系统的系统层 syslog() 函数。

危险等级:中


readlink()

功能描述:返回符号连接指向的目标文件内容。

危险等级:中


symlink()

功能描述:在 UNIX 系统中建立一个符号链接。

危险等级:高


popen()

功能描述:可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。

危险等级:高


stream_socket_server()

功能描述:建立一个 Internet 或 UNIX 服务器连接。

危险等级:中


putenv()

功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数

修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。

危险等级:高


禁用方法如下:

打开/etc/php.ini文件,

查找到 disable_functions ,添加需禁用的函数名,如下:

phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

八、MySQL加固

1、修改root用户口令,删除空口令

缺省安装的MySQL的root用户是空密码的,为了安全起见,必须修改为强密码,所谓的强密码,至少8位,由字母、数字和符号组成的不规律密码。使用MySQL自带的命令mysaladmin修改root密码,同时也可以登陆数据库,修改数据库mysql下的user表的字段内容,修改方法如下所示:


/usr/local/mysql/bin/mysqladmin -u root password “upassword” //使用mysqladmin

#mysql> use mysql;
#mysql> update user set password=password(‘upassword’) where user=’root’;

#mysql> flush privileges; //强制刷新内存授权表,否则用的还是在内存缓冲的口令

2、禁止远程连接数据库

#vi /etc/my.cf

将#skip-networking注释去掉。

# /usr/local/mysql/bin/mysqladmin -u root -p shutdown //停止数据库
#/usr/local/mysql/bin/mysqld_safe –user=mysql & //后台用mysql用户启动mysql

3、用户目录权限限制

默认的mysql是安装在/usr/local/mysql,而对应的数据库文件在/usr/local/mysql/var目录下,因此,必须保证该目录不能让未经授权的用户访问后把数据库打包拷贝走了,所以要限制对该目录的访问。确保mysqld运行时,只使用对数据库目录具有读或写权限的linux用户来运行。

# /usr/local/mysql/bin/mysqladmin -u root -p shutdown //停止数据库
#/usr/local/mysql/bin/mysqld_safe –user=mysql & //后台用mysql用户启动mysql

4、禁止MySQL对本地文件存取

可以在my.cnf中添加local-infile=0,或者加参数local-infile=0启动mysql。

#/usr/local/mysql/bin/mysqld_safe –user=mysql –local-infile=0 &
#mysql> load data local infile ’sqlfile.txt’ into table users fields terminated by ‘,’;
#ERROR 1148 (42000): The used command is not allowed with this MySQL version

–local-infile=0选项启动mysqld从服务器端禁用所有LOAD DATA LOCAL命令,假如需要获取本地文件,需要打开,但是建议关闭。


5、禁止远程访问

如果数据库不需要远程访问,可以禁止远程 TCP/IP 连接,通过在 MySQL 服务器的启动参数中添加–skip-networking参数使 MySQL 服务不监听任何 TCP/IP 连接,增加安全性。

九、Kill 连接(shell)

十、shell攻击获取flag(nc和POST)

十一、python

DisplayDirectory

nc

WebShell

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
147 3
Mysql高可用架构方案
|
4月前
|
关系型数据库 MySQL Java
centos7安装mysql教程及Navicat平替软件
【8月更文挑战第17天】本教程详述CentOS 7上安装MySQL的过程。首先确保移除任何预装的MySQL组件,然后通过wget获取并安装MySQL的YUM源。可以选择安装特定版本如5.7或8.0。安装MySQL服务器后,启动服务并查找初始密码。登录MySQL后应立即更改密码,并可根据需要设置远程访问权限。此外,还推荐使用免费开源的DBeaver作为数据库管理工具,提供了安装步骤以方便管理和操作MySQL数据库。
168 3
|
6天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
12天前
|
安全 网络安全
gbase8a centos8(kylinv10)加载报登录 ftp失败报错530 Login incorrect 排查过程及解决办法
centos8(kylinv10)加载报登录 ftp失败报错530 Login incorrect 排查过程及解决办法
|
1月前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
69 5
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
102 3
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。
本文介绍了在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。内容涵盖准备工作、下载源码、编译安装、配置服务、登录设置及实践心得,帮助读者根据需求选择最适合的安装方法。
90 2
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
140 2
|
1月前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
39 1
|
3月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
621 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)