常用工具
写在前面
RPM
Linux rpm 命令用于管理套件。
rpm(英文全拼:redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
- 阿里巴巴开源镜像 https://developer.aliyun.com/mirror/
- RPM 仓库 http://www.rpmfind.net/linux/RPM/index.html
软件安装
JDK-1.8
-
下载jdk8并解压到 /usr/local/java
-
vim /etc/profile
export JAVA_HOME=/usr/local/java/{解压后的名称} export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
-
重新执行 配置
source /etc/profile
详见: link.
Nacos-1.3.2
安装
- 下载nacos 解压到 /usr/local/nacos
- 解压tar -zxvf nacos-server-1.3.2.tar.gz
- 启动***nacos sh startup.sh -m standalone*** (***standalone***代表着单机模式运行,非集群模式)
配置调整
- 调整日志配置。
-
修改 /usr/local/nacos/conf 目录下 nacos-logback.xml,将日志级别调整到 error,并将 maxFileSize 和 totalSizeCap 调整至合适大小。
-
修改 /usr/local/nacos/conf 目录下 application.properties ,设置
server.tomcat.accesslog.enabled=false
配置mysql库
-
使用sql脚本初始化数据库
# nacos提供的初始化脚本 /nacos/conf/nacos-mysql.sql
-
修改application.properties配置
#*************** Config Module Related Configurations ***************# ### If use MySQL as datasource: spring.datasource.platform=mysql ### Count of DB: db.num=1 ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user=${user} db.password=${password}
Nginx-1.18.0
相关组件
pcre
1、cd /usr/local/
# 下载 使用pcre2会不兼容
2、wget https://sourceforge.net/projects/pcre/files/pcre/8.44/pcre-8.44.tar.gz
# 解压
3、tar -zxvf pcre-8.44.tar.gz
4、cd pcre-8.44
# 使用默认配置
5、./configure
可能会报错:configure: error: Invalid C++ compiler or C++ compiler flags
在安装 PCRE 软件时可能会报这个错误,这是因为系统缺失 gcc-c++ 库。CentOS下(我这里的环境是CentOS 7)root超级管理员用户执行以下命令,非 root超级管理员前面加上 sudo 用以获取权限
执行。
root超级管理员:
# yum install -y gcc-c++
普通用户:
$ sudo yum install -y gcc-c++
安装 gcc-c++ 库解决该问题。
# 编译
6、make && make install
安装nginx
1、cd /usr/local
#下载解压
2、wget nginx.org/download/nginx-1.19.0.tar.gz
3、tar -zxvf nginx-1.19.0.tar.gz
# 注意:这只是源码
4、cd nginx-1.19.0
# 设置常量
5、 ./configure \
--prefix=/usr/local/webserver/nginx \
--with-http_stub_status_module \
--with-pcre=/usr/local/pcre-8.44 # 刚刚安装的 pcre 的位置
可能会出现报错信息(the HTTP gzip module requires the zlib library.意思是告诉我们没有zlib library的支持了 碰到此类问题我们只要安装这个库就可以了 yum install -y zlib-devel)
# 编译
6、make && make install
配置nginx全局命令
1、创建配置文件 touch /etc/init.d/nginx
2、编辑配置文件 vim /etc/init.d/nginx 注意粘贴后的开头是否仍为 #!/bin/bash,文件分隔符是否为 LF。
#!/bin/bash
# nginx - this script starts and stops the nginx daemin
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/webserver/nginx/conf/nginx.conf
# pidfile: /usr/local/webserver/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/webserver/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/webserver/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
start
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
修改文件的权限并加入系统服务配置
cd /etc/init.d
chmod 755 /etc/init.d/nginx
chkconfig --add nginx
追加环境变量
1、vim /etc/profile
export PATH=$PATH:/usr/local/webserver/nginx/sbin
3、source /etc/profile(使环境变量生效)
nginx的重启与启动
重启nginx
启动nginx
[root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
MySQL-5.7.28
安装
Mysql 初始化时可能缺失依赖软件,根据提示使用rpm安装对应缺失软件。
# 下载,解压安装包
tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar
# 移动目录至 /usr/local/mysql
mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql
# 创建用户组 mysql
groupadd mysql
# 创建mysql用户
useradd -r -g mysql mysql
# 创建数据存储目录
mkdir -p /data/mysql
chown mysql:mysql -R /data/mysql
# 编辑配置文件
vim /etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
# 切换到mysql-bin目录
cd /usr/local/mysql/bin/
# 初始化
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
# 查看临时密码
cat /data/mysql/mysql.err
# 拷贝启动脚本至系统目录
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
# 启动mysql
service mysql start
#重启mysql
service mysql restart
# 查看是否成功
ps -ef|grep mysql
# 修改root用户密码
# mysql-bin目录下 ${password} 密码
./mysql -u root -p
SET PASSWORD = PASSWORD('${password}');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;
# 设置可访问的IP
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
系统加固
1.禁用local-infile选项
描述
禁用local_infile选项会降低攻击者通过SQL注入漏洞器读取敏感文件的能力
加固建议
编辑Mysql配置文件<conf_path>/my.cnf,在mysqld 段落中配置local-infile参数为0,并重启mysql服务:
local-infile=0
2.确保没有用户配置了通配符主机名
描述
避免在主机名中只使用通配符,有助于限定可以连接数据库的客户端,否则服务就开放到了公网
加固建议
执行SQL更新语句,为每个用户指定允许连接的host范围。
- 登录数据库,执行use mysql;
- 执行语句select user,Host from user where Host=’%’;查看HOST为通配符的用户;
- 删除用户或者修改用户host字段,删除语句:DROP USER ‘user_name’@’%’; 。更新语句:update user set host = <new_host> where host = ‘%’;。
- 执行SQL语句:
OPTIMIZE TABLE user;
flush privileges;
3.修改默认3306端口
描述
避免使用熟知的端口,降低被初级扫描的风险
加固建议
编辑<conf_path>/my.cnf文件,mysqld 段落中配置新的端口参数,并重启MySQL服务:
port=3506
Redis-5.0.9
安装
# 解压 redis指定版本安装包至 /usr/local
tar -xzvf redis-${version}.tar.gz -C /usr/local/
# 切换到安装目录
cd /usr/local/redis-${version}
# 编译 Redis 文件, Redis 是使用 c 语言编写的。 会使用 gcc 编译器。
# gcc 是 GNU compiler collection 的缩写,它是 Linux 下一个编译器集合( 相当于 javac ), 是 c 或 c++程序的编译器。
# 1.未安装gcc-使用对应版本的gcc安装包完成安装。 {压缩包}/rpm-centos7.5/gcc
# 清理上次编译产生的文件
make distclean
# 编译
make
# 在make执行之后再执行 make install,该操作则将 src下的许多可执行文件复制到/usr/local/bin 目录下,这样做可以在任意目录执行redis的软件的命令(例如# 启动,停止,客户端连接服务器等), make install 可以不用执行,看个人习惯。
make install
# 后端启动redis(可修改配置文件的daemonize=true参数,设置后端启动)
./redis-server &
系统加固
1.禁止监听在公网
描述
Redis监听在0.0.0.0,可能导致服务对外或内网横向移动渗透风险,极易被黑客利用入侵。
加固建议
在redis的配置文件redis.conf中配置如下: bind 127.0.0.1或者内网IP,然后重启redis
2.禁止使用root用户启动
描述
使用root权限去运行网络服务是比较有风险的(nginx和apache都是有独立的work用户,而redis没有)。redis crackit 漏洞就是利用root用户的权限来替换或者增加authorized_keys,来获取root登录权限的
加固建议
使用root切换到redis用户启动服务:
useradd -s /sbin/nolog -M redis
sudo -u redis //redis-server //redis.conf
3.限制redis 配置文件访问权限
描述
因为redis密码明文存储在配置文件中,禁止不相关的用户访问改配置文件是必要的,设置redis配置文件权限为600,
加固建议re
执行以下命令修改配置文件权限:
chmod 600 //redis.conf chown redis:redis -R /data/mysql
4.修改默认6379端口
描述
避免使用熟知的端口,降低被初级扫描的风险
加固建议
编辑文件redis的配置文件redis.conf,找到包含port的行,将默认的6379修改为自定义的端口号,然后重启redis
5.禁用或者重命名危险命令
描述
Redis中线上使用keys *命令,也是非常危险的。因此线上的Redis必须考虑禁用一些危险的命令,或者尽量避免谁都可以使用这些命令,Redis没有完整的管理系统,但是也提供了一些方案。
加固建议
修改 redis.conf 文件,添加
rename-command FLUSHALL “”
rename-command FLUSHDB “”
rename-command CONFIG “”
rename-command KEYS “”
rename-command SHUTDOWN “”
rename-command DEL “”
rename-command EVAL “”
然后重启redis。 重命名为"" 代表禁用命令,如想保留命令,可以重命名为不可猜测的字符串,如: rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC
6.打开保护模式
描述
redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。
加固建议
redis.conf安全设置: # 打开保护模式 protected-mode yes
redis启动后修改密码
无密码登录redis cd到redis的bin下 执行 ./redis -cli
修改redis密码 config set requirepass as1234
auth sa1234 //按已经修改的密码登录
redis -cli -p 6379 -a sa1234