LNMP环境搭建+ Linux系统加固报告

本文档详细记录了在Ubuntu系统上搭建WEB运行环境的过程,包括安装Ubuntu、配置SSH服务、安装Nginx、PHP-FPM和MySQL。接着,针对系统安全进行了加固,如账户安全配置、访问安全配置、文件系统安全配置、网络服务安全配置和IP协议安全配置。此外,还涉及了日志管理和图形界面的安全设置。
摘要由CSDN通过智能技术生成

WEB运行环境搭建报告

0x01 搭建虚拟机环境

安装Ubtuntu环境

image-20220508204041679

安装vim

apt-get install vim

换源

  1. 备份:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

  2. 换源:vim /etc/apt/sources.list

    #添加阿里源
    deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
    #添加清华源
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse multiverse
    
  3. 更新

    • sudo apt-get update
    • sudo apt-get upgrade

安装一些必要的软件

apt-get install curl

apt-get install net-tools

配置SSH服务

  1. 安装ssh-client:apt-get install openssh-client
  2. 安装ssh-server:sudo apt-get install openssh-server
  3. 检查服务是否能够启动成功:service ssh start + service ssh status
  4. 修改SSH配置:vim /etc/ssh/sshd_config
    • PermitRootLogin prohibit-passwordPermitRootLogin yes
    • #port 22port 22
  5. 重启服务:service ssh restart

image-20220508210718817

连接成功

将文件名改为英文

UI页面打开终端输入

  1. export LANG=en_US / export LANG=zh_CN
  2. xdg-user-dirs-gtk-update

打个镜像备份一下

0x02 安装Ngnix配置PHP-FPM

安装参考文章:https://tecadmin.net/setup-nginx-php-fpm-on-ubuntu-20-04/

配置参考文章:Ubuntu20.04 nginx +php 配置 - 简书 (jianshu.com)

安装Nginx

apt install nginx

安装PHP

安装ppa:ondrej/php

  • apt install software-properties-common
  • add-apt-repository ppa:ondrej/php

安装PHP7.4和PHP-FPM:apt install php7.4 php7.4-fpm

安装上述软件包后,php7.4-fpm 服务将自动启动,可以输入 service php7.4-fpm status确认

使用FPM配置NGINX

  1. 寻找配置路径:find / -name php7.4-fpm.sock

    找到结果为:/run/php/php7.4-fpm.sock

  2. 修改配置:vim /etc/nginx/sites-available/default

    image-20220508230832435

    去掉注释即可,需保证路径与第一步搜寻的路径一致

    image-20220508230958371

  3. 重启Nginx:service nginx restart


测试配置是否成功:

  1. /var/www/html页面下编写一个phpinfo页面

  2. 访问执行

    image-20220508231159967

0x03 安装Mysql服务

参考文档:(12条消息) Mysql8.0修改和重置密码_Coder-Rose的博客-CSDN博客_修改mysql8数据库密码

  1. 安装mysql服务: apt-get install mysql-server

  2. 查看服务状态:service mysql status

  3. 修改root密码:注意由于mysql8.0在user表加了字段authentication_string,所以其修改方式会有些不同

    以root身份直接进入mysql

    1. use mysql;
    2. alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
    3. flush privileges;

    image-20220508235105178

  4. 测试连接

    image-20220508235123139

0x04 代码运行

第一步 开启PHP的报错回显

一开始运行测试代码,没有配置,结果不知道错在哪

配置php.ini文件:/etc/php/7.4/fpm/php.ini

image-20220509110551399

开启后需要重启服务:service php7.4-fpm restart | service nginx restart

第二步 安装mysqli扩展

这一步花了我两个小时,配置扩展包目录那里卡了好久

  1. 找到扩展的安装路径:php -i | grep -i extension_dir

    image-20220509110941426

  2. 进入路径查看是否为扩展包

    image-20220509111008583

    没有发现mysqli.so扩展包

  3. 安装:apt-get install php7.4-mysql

  4. 查看,确认扩展包存在

    image-20220509111129238

  5. 配置php.ini文件

    去掉注释,开启扩展

    image-20220509111235642

    配置扩展包的安装目录

    image-20220509111324296

  6. 重启服务:service php7.4-fpm restart | service nginx restart

