Ubuntu20LTS 服务搭建与安全加固

服务搭建与安全加固

  • 第一部分 服务搭建
    • 一.apache服务搭建
      • 服务搭建说明
      • 搭建步骤
    • 二.mysql服务搭建
      • 服务搭建说明
      • 搭建步骤
    • 三.DNS服务搭建
      • 服务搭建说明
      • 搭建步骤
    • 四.DHCP服务搭建
      • 服务搭建说明
      • 搭建步骤
    • 五.FTP服务搭建
      • 服务搭建说明
      • 搭建步骤
  • 第二部分 服务加固
    • 一.Apache安全加固
      • 加固说明
      • 加固步骤
    • 二. MYSQL加固
      • 加固说明
      • 加固步骤
    • 三.FTP加固
      • 加固说明
      • 加固步骤
  • 第三部分 系统加固
    • 限制root登录
    • SSH安全
    • 禁用telnet
    • 禁用代码编译
    • root登录提醒
    • ./history 安全
    • 禁用所有特殊账户
    • 特殊文件赋权(禁用命令)
    • 关闭不用的端口和服务
    • /tmp,/var/tmp,/dev/shm目录安全
    • php 信息隐藏
    • php禁用危险函数
    • php 访问目录限制
    • magic_quotes_gpc 防止SQl注入(PHP5.4以下可用)

第一部分 服务搭建

服务名称
apache
mysql
DNS
DHCP
FTP

一.apache服务搭建

作为一台服务器,在搭建服务前请确保使用静态IP地址。

服务搭建说明

1. 服务配置说明  
配置文件 作用
/etc/apache2/apache2.conf 主配置文件
2. IP地址说明
IP地址 作用
192.168.1.45 服务器ip地址

搭建步骤

  1. 在终端输入命令sudo apt install apache2,安装完毕后在浏览器中访问服务器IP地址,发现已经成功看到apache默认页面
    Ubuntu20LTS 服务搭建与安全加固_第1张图片

二.mysql服务搭建

服务搭建说明

1. 服务配置说明  
配置文件 作用
/etc/mysql/my.cnf 全局配置文件
/etc/mysql/mysql.conf.d/mysqld.cnf 所有配置
2. IP地址说明
IP地址 作用
192.168.1.45 服务器ip地址

搭建步骤

  1. 在服务器终端输入命令sudo apt-get install mysql-server,安装mysql服务
    Ubuntu20LTS 服务搭建与安全加固_第2张图片

  2. 初始化数据库,输入sudo mysql_secure_installation,不安装密码插件
    Ubuntu20LTS 服务搭建与安全加固_第3张图片

  3. 给数据库root用户设置密码
    在这里插入图片描述

  4. 不创建匿名用户
    Ubuntu20LTS 服务搭建与安全加固_第4张图片

  5. 不允许root用户远程连接数据库
    Ubuntu20LTS 服务搭建与安全加固_第5张图片

  6. 删除test数据库
    Ubuntu20LTS 服务搭建与安全加固_第6张图片

  7. 保存设置

    在这里插入图片描述

  8. 测试
    Ubuntu20LTS 服务搭建与安全加固_第7张图片
    发现只有localhost本地连接可以登陆,ip地址是无法登陆的
    Ubuntu20LTS 服务搭建与安全加固_第8张图片

三.DNS服务搭建

服务搭建说明

1. 服务配置说明  
配置文件 作用
/etc/bind/named.conf.local 配置正向,反向解析
/var/cache/bind/ 区域配置文件默认存储位置
/etc/bind/named.conf.option DNS服务配置文件
2. IP地址说明
IP地址 作用
192.168.1.45 DNS服务器ip地址
192.168.1.50 MAIL服务器ip地址
192.168.1.51 WWW服务器ip地址
192.168.1.52 FTP服务器ip地址

搭建步骤

  1. 安装bind9,在服务器终端输入apt install bind9
    在这里插入图片描述

  2. 修改/etc/bind/named.conf.local,添加要解析的域名及对应的域名配置文件
    Ubuntu20LTS 服务搭建与安全加固_第9张图片

  3. 利用模板创建域名配置文件
    Ubuntu20LTS 服务搭建与安全加固_第10张图片

  4. 修改刚刚创建的test域名配置文件
    Ubuntu20LTS 服务搭建与安全加固_第11张图片

  5. 修改/etc/bind/named.conf.local,添加要解析的IP及对应的域名配置文件
    Ubuntu20LTS 服务搭建与安全加固_第12张图片

  6. 利用模板创建对应的配置文件
    在这里插入图片描述

  7. 修改刚才创建的配置文件
    Ubuntu20LTS 服务搭建与安全加固_第13张图片

  8. 由于bind的工作目录默认是在/var/cache/bind下,所以需要把刚才创建的2个配置文件移动过去
    在这里插入图片描述

  9. 重启服务测试
    Ubuntu20LTS 服务搭建与安全加固_第14张图片

