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

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
9月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
2233 16
|
10月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
745 10
|
网络协议 Linux 网络安全
微软工程师偷偷在用!这款SSH工具让Windows操控CentOS比Mac还优雅!
远程登录Linux服务器是管理和维护服务器的重要手段,尤其在远程办公、云服务管理等场景中不可或缺。通过工具如XShell,用户可以方便地进行远程管理。SSH协议确保了数据传输的安全性,命令行界面提高了操作效率。配置XShell连接CentOS时,需确保Linux系统开启sshd服务和22端口,并正确设置主机地址、用户名和密码。此外,调整字体和配色方案可优化使用体验,解决中文显示问题。
671 21
微软工程师偷偷在用!这款SSH工具让Windows操控CentOS比Mac还优雅!
|
关系型数据库 MySQL Linux
CentOS 7系统下详细安装MySQL 5.7的步骤:包括密码配置、字符集配置、远程连接配置
以上就是在CentOS 7系统下安装MySQL 5.7的详细步骤。希望这个指南能帮助你顺利完成安装。
3289 26
|
安全 Linux 网络安全
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
584 10
|
安全 Linux 网络安全
CentOS 8下SSH连接超时与“无法加载主机密钥”错误的排查与修复
在CentOS 8系统中,宝塔面板提示“出错了,面板运行时发生错误”,导致插件无法正常显示。同时,SSH连接超时,修复面板功能失效。通过VNC连接排查,发现SSH服务安装和配置问题频发,最终通过重装SSH、调整权限并重新生成主机密钥文件解决问题,成功恢复SSH连接。
1316 16
|
安全 关系型数据库 MySQL
CentOS7仅安装部署MySQL80客户端
通过上述步骤,你可以在CentOS 7上成功安装并配置MySQL 8.0客户端。这个过程确保你能够使用MySQL客户端工具连接和管理远程的MySQL数据库,而不需要在本地安装MySQL服务器。定期更新MySQL客户端可以确保你使用的是最新的功能和安全修复。
1492 16
|
关系型数据库 MySQL Java
centos7安装mysql教程及Navicat平替软件
【8月更文挑战第17天】本教程详述CentOS 7上安装MySQL的过程。首先确保移除任何预装的MySQL组件,然后通过wget获取并安装MySQL的YUM源。可以选择安装特定版本如5.7或8.0。安装MySQL服务器后,启动服务并查找初始密码。登录MySQL后应立即更改密码,并可根据需要设置远程访问权限。此外,还推荐使用免费开源的DBeaver作为数据库管理工具,提供了安装步骤以方便管理和操作MySQL数据库。
562 3
|
安全 关系型数据库 MySQL
Linux(CentOS6)安装MySQL5.6
Linux(CentOS 6)系统上安装MySQL 5.6版本的详细步骤,包括准备数据存放目录、创建用户、下载安装包、初始化数据库、配置服务脚本、设置环境变量等操作。
1053 1
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
824 3