第三步 运行测试代码

<?php
	if(!extension_loaded('mysqli')){
    	echo "mysqli扩展未配置成功";
        exit(0);
    }
    $con=mysqli_connect('localhost','root','root','mydb');
    if($con){
        echo "数据库连接成功<br>";
        $sql='select @@datadir;';
        $result = $con->query($sql);
        while($row = mysqli_fetch_row($result)){
        	var_dump($row);
        }
    }else{
        echo '数据库连接连接失败';
    }
?>

image-20220509112553890

测试成功,环境搭建完成,拍一个快照

0x05 系统加固

① - 账户安全配置要求

锁定无用的用户

步骤

  1. 查看所用用户:awk -F ':' '($3>500){print $1}' /etc/passwd

    查看是否存在一下可能无用的账户:hpsmh、named、uucp、nuucp、adm、daemon、bin、lp

  2. 锁定无用账户:passwd -l <username>

root@h1kkibox:/home/h1kki# awk -F ':' '($3>500){print $1}' /etc/passwd
nobody
h1kki
systemd-coredump
root@h1kkibox:/home/h1kki# passwd -l nobody
passwd:密码过期信息已更改。

意义

防止攻击者通过无用账户提权

删除可能无用的用户组

步骤

  1. 执行备份

  2. 查看是否存在一下可能无用的用户组:lp、nuucp、nogroup

    cat /etc/group | grep lp

  3. 删除无用的用户组:delgroup <groupname>

root@h1kkibox:/home/h1kki# cp /etc/group /etc/group.bak
root@h1kkibox:/home/h1kki# cat /etc/group |grep lp
lp:x:7:
lpadmin:x:120:h1kki
root@h1kkibox:/home/h1kki# cat /etc/group |grep nuucp
root@h1kkibox:/home/h1kki# cat /etc/group |grep nogroup
nogroup:x:65534:
root@h1kkibox:/home/h1kki# delgroup lp
/usr/sbin/delgroup: "lp"仍以"lp"作为他们的首选组!
root@h1kkibox:/home/h1kki# delgroup nogroup
/usr/sbin/delgroup: "sync"仍以"nogroup"作为他们的首选组!

意义

方便更好的权限控制

检查是否存在空密码的账户

步骤

  1. 使用命令查看是否存在空密码的账户:awk -F ":" '($2=="!"){print $1}' /etc/shadow
  2. 如果出现结果,则需要将出现的账户锁定:passwd -l <username>
root@h1kkibox:/home/h1kki# awk -F ":" '($2=="!"){print $1}' /etc/shadow
speech-dispatcher
mysql
root@h1kkibox:/home/h1kki# passwd -l mysql
passwd:密码过期信息已更改。
root@h1kkibox:/home/h1kki# passwd -l speech-dispatcher
passwd:密码过期信息已更改。

意义

防止攻击者通过空密码登录该账户

设置口令策略满足复杂度和周期要求

步骤

  1. 执行备份

  2. 查看当前配置:vim /etc/login.defs | grep PASS

  3. 修改不满足的配置

    PASS_MAX_DAYS 90 #密码最长过期天数 PASS_MIN_DAYS 0 #修改密码最小间隔天数 PASS_MIN_LEN 10 #密码最小长度 PASS_WARN_AGE 7 #密码过期警告天数

root@h1kkibox:/home/h1kki# cp /etc/login.defs /etc/login.defs.bak
root@h1kkibox:/home/h1kki# vim /etc/login.defs
root@h1kkibox:/home/h1kki# cat /etc/login.defs | grep PASS
#	PASS_MAX_DAYS	Maximum number of days a password may be used.
#	PASS_MIN_DAYS	Minimum number of days allowed between password changes.
#	PASS_WARN_AGE	Number of days warning given before a password expires.
PASS_MAX_DAYS	90
PASS_MIN_DAYS	0
PASS_WARN_AGE	7
#PASS_CHANGE_TRIES
#PASS_ALWAYS_WARN
PASS_MIN_LEN 10
#PASS_MAX_LEN
# NO_PASSWORD_CONSOLE

image-20220509132604460

意义

通过配置来控制用户的密码规则,从而降低攻击者利用弱口令拿到密码的可能性