四.DHCP服务搭建

服务搭建说明

1. 服务配置说明  
配置文件 作用
/etc/dhcp/dhcpd.conf DHCP服务设置
2. IP地址说明
IP地址 作用
192.168.1.45 DHCP服务器ip地址
192.168.1.1 路由器

搭建步骤

  1. 安装服务,在终端中输入sudo apt install isc-dhcp-server
    Ubuntu20LTS 服务搭建与安全加固_第15张图片

  2. 编辑/etc/dhcp/dhcpd.conf,配置服务器I名称和dns服务器地址
    Ubuntu20LTS 服务搭建与安全加固_第16张图片

  3. 编辑/etc/dhcp/dhcpd.conf,配置默认/最大租用时间
    Ubuntu20LTS 服务搭建与安全加固_第17张图片

  4. 编辑/etc/dhcp/dhcpd.conf,配置需要分配的IP段,这里分配了10个ip地址
    Ubuntu20LTS 服务搭建与安全加固_第18张图片

  5. 取消注释authoritative;
    Ubuntu20LTS 服务搭建与安全加固_第19张图片
    Ubuntu20LTS 服务搭建与安全加固_第20张图片

  6. 重启服务,让配置生效。

    sudo systemctl restart isc-dhcp-server.service
    
  7. 测试服务,将路由器DHCP功能关闭,打开一个靶机,连接到路由器网络,打开自动获取IP地址
    在这里插入图片描述
    通过查看DHCP状态,发现有主机连接,分配地址为192.168.1.150
    Ubuntu20LTS 服务搭建与安全加固_第21张图片
    查看靶机,发现刚刚设置的TEST.com
    Ubuntu20LTS 服务搭建与安全加固_第22张图片

五.FTP服务搭建

服务搭建说明

1. 服务配置说明  
配置文件 作用
/srv/ftp ftp文件默认位置
/etc/vsftpd.conf vsftpd设置
2. IP地址说明
IP地址 作用
192.168.1.45 服务器ip地址

搭建步骤

  1. 安装软件,在终端输入sudo apt-get install vsftpd
    Ubuntu20LTS 服务搭建与安全加固_第23张图片

  2. 创建FTP用户,创建用户目录,创建用户,添加密码

    在这里插入图片描述

    # mkdir /home/ftpuser
    # useradd -d /home/ftpuser/ -s /bin/bash ftpuser
    # passwd ftpuser
    New password: 
    Retype new password: 
    passwd: password updated successfully
    
    
  3. 修改用户目录拥有者
    在这里插入图片描述

  4. 配置服务,编辑/etc/vsftpd.conf,不允许匿名用户
    Ubuntu20LTS 服务搭建与安全加固_第24张图片

  5. 允许本地用户登陆
    Ubuntu20LTS 服务搭建与安全加固_第25张图片

  6. 不允许用户写入数据
    在这里插入图片描述

  7. 不允许匿名用户上传文件或创建目录
    Ubuntu20LTS 服务搭建与安全加固_第26张图片

  8. 启用用户列表(黑名单的作用)
    Ubuntu20LTS 服务搭建与安全加固_第27张图片

  9. 禁止用户列表中的用户访问FTP
    Ubuntu20LTS 服务搭建与安全加固_第28张图片

  10. 用户列表的具体路径
    Ubuntu20LTS 服务搭建与安全加固_第29张图片
    11.创建用户列表文件
    在这里插入图片描述

  11. 功能测试
    tip:
    /etc/ftpuser文件中的用户也是不能登陆FTP的 Ubuntu20LTS 服务搭建与安全加固_第30张图片

第二部分 服务加固

一.Apache安全加固

加固说明

加固内容 作用
修改默认banner信息 防止敏感信息泄漏
禁用目录列表 防止暴露文件目录
以单独的用户和组运行Apache 使用非特权用户
限制对目录的访问
关闭服务器端包含和CGI执行

