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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
关系型数据库 MySQL Linux
一次虚拟机centos7系统崩溃恢复记录
一次虚拟机centos7系统崩溃恢复记录
16 0
|
2天前
|
Shell Linux 应用服务中间件
centos系统内容器部署服务访问不到是因为run后面加了bash
centos系统内容器部署服务访问不到是因为run后面加了bash
|
2天前
|
Linux 网络安全
CentOS系统openssh-9,网络安全大厂面试真题解析大全
CentOS系统openssh-9,网络安全大厂面试真题解析大全
|
2天前
|
运维 Linux
CentOS系统openssh-9,你会的还只有初级Linux运维工程师的技术吗
CentOS系统openssh-9,你会的还只有初级Linux运维工程师的技术吗
|
3天前
|
JavaScript Java 关系型数据库
基于springboot+vue+Mysql的交流互动系统
简化操作,便于维护和使用。
14 2
|
4天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
19 0
|
4天前
|
Java Linux API
minio文档系统在centos7虚拟机上的搭建
minio文档系统在centos7虚拟机上的搭建
|
4天前
|
安全 Linux Anolis
centos停止更新?这篇博客教会你CentOS 7转化系统为阿里龙蜥Anolis OS 7
centos停止更新?这篇博客教会你CentOS 7转化系统为阿里龙蜥Anolis OS 7
|
4天前
|
网络协议 物联网 Linux
你不能不知道的:无公网IP,SSH远程连接CentOS服务器【内网穿透】
你不能不知道的:无公网IP,SSH远程连接CentOS服务器【内网穿透】
|
4天前
|
存储 关系型数据库 MySQL
9.3 【MySQL】系统表空间
9.3 【MySQL】系统表空间
12 0