设置密码历史,不能重复使用最近五次已使用的口令

步骤

  1. 执行备份:cp /etc/pam.d/common-password /etc/pam.d/common-password.bak

  2. 修改文件:vim /etc/pam.d/common-password

    image-20220509163037161

    添加一行:password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5

    image-20220509163228931

意义

防止攻击者通过用户社工信息拿到的历史口令登录系统

配置SSH服务,限制root用户远程登录,并修改端口号

步骤

  1. 执行备份:cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

  2. 修改SSH配置文件:vim /etc/ssh/sshd_config

    image-20220509164012198

    image-20220509164052699image-20220509164101458

  3. 重启服务

意义

降低服务器被拿下的危害,但操作人员平时必须以普通用户登录再通过su提权

检查passwd和group文件的权限设置

步骤

  1. chmod 644 /etc/passwd
  2. chmod 644 /etc/group
root@h1kkibox:/opt# chmod 644 /etc/passwd
root@h1kkibox:/opt# chmod 644 /etc/group

意义

防止passwd和group权限过高,导致任意用户可以修改,将其恢复为默认的644属性

系统umask设置

步骤

  1. 执行备份:cp /etc/profile /etc/profile_bak
  2. 通过命令修改umask的值:umask 027
root@h1kkibox:/opt# cp /etc/profile /etc/profile_bak
root@h1kkibox:/opt# umask
0022
root@h1kkibox:/opt# umask 027
root@h1kkibox:/opt# umask
0027

意义

修改权限掩码,为新建的文件预设更低的权限

设置/etc/shadow和/etc/passwd文件属性不可更改

步骤

  1. 执行备份
  2. 修改属性不可改:chattr +i /etc/shadow
root@h1kkibox:/home/h1kki# cp /etc/passwd /etc/passwd.bak
root@h1kkibox:/home/h1kki# cp /etc/shadow /etc/shadow.bak
root@h1kkibox:/home/h1kki# chattr +i /etc/passwd
root@h1kkibox:/home/h1kki# chattr +i /etc/shadow

意义

防止有人修改shadow和passwd文件属性

② - 访问安全配置要求

因为本系统只安装了SSH服务,所以其它的服务加固暂不做演示

远程登录取消telnet采用ssh

步骤

关闭telnet服务,启动ssh服务

新系统没有安装telnet服务,此处不做演示

root@h1kkibox:/opt# service ssh status
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-05-08 21:35:10 CST; 19h ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 923 (sshd)
      Tasks: 1 (limit: 8762)
     Memory: 6.2M
     CGroup: /system.slice/ssh.service
             └─923 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

意义

防止服务器被攻击者劫持而暴露重要信息

取消SSH的Banner信息

步骤

  1. 备份:之前已经备份过,此处不做演示

  2. 修改/etc/ssh/sshd_config:去掉#Banner none的注释

    image-20220509170457515

意义

更改SSH端口后,防止攻击者通过Banner信息发现SSH启用的端口

升级SSH版本到2.0

步骤

  1. 备份:之前已经备份过,此处不做演示
  2. 修改/etc/ssh/sshd_config:添加Protocol 2字段,表示只支持SSH2.0协议
root@h1kkibox:/etc/ssh# cat /etc/ssh/sshd_config | grep Protocol
root@h1kkibox:/etc/ssh# vim /etc/ssh/sshd_config
root@h1kkibox:/etc/ssh# cat /etc/ssh/sshd_config | grep Protocol
Protocol 2

意义

防止攻击者通过SSH1.0协议的漏洞进行攻击

连续认证失败次数超过6次(不含6次)锁定该账号

步骤

  1. 备份

  2. 设置/etc/pam.d/login文件:设置为密码连续错误6次,锁定时间300 秒

    auth required pam_tally.so oneer=filad deny=6 unlock_time=300

image-20220509171842947

意义

防止攻击者爆破登录密码

③ - 文件系统安全配置要求

重要目录和文件权限设置

步骤

  1. 按照以下命令检查目录和文件的权限设置情况

    root@h1kkibox:/etc# ll /etc
    root@h1kkibox:/etc# ll /tmp
    root@h1kkibox:/etc# ll /etc/default
    
  2. 使用chmod命令修改不恰当的权限配置

意义