加固步骤

  1. 修改Banner

    • 修改前使用nc工具探查服务器80端口,发现返回敏感信息
      Ubuntu20LTS 服务搭建与安全加固_第31张图片

    • 编辑 /etc/apache2/apache2.conf
      ServerSignature Off
      ServerTokens Prod
      Ubuntu20LTS 服务搭建与安全加固_第32张图片

    • 重启服务查看效果,再次nc发现隐藏了版本和主机信息
      Ubuntu20LTS 服务搭建与安全加固_第33张图片

  2. 禁用目录列表

    • 修改配置前,在浏览器中访问服务器某位置(无index文件)
      Ubuntu20LTS 服务搭建与安全加固_第34张图片
      -修改/etc/apache2/apache2.conf

      Options -Indexes
      Ubuntu20LTS 服务搭建与安全加固_第35张图片
    • 重启服务查看效果
      Ubuntu20LTS 服务搭建与安全加固_第36张图片
  3. 以单独的用户和组运行Apache

    • 建立http用户和用户组

      # groupadd httpuser
      # useradd -d /var/www/ -g httpuser -s /bin/nologin httpuser
      
    • 编辑apache.conf 设置通过新的用户和用户组启动
      Ubuntu20LTS 服务搭建与安全加固_第37张图片

  4. 限制对目录的访问

    • 修改配置前测试
      Ubuntu20LTS 服务搭建与安全加固_第38张图片
    • 修改配置文件
      Ubuntu20LTS 服务搭建与安全加固_第39张图片
    • 重启服务,测试效果
      Ubuntu20LTS 服务搭建与安全加固_第40张图片
  5. 关闭服务器端包含和CGI执行

    • 编辑配置文件
      Ubuntu20LTS 服务搭建与安全加固_第41张图片

二. MYSQL加固

加固说明

加固内容 作用
改变默认mysql管理员帐号名和密码 防止被爆破管理员
用户目录权限限制 防止被非mysql用户窃取数据
命令历史记录保护 防止数据库密码和数据库结构等信息泄露
删除默认数据库test和数据库用户
限制本地文件数据访问
禁止远程连接数据库
更改默认端口3306

加固步骤

  1. 改变默认mysql管理员帐号和密码

    • 登陆mysql数据库
      Ubuntu20LTS 服务搭建与安全加固_第42张图片

    • 修改mysql数据库中user表记录的root
      Ubuntu20LTS 服务搭建与安全加固_第43张图片

    • 更改密码
      使用update user set password=password('upassword') where user='root';来修改密码
      tip:在存取密码时,使用 mysql 的内置函数 password()的sql 语句,对密码进行加密后存储

  2. 用户目录权限限制

    • MySQL 数据库默认路径 /var/lib/mysql,修改此目录的用户权限
      Ubuntu20LTS 服务搭建与安全加固_第44张图片
  3. 命令历史记录保护

    # rm .bash_history .mysql_history  //删除历史记录
    
  4. 删除默认数据库test和数据库用户
    在默认安装中会自动生成空用户和test数据库
    使用show databases;查看所有数据库
    Ubuntu20LTS 服务搭建与安全加固_第45张图片
    使用select User,Password from mysql.user;查看mysql用户,可以发现有2个空用户
    Ubuntu20LTS 服务搭建与安全加固_第46张图片
    使用 drop database test来删除test数据库
    Ubuntu20LTS 服务搭建与安全加固_第47张图片
    使用delete from mysql.user where User="" or password="";来删除空密码和空用户名的用户
    Ubuntu20LTS 服务搭建与安全加固_第48张图片

  5. 限制数据访问
    secure_file_priv参数用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录。

    secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
    secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
    secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。

    • 当为空没有值时执行的时候,尝试执行sql语句读取/flag文件,读取成功
      Ubuntu20LTS 服务搭建与安全加固_第49张图片
      在这里插入图片描述
      指定secure_file_priv为NULL,并重启服务
      Ubuntu20LTS 服务搭建与安全加固_第50张图片
      此时再次尝试读取flag文件,就会报错,无法读取文件.
      Ubuntu20LTS 服务搭建与安全加固_第51张图片
  6. 禁止远程连接数据库

Ubuntu20LTS 服务搭建与安全加固_第52张图片

三.FTP加固

加固说明

加固内容 作用
ssl证书 加密

