服务名称 |
---|
apache |
mysql |
DNS |
DHCP |
FTP |
作为一台服务器,在搭建服务前请确保使用静态IP地址。
1. 服务配置说明
配置文件 | 作用 |
---|---|
/etc/apache2/apache2.conf | 主配置文件 |
2. IP地址说明
IP地址 | 作用 |
---|---|
192.168.1.45 | 服务器ip地址 |
1. 服务配置说明
配置文件 | 作用 |
---|---|
/etc/mysql/my.cnf | 全局配置文件 |
/etc/mysql/mysql.conf.d/mysqld.cnf | 所有配置 |
2. IP地址说明
IP地址 | 作用 |
---|---|
192.168.1.45 | 服务器ip地址 |
保存设置
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地址 |
安装bind9,在服务器终端输入apt install bind9
1. 服务配置说明
配置文件 | 作用 |
---|---|
/etc/dhcp/dhcpd.conf | DHCP服务设置 |
2. IP地址说明
IP地址 | 作用 |
---|---|
192.168.1.45 | DHCP服务器ip地址 |
192.168.1.1 | 路由器 |
重启服务,让配置生效。
sudo systemctl restart isc-dhcp-server.service
测试服务,将路由器DHCP功能关闭,打开一个靶机,连接到路由器网络,打开自动获取IP地址
通过查看DHCP状态,发现有主机连接,分配地址为192.168.1.150
查看靶机,发现刚刚设置的TEST.com
1. 服务配置说明
配置文件 | 作用 |
---|---|
/srv/ftp | ftp文件默认位置 |
/etc/vsftpd.conf | vsftpd设置 |
2. IP地址说明
IP地址 | 作用 |
---|---|
192.168.1.45 | 服务器ip地址 |
创建FTP用户,创建用户目录,创建用户,添加密码
# mkdir /home/ftpuser
# useradd -d /home/ftpuser/ -s /bin/bash ftpuser
# passwd ftpuser
New password:
Retype new password:
passwd: password updated successfully
不允许用户写入数据
加固内容 | 作用 |
---|---|
修改默认banner信息 | 防止敏感信息泄漏 |
禁用目录列表 | 防止暴露文件目录 |
以单独的用户和组运行Apache | 使用非特权用户 |
限制对目录的访问 | |
关闭服务器端包含和CGI执行 |
修改Banner
禁用目录列表
以单独的用户和组运行Apache
限制对目录的访问
关闭服务器端包含和CGI执行
加固内容 | 作用 |
---|---|
改变默认mysql管理员帐号名和密码 | 防止被爆破管理员 |
用户目录权限限制 | 防止被非mysql用户窃取数据 |
命令历史记录保护 | 防止数据库密码和数据库结构等信息泄露 |
删除默认数据库test和数据库用户 | |
限制本地文件数据访问 | |
禁止远程连接数据库 | |
更改默认端口3306 |
改变默认mysql管理员帐号和密码
用户目录权限限制
命令历史记录保护
# rm .bash_history .mysql_history //删除历史记录
删除默认数据库test和数据库用户
在默认安装中会自动生成空用户和test数据库
使用show databases;
查看所有数据库
使用select User,Password from mysql.user;
查看mysql用户,可以发现有2个空用户
使用 drop database test
来删除test数据库
使用delete from mysql.user where User="" or password="";
来删除空密码和空用户名的用户
限制数据访问
secure_file_priv参数用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录。
secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。
禁止远程连接数据库
加固内容 | 作用 |
---|---|
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
阻止匿名用户使用 SSL 登录,并且迫使所有的非匿名登录使用安全的 SSL 链接来传输数据和在登录期间发送密码:
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
提高加密等级
ssl_ciphers=HIGH
加固说明
加固项 | 主要作用 |
---|---|
root登录限制 | |
SSH | 防止恶意远程登陆 |
禁用telnet | 不安全的传输环境 |
禁用代码编译 | |
root登录提醒 | |
history安全 | 防止命令记录被清除 |
禁用特殊账户 | |
特殊文件赋权 | 限制权限 |
关闭不用的端口和服务 | |
危险目录安全 | /tmp /var/tmp /dev/shm |
禁用PHP的危险函数 | |
php隐藏banner | |
php禁用危险函数 | |
php访问目录限制 | |
magic_quotes_gpc防注入 |
在\etc\securetty
中指定root用户可以在哪个设备中登录
默认有挺多的,可以先将其备份后清空,只输入一个tty1,
tty1
此时按下ctrl+alt+f2
,切换tty2,可以发现root用户已经不能登录
但其他普通用户没有受到影响
在老版本中,默认允许root用户登录,不过在新版本之后就不是了。
配置文件在/etc/ssh/sshd_config
下,其中的PermitRootLogin设置了是否允许root登录。
修改默认端口,/etc/ssh/sshd_config
,
重启sshd服务后生效,需要注意的是,修改端口后需要注意防火墙对应放行端口的更改.
同样,在早期的linux中是默认开启这项服务的,不过在较新的linux发行版中甚至没有这一个服务,telnet在数据传输过程都是明文传输,很容易就会被截获到,不安全。
groupadd compiler
cd /usr/bin/
chgrp compiler *cc*
chgrp compiler *++*
chgrp compiler ld
chgrp compiler as
chmod 750 *cc*
chmod 750 *++*
chmod 750 ld
chmod 750 as
useradd test
usermod -a -G compiler test
当尝试使用不在compiler用户组的ubuntu用户gcc编译文件时,提示权限拒绝
当一个root权限的用户登录时发mail
编辑/root/.bashrc
chattr +a .bash_history
chattr +i .bash_history
删除账户:userdel username
删除用户组:groupdel groupname
锁定用户:usermod -L -s /bin/false username
L参数表示锁定用户密码,使密码无效。,s参数表示修改用户登入后所使用的shell,这里改成了一个不存在的shell。
当禁用root用户后就无法登录了
解锁root用户sudo usermod -U -s /bin/bash root
U参数就是代表解除锁定
一些执行文件比如ping who whereis cat vi echo
等,可以将其权限修改为700,
这里将/bin /usr/bin
目录下所有文件都禁用了,会发现,普通用户甚至都无法登录,这是因为普通用户没有bash和sh命令的运行权限,这也算是一种另类的禁用用户的方法吧.
但是需要注意的是,有一些内建命令无法通过这样的方式进行禁用.
输入enable -a
来查看当前启用的内建命令
通过enable -n echo
来禁用echo命令
通过enable -n -all
来禁用所有命令
通过enable echo
来启用echo命令
但这种方式只对当前用户生效
Bash Shell 含有许多常用的命令,这些命令都已经内建在了 Shell 中
执行ps auxw
来查看正在运行的进程
执行netstat -ln
查看系统监听端口服务
执行netstat -anp | grep port
通过端口查找对应的进程,然后使用kill
命令来杀掉进程
在/tmp,/var/tmp,/dev/shm
目录是不安全的,任何用户都拥有可读可写可执行的权限.
chmod 555 /tmp -R
chmod 555 /var/tmp -R
chmod 555 /dev/shm -R
#tip:chmod 参数-R 递归修改所有文件参数
修改php.ini
文件,修改其中的
expose_php=Off
修改php.ini
文件,修改其中的
disable_functions = symlink,shell_exec,exec,proc_close,proc_open,popen,
system,dl,passthru,escapeshellarg, escapeshellcmd,phpinfo,eval
重启php和web服务之后,创建一个测试文件
此时就会发现刚才添加的函数都被禁用了
首先编辑测试页面,尝试包含/
目录的flag文件
可以看到,在没有进行安全配置的时候,flag被输出了出来
修改配置文件,设置open_basedir
指定为网站根目录,重启php服务生效
在php5.4的更高版本中,这个选项被去掉了,也即是php解析器不会自动为POST、GET、COOKIE过来的数据增加转义字符"",而是把安全编码交给了用户自己,从而避免了magic_quotes_gpc未设置,用户依赖这个设置而带来了安全隐患。
在未做任何过滤替换时,会造成注入的威胁
在php5.4一下的版本中,可以在配置文件中设置magic_quotes_gpc
来开启自动转义,重启服务生效
可以发现多了\
,一定程度上防止了sql注入,不过此时仍然可以利用宽字节进行sql注入