为重要目录和文件分配合理的权限,能够将攻击者进入的损失降到最低

检查没有所有者的文件或目录

步骤

执行命令:find / \( -nouser -o -nogroup \) -exec ls -al {} \;

root@h1kkibox:/etc# find / \( -nouser -o -nogroup \) -exec ls -al {} \;
总用量 8
drwxr-xr-x 2 62803 62803 4096 59 10:57 .
drwx------ 3 root  root  4096 59 10:57 ..
find: ‘/proc/28225/task/28225/fd/6’: 没有那个文件或目录
find: ‘/proc/28225/task/28225/fdinfo/6’: 没有那个文件或目录
find: ‘/proc/28225/fd/5’: 没有那个文件或目录
find: ‘/proc/28225/fdinfo/5’: 没有那个文件或目录
find: ‘/run/user/1000/doc’: 权限不够
find: ‘/run/user/1000/gvfs’: 权限不够

意义

对没有所有者的文件进行详细的分析,是失陷主机探测的重要步骤

④ - 网络服务安全配置要求

因为本机没有安装任何的网络服务,所以将配置要求列出,而不做加固

  1. 禁止NIS/NIS+服务以守护方式运行
  2. 禁用打印服务以守护方式运行
  3. 禁用SENDMAIL服务以守护方式运行
  4. 禁用不必要的标准启动服务
  5. 禁用不必要的inetd服务

⑤ - IP协议安全配置要求

关闭IP转发

步骤

  1. 检查是否已经关闭该配置:cat /proc/sys/net/ipv4/ip_forward,如果返回值为0则说明已经关闭
  2. 如果没有关闭,可以使用该命令将其赋值为0:echo 0 > /proc/sys/net/ipv4/ip_forward

image-20220509182935986

意义

搜索了一下,这个应该是路由转发的配置,默认是关闭的,但是加固的意义是啥暂时还不清楚,防止外带数据?

#TODO

关闭ping数据包的响应

步骤

  1. 检查是否关闭该配置:cat /proc/sys/net/ipv4/icmp_echo_ignore_all,如果返回值为1表示禁ping
  2. 如果没有禁止,则可以使用命令将其赋值为1:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
h1kki@h1kkibox:~$ cat /proc/sys/net/ipv4/ip_forward
0
root@h1kkibox:/home/h1kki# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
root@h1kkibox:/home/h1kki# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
1

意义

禁止攻击者通过ping命令探测主机存活性,以及通过ping命令来DDoS攻击

配置SYSLOG

参考文档:如何在 Ubuntu 20.04 LTS 上设置 Rsyslog-统信UOS之家 (xtuos.com)

步骤

  1. 检查rsyslogd进程是否运行:ps -ef | grep rsyslog,如果没有允许则将其开启

  2. 备份配置文件:cp /etc/rsyslog.conf /etc/rsyslog.conf.bak

  3. 进行如下配置:vim /etc/rsyslog.conf

    image-20220509185907244

  4. 重启服务:service rsyslog restart

意义

开启日志记录,方便溯源攻击路径

查看系统日志文件权限

步骤

  1. 检查系统日志文件的权限
    • ll /var/log
    • ll /var/log/syslog
  2. 设置权限为640:chmod 640 /var/log/*

意义

防止包含日志造成的远程代码执行

⑥ - 其它安全配置要求

禁用图形页面登录

步骤

以root权限执行:init 3

image-20220509190742346 image-20220509190807100

回退操作:sudo init 5

意义

防止攻击者通过远程桌面连接软件进行远程操控攻击

字符交互界面帐户超时自动退出

操作

  1. 检查是否已经配置:cat /etc/profile | grep TMOUT

  2. 备份:cp /etc/profile /etc/profile.bak

  3. 修改:vim /etc/profile,添加TMOUT=600,即600s超时退出

    export TMOUT=600    	#600s超时退出
    readonly TMOUT  	 	#将值设置为readonly 防止用户更改,在shell中无法修改TMOUT
    
  4. 检查是否配置成功

    image-20220509192323887

意义

防范线下社工

图形界面设置默认自动锁屏时间为10分钟

操作

直接在图形化页面操作

image-20220509192545746

image-20220509192604832

意义

防范线下社工

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值