加固步骤

  1. ssl加密
    • 创建证书

      mkdir /etc/ssl/private
      cd /etc/ssl/private/
      openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048
      
      
    • 定义SSL配置信息,编辑/etc/vsftpd.conf

      # gedit /etc/vsftpd.conf
      ssl_enable=YES
      ssl_tlsv1=YES
      ssl_sslv2=NO
      ssl_sslv3=NO
      rsa_cert_file=/etc/ssl/private/vsftpd.pem
      rsa_private_key_file=/etc/ssl/private/vsftpd.pem
      

      Ubuntu20LTS 服务搭建与安全加固_第53张图片

    • 阻止匿名用户使用 SSL 登录,并且迫使所有的非匿名登录使用安全的 SSL 链接来传输数据和在登录期间发送密码:

      allow_anon_ssl=NO
      force_local_data_ssl=YES
      force_local_logins_ssl=YES
      
      

      Ubuntu20LTS 服务搭建与安全加固_第54张图片

    • 提高加密等级

      ssl_ciphers=HIGH
      
      

      Ubuntu20LTS 服务搭建与安全加固_第55张图片

    • 重启服务生效,测试效果,打开一个FTP客户端连接服务器(终端不支持ssl),发现证书。
      Ubuntu20LTS 服务搭建与安全加固_第56张图片

第三部分 系统加固

加固说明

加固项 主要作用
root登录限制
SSH 防止恶意远程登陆
禁用telnet 不安全的传输环境
禁用代码编译
root登录提醒
history安全 防止命令记录被清除
禁用特殊账户
特殊文件赋权 限制权限
关闭不用的端口和服务
危险目录安全 /tmp /var/tmp /dev/shm
禁用PHP的危险函数
php隐藏banner
php禁用危险函数
php访问目录限制
magic_quotes_gpc防注入

限制root登录

\etc\securetty中指定root用户可以在哪个设备中登录
默认有挺多的,可以先将其备份后清空,只输入一个tty1,

tty1


Ubuntu20LTS 服务搭建与安全加固_第57张图片
此时按下ctrl+alt+f2,切换tty2,可以发现root用户已经不能登录
Ubuntu20LTS 服务搭建与安全加固_第58张图片
但其他普通用户没有受到影响
在这里插入图片描述

SSH安全

在老版本中,默认允许root用户登录,不过在新版本之后就不是了。
配置文件在/etc/ssh/sshd_config下,其中的PermitRootLogin设置了是否允许root登录。
Ubuntu20LTS 服务搭建与安全加固_第59张图片
修改默认端口,/etc/ssh/sshd_config,
Ubuntu20LTS 服务搭建与安全加固_第60张图片
重启sshd服务后生效,需要注意的是,修改端口后需要注意防火墙对应放行端口的更改.
Ubuntu20LTS 服务搭建与安全加固_第61张图片

禁用telnet

同样,在早期的linux中是默认开启这项服务的,不过在较新的linux发行版中甚至没有这一个服务,telnet在数据传输过程都是明文传输,很容易就会被截获到,不安全。

禁用代码编译

  1. 添加编译用户组
groupadd  compiler
  1. 将常见到的编译器所属组赋给用户组
cd /usr/bin/         
chgrp compiler *cc*
chgrp compiler *++*
chgrp compiler ld
chgrp compiler as

  1. 设置权限
chmod  750 *cc*
chmod  750 *++*
chmod  750 ld
chmod  750 as
  1. 添加用户到刚才设置好的用户组
useradd test
usermod -a -G compiler test

  1. 检验

创建test.c文件
Ubuntu20LTS 服务搭建与安全加固_第62张图片

当尝试使用不在compiler用户组的ubuntu用户gcc编译文件时,提示权限拒绝

Ubuntu20LTS 服务搭建与安全加固_第63张图片
当使用test用户时,则正常
Ubuntu20LTS 服务搭建与安全加固_第64张图片

root登录提醒

当一个root权限的用户登录时发mail
编辑/root/.bashrc

./history 安全

利用chattr
Ubuntu20LTS 服务搭建与安全加固_第65张图片

chattr +a .bash_history 
chattr +i .bash_history 

操作后此文件就无法删除了
Ubuntu20LTS 服务搭建与安全加固_第66张图片
也不能修改
Ubuntu20LTS 服务搭建与安全加固_第67张图片

禁用所有特殊账户

删除账户:userdel username
删除用户组:groupdel groupname
锁定用户:usermod -L -s /bin/false username
L参数表示锁定用户密码,使密码无效。,s参数表示修改用户登入后所使用的shell,这里改成了一个不存在的shell。
当禁用root用户后就无法登录了
Ubuntu20LTS 服务搭建与安全加固_第68张图片
解锁root用户sudo usermod -U -s /bin/bash root
U参数就是代表解除锁定
Ubuntu20LTS 服务搭建与安全加固_第69张图片

特殊文件赋权(禁用命令)

一些执行文件比如ping who whereis cat vi echo等,可以将其权限修改为700,
Ubuntu20LTS 服务搭建与安全加固_第70张图片
Ubuntu20LTS 服务搭建与安全加固_第71张图片
这里将/bin /usr/bin目录下所有文件都禁用了,会发现,普通用户甚至都无法登录,这是因为普通用户没有bash和sh命令的运行权限,这也算是一种另类的禁用用户的方法吧.
Ubuntu20LTS 服务搭建与安全加固_第72张图片
Ubuntu20LTS 服务搭建与安全加固_第73张图片

但是需要注意的是,有一些内建命令无法通过这样的方式进行禁用.
输入enable -a 来查看当前启用的内建命令
通过enable -n echo 来禁用echo命令
通过enable -n -all 来禁用所有命令
通过enable echo来启用echo命令
但这种方式只对当前用户生效
Ubuntu20LTS 服务搭建与安全加固_第74张图片
Bash Shell 含有许多常用的命令,这些命令都已经内建在了 Shell 中

关闭不用的端口和服务

执行ps auxw来查看正在运行的进程
执行netstat -ln查看系统监听端口服务
执行netstat -anp | grep port通过端口查找对应的进程,然后使用kill命令来杀掉进程
Ubuntu20LTS 服务搭建与安全加固_第75张图片

/tmp,/var/tmp,/dev/shm目录安全

Ubuntu20LTS 服务搭建与安全加固_第76张图片
/tmp,/var/tmp,/dev/shm 目录是不安全的,任何用户都拥有可读可写可执行的权限.

chmod 555 /tmp -R
chmod 555 /var/tmp -R
chmod 555 /dev/shm -R
#tip:chmod 参数-R 递归修改所有文件参数

php 信息隐藏

修改php.ini文件,修改其中的

expose_php=Off

重启php服务生效
Ubuntu20LTS 服务搭建与安全加固_第77张图片

php禁用危险函数

修改php.ini文件,修改其中的

disable_functions = symlink,shell_exec,exec,proc_close,proc_open,popen,
system,dl,passthru,escapeshellarg, escapeshellcmd,phpinfo,eval

Ubuntu20LTS 服务搭建与安全加固_第78张图片
重启php和web服务之后,创建一个测试文件
Ubuntu20LTS 服务搭建与安全加固_第79张图片
此时就会发现刚才添加的函数都被禁用了
Ubuntu20LTS 服务搭建与安全加固_第80张图片

php 访问目录限制

首先编辑测试页面,尝试包含/目录的flag文件
Ubuntu20LTS 服务搭建与安全加固_第81张图片
可以看到,在没有进行安全配置的时候,flag被输出了出来
在这里插入图片描述
修改配置文件,设置open_basedir指定为网站根目录,重启php服务生效
Ubuntu20LTS 服务搭建与安全加固_第82张图片

此时,测试页面的include就会报错了
Ubuntu20LTS 服务搭建与安全加固_第83张图片

magic_quotes_gpc 防止SQl注入(PHP5.4以下可用)

在php5.4的更高版本中,这个选项被去掉了,也即是php解析器不会自动为POST、GET、COOKIE过来的数据增加转义字符"",而是把安全编码交给了用户自己,从而避免了magic_quotes_gpc未设置,用户依赖这个设置而带来了安全隐患。
Ubuntu20LTS 服务搭建与安全加固_第84张图片
在未做任何过滤替换时,会造成注入的威胁
Ubuntu20LTS 服务搭建与安全加固_第85张图片
在php5.4一下的版本中,可以在配置文件中设置magic_quotes_gpc来开启自动转义,重启服务生效
Ubuntu20LTS 服务搭建与安全加固_第86张图片
可以发现多了\,一定程度上防止了sql注入,不过此时仍然可以利用宽字节进行sql注入
Ubuntu20LTS 服务搭建与安全加固_第87张图片

你可能感兴趣的:(笔记,#,操作系统,linux,lamp,信息安全)