SlideShare a Scribd company logo
1 of 25
Download to read offline
LAMPLAMPLAMPLAMP 安全全攻略
作者:kindle
此文档由网络资料收集以及经验整理出来的,有什么不足之处欢迎大家多提意见,
mail:kindle@live.cn
注:版权归 linux 安全网(linux520.com)所有,转载请注明出处
目录
LLLLinuxinuxinuxinux 加固
1.BIOS...................................................................................................
2.SSH 安全............................................................................................
3.禁用 telnet..........................................................................................
4.禁用代码编译....................................................................................
5.ProFTP................................................................................................
6.TCPwrappers......................................................................................
7.创建一个 SU 组.................................................................................
8.root 通知.............................................................................................
9.history 安全........................................................................................
10.欢迎信息..........................................................................................
11.禁用所有特殊账户..........................................................................
12.chmod 危险文件..............................................................................
13.指定允许 root 登陆的 TTY 设备....................................................
14.选择一个安全的密码......................................................................
15.检查 Rootkit.....................................................................................
16.安装补丁..........................................................................................
17.隐藏 Apache 信息...........................................................................
18.隐藏 php 信息.................................................................................
19.关闭不使用的服务..........................................................................
20.检测监听中的端口..........................................................................
21.关闭打开的端口和服务..................................................................
22.删除不用的 rpm包..........................................................................
23.禁用危险的 php 函数......................................................................
24.安装配置防火墙.............................................................................
25.安装和配置 BFD............................................................................
26.内核加固(sysctl.conf)......................................................................
27.更改 SSH 端口................................................................................
28./tmp /var/tmp,/dev/shm 分区安全...................................................
29.PHP IDS...........................................................................................
AAAApachepachepachepache 加固
1.修改 banner.......................................................................................
2.修改默认的 http 状态响应码 404,503 等默认页面........................
3.Apache 的访问权限控制 ................................................................
LAMPLAMPLAMPLAMP 安全全攻略
4.关闭危险指令....................................................................................
5.open_basedir 限制目录....................................................................
6.掌握 Apache 的 Order Allow Deny 判断原则 ................................
7.mod_rewrite 重写 URL.....................................................................
9.Speling 模块去除 url 大小写............................................................
8. Limit 模块限制 IP 连接数 ..............................................................
9.让 apache 支持安全 HTTPS 协议 ...................................................
10.安装配置 mod_security.....................................................................
11.加载 speling 模块...............................................................................
PhpPhpPhpPhp 加固
1. 打开 php 的安全模式.....................................................................
2. 安全模式下执行程序主目录 .......................................................
3. 安全模式下包含文件......................................................................
4. 控制 php 脚本能访问的目录 .........................................................
5. 关闭危险函数...................................................................................
6. 关闭 PHP 版本信息在 http 头中的泄漏.........................................
7. 关闭注册全局变量 .........................................................................
8. 打开 magic_quotes_gpc 来防止 SQL 注入......................................
9. 错误信息控制....................................................................................
10. 错误日志.............................................................................................
11. 关闭远程文件打开.............................................................................
12. Php.ini 包含补丁文件.........................................................................
mysqlmysqlmysqlmysql 方面::::
1.修改 root 用户口令,删除空口令 ...........................................................
2.删除默认数据库和数据库用户..................................................................
3.改变默认 mysql 管理员帐号 ...................................................................
4.关于密码的管理 ........................................................................................
5.使用独立用户运行 msyql...........................................................................
6.禁止远程连接数据库 .................................................................................
7.限制连接用户的数量 ..................................................................................
8.用户目录权限限制 ......................................................................................
9.命令历史记录保护.........................................................................................
10.禁止 MySQL 对本地文件存取 ................................................................
11.MySQL 服务器权限控制 ...........................................................................
12.使用 chroot 方式来控制 MySQL 的运行目录 ...........................................
13.关闭对无关的 Web 程序访问的支持 .........................................................
14.数据库备份策略.............................................................................................
15. Mysqld 安全相关启动选项..........................................................................
16.information_schema 安全..............................................................................
总结
LAMPLAMPLAMPLAMP 安全全攻略
========================================================================
介绍
这个教程将一步步的指引你,使你的 Linux 系统变得安全。
任何默认安装的操作系统都是不够安全的,本文将指引你如何建立一个
相对安全的 Linux 系统。
========================================================================
1.BIOS1.BIOS1.BIOS1.BIOS
你应该总是在系统启动的时候设置一个 BIOS 密码和禁用从 CD-ROM 和软盘引导。
这将防止一些人未经允许访问你的系统和更改 BIOS 设置
2.SSH2.SSH2.SSH2.SSH 安全
SSH 是一个协议,利用它可以登录到一个远程系统或远程执行系统命令,
默认允许 root 登录,并且 sshv1 存在缺陷,我们应该在
sshd_config 禁止 root 访问和使用 sshv2 来让 ssh 更加安全。
方法:
vi /etc/ssh/sshd_config
把协议改为 2
PermitRootLogin = no
重启 sshd /etc/rc.d/init.d/sshd restart
3.3.3.3.禁用telnettelnettelnettelnet
早期的 Linux 默认开启 telnet 服务,telnet,ftp,rlogin 都是明文传输的协议
是容易被嗅探到的,这就是为什么推荐使用安全的版本(sftp,scp,ssh)的原因
如果你必须要使用 telnet,那么至少应该隐藏 banner 信息
方法:
修改/etc/xinetd.d/telnet
disable=yes
4.4.4.4.禁用代码编译
你可以禁用代码编译并且只把编译的权限分配给一个用户组
方法:
添加编译用户组 /usr/sbin/groupadd compiler ,cd /usr/bin
把常见的编译器所属组赋给编译用户组
chgrp compiler *cc*
chgrp compiler *++*
chgrp compiler ld
chgrp compiler as
设置 mysqlaccess 的访问
chgrp root mysqlaccess
设置权限
chmod 750 *cc*
LAMPLAMPLAMPLAMP 安全全攻略
chmod 750 *++*
chmod 750 ld
chmod 750 as
chmod 755 mysqlaccess
把用户添加到组里
修改/etc/group
compiler:x:520:user1,user2
5.ProFTP5.ProFTP5.ProFTP5.ProFTP
你可以通过修改 proftpd.conf 来禁止 root 登陆
方法:
修改/etc/proftpd.conf
Add RootLogin off
重启 proftpd /sbin/service proftpd stop
/sbin/service proftpd start
6.TCP6.TCP6.TCP6.TCP wrapperswrapperswrapperswrappers
编辑 hosts.allow 和 hosts.deny 可以限制或允许访问 inet 服务
方法:
限制访问 inet 服务
修改/etc/hosts.allow
建议格式:
#Approved IP addresses
ALL:192.168.0.1
ALL:192.168.5.2
#CSV uploader machine
proftpd:10.0.0.5
#pop3 from antwhere
ipop3:ALL
修改/etc/hosts.deny
ALL:ALL EXCEPT localhostENY
7.7.7.7.创建SUSUSUSU 用户组
因为我们在 SSH 禁止了 root 用户访问并且禁用了 telnet,所有我们应该
分配给一些用户 su 权限来获取 root 特权
方法:
vi /etc/group
添加一行 wheel:x:10:root,user1,user2
chgrp wheel /bin/su
chmod o-rwx /bin/su
8.root8.root8.root8.root 通知
LAMPLAMPLAMPLAMP 安全全攻略
当一个具有 root 权限的用户登录的时候发 mail
方法:
编辑/root 下的.bashrc ,当有 root 权限的用户登录时发生 email 通知
echo 'ALERT - Root Shell Access (Server Name) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -
d"(" -f2 | cut -d")" -f1`" your@email.com
9.history9.history9.history9.history 安全
这是一个避免删除.bash_history 或重定向到/dev/null 的好主意
因此他不能清除或删除他最后执行的命令
方法:
chattr +a .bash_history
chattr +i .bash_history
获取用户的人会知道他的历史命令锁定并且要同意才可以使用服务
10.10.10.10.使用欢迎信息
你必须提供一些信息让攻击者知道该系统不对公众开放。
在国外有类似案件,攻击者入侵一个系统并且系统没有这些信息,
这种情况下法院不能做任何裁决,因为系统说 welcome
方法:
删除/etc/redhat-release
编辑/etc/issue /etc/motd 并显示警告信息
11.11.11.11.禁用所有特殊账户
你应该从系统中删除所有默认用户和组
例如 news,lp,sync,shutdown,uucp,games,halt 等
方法:
删除账户 userdel name
删除组 groupdel name
锁定特定账户:/usr/sbin/usermod -L -s /bin/false user
12.chmod12.chmod12.chmod12.chmod危险文件
这可能是限制不具有 root 权限的用户执行下面这些命令的好主意
方法:
chmod 700 /bin/ping
chmod 700 /usr/bin/finger
chmod 700 /usr/bin/who
chmod 700 /usr/bin/w
chmod 700 /usr/bin/locate
chmod 700 /usr/bin/whereis
chmod 700 /sbin/ifconfig
chmod 700 /usr/bin/pico
chmod 700 /usr/bin/vi
chmod 700 /usr/bin/which
LAMPLAMPLAMPLAMP 安全全攻略
chmod 700 /usr/bin/gcc
chmod 700 /usr/bin/make
chmod 700 /bin/rpm
13.13.13.13.指定允许rootrootrootroot 登陆的 TTYTTYTTYTTY 设备
/etc/securetty 文件允许你指定 root 可以从哪个 TTY 设备登录
方法:
vi /etc/securetty
只留 2 个连接
tty1
tty2
14.14.14.14.选择一个安全的密码
在/etc/login.defs 文件中定义了 shadow 密码的具体配置
默认密码长度最短为 5 字符,你应该至少设置为 8
方法:
vi /etc/login.defs
PASS_MIN_LEN 8
15.15.15.15.检测RootkitRootkitRootkitRootkit
用 chkrootkit 或 rkhunter,以 chkrootkit 为例
方法:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.md5
首先检查 md5 校验值: md5sum chkrootkit.tar.gz
然后解压安装
tar -zxvf chkrootkit.tar.gz
cd chkrootkit
./configure
make sense
然后运行./chkrootkit
我们可以将其添加到 contrab 使其每天自动扫描:
vi /etc/cron.daily/chkrootkit.sh
#!/bin/bash
# 输入 chkrootkit 的安装目录
cd /root/chkrootkit/
# 输入你想收到检测报告的 email
./chkrootkit | mail -s "Daily chkrootkit from Server Name" your@email.com
16.16.16.16.安装补丁
你要经常检查更新以修复某些缺陷或系统稳定性的改进
否则你存在漏洞的系统将会不时的遭受新的攻击
LAMPLAMPLAMPLAMP 安全全攻略
方法:
列出可用更新:up2date -l
安装未排除的更新:up2date -u
安装包括排除的更新 up2date -uf
17.17.17.17.隐藏ApacheApacheApacheApache 信息
你应该隐藏 Apache 的 banner 信息使攻击者不知道 Apache 的版本,从而使他们难以利用漏洞
方法:
修改/etc/httpd/conf/httpd.conf
改变服务器签名:ServerSignature Off
重启 Apache /sbin/service httpd restart
18.18.18.18.隐藏phpphpphpphp 信息
你应该隐藏 php 的 banner 信息,原因同上
方法:
修改 php.ini
改变 expose_php=Off
重启 Apache
19.19.19.19.关闭不用的服务
你应该把任何未使用的服务关闭,可以在/etc/xinetd.d 文件夹里找到
方法:
cd /etc/xinetd.d
grep disable *
这将显示所有服务开启或关闭的状态,然后根据需要来开启或关闭服务
20.20.20.20.检测监听的端口
检测是否有必要开放端口是非常重要的
方法:
netstat -tulp 或
lsof -i -n | egrep 'COMMAND|LISTEN|UDP'或
nmap!
21.21.21.21.关闭端口和服务
重点是关闭在系统启动时打开的不需要的端口
方法:
对于正在运行的服务,可以执行 chkconfig -list | grep on
禁用服务可以执行 chkconfig servicename off
然后停止正在运行的服务:/etc/init.d/service stop
22.22.22.22.删除不用的rpmrpmrpmrpm 包
首先应该清楚你的系统的作用,它是 web,mail,file 服务器或其他
然后觉得哪些包是必要的,之后删除不需要的软件包
方法:
LAMPLAMPLAMPLAMP 安全全攻略
首先列出安装列表 rpm -qa
更详细的信息 rpm -qi rpmname
还可以检测删除包可能出现的冲突 rpm -e --test rpmname
23.23.23.23.禁用危险的phpphpphpphp 函数
你应该禁用 php 的危险函数防止在网站上执行系统命令
方法:
whereis php.ini
vi /usr/local/lib/php.ini
编辑 disable_functions = "symlink,shell_exec,exec,proc_close,proc_open,popen,
system,dl,passthru,escapeshellarg, escapeshellcmd"
24.24.24.24.安装配置防火墙
高级策略防火墙(APF)是一种 IP 表(网络过滤),它是基于当今互联网部署服务器防火墙系统的基本需要和
客户部署 LINUX 安装的唯一需要而设计的。 它是最好的开源防
火墙之一。
配置 APF 防火墙方法:
下载 APF:wget http://www.r-fx.ca/downloads/apf-current.tar.gz
解压安装:
tar -zxvf apf-current.tar.gz
cd apf-0.9.7-1
./install.sh
然后我们配置它 vi /etc/apf/conf.apf
一般配置:
启用防火墙使用 DShield.org 块列表
USE_DS="1"
然后我将列出常规的配置和 CPanel 配置方式,因为 CPanel 是应该最广泛的虚拟主机管理软件
1.常规配置(DNS,Mail,Web,FTP)
Common ingress (inbound)
# Common ingress (inbound) TCP ports -3000_3500 = passive port range for Pure FTPD
IG_TCP_CPORTS="21,22,25,53,80,110,143,443,995"
#
# Common ingress (inbound) UDP ports IG_UDP_CPORTS="53"
# Egress filtering [0 = Disabled / 1 = Enabled]
EGF="1"
# Common egress (outbound) TCP ports
EG_TCP_CPORTS="21,25,80,443,43"
#
# Common egress (outbound) UDP ports
EG_UDP_CPORTS="20,21,53"
LAMPLAMPLAMPLAMP 安全全攻略
2.CPanel 配置
Common ingress (inbound) ports
# Common ingress (inbound) TCP ports -3000_3500 = passive port range for Pure FTPD
IG_TCP_CPORTS="21,22,25,53,80,110,143,443,2082,2083, 2086,2087,
2095, 2096,3000_3500"
#
# Common ingress (inbound) UDP ports
IG_UDP_CPORTS="53"
Common egress (outbound) ports
# Egress filtering [0 = Disabled / 1 = Enabled]
EGF="1"
# Common egress (outbound) TCP ports
EG_TCP_CPORTS="21,25,80,443,43,2089"
#
# Common egress (outbound) UDP ports
EG_UDP_CPORTS="20,21,53"
之后启动防火墙 /etc/apf/apf -s
如果运行良好我在回去修改配置文件,使 DEVM="0"
然后我们配置 APF 的 AntiDos:vi /etc/apf/ad/conf.antidos
找到下面的内容并替换成你的资料
# Organization name to display on outgoing alert emails
CONAME="Your Company"
# Send out user defined attack alerts [0=off,1=on]
USR_ALERT="0"
#
# User for alerts to be mailed to
USR=you@yourco.com
你应把 USR_ALERT 改为 1
保存后重启 APF:/etc/apf/apf –r
To make the firewall start with the Operating System: chkconfig --level 2345 apf on
APF 开机自启动:chkconfig --level 2345 apf on
禁止一个 IP 用/etc/apf/apf -d ip 或 vi /etc/apf/deny_hosts.rules
允许一个 IP 用/etc/apf/apf -a ip 或 vi /etc/apf/deny_hosts.rules
25.25.25.25.安装配置BFD(BFD(BFD(BFD(暴力破解检测))))
BFD 是一个用于分析应用日志和检测验证失败的模块化 shell 脚本
而且安装配置和用法都是非常容易的。使用 BFD 的原因很简单。
其实在 LINUX 领域几乎没有结合防火墙或实时设备来监控不验证和
暴力攻击审计的程序。在用 BFD 之前你必须安装 APF 防火墙。
LAMPLAMPLAMPLAMP 安全全攻略
方法:
wget http://www.r-fx.ca/downloads/bfd-current.tar.gz
tar -zxvf bfd-current.tar.gz
cd bfd-0.9
然后我们来配置它 vi /usr/local/bfd/conf.bfd
把以下内容改为你的资料
# Enable/disable user alerts [0 = off; 1 = on]
ALERT_USR="1"
#
# User alert email address
EMAIL_USR="your@mail.com"
#
# User alert email; subject
SUBJ_USR="Brute ForceWarning for $HOSTNAME"
#
然后 vi /usr/local/bfd/ignore.hosts
把你的 IP 设置成允许主机,避免意外的锁定自己。
之后重启 BFD /usr/local/sbin/bfd -s
26.26.26.26.内核加固(sysctl.conf)(sysctl.conf)(sysctl.conf)(sysctl.conf)
sysctl.conf 用来加固内核,目的是避免 DOS 和欺骗攻击
方法:
到/proc/sys 目录或 sysctl -a 命令了解下当前配置的大概情况
然后 vi /etc/sysctl.conf
添加如下内容:
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
# Controls sourceroute verification
net.ipv4.conf.default.rp_filter = 1
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0
# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1
#Prevent SYN attack
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
# Disables packet forwarding
net.ipv4.ip_forward=0
LAMPLAMPLAMPLAMP 安全全攻略
# Disables IP source routing
net.ipv4.conf.all.accept_source_route= 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Enable IP spoofing protection, turn on source route verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.lo.log_martians = 1
net.ipv4.conf.eth0.log_martians = 1
# Disables IP source routing
net.ipv4.conf.all.accept_source_route= 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Enable IP spoofing protection, turn on sourceroute verification
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
14
net.ipv4.conf.default.rp_filter = 1
# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# Disables the magic-sysrq key
kernel.sysrq = 0
# Modify system limits for Ensim WEBppliance
fs.file-max = 65000
# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 15
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# Turn off the tcp_window_scaling
LAMPLAMPLAMPLAMP 安全全攻略
net.ipv4.tcp_window_scaling = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1
# Set maximum amount of memory allocated to shm to 256MB
kernel.shmmax = 268435456
# Improve file system performance
vm.bdflush = 100 1200 128 512 15 5000 500 1884 2
# Improve virtual memory performance
vm.buffermem = 90 10 60
# Increases the size of the socket queue (effectively,q0).
net.ipv4.tcp_max_syn_backlog = 1024
# Increase the maximum total TCP buffer-space allocatable
net.ipv4.tcp_mem = 57344 57344 65536
# Increase the maximum TCP write-buffer-space allocatable
net.ipv4.tcp_wmem = 32768 65536 524288
15
# Increase the maximum TCP read-buffer space allocatable
net.ipv4.tcp_rmem = 98304 196608 1572864
# Increase the maximum and default receive socket buffer size
net.core.rmem_max = 524280
net.core.rmem_default = 524280
# Increase the maximum and default send socket buffer size
net.core.wmem_max = 524280
net.core.wmem_default = 524280
# Increase the tcp-time-wait buckets pool size
net.ipv4.tcp_max_tw_buckets = 1440000
# Allowed local port range
net.ipv4.ip_local_port_range = 16384 65536
# Increase the maximum memory used to reassemble IP fragments
net.ipv4.ipfrag_high_thresh = 512000
net.ipv4.ipfrag_low_thresh = 446464
# Increase the maximum amount of option memory buffers
net.core.optmem_max = 57344
# Increase the maximum number of skb-heads to be cached
LAMPLAMPLAMPLAMP 安全全攻略
net.core.hot_list_length = 1024
## DO NOT REMOVE THE FOLLOWING LINE!
## nsobuild:20051206
重启后生效
/sbin/sysctl -p
sysctl -w net.ipv4.route.flush=1
27.27.27.27.更改SSHSSHSSHSSH 端口
更改 SSH 默认端口号在一定程度上可以提高安全性
方法:
vi /etc/ssh/sshd_config
Port 22 改为其他端口
当然不要忘记把更改的端口加进防火墙
然后重启生效/etc/init.d/ssh restart
如果安装了 APF 并把端口添加之后,还要重启 APF:/etc/init.d/apf restart
28./tmp,/var/tmp,/dev/shm28./tmp,/var/tmp,/dev/shm28./tmp,/var/tmp,/dev/shm28./tmp,/var/tmp,/dev/shm 分区的安全
/tmp,/var/tmp,/dev/shm 目录是不安全的,任何用户都可以执行脚本。
最好的解决办法是挂载 ncexec 和 nosuid 选项的参数
注意:不建议在 CPanel 使用
方法:
/tmp 目录:
cd /dev
创建 100M ("count") 的存储文件:
dd if=/dev/zero of=tmpMnt bs=1024 count=100000
设为一个扩展的文件系统:
/sbin/mke2fs /dev/tmpMnt ("...is not a block special device. continue?"回答 yes)
备份现有临时文件:
cp -R /tmp/ /tmp_backup
用 noexec 挂载新文件系统:
mount -o loop,rw,nosuid,noexec /dev/tmpMnt /tmp
chmod 0777 /tmp
把备份的文件拷贝回去:
cp -R /tmp_backup/* /tmp/
删除备份:
rm -rf /tmp_backup
修改/etc/fstab 添加下面的条目使其在引导时仍然有效
/dev/tmpMnt /tmp ext2 loop,rw,nosuid,noexec 0 0
/var/tmp 目录:
mv /var/tmp /var/tmpbak
ln -s /tmp /var/tmp
cp /var/tmpbak/* /tmp/
LAMPLAMPLAMPLAMP 安全全攻略
/dev/shm 目录:
编辑/etc/fstab
把 none /dev/shm tmpfsdefaults,rw 0 0
改为 none /dev/shm tmpfsdefaults,nosuid,noexec,rw 0 0
apacheapacheapacheapache 方面
1.修改 banner........................................................................................
2.修改默认的 http 状态响应码 404,503 等默认页面........................
3.Apache 的访问权限控制 ...............................................................
4.关闭危险指令................................................................................
5.open_basedir 限制目录...................................................................
6.掌握 Apache 的 Order Allow Deny 判断原则 ..............................
7.mod_rewrite 重写 URL...................................................................
9.Speling 模块去除 url 大小写..........................................................
8. Limit 模块限制 IP 连接数 ...........................................................
9.让 apache 支持安全 HTTPS 协议 ................................................
10.安装配置 mod_security................................................................
11.加载 speling 模块.........................................................................
1.修改 banner....................................................................................
1111 编译源代码,修改默认的 bannerbannerbannerbanner
ServerTokens ProductOnly
ServerSignature Off
在 apache 的源码包中找到 ap_release.h 将
#define AP_SERVER_BASEPRODUCT"Apache"
修改为
#define AP_SERVER_BASEPRODUCT"Microsoft-IIS/6.0”
os/unix 下的 os.h 文件
#define PLATFORM "Unix"
修改为
#define PLATFORM "Win32“
2.Apache2.Apache2.Apache2.Apache 的访问权限控制
htpasswd -b -c /(存放密码文件路径)/.htpasswd username password
Alias /hack "/var/www/html/hack/"
<Directory "/var/www/html/hack">
LAMPLAMPLAMPLAMP 安全全攻略
authname "test"
authtype basic
authuserfile /var/www/html/hack/.htpasswd
require user kindle
</Directory>
3.3.3.3.关闭危险指令
清除 FollowSymlinks 指令
关闭索引目录
Options Indexes FollowSymLinks
关闭 CGI 执行程序
4.open_basedir4.open_basedir4.open_basedir4.open_basedir 限制目录
用法:php_admin_value open_basedir /var/www
php_admin_value open_basedir 引起的上传文件失败解决方法
将上传文件的临时目录加入到 php_admin_value open_basedir 后面,最后看起来是这样的:
<VirtualHost *:80>
php_admin_value open_basedir "/usr/local/apache/htdocs/www/:/tmp/"
</VirtualHost>
注意:两个目录之间是冒号隔开。
把 PHP 脚本操 作 限制 在 web 目录可 以 避免 程 序员 使 用 copy 函数把 系 统文 件 拷贝 到 web 目录。
move_uploaded_file 不受 open_basedir 的限制,所以不必修改 php.ini 里 upload_tmp_dir 的值。
5.5.5.5.掌握ApacheApacheApacheApache 的 OrderOrderOrderOrder AllowAllowAllowAllow DenyDenyDenyDeny 判断原则
1. 首先判断默认的;
2. 然后判断逗号前的;
3. 最后判断逗号后的;
4. 最终按顺序叠加而得出判断结果。
ex:
apache 的 php 扩展名解析漏洞
<Files ~ ".(php.|php3.)">
Order Allow,Deny
Deny from all
</Files>
apache 设置上传目录无执行权限
<Directory "/www/home/upload">
<Files ~ ".php">
Order allow,deny
Deny from all
</Files>
</Directory>
LAMPLAMPLAMPLAMP 安全全攻略
6.mod_rewrite6.mod_rewrite6.mod_rewrite6.mod_rewrite 重写URLURLURLURL 请求的引擎
重写规则的作用范围
1.使用在 Apache 主配置文件 httpd.conf 中。
2.使用在 httpd.conf 里定义的配置中。
3.使用在基本目录的跨越配置文件.htaccess 中。
1.url 重定向 80 到 443 端口
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(.*)$ https://www.kindle.com/$1 [L,R]
含义是这样的:为了让用户访问传统的 http://转到 https://上来,用了一下 rewrite 规则:
第一句:启动 rewrite 引擎
第二句:rewrite 的条件是访问的服务器端口不是 443 端口
第三句:这是正则表达式,^是开头,$是结束,/?表示有没有/都可以(0 或 1 个 ),(.*)是任何数量的任意字
符
整句的意思是讲:启动 rewrite 模块,将所有访问非 443 端口的请求,url 地址内容不变,将http://变成 https://
7.Speling7.Speling7.Speling7.Speling 模块去除 urlurlurlurl 大小写
确认 speling 模块存在并已加载
启动 speling
<Directory "/usr/local/downloads">
CheckSpelling .
AllowOverride None
Order allow,deny
Allow from all
</Directory>
8.Limit8.Limit8.Limit8.Limit模块限制 IPIPIPIP 连接数
下载模块 http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz
安装:
tar zxvf mod_limitipconn-0.04.tar.gz
cd mod_limitipconn-0.04
make APXS=/usr/local/apache/bin/apxs ß-----这里要按你自己的路径设置
make install APXS=/usr/local/apache/bin/apxs ß-----这里要按你自己的路径设置
编辑 httpd.conf
添加
全局变量:
< IfModulemod_limitipconn.c >
< Location / > # 所有虚拟主机的/目录
MaxConnPerIP 3 # 每 IP 只允许 3 个并发连接
LAMPLAMPLAMPLAMP 安全全攻略
NoIPLimit image/* # 对图片不做 IP 限制
< /Location >
< Location /mp3 > # 所有主机的/mp3 目录
MaxConnPerIP 1 # 每 IP 只允许一个连接请求
OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
< /Location >
< /IfModule >
9.9.9.9.让服务器支持安全HTTPSHTTPSHTTPSHTTPS 协议 ::::
yum-y install mod_ssl
cd /etc/httpd/conf 进入 HTTP 服务器配置文件所在目录
rm -rf ssl.*/server.* 删除默认或残留的服务器证书相关文件
rpm -qa |grep openssl
openssl genrsa -out www.kindle.com.key 1024 建立服务器密钥
openssl req -new –key www.kindle.com.key -out www.kindle.com.csr 建立服务器公钥
openssl x509 -req -days 365 -in www.kindle.com.csr -signkey www.kindle.com.key -out www.kindle.com.crt
建立服务器证书
/etc/rc.d/init.d/httpd restart 重启服务
netstat -ntpl |grep 443
10.10.10.10.安装mod_security:mod_security:mod_security:mod_security:
下载:http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz
http://fedoranews.org/jorge/mod_security/mod_security.conf
安装:下载到/opt/soft 目录下。
# tar –zxvf modsecurity-1.8.7.tar.gz
# cd modsecurity-1.8.7
#cd apache2
# /opt/apache/bin/ apxs -cia mod_security.c
#copy mod_security.conf /opt/apache/conf
配置:
在/opt/apache/conf/httpd.conf 中添加下面一行:
Include conf/mod_security.conf
/opt/apache/bin/apachectl stop
/opt/apache/bin/apachectl startssl
更详细的 mod_security 的配置
http://www.modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/index.html
PhpPhpPhpPhp 方面
1 打开 php 的安全模式...............................................................
2 安全模式下执行程序主目录 ...............................................
3 安全模式下包含文件.............................................................
4 控制 php 脚本能访问的目录 ...............................................
5 关闭危险函数.........................................................................
LAMPLAMPLAMPLAMP 安全全攻略
6 关闭 PHP 版本信息在 http 头中的泄漏...............................
7 关闭注册全局变量 .............................................................
8 打开 magic_quotes_gpc 来防止 SQL 注入.........................
9 错误信息控制.....................................................................
10 错误日志...........................................................................
关闭远程文件打开
Php.ini 包含补丁文件
1.1.1.1.打开phpphpphpphp 的安全模式
php 的安全模式是个非常重要的内嵌的安全机制,能够控制一些 php 中的函数,比如 system(),同时把很多
文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd 但是默认的 php.ini 是没
有打开安全模式的,我们把它打开:safe_mode = on
当 safe_mode 打开时,safe_mode_gid 被关闭,那么 php 脚本能够对文件进行访问,而且相同组的用户也能
够对文件进行访问。建议设置为:safe_mode_gid = off
如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操
作的时候。
2.2.2.2.安全模式下执行程序主目录
如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:safe_mode_exec_dir
= D:/usr/bin
一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,然后把需要
执行的程序拷贝过去,比如:safe_mode_exec_dir = D:/tmp/cmd
但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:
safe_mode_exec_dir = D:/usr/www
3.3.3.3.安全模式下包含文件
如果要在安全模式下包含某些公共文件,那么就修改一下选项:
safe_mode_include_dir = D:/usr/www/include/
其实一般 php 脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。
4.4.4.4.控制phpphpphpphp 脚本能访问的目录
使用 open_basedir 选项能够控制 PHP 脚本只能访问指定的目录,这样能够避免 PHP 脚本访问.不应该访问
的文件,一定程度上限制了 phpshell 的危害,我们一般可以设置为只能访问网站目录:
open_basedir = /var/www/html
5.5.5.5.关闭危险函数
如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得
不希望执行包括 system()等在那的能够执行命令的 php 函数,或者能够查看 php 信息的 phpinfo()等函数,
那么我们就可以禁止它们:
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作
disable_functions =disable_functions = system, show_source, symlink, exec, dl,
LAMPLAMPLAMPLAMP 安全全攻略
shell_exec, passthru, phpinfo, escapeshellarg,escapeshellcmd
以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,
就能够抵制大部分的 phpshell 了。
注:disable_classes 可以禁用某些类,如果有多个用逗号分隔类名
6.6.6.6.关闭PHPPHPPHPPHP 版本信息在httphttphttphttp 头中的泄漏
我们为了防止黑客获取服务器中 php 版本的信息,可以关闭该信息斜路在 http 头中:
expose_php = Off
比如黑客在 telnet www.12345.com 80 的时候,那么将无法看到 PHP 的信息。
7.7.7.7.关闭注册全局变量
在 PHP 中提交的变量,包括使用 POST 或者 GET 提交的变量,都将自动注册为全局变量,能够直接访问,
这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:
register_globals = Off
当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取 GET 提交的变量 var,那
么就要用$_GET['var']来进行获取,这个 php 程序员要注意。
8.8.8.8.打开magic_quotes_gpcmagic_quotes_gpcmagic_quotes_gpcmagic_quotes_gpc 来防止 SQLSQLSQLSQL 注入
SQL 注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini 中有
一个设置:
magic_quotes_gpc = Off
这个默认是关闭的,如果它打开后将自动把用户提交对 sql 的查询进行转换,比如把 ' 转为 '等,这对防
止 sql 注射有重大作用。所以我们推荐设置为:
magic_quotes_gpc = On
9.9.9.9.错误信息控制
一般 php 在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含 php 脚本当前的路径
信息或者查询的 SQL 语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提
示:
display_errors = Off
如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:
error_reporting = E_WARNING & E_ERROR
当然,我还是建议关闭错误提示。
10.10.10.10.错误日志
建议在关闭 display_errors 后能够把错误信息记录下来,便于查找服务器运行的原因:
LAMPLAMPLAMPLAMP 安全全攻略
log_errors = On
同时也要设置错误日志存放的目录,建议根 apache 的日志存在一起:
error_log = D:/usr/local/apache2/logs/php_error.log
注意:给文件必须允许 apache 用户的和组具有写的权限。
12.php.ini12.php.ini12.php.ini12.php.ini 包含补丁文件
在 php.ini 中引用。在配置文件内引用的话,将影响到所以的网站,包含所有页面
在 php.ini 中,找到此节:
; Automatically add files before or after any PHP document.
;auto_prepend_file = "phpids.php"
;auto_append_file = "alert.php"
默认是空,请添加所包含的文件。同时找到:
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows:"path1;path2"
include_path = ".;F:PHPnowhtdocs"
mysqlmysqlmysqlmysql 方面
1.修改 root 用户口令,删除空口令 ...............................................................................
2.删除默认数据库和数据库用户..................................................................................
3.改变默认 mysql 管理员帐号 ..................................................................................
4.关于密码的管理 .....................................................................................................
5.使用独立用户运行 msyql........................................................................................
6.禁止远程连接数据库 ..............................................................................................
7.限制连接用户的数量 ............................................................................................
8.用户目录权限限制 ................................................................................................
9.命令历史记录保护...................................................................................................
10.禁止 MySQL 对本地文件存取 ............................................................................
11.MySQL 服务器权限控制 .....................................................................................
12.使用 chroot 方式来控制 MySQL 的运行目录 ...................................................
13.关闭对无关的 Web 程序访问的支持 ...............................................................
14.数据库备份策略..............................................................................................
15. Mysqld 安全相关启动选项............................................................................
16.information_schema 安全...............................................................................
1.1.1.1.修改rootrootrootroot 用户口令,删除空口令
LAMPLAMPLAMPLAMP 安全全攻略
缺省安装的 MySQL 的 root 用户是空密码的,为了安全起见,必须修改为强密码,所谓的强密码,至少 8
位,由字母、数字和符号组成的不规律密码。使用 MySQL 自带的命令 mysaladmin 修改 root 密码,同时也
可以登陆数据库,修改数据库 mysql 下的 user 表的字段内容,修改方法如下所示:
# /usr/local/mysql/bin/mysqladmin -u root password “upassword” //使用 mysqladmin
#mysql> use mysql;
#mysql> updateuser set password=password('upassword') where user='root';
#mysql> flush privileges; //强制刷新内存授权表,否则用的还是在内存缓冲的口令
2.2.2.2.删除默认数据库和数据库用户
一般情况下,MySQL 数据库安装在本地,并且也只需要本地的 php 脚本对 mysql 进行读取,所以很多用户
不需要,尤其是默认安装的用户。MySQL 初始化后会自动生成空用户和 test库,进行安装的测试,这会对
数据库的安全构成威胁,有必要全部删除,最后的状态只保留单个 root 即可,当然以后根据需要增加用户
和数据库。
#mysql> show databases;
#mysql> drop database test; //删除数据库 test
#usemysql;
#delete from db; //删除存放数据库的表信息,因为还没有数据库信息。
#mysql> delete from user where not (user='root') ; // 删除初始非 root 的用户
#mysql> delete from user where user='root' and password=''; //删除空密码的 root,尽量重复操作
Query OK, 2 rows affected (0.00 sec)
#mysql> flush privileges; //强制刷新内存授权表。
4.4.4.4.关于密码的管理
密码是数据库安全管理的一个很重要因素,不要将纯文本密码保存到数据库中。如果你的计算机有安全危
险,入侵者可以获得所有的密码并使用它们。相反,应使用 MD5()、SHA1()或单向哈希函数。也不要从词
典中选择密码,有专门的程序可以破解它们,请选用至少八位,由字母、数字和符号组成的强密码。在存
取密码时,使用 mysql 的内置函数 password()的sql 语句,对密码进行加密后存储。例如以下方式在 users
表中加入新用户。
#mysql> insert into users values (1,password(1234),'test');
5.5.5.5.使用独立用户运行msyqlmsyqlmsyqlmsyql
绝对不要作为使用 root 用户运行 MySQL 服务器。这样做非常危险,因为任何具有 FILE 权限的用户能够用
root 创建文件(例如,~root/.bashrc)。mysqld 拒绝使用 root 运行,除非使用--user=root 选项明显指定。应该
用普通非特权用户运行 mysqld。正如前面的安装过程一样,为数据库建立独立的 linux 中的 mysql 账 户 ,
该账户用来只用于管理和运行 MySQL。
要想用其它 Unix 用户启动 mysqld,,增 加 user 选项指定/etc/my.cnf 选项文件或服务器数据目录的 my.cnf 选
项文件中的[mysqld]组的用户名。
#vi /etc/my.cnf
[mysqld]
LAMPLAMPLAMPLAMP 安全全攻略
user=mysql
该命令使服务器用指定的用户来启动,无论你手动启动或通过 mysqld_safe 或 mysql.server 启动,都能确保
使用 mysql 的身份。也可以在启动数据库是,加上 user 参数。
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
作为其它 linux 用户而不用 root 运行 mysqld,你不需要更改 user 表中的 root 用户名,因为 MySQL 账户的
用户名与 linux 账户的用户名无关。确保mysqld 运行时,只使用对数据库目录具有读或写权限的 linux 用户
来运行。
6.6.6.6.禁止远程连接数据库
在命令行 netstat -ant 下看到,默认的 3306 端口是打开的,此时打开了 mysqld 的网络监听,允许用户远程
通过帐号密码连接数本地据库,默认情况是允许远程连接数据的。为了禁止该功能,启动 skip-networking,
不监听 sql 的任何 TCP/IP 的连接,切断远程访问的权利,保证安全性。假如需要远程管理数据库,可通过
安装 PhpMyadmin 来实现。假如确实需要远程连接数据库,至少修改默认的监听端口,同时添加防火墙规
则,只允许可信任的网络的 mysql 监听端口的数据通过。
# 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
7.7.7.7.限制连接用户的数量
数据库的某用户多次远程连接,会导致性能的下降和影响其他用户的操作,有必要对其进行限制。可以通
过限制单个账户允许的连接数量来实现,设置 my.cnf 文件的 mysqld 中的 max_user_connections 变量来完成 。
GRANT 语句也可以支持 资源控制选项来限制服务器对一个账户允许的使用范围。
#vi /etc/my.cnf
[mysqld]
max_user_connections 2
8.8.8.8.用户目录权限限制
默认的 mysql 是安装在/usr/local/mysql,而对应的数据库文件在/usr/local/mysql/var 目录下,因此,必须保证
该目录不能让未经授权的用户访问后把数据库打包拷贝走了,所以要限制对该目录的访问。确保 mysqld 运
行时,只使用对数据库目录具有读或写权限的 linux 用户来运行。
# chown -R root /usr/local/mysql/ //mysql 主目录给 root
# chown -R mysql.mysql /usr/local/mysql/var //确保数据库目录权限所属 mysql 用户
9.9.9.9.命令历史记录保护
数据库相关的 shell 操作命令都会分别记录在.bash_history,如果这些文件不慎被读取,会导致数据库密码
和数据库结构等信息泄露,而登陆数据库后的操作将记录在.mysql_history 文件中,如果使用 update 表信息
来修改数据库用户密码的话,也会被读取密码,因此需要删除这两个文件,同时在进行登陆或备份数据库
等与密码相关操作时,应该使用-p 参数加入提示输入密码后,隐式输入密码,建议将以上文件置空。
# rm .bash_history .mysql_history //删除历史记录
LAMPLAMPLAMPLAMP 安全全攻略
# ln -s /dev/null .bash_history //将 shell 记录文件置空
# ln -s /dev/null .mysql_history //将 mysql 记录文件置空
10.10.10.10.禁止 MySQLMySQLMySQLMySQL对本地文件存取
在 mysql 中,提供对本地文件的读取,使用的是 load data local infile 命令,默认在 5.0 版本中,该选项是默
认打开的,该操作令会利用 MySQL 把本地文件读到数据库中,然后用户就可以非法获取敏感信息了,假
如你不需要读取本地文件,请务必关闭。应该禁止 MySQL 中用“LOAD DATA LOCAL INFILE”命令。网络
上流传的一些攻击方法中就有用它 LOAD DATA LOCALINFILE的,同时它也是很多新发现的 SQL Injection
攻击利用的手段!黑客还能通过使用 LOAD DATALOCAL INFILE 装载“/etc/passwd”进一个数据库表,然后
能用 SELECT 显示它,这个操作对服务器的安全来说,是致命的。可以在 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 tableusers fields terminated by ',';
#ERROR 1148 (42000):The used command is not allowed with this MySQLversion
--local-infile=0 选项启动 mysqld 从服务器端禁用所有 LOAD DATA LOCAL 命令,假如需要获取本地文件,
需要打开,但是建议关闭。
11.MySQL11.MySQL11.MySQL11.MySQL 服务器权限控制
MySQL 权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的 SELECT、
INSERT、UPDATE和 DELETE 等权限(详见 user 超级用户表)。它的附加的功能包括有匿名的用户并对于
MySQL 特定的功能例如 LOAD DATA INFILE 进行授权及管理操作的能力。
管理员可以对 user,db,host 等表进行配置,来控制用户的访问权限,而 user 表权限是超级用户权限。只
把 user 表的权限授予超级用户如服务器或数据库主管是明智的。对其他用户,你应该把在 user 表中的权限
设成'N'并且仅在特定数据库的基础上授权。你可以为特定的数据库、表或列授权,FILE 权限给予你用 LOAD
DATA INFILE 和 SELECT ... INTO OUTFILE 语句读和写服务器上的文件,任何被授予 FILE 权限的用户都
能读或写 MySQL 服务器能读或写的任何文件。(说明用户可以读任何数据库目录下的文件,因为服务器可
以访问这些文件)。 FILE 权限允许用户在 MySQL 服务器具有写权限的目录下创建新文件,但不能覆盖已
有文件在 user 表的 File_priv 设置 Y 或 N。,所以当你不需要对服务器文件读取时,请关闭该权限。
#mysql> load data infile 'sqlfile.txt' into table loadfile.users fields terminated by ',';
Query OK, 4 rows affected (0.00 sec) //读取本地信息 sqlfile.txt'
Records: 4 Deleted: 0 Skipped: 0 Warnings: 0
#mysql> updateuser set File_priv='N' where user='root'; //禁止读取权限
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges; //刷新授权表
Query OK, 0 rows affected (0.00 sec)
#mysql> load data infile 'sqlfile.txt' into table users fields terminated by ','; //重登陆读取文件
#ERROR 1045 (28000):Access denied for user 'root'@'localhost' (using password:YES) //失败
# mysql> select * from loadfile.users into outfile 'test.txt' fields terminated by ',';
ERROR 1045 (28000):Access denied for user 'root'@'localhost' (using password:YES)
为了安全起见,随时使用 SHOW GRANTS 语句检查查看谁已经访问了什么。然后使用 REVOKE 语句删除
LAMPLAMPLAMPLAMP 安全全攻略
不再需要的权限。
12.12.12.12.使用chrootchrootchrootchroot 方式来控制 MySQLMySQLMySQLMySQL 的运行目录
Chroot 是 linux 中的一种系统高级保护手段,它的建立会将其与主系统几乎完全隔离,也就是说,一旦遭到
什么问题,也不会危及到正在运行的主系统。这是一个非常有效的办法,特别是在配置网络服务程序的时
候。
13.13.13.13.关闭对WebWebWebWeb 访问的支持
如果不打算让 Web 访问使用 MySQL 数据库,没有提供诸如 PHP 这样的 Web 语言的时候,重新设置或编
译你的 PHP,取消它们对 MySQL 的默认支持。假如服务器中使用 php 等 web 程序,试试用 Web 形式非法
的请求,如果得到任何形式的 MySQL 错误,立即分析原因,及时修改 Web 程序,堵住漏洞,防止 MySQL
暴露在 web 面前。
对于 Web 的安全检查,在 MySQL 官方文档中这么建议,对于 web 应用,至少检查以下清单:
? 试试用 Web 形式输入单引号和双引号(‘'’和‘"’)。如果得到任何形式的 MySQL 错误,立即分析原因。
? 试试修改动态 URL,可以在其中添加%22(‘"’)、%23(‘#’)和%27(‘'’)。
? 试试在动态 URL 中修改数据类型,使用前面示例中的字符,包括数字和字符类型。你的应用程序应足
够安全,可以防范此类修改和类似攻击。
? 试试输入字符、空格和特殊符号,不要输入数值字段的数字。你的应用程序应在将它们传递到 MySQL
之前将它们删除或生成错误。将未经过检查的值传递给 MySQL 是很危险的!
? 将数据传给 MySQL 之前先检查其大小。
? 用管理账户之外的用户名将应用程序连接到数据库。不要给应用程序任何不需要的访问权限。
14.14.14.14.数据库备份策略
使用 mysqldump 进行备份非常简单,如果要备份数据库” nagios_db_backup ”,使用命令,同时使用管道 gzip
命令对备份文件进行压缩,建议使用异地备份的形式,可以采用 Rsync等方式,将备份服务器的目录挂载
到数据库服务器,将数据库文件备份打包在,通过 crontab 定时备份数据:
#!/bin/sh
time=`date+"("%F")"%R`
$/usr/local/mysql/bin/mysqldump -u nagios -pnagios nagios | gzip
>/home/sszheng/nfs58/nagiosbackup/nagios_backup.$time.gz
# crontab -l
# m h dom mon dow command
00 00 * * * /home/sszheng/shnagios/backup.sh
恢复数据使用命令:
gzip -d nagios_backup.(2008-01-24)00:00.gz
nagios_backup.(2008-01-24)00:00
#mysql –u root -p nagios < /home/sszheng/nfs58/nagiosbackup/nagios_backup.(2008-01-24)12:00
15.15.15.15. MysqldMysqldMysqldMysqld 安全相关启动选项
? --local-infile[={0|1}]
LAMPLAMPLAMPLAMP 安全全攻略
如果用--local-infile=0 启动服务器,则客户端不能使用 LOCAL in LOADDATA 语句。
? --old-passwords
强制服务器为新密码生成短(pre-4.1)密码哈希。当服务器必须支持旧版本客户端程序时,为了保证兼容性这
很有用。
? (OBSOLETE) --safe-show-database
在以前版本的 MySQL 中,该选项使 SHOW DATABASES 语句只显示用户具有部分权限的数据库名。在
MySQL 5.1 中,该选项不再作为现在的 默认行为使用,有一个 SHOW DATABASES 权限可以用来控制每
个账户对数据库名的访问。
? --safe-user-create
如果启用,用户不能用 GRANT 语句创建新用户,除非用户有 mysql.user 表的 INSERT 权限。如果你想让
用户具有授权权限来创建新用户,你应给用户授予下面的权限:
mysql> GRANT INSERT(user) ONmysql.user TO 'user_name'@'host_name';
这样确保用户不能直接更改权限列,必须使用 GRANT 语句给其它用户授予该权限。
? --secure-auth
不允许鉴定有旧(pre-4.1)密码的账户。
16.information_schema16.information_schema16.information_schema16.information_schema 安全
在用户角度来看,INFORMATION_SCHEMA 只是一个以插件方式存在的存储引擎,编译安装的时候
--disable-information-schema 就行了
added TRIGGER_ACLcheck for I_S.TRIGGERS
http://bugs.mysql.com/bug.php?id=38837
http://bugs.mysql.com/bug.php?id=27629
Phpmyadmin 里隐藏方法
$cfg['servers'][$i]['hide_db'] = 'information_schema';
Iptables 方面:
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -jACCEPT
iptables -A INPUT -p tcp --dport 80 -jACCEPT
iptables -A INPUT -p tcp --dport 443 -jACCEPT
iptables -A INPUT -m state --stateRELATED,ESTABLISHED -jACCEPT
iptables -P INPUT DROP

More Related Content

What's hot

Linux安全配置终极指南
Linux安全配置终极指南Linux安全配置终极指南
Linux安全配置终极指南wensheng wei
 
Install Hmc 734 V Box
Install Hmc 734 V BoxInstall Hmc 734 V Box
Install Hmc 734 V Boxguest96e3e1
 
Free Bsd7.2 Install V1.6
Free Bsd7.2 Install V1.6Free Bsd7.2 Install V1.6
Free Bsd7.2 Install V1.6Jainan O
 
九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)heima911
 
5, system admin
5, system admin5, system admin
5, system adminted-xu
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalivedcolderboy17
 
linux安装以及LAMP 环境安装详细
linux安装以及LAMP 环境安装详细linux安装以及LAMP 环境安装详细
linux安装以及LAMP 环境安装详细colderboy17
 
Juniper ScreenOS 基于Policy的
Juniper ScreenOS 基于Policy的Juniper ScreenOS 基于Policy的
Juniper ScreenOS 基于Policy的mickchen
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)Timothy Chen
 
下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:Vaai下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:VaaiITband
 
Ubuntu 10.04 LTS上配置简单双机热备方案
Ubuntu 10.04 LTS上配置简单双机热备方案Ubuntu 10.04 LTS上配置简单双机热备方案
Ubuntu 10.04 LTS上配置简单双机热备方案Shawn Zhung
 
The New Process No. 1 of Linux -- SystemD
The New Process No. 1 of Linux -- SystemDThe New Process No. 1 of Linux -- SystemD
The New Process No. 1 of Linux -- SystemDfreedman6022e20
 
基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器ekoing
 
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linuxYiwei Ma
 
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯SZ Lin
 

What's hot (18)

Linux安全配置终极指南
Linux安全配置终极指南Linux安全配置终极指南
Linux安全配置终极指南
 
Dl
DlDl
Dl
 
Install Hmc 734 V Box
Install Hmc 734 V BoxInstall Hmc 734 V Box
Install Hmc 734 V Box
 
Free Bsd7.2 Install V1.6
Free Bsd7.2 Install V1.6Free Bsd7.2 Install V1.6
Free Bsd7.2 Install V1.6
 
Ipaq with linux
Ipaq with linuxIpaq with linux
Ipaq with linux
 
九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)
 
5, system admin
5, system admin5, system admin
5, system admin
 
Sery lvs+keepalived
Sery lvs+keepalivedSery lvs+keepalived
Sery lvs+keepalived
 
linux安装以及LAMP 环境安装详细
linux安装以及LAMP 环境安装详细linux安装以及LAMP 环境安装详细
linux安装以及LAMP 环境安装详细
 
Juniper ScreenOS 基于Policy的
Juniper ScreenOS 基于Policy的Juniper ScreenOS 基于Policy的
Juniper ScreenOS 基于Policy的
 
0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)0118 Windows Server 2008 的伺服器核心 (Server Core)
0118 Windows Server 2008 的伺服器核心 (Server Core)
 
下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:Vaai下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:Vaai
 
Ubuntu 10.04 LTS上配置简单双机热备方案
Ubuntu 10.04 LTS上配置简单双机热备方案Ubuntu 10.04 LTS上配置简单双机热备方案
Ubuntu 10.04 LTS上配置简单双机热备方案
 
The New Process No. 1 of Linux -- SystemD
The New Process No. 1 of Linux -- SystemDThe New Process No. 1 of Linux -- SystemD
The New Process No. 1 of Linux -- SystemD
 
基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器
 
Linuxguide4f2e
Linuxguide4f2eLinuxguide4f2e
Linuxguide4f2e
 
Kick start无人值守批量安装linux
Kick start无人值守批量安装linuxKick start无人值守批量安装linux
Kick start无人值守批量安装linux
 
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
Debian 套件打包教學指南 v0.19 - 繁體中文翻譯
 

Viewers also liked

Entrepreneurship in India The Case of e-Tailing Ventures
Entrepreneurship in India The Case of e-Tailing VenturesEntrepreneurship in India The Case of e-Tailing Ventures
Entrepreneurship in India The Case of e-Tailing Venturesranjana agarwal
 
Business Halloween Marketing
Business Halloween MarketingBusiness Halloween Marketing
Business Halloween MarketingPink Cloud
 
Article13 151022171310-lva1-app6891 (2)
Article13 151022171310-lva1-app6891 (2)Article13 151022171310-lva1-app6891 (2)
Article13 151022171310-lva1-app6891 (2)zcy
 
The Senior Finance Leaders Role in Closing the Talent Gap
The Senior Finance Leaders Role in Closing the Talent GapThe Senior Finance Leaders Role in Closing the Talent Gap
The Senior Finance Leaders Role in Closing the Talent GapArdy Kirk Assadi
 
Clasificaciones tl38
Clasificaciones tl38Clasificaciones tl38
Clasificaciones tl38morelupe
 
Sss franchisee overseas franchise
Sss franchisee overseas franchiseSss franchisee overseas franchise
Sss franchisee overseas franchiseSaurabh Mishra
 
Debugging and Fixing Errors in Published Instrument
Debugging and Fixing Errors in Published InstrumentDebugging and Fixing Errors in Published Instrument
Debugging and Fixing Errors in Published InstrumentBradford Hull
 
Darie Magheru - Cărămida cu mâner
Darie Magheru - Cărămida cu mânerDarie Magheru - Cărămida cu mâner
Darie Magheru - Cărămida cu mânerIoan M.
 
Публікація іноземного студента
Публікація іноземного студента Публікація іноземного студента
Публікація іноземного студента prot92
 
ICT SLIDE 3
ICT SLIDE 3ICT SLIDE 3
ICT SLIDE 3ANUAADHU
 
Materi 1 Pengenalan Batuan Hidup dasar
Materi 1 Pengenalan Batuan Hidup dasarMateri 1 Pengenalan Batuan Hidup dasar
Materi 1 Pengenalan Batuan Hidup dasarmeiliyana2
 

Viewers also liked (17)

ppt on buoyancy
ppt on buoyancyppt on buoyancy
ppt on buoyancy
 
What is MOOCs
What is MOOCsWhat is MOOCs
What is MOOCs
 
Entrepreneurship in India The Case of e-Tailing Ventures
Entrepreneurship in India The Case of e-Tailing VenturesEntrepreneurship in India The Case of e-Tailing Ventures
Entrepreneurship in India The Case of e-Tailing Ventures
 
Business Halloween Marketing
Business Halloween MarketingBusiness Halloween Marketing
Business Halloween Marketing
 
Article13 151022171310-lva1-app6891 (2)
Article13 151022171310-lva1-app6891 (2)Article13 151022171310-lva1-app6891 (2)
Article13 151022171310-lva1-app6891 (2)
 
5فتح مصر
5فتح مصر5فتح مصر
5فتح مصر
 
The Senior Finance Leaders Role in Closing the Talent Gap
The Senior Finance Leaders Role in Closing the Talent GapThe Senior Finance Leaders Role in Closing the Talent Gap
The Senior Finance Leaders Role in Closing the Talent Gap
 
Clasificaciones tl38
Clasificaciones tl38Clasificaciones tl38
Clasificaciones tl38
 
Sss franchisee overseas franchise
Sss franchisee overseas franchiseSss franchisee overseas franchise
Sss franchisee overseas franchise
 
Rick romero resume 2015
Rick romero resume 2015Rick romero resume 2015
Rick romero resume 2015
 
Debugging and Fixing Errors in Published Instrument
Debugging and Fixing Errors in Published InstrumentDebugging and Fixing Errors in Published Instrument
Debugging and Fixing Errors in Published Instrument
 
Darie Magheru - Cărămida cu mâner
Darie Magheru - Cărămida cu mânerDarie Magheru - Cărămida cu mâner
Darie Magheru - Cărămida cu mâner
 
Публікація іноземного студента
Публікація іноземного студента Публікація іноземного студента
Публікація іноземного студента
 
ICT SLIDE 3
ICT SLIDE 3ICT SLIDE 3
ICT SLIDE 3
 
HW 2, Library Research
HW 2, Library ResearchHW 2, Library Research
HW 2, Library Research
 
POY_Final_Copy
POY_Final_CopyPOY_Final_Copy
POY_Final_Copy
 
Materi 1 Pengenalan Batuan Hidup dasar
Materi 1 Pengenalan Batuan Hidup dasarMateri 1 Pengenalan Batuan Hidup dasar
Materi 1 Pengenalan Batuan Hidup dasar
 

Similar to Lamp安全全攻略

unix toolbox 中文版
unix toolbox 中文版unix toolbox 中文版
unix toolbox 中文版Jie Bao
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结Yiwei Ma
 
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86dbabc
 
Heartbeat v2 安装和配置原理
Heartbeat v2 安装和配置原理Heartbeat v2 安装和配置原理
Heartbeat v2 安装和配置原理Pickup Li
 
九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)heima911
 
南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告Bo-Yi Wu
 
Mysql proxy+mysql-mmm
Mysql proxy+mysql-mmmMysql proxy+mysql-mmm
Mysql proxy+mysql-mmmYiwei Ma
 
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Yiwei Ma
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档xuebao_zx
 
CloudStack Installation on Ubuntu
CloudStack Installation on UbuntuCloudStack Installation on Ubuntu
CloudStack Installation on Ubuntu康志強 大人
 
Mysql mmm演讲--冯浩
Mysql mmm演讲--冯浩Mysql mmm演讲--冯浩
Mysql mmm演讲--冯浩chinafenghao
 
Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩chinafenghao
 
Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩chinafenghao
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 Lheima911
 
Centos下安装apache + subversion
Centos下安装apache + subversionCentos下安装apache + subversion
Centos下安装apache + subversionYiwei Ma
 
soyo manual 8100 Vt6103 Ok
soyo manual 8100 Vt6103 Oksoyo manual 8100 Vt6103 Ok
soyo manual 8100 Vt6103 Okguest69f195
 
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境dbabc
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理frankwsj
 

Similar to Lamp安全全攻略 (20)

unix toolbox 中文版
unix toolbox 中文版unix toolbox 中文版
unix toolbox 中文版
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 
Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86Oracle10g Rac Configuration For Linux X86
Oracle10g Rac Configuration For Linux X86
 
Heartbeat v2 安装和配置原理
Heartbeat v2 安装和配置原理Heartbeat v2 安装和配置原理
Heartbeat v2 安装和配置原理
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)九州通 Tsm重新配置文档(2008 11 10)
九州通 Tsm重新配置文档(2008 11 10)
 
南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告南投替代役整理組數位典藏報告
南投替代役整理組數位典藏報告
 
Mysql proxy+mysql-mmm
Mysql proxy+mysql-mmmMysql proxy+mysql-mmm
Mysql proxy+mysql-mmm
 
Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)Mysql mmm安装指南(翻译)
Mysql mmm安装指南(翻译)
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
 
CloudStack Installation on Ubuntu
CloudStack Installation on UbuntuCloudStack Installation on Ubuntu
CloudStack Installation on Ubuntu
 
LinuxGuide4F2E
LinuxGuide4F2ELinuxGuide4F2E
LinuxGuide4F2E
 
Mysql mmm演讲--冯浩
Mysql mmm演讲--冯浩Mysql mmm演讲--冯浩
Mysql mmm演讲--冯浩
 
Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩
 
Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩Mysql mmm演讲-冯浩
Mysql mmm演讲-冯浩
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 L
 
Centos下安装apache + subversion
Centos下安装apache + subversionCentos下安装apache + subversion
Centos下安装apache + subversion
 
soyo manual 8100 Vt6103 Ok
soyo manual 8100 Vt6103 Oksoyo manual 8100 Vt6103 Ok
soyo manual 8100 Vt6103 Ok
 
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
Dbabc.net 利用heartbeat + drbd搭建my sql高可用环境
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理
 

More from Da Zhao

Ecmascript 5rd 语法
Ecmascript 5rd 语法Ecmascript 5rd 语法
Ecmascript 5rd 语法Da Zhao
 
Ppk on javascript_chapter_2
Ppk on javascript_chapter_2Ppk on javascript_chapter_2
Ppk on javascript_chapter_2Da Zhao
 
Ppk on javascript_chapter_1
Ppk on javascript_chapter_1Ppk on javascript_chapter_1
Ppk on javascript_chapter_1Da Zhao
 
Javascript core
Javascript coreJavascript core
Javascript coreDa Zhao
 
Javascript 权威指南(第四版)
Javascript 权威指南(第四版)Javascript 权威指南(第四版)
Javascript 权威指南(第四版)Da Zhao
 
Ajax基础教程
Ajax基础教程Ajax基础教程
Ajax基础教程Da Zhao
 
高性能网站建设指南
高性能网站建设指南高性能网站建设指南
高性能网站建设指南Da Zhao
 
Linux服务器服务配置说明
Linux服务器服务配置说明Linux服务器服务配置说明
Linux服务器服务配置说明Da Zhao
 
Centos 5.5_图形安装教程
Centos 5.5_图形安装教程Centos 5.5_图形安装教程
Centos 5.5_图形安装教程Da Zhao
 
Expect中文版教程
Expect中文版教程Expect中文版教程
Expect中文版教程Da Zhao
 
精通CSS
精通CSS精通CSS
精通CSSDa Zhao
 
CSS权威指南
CSS权威指南CSS权威指南
CSS权威指南Da Zhao
 

More from Da Zhao (12)

Ecmascript 5rd 语法
Ecmascript 5rd 语法Ecmascript 5rd 语法
Ecmascript 5rd 语法
 
Ppk on javascript_chapter_2
Ppk on javascript_chapter_2Ppk on javascript_chapter_2
Ppk on javascript_chapter_2
 
Ppk on javascript_chapter_1
Ppk on javascript_chapter_1Ppk on javascript_chapter_1
Ppk on javascript_chapter_1
 
Javascript core
Javascript coreJavascript core
Javascript core
 
Javascript 权威指南(第四版)
Javascript 权威指南(第四版)Javascript 权威指南(第四版)
Javascript 权威指南(第四版)
 
Ajax基础教程
Ajax基础教程Ajax基础教程
Ajax基础教程
 
高性能网站建设指南
高性能网站建设指南高性能网站建设指南
高性能网站建设指南
 
Linux服务器服务配置说明
Linux服务器服务配置说明Linux服务器服务配置说明
Linux服务器服务配置说明
 
Centos 5.5_图形安装教程
Centos 5.5_图形安装教程Centos 5.5_图形安装教程
Centos 5.5_图形安装教程
 
Expect中文版教程
Expect中文版教程Expect中文版教程
Expect中文版教程
 
精通CSS
精通CSS精通CSS
精通CSS
 
CSS权威指南
CSS权威指南CSS权威指南
CSS权威指南
 

Lamp安全全攻略

  • 1. LAMPLAMPLAMPLAMP 安全全攻略 作者:kindle 此文档由网络资料收集以及经验整理出来的,有什么不足之处欢迎大家多提意见, mail:kindle@live.cn 注:版权归 linux 安全网(linux520.com)所有,转载请注明出处 目录 LLLLinuxinuxinuxinux 加固 1.BIOS................................................................................................... 2.SSH 安全............................................................................................ 3.禁用 telnet.......................................................................................... 4.禁用代码编译.................................................................................... 5.ProFTP................................................................................................ 6.TCPwrappers...................................................................................... 7.创建一个 SU 组................................................................................. 8.root 通知............................................................................................. 9.history 安全........................................................................................ 10.欢迎信息.......................................................................................... 11.禁用所有特殊账户.......................................................................... 12.chmod 危险文件.............................................................................. 13.指定允许 root 登陆的 TTY 设备.................................................... 14.选择一个安全的密码...................................................................... 15.检查 Rootkit..................................................................................... 16.安装补丁.......................................................................................... 17.隐藏 Apache 信息........................................................................... 18.隐藏 php 信息................................................................................. 19.关闭不使用的服务.......................................................................... 20.检测监听中的端口.......................................................................... 21.关闭打开的端口和服务.................................................................. 22.删除不用的 rpm包.......................................................................... 23.禁用危险的 php 函数...................................................................... 24.安装配置防火墙............................................................................. 25.安装和配置 BFD............................................................................ 26.内核加固(sysctl.conf)...................................................................... 27.更改 SSH 端口................................................................................ 28./tmp /var/tmp,/dev/shm 分区安全................................................... 29.PHP IDS........................................................................................... AAAApachepachepachepache 加固 1.修改 banner....................................................................................... 2.修改默认的 http 状态响应码 404,503 等默认页面........................ 3.Apache 的访问权限控制 ................................................................
  • 2. LAMPLAMPLAMPLAMP 安全全攻略 4.关闭危险指令.................................................................................... 5.open_basedir 限制目录.................................................................... 6.掌握 Apache 的 Order Allow Deny 判断原则 ................................ 7.mod_rewrite 重写 URL..................................................................... 9.Speling 模块去除 url 大小写............................................................ 8. Limit 模块限制 IP 连接数 .............................................................. 9.让 apache 支持安全 HTTPS 协议 ................................................... 10.安装配置 mod_security..................................................................... 11.加载 speling 模块............................................................................... PhpPhpPhpPhp 加固 1. 打开 php 的安全模式..................................................................... 2. 安全模式下执行程序主目录 ....................................................... 3. 安全模式下包含文件...................................................................... 4. 控制 php 脚本能访问的目录 ......................................................... 5. 关闭危险函数................................................................................... 6. 关闭 PHP 版本信息在 http 头中的泄漏......................................... 7. 关闭注册全局变量 ......................................................................... 8. 打开 magic_quotes_gpc 来防止 SQL 注入...................................... 9. 错误信息控制.................................................................................... 10. 错误日志............................................................................................. 11. 关闭远程文件打开............................................................................. 12. Php.ini 包含补丁文件......................................................................... mysqlmysqlmysqlmysql 方面:::: 1.修改 root 用户口令,删除空口令 ........................................................... 2.删除默认数据库和数据库用户.................................................................. 3.改变默认 mysql 管理员帐号 ................................................................... 4.关于密码的管理 ........................................................................................ 5.使用独立用户运行 msyql........................................................................... 6.禁止远程连接数据库 ................................................................................. 7.限制连接用户的数量 .................................................................................. 8.用户目录权限限制 ...................................................................................... 9.命令历史记录保护......................................................................................... 10.禁止 MySQL 对本地文件存取 ................................................................ 11.MySQL 服务器权限控制 ........................................................................... 12.使用 chroot 方式来控制 MySQL 的运行目录 ........................................... 13.关闭对无关的 Web 程序访问的支持 ......................................................... 14.数据库备份策略............................................................................................. 15. Mysqld 安全相关启动选项.......................................................................... 16.information_schema 安全.............................................................................. 总结
  • 3. LAMPLAMPLAMPLAMP 安全全攻略 ======================================================================== 介绍 这个教程将一步步的指引你,使你的 Linux 系统变得安全。 任何默认安装的操作系统都是不够安全的,本文将指引你如何建立一个 相对安全的 Linux 系统。 ======================================================================== 1.BIOS1.BIOS1.BIOS1.BIOS 你应该总是在系统启动的时候设置一个 BIOS 密码和禁用从 CD-ROM 和软盘引导。 这将防止一些人未经允许访问你的系统和更改 BIOS 设置 2.SSH2.SSH2.SSH2.SSH 安全 SSH 是一个协议,利用它可以登录到一个远程系统或远程执行系统命令, 默认允许 root 登录,并且 sshv1 存在缺陷,我们应该在 sshd_config 禁止 root 访问和使用 sshv2 来让 ssh 更加安全。 方法: vi /etc/ssh/sshd_config 把协议改为 2 PermitRootLogin = no 重启 sshd /etc/rc.d/init.d/sshd restart 3.3.3.3.禁用telnettelnettelnettelnet 早期的 Linux 默认开启 telnet 服务,telnet,ftp,rlogin 都是明文传输的协议 是容易被嗅探到的,这就是为什么推荐使用安全的版本(sftp,scp,ssh)的原因 如果你必须要使用 telnet,那么至少应该隐藏 banner 信息 方法: 修改/etc/xinetd.d/telnet disable=yes 4.4.4.4.禁用代码编译 你可以禁用代码编译并且只把编译的权限分配给一个用户组 方法: 添加编译用户组 /usr/sbin/groupadd compiler ,cd /usr/bin 把常见的编译器所属组赋给编译用户组 chgrp compiler *cc* chgrp compiler *++* chgrp compiler ld chgrp compiler as 设置 mysqlaccess 的访问 chgrp root mysqlaccess 设置权限 chmod 750 *cc*
  • 4. LAMPLAMPLAMPLAMP 安全全攻略 chmod 750 *++* chmod 750 ld chmod 750 as chmod 755 mysqlaccess 把用户添加到组里 修改/etc/group compiler:x:520:user1,user2 5.ProFTP5.ProFTP5.ProFTP5.ProFTP 你可以通过修改 proftpd.conf 来禁止 root 登陆 方法: 修改/etc/proftpd.conf Add RootLogin off 重启 proftpd /sbin/service proftpd stop /sbin/service proftpd start 6.TCP6.TCP6.TCP6.TCP wrapperswrapperswrapperswrappers 编辑 hosts.allow 和 hosts.deny 可以限制或允许访问 inet 服务 方法: 限制访问 inet 服务 修改/etc/hosts.allow 建议格式: #Approved IP addresses ALL:192.168.0.1 ALL:192.168.5.2 #CSV uploader machine proftpd:10.0.0.5 #pop3 from antwhere ipop3:ALL 修改/etc/hosts.deny ALL:ALL EXCEPT localhostENY 7.7.7.7.创建SUSUSUSU 用户组 因为我们在 SSH 禁止了 root 用户访问并且禁用了 telnet,所有我们应该 分配给一些用户 su 权限来获取 root 特权 方法: vi /etc/group 添加一行 wheel:x:10:root,user1,user2 chgrp wheel /bin/su chmod o-rwx /bin/su 8.root8.root8.root8.root 通知
  • 5. LAMPLAMPLAMPLAMP 安全全攻略 当一个具有 root 权限的用户登录的时候发 mail 方法: 编辑/root 下的.bashrc ,当有 root 权限的用户登录时发生 email 通知 echo 'ALERT - Root Shell Access (Server Name) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut - d"(" -f2 | cut -d")" -f1`" your@email.com 9.history9.history9.history9.history 安全 这是一个避免删除.bash_history 或重定向到/dev/null 的好主意 因此他不能清除或删除他最后执行的命令 方法: chattr +a .bash_history chattr +i .bash_history 获取用户的人会知道他的历史命令锁定并且要同意才可以使用服务 10.10.10.10.使用欢迎信息 你必须提供一些信息让攻击者知道该系统不对公众开放。 在国外有类似案件,攻击者入侵一个系统并且系统没有这些信息, 这种情况下法院不能做任何裁决,因为系统说 welcome 方法: 删除/etc/redhat-release 编辑/etc/issue /etc/motd 并显示警告信息 11.11.11.11.禁用所有特殊账户 你应该从系统中删除所有默认用户和组 例如 news,lp,sync,shutdown,uucp,games,halt 等 方法: 删除账户 userdel name 删除组 groupdel name 锁定特定账户:/usr/sbin/usermod -L -s /bin/false user 12.chmod12.chmod12.chmod12.chmod危险文件 这可能是限制不具有 root 权限的用户执行下面这些命令的好主意 方法: chmod 700 /bin/ping chmod 700 /usr/bin/finger chmod 700 /usr/bin/who chmod 700 /usr/bin/w chmod 700 /usr/bin/locate chmod 700 /usr/bin/whereis chmod 700 /sbin/ifconfig chmod 700 /usr/bin/pico chmod 700 /usr/bin/vi chmod 700 /usr/bin/which
  • 6. LAMPLAMPLAMPLAMP 安全全攻略 chmod 700 /usr/bin/gcc chmod 700 /usr/bin/make chmod 700 /bin/rpm 13.13.13.13.指定允许rootrootrootroot 登陆的 TTYTTYTTYTTY 设备 /etc/securetty 文件允许你指定 root 可以从哪个 TTY 设备登录 方法: vi /etc/securetty 只留 2 个连接 tty1 tty2 14.14.14.14.选择一个安全的密码 在/etc/login.defs 文件中定义了 shadow 密码的具体配置 默认密码长度最短为 5 字符,你应该至少设置为 8 方法: vi /etc/login.defs PASS_MIN_LEN 8 15.15.15.15.检测RootkitRootkitRootkitRootkit 用 chkrootkit 或 rkhunter,以 chkrootkit 为例 方法: wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.md5 首先检查 md5 校验值: md5sum chkrootkit.tar.gz 然后解压安装 tar -zxvf chkrootkit.tar.gz cd chkrootkit ./configure make sense 然后运行./chkrootkit 我们可以将其添加到 contrab 使其每天自动扫描: vi /etc/cron.daily/chkrootkit.sh #!/bin/bash # 输入 chkrootkit 的安装目录 cd /root/chkrootkit/ # 输入你想收到检测报告的 email ./chkrootkit | mail -s "Daily chkrootkit from Server Name" your@email.com 16.16.16.16.安装补丁 你要经常检查更新以修复某些缺陷或系统稳定性的改进 否则你存在漏洞的系统将会不时的遭受新的攻击
  • 7. LAMPLAMPLAMPLAMP 安全全攻略 方法: 列出可用更新:up2date -l 安装未排除的更新:up2date -u 安装包括排除的更新 up2date -uf 17.17.17.17.隐藏ApacheApacheApacheApache 信息 你应该隐藏 Apache 的 banner 信息使攻击者不知道 Apache 的版本,从而使他们难以利用漏洞 方法: 修改/etc/httpd/conf/httpd.conf 改变服务器签名:ServerSignature Off 重启 Apache /sbin/service httpd restart 18.18.18.18.隐藏phpphpphpphp 信息 你应该隐藏 php 的 banner 信息,原因同上 方法: 修改 php.ini 改变 expose_php=Off 重启 Apache 19.19.19.19.关闭不用的服务 你应该把任何未使用的服务关闭,可以在/etc/xinetd.d 文件夹里找到 方法: cd /etc/xinetd.d grep disable * 这将显示所有服务开启或关闭的状态,然后根据需要来开启或关闭服务 20.20.20.20.检测监听的端口 检测是否有必要开放端口是非常重要的 方法: netstat -tulp 或 lsof -i -n | egrep 'COMMAND|LISTEN|UDP'或 nmap! 21.21.21.21.关闭端口和服务 重点是关闭在系统启动时打开的不需要的端口 方法: 对于正在运行的服务,可以执行 chkconfig -list | grep on 禁用服务可以执行 chkconfig servicename off 然后停止正在运行的服务:/etc/init.d/service stop 22.22.22.22.删除不用的rpmrpmrpmrpm 包 首先应该清楚你的系统的作用,它是 web,mail,file 服务器或其他 然后觉得哪些包是必要的,之后删除不需要的软件包 方法:
  • 8. LAMPLAMPLAMPLAMP 安全全攻略 首先列出安装列表 rpm -qa 更详细的信息 rpm -qi rpmname 还可以检测删除包可能出现的冲突 rpm -e --test rpmname 23.23.23.23.禁用危险的phpphpphpphp 函数 你应该禁用 php 的危险函数防止在网站上执行系统命令 方法: whereis php.ini vi /usr/local/lib/php.ini 编辑 disable_functions = "symlink,shell_exec,exec,proc_close,proc_open,popen, system,dl,passthru,escapeshellarg, escapeshellcmd" 24.24.24.24.安装配置防火墙 高级策略防火墙(APF)是一种 IP 表(网络过滤),它是基于当今互联网部署服务器防火墙系统的基本需要和 客户部署 LINUX 安装的唯一需要而设计的。 它是最好的开源防 火墙之一。 配置 APF 防火墙方法: 下载 APF:wget http://www.r-fx.ca/downloads/apf-current.tar.gz 解压安装: tar -zxvf apf-current.tar.gz cd apf-0.9.7-1 ./install.sh 然后我们配置它 vi /etc/apf/conf.apf 一般配置: 启用防火墙使用 DShield.org 块列表 USE_DS="1" 然后我将列出常规的配置和 CPanel 配置方式,因为 CPanel 是应该最广泛的虚拟主机管理软件 1.常规配置(DNS,Mail,Web,FTP) Common ingress (inbound) # Common ingress (inbound) TCP ports -3000_3500 = passive port range for Pure FTPD IG_TCP_CPORTS="21,22,25,53,80,110,143,443,995" # # Common ingress (inbound) UDP ports IG_UDP_CPORTS="53" # Egress filtering [0 = Disabled / 1 = Enabled] EGF="1" # Common egress (outbound) TCP ports EG_TCP_CPORTS="21,25,80,443,43" # # Common egress (outbound) UDP ports EG_UDP_CPORTS="20,21,53"
  • 9. LAMPLAMPLAMPLAMP 安全全攻略 2.CPanel 配置 Common ingress (inbound) ports # Common ingress (inbound) TCP ports -3000_3500 = passive port range for Pure FTPD IG_TCP_CPORTS="21,22,25,53,80,110,143,443,2082,2083, 2086,2087, 2095, 2096,3000_3500" # # Common ingress (inbound) UDP ports IG_UDP_CPORTS="53" Common egress (outbound) ports # Egress filtering [0 = Disabled / 1 = Enabled] EGF="1" # Common egress (outbound) TCP ports EG_TCP_CPORTS="21,25,80,443,43,2089" # # Common egress (outbound) UDP ports EG_UDP_CPORTS="20,21,53" 之后启动防火墙 /etc/apf/apf -s 如果运行良好我在回去修改配置文件,使 DEVM="0" 然后我们配置 APF 的 AntiDos:vi /etc/apf/ad/conf.antidos 找到下面的内容并替换成你的资料 # Organization name to display on outgoing alert emails CONAME="Your Company" # Send out user defined attack alerts [0=off,1=on] USR_ALERT="0" # # User for alerts to be mailed to USR=you@yourco.com 你应把 USR_ALERT 改为 1 保存后重启 APF:/etc/apf/apf –r To make the firewall start with the Operating System: chkconfig --level 2345 apf on APF 开机自启动:chkconfig --level 2345 apf on 禁止一个 IP 用/etc/apf/apf -d ip 或 vi /etc/apf/deny_hosts.rules 允许一个 IP 用/etc/apf/apf -a ip 或 vi /etc/apf/deny_hosts.rules 25.25.25.25.安装配置BFD(BFD(BFD(BFD(暴力破解检测)))) BFD 是一个用于分析应用日志和检测验证失败的模块化 shell 脚本 而且安装配置和用法都是非常容易的。使用 BFD 的原因很简单。 其实在 LINUX 领域几乎没有结合防火墙或实时设备来监控不验证和 暴力攻击审计的程序。在用 BFD 之前你必须安装 APF 防火墙。
  • 10. LAMPLAMPLAMPLAMP 安全全攻略 方法: wget http://www.r-fx.ca/downloads/bfd-current.tar.gz tar -zxvf bfd-current.tar.gz cd bfd-0.9 然后我们来配置它 vi /usr/local/bfd/conf.bfd 把以下内容改为你的资料 # Enable/disable user alerts [0 = off; 1 = on] ALERT_USR="1" # # User alert email address EMAIL_USR="your@mail.com" # # User alert email; subject SUBJ_USR="Brute ForceWarning for $HOSTNAME" # 然后 vi /usr/local/bfd/ignore.hosts 把你的 IP 设置成允许主机,避免意外的锁定自己。 之后重启 BFD /usr/local/sbin/bfd -s 26.26.26.26.内核加固(sysctl.conf)(sysctl.conf)(sysctl.conf)(sysctl.conf) sysctl.conf 用来加固内核,目的是避免 DOS 和欺骗攻击 方法: 到/proc/sys 目录或 sysctl -a 命令了解下当前配置的大概情况 然后 vi /etc/sysctl.conf 添加如下内容: # Kernel sysctl configuration file for Red Hat Linux # # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details. # Controls IP packet forwarding net.ipv4.ip_forward = 0 # Controls sourceroute verification net.ipv4.conf.default.rp_filter = 1 # Controls the System Request debugging functionality of the kernel kernel.sysrq = 0 # Controls whether core dumps will append the PID to the core filename. # Useful for debugging multi-threaded applications. kernel.core_uses_pid = 1 #Prevent SYN attack net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 2048 net.ipv4.tcp_synack_retries = 2 # Disables packet forwarding net.ipv4.ip_forward=0
  • 11. LAMPLAMPLAMPLAMP 安全全攻略 # Disables IP source routing net.ipv4.conf.all.accept_source_route= 0 net.ipv4.conf.lo.accept_source_route = 0 net.ipv4.conf.eth0.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # Enable IP spoofing protection, turn on source route verification net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.lo.rp_filter = 1 net.ipv4.conf.eth0.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Disable ICMP Redirect Acceptance net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 # Enable Log Spoofed Packets, Source Routed Packets, Redirect Packets net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.lo.log_martians = 1 net.ipv4.conf.eth0.log_martians = 1 # Disables IP source routing net.ipv4.conf.all.accept_source_route= 0 net.ipv4.conf.lo.accept_source_route = 0 net.ipv4.conf.eth0.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 # Enable IP spoofing protection, turn on sourceroute verification net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.lo.rp_filter = 1 net.ipv4.conf.eth0.rp_filter = 1 14 net.ipv4.conf.default.rp_filter = 1 # Disable ICMP Redirect Acceptance net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 # Disables the magic-sysrq key kernel.sysrq = 0 # Modify system limits for Ensim WEBppliance fs.file-max = 65000 # Decrease the time default value for tcp_fin_timeout connection net.ipv4.tcp_fin_timeout = 15 # Decrease the time default value for tcp_keepalive_time connection net.ipv4.tcp_keepalive_time = 1800 # Turn off the tcp_window_scaling
  • 12. LAMPLAMPLAMPLAMP 安全全攻略 net.ipv4.tcp_window_scaling = 0 # Turn off the tcp_sack net.ipv4.tcp_sack = 0 # Turn off the tcp_timestamps net.ipv4.tcp_timestamps = 0 # Enable TCP SYN Cookie Protection net.ipv4.tcp_syncookies = 1 # Enable ignoring broadcasts request net.ipv4.icmp_echo_ignore_broadcasts = 1 # Enable bad error message Protection net.ipv4.icmp_ignore_bogus_error_responses = 1 # Log Spoofed Packets, Source Routed Packets, Redirect Packets net.ipv4.conf.all.log_martians = 1 # Set maximum amount of memory allocated to shm to 256MB kernel.shmmax = 268435456 # Improve file system performance vm.bdflush = 100 1200 128 512 15 5000 500 1884 2 # Improve virtual memory performance vm.buffermem = 90 10 60 # Increases the size of the socket queue (effectively,q0). net.ipv4.tcp_max_syn_backlog = 1024 # Increase the maximum total TCP buffer-space allocatable net.ipv4.tcp_mem = 57344 57344 65536 # Increase the maximum TCP write-buffer-space allocatable net.ipv4.tcp_wmem = 32768 65536 524288 15 # Increase the maximum TCP read-buffer space allocatable net.ipv4.tcp_rmem = 98304 196608 1572864 # Increase the maximum and default receive socket buffer size net.core.rmem_max = 524280 net.core.rmem_default = 524280 # Increase the maximum and default send socket buffer size net.core.wmem_max = 524280 net.core.wmem_default = 524280 # Increase the tcp-time-wait buckets pool size net.ipv4.tcp_max_tw_buckets = 1440000 # Allowed local port range net.ipv4.ip_local_port_range = 16384 65536 # Increase the maximum memory used to reassemble IP fragments net.ipv4.ipfrag_high_thresh = 512000 net.ipv4.ipfrag_low_thresh = 446464 # Increase the maximum amount of option memory buffers net.core.optmem_max = 57344 # Increase the maximum number of skb-heads to be cached
  • 13. LAMPLAMPLAMPLAMP 安全全攻略 net.core.hot_list_length = 1024 ## DO NOT REMOVE THE FOLLOWING LINE! ## nsobuild:20051206 重启后生效 /sbin/sysctl -p sysctl -w net.ipv4.route.flush=1 27.27.27.27.更改SSHSSHSSHSSH 端口 更改 SSH 默认端口号在一定程度上可以提高安全性 方法: vi /etc/ssh/sshd_config Port 22 改为其他端口 当然不要忘记把更改的端口加进防火墙 然后重启生效/etc/init.d/ssh restart 如果安装了 APF 并把端口添加之后,还要重启 APF:/etc/init.d/apf restart 28./tmp,/var/tmp,/dev/shm28./tmp,/var/tmp,/dev/shm28./tmp,/var/tmp,/dev/shm28./tmp,/var/tmp,/dev/shm 分区的安全 /tmp,/var/tmp,/dev/shm 目录是不安全的,任何用户都可以执行脚本。 最好的解决办法是挂载 ncexec 和 nosuid 选项的参数 注意:不建议在 CPanel 使用 方法: /tmp 目录: cd /dev 创建 100M ("count") 的存储文件: dd if=/dev/zero of=tmpMnt bs=1024 count=100000 设为一个扩展的文件系统: /sbin/mke2fs /dev/tmpMnt ("...is not a block special device. continue?"回答 yes) 备份现有临时文件: cp -R /tmp/ /tmp_backup 用 noexec 挂载新文件系统: mount -o loop,rw,nosuid,noexec /dev/tmpMnt /tmp chmod 0777 /tmp 把备份的文件拷贝回去: cp -R /tmp_backup/* /tmp/ 删除备份: rm -rf /tmp_backup 修改/etc/fstab 添加下面的条目使其在引导时仍然有效 /dev/tmpMnt /tmp ext2 loop,rw,nosuid,noexec 0 0 /var/tmp 目录: mv /var/tmp /var/tmpbak ln -s /tmp /var/tmp cp /var/tmpbak/* /tmp/
  • 14. LAMPLAMPLAMPLAMP 安全全攻略 /dev/shm 目录: 编辑/etc/fstab 把 none /dev/shm tmpfsdefaults,rw 0 0 改为 none /dev/shm tmpfsdefaults,nosuid,noexec,rw 0 0 apacheapacheapacheapache 方面 1.修改 banner........................................................................................ 2.修改默认的 http 状态响应码 404,503 等默认页面........................ 3.Apache 的访问权限控制 ............................................................... 4.关闭危险指令................................................................................ 5.open_basedir 限制目录................................................................... 6.掌握 Apache 的 Order Allow Deny 判断原则 .............................. 7.mod_rewrite 重写 URL................................................................... 9.Speling 模块去除 url 大小写.......................................................... 8. Limit 模块限制 IP 连接数 ........................................................... 9.让 apache 支持安全 HTTPS 协议 ................................................ 10.安装配置 mod_security................................................................ 11.加载 speling 模块......................................................................... 1.修改 banner.................................................................................... 1111 编译源代码,修改默认的 bannerbannerbannerbanner ServerTokens ProductOnly ServerSignature Off 在 apache 的源码包中找到 ap_release.h 将 #define AP_SERVER_BASEPRODUCT"Apache" 修改为 #define AP_SERVER_BASEPRODUCT"Microsoft-IIS/6.0” os/unix 下的 os.h 文件 #define PLATFORM "Unix" 修改为 #define PLATFORM "Win32“ 2.Apache2.Apache2.Apache2.Apache 的访问权限控制 htpasswd -b -c /(存放密码文件路径)/.htpasswd username password Alias /hack "/var/www/html/hack/" <Directory "/var/www/html/hack">
  • 15. LAMPLAMPLAMPLAMP 安全全攻略 authname "test" authtype basic authuserfile /var/www/html/hack/.htpasswd require user kindle </Directory> 3.3.3.3.关闭危险指令 清除 FollowSymlinks 指令 关闭索引目录 Options Indexes FollowSymLinks 关闭 CGI 执行程序 4.open_basedir4.open_basedir4.open_basedir4.open_basedir 限制目录 用法:php_admin_value open_basedir /var/www php_admin_value open_basedir 引起的上传文件失败解决方法 将上传文件的临时目录加入到 php_admin_value open_basedir 后面,最后看起来是这样的: <VirtualHost *:80> php_admin_value open_basedir "/usr/local/apache/htdocs/www/:/tmp/" </VirtualHost> 注意:两个目录之间是冒号隔开。 把 PHP 脚本操 作 限制 在 web 目录可 以 避免 程 序员 使 用 copy 函数把 系 统文 件 拷贝 到 web 目录。 move_uploaded_file 不受 open_basedir 的限制,所以不必修改 php.ini 里 upload_tmp_dir 的值。 5.5.5.5.掌握ApacheApacheApacheApache 的 OrderOrderOrderOrder AllowAllowAllowAllow DenyDenyDenyDeny 判断原则 1. 首先判断默认的; 2. 然后判断逗号前的; 3. 最后判断逗号后的; 4. 最终按顺序叠加而得出判断结果。 ex: apache 的 php 扩展名解析漏洞 <Files ~ ".(php.|php3.)"> Order Allow,Deny Deny from all </Files> apache 设置上传目录无执行权限 <Directory "/www/home/upload"> <Files ~ ".php"> Order allow,deny Deny from all </Files> </Directory>
  • 16. LAMPLAMPLAMPLAMP 安全全攻略 6.mod_rewrite6.mod_rewrite6.mod_rewrite6.mod_rewrite 重写URLURLURLURL 请求的引擎 重写规则的作用范围 1.使用在 Apache 主配置文件 httpd.conf 中。 2.使用在 httpd.conf 里定义的配置中。 3.使用在基本目录的跨越配置文件.htaccess 中。 1.url 重定向 80 到 443 端口 RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/?(.*)$ https://www.kindle.com/$1 [L,R] 含义是这样的:为了让用户访问传统的 http://转到 https://上来,用了一下 rewrite 规则: 第一句:启动 rewrite 引擎 第二句:rewrite 的条件是访问的服务器端口不是 443 端口 第三句:这是正则表达式,^是开头,$是结束,/?表示有没有/都可以(0 或 1 个 ),(.*)是任何数量的任意字 符 整句的意思是讲:启动 rewrite 模块,将所有访问非 443 端口的请求,url 地址内容不变,将http://变成 https:// 7.Speling7.Speling7.Speling7.Speling 模块去除 urlurlurlurl 大小写 确认 speling 模块存在并已加载 启动 speling <Directory "/usr/local/downloads"> CheckSpelling . AllowOverride None Order allow,deny Allow from all </Directory> 8.Limit8.Limit8.Limit8.Limit模块限制 IPIPIPIP 连接数 下载模块 http://dominia.org/djao/limit/mod_limitipconn-0.04.tar.gz 安装: tar zxvf mod_limitipconn-0.04.tar.gz cd mod_limitipconn-0.04 make APXS=/usr/local/apache/bin/apxs ß-----这里要按你自己的路径设置 make install APXS=/usr/local/apache/bin/apxs ß-----这里要按你自己的路径设置 编辑 httpd.conf 添加 全局变量: < IfModulemod_limitipconn.c > < Location / > # 所有虚拟主机的/目录 MaxConnPerIP 3 # 每 IP 只允许 3 个并发连接
  • 17. LAMPLAMPLAMPLAMP 安全全攻略 NoIPLimit image/* # 对图片不做 IP 限制 < /Location > < Location /mp3 > # 所有主机的/mp3 目录 MaxConnPerIP 1 # 每 IP 只允许一个连接请求 OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件 < /Location > < /IfModule > 9.9.9.9.让服务器支持安全HTTPSHTTPSHTTPSHTTPS 协议 :::: yum-y install mod_ssl cd /etc/httpd/conf 进入 HTTP 服务器配置文件所在目录 rm -rf ssl.*/server.* 删除默认或残留的服务器证书相关文件 rpm -qa |grep openssl openssl genrsa -out www.kindle.com.key 1024 建立服务器密钥 openssl req -new –key www.kindle.com.key -out www.kindle.com.csr 建立服务器公钥 openssl x509 -req -days 365 -in www.kindle.com.csr -signkey www.kindle.com.key -out www.kindle.com.crt 建立服务器证书 /etc/rc.d/init.d/httpd restart 重启服务 netstat -ntpl |grep 443 10.10.10.10.安装mod_security:mod_security:mod_security:mod_security: 下载:http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz http://fedoranews.org/jorge/mod_security/mod_security.conf 安装:下载到/opt/soft 目录下。 # tar –zxvf modsecurity-1.8.7.tar.gz # cd modsecurity-1.8.7 #cd apache2 # /opt/apache/bin/ apxs -cia mod_security.c #copy mod_security.conf /opt/apache/conf 配置: 在/opt/apache/conf/httpd.conf 中添加下面一行: Include conf/mod_security.conf /opt/apache/bin/apachectl stop /opt/apache/bin/apachectl startssl 更详细的 mod_security 的配置 http://www.modsecurity.org/documentation/modsecurity-apache/1.9.3/html-multipage/index.html PhpPhpPhpPhp 方面 1 打开 php 的安全模式............................................................... 2 安全模式下执行程序主目录 ............................................... 3 安全模式下包含文件............................................................. 4 控制 php 脚本能访问的目录 ............................................... 5 关闭危险函数.........................................................................
  • 18. LAMPLAMPLAMPLAMP 安全全攻略 6 关闭 PHP 版本信息在 http 头中的泄漏............................... 7 关闭注册全局变量 ............................................................. 8 打开 magic_quotes_gpc 来防止 SQL 注入......................... 9 错误信息控制..................................................................... 10 错误日志........................................................................... 关闭远程文件打开 Php.ini 包含补丁文件 1.1.1.1.打开phpphpphpphp 的安全模式 php 的安全模式是个非常重要的内嵌的安全机制,能够控制一些 php 中的函数,比如 system(),同时把很多 文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd 但是默认的 php.ini 是没 有打开安全模式的,我们把它打开:safe_mode = on 当 safe_mode 打开时,safe_mode_gid 被关闭,那么 php 脚本能够对文件进行访问,而且相同组的用户也能 够对文件进行访问。建议设置为:safe_mode_gid = off 如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操 作的时候。 2.2.2.2.安全模式下执行程序主目录 如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:safe_mode_exec_dir = D:/usr/bin 一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,然后把需要 执行的程序拷贝过去,比如:safe_mode_exec_dir = D:/tmp/cmd 但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录: safe_mode_exec_dir = D:/usr/www 3.3.3.3.安全模式下包含文件 如果要在安全模式下包含某些公共文件,那么就修改一下选项: safe_mode_include_dir = D:/usr/www/include/ 其实一般 php 脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。 4.4.4.4.控制phpphpphpphp 脚本能访问的目录 使用 open_basedir 选项能够控制 PHP 脚本只能访问指定的目录,这样能够避免 PHP 脚本访问.不应该访问 的文件,一定程度上限制了 phpshell 的危害,我们一般可以设置为只能访问网站目录: open_basedir = /var/www/html 5.5.5.5.关闭危险函数 如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得 不希望执行包括 system()等在那的能够执行命令的 php 函数,或者能够查看 php 信息的 phpinfo()等函数, 那么我们就可以禁止它们: disable_functions = system,passthru,exec,shell_exec,popen,phpinfo 如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作 disable_functions =disable_functions = system, show_source, symlink, exec, dl,
  • 19. LAMPLAMPLAMPLAMP 安全全攻略 shell_exec, passthru, phpinfo, escapeshellarg,escapeshellcmd 以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合, 就能够抵制大部分的 phpshell 了。 注:disable_classes 可以禁用某些类,如果有多个用逗号分隔类名 6.6.6.6.关闭PHPPHPPHPPHP 版本信息在httphttphttphttp 头中的泄漏 我们为了防止黑客获取服务器中 php 版本的信息,可以关闭该信息斜路在 http 头中: expose_php = Off 比如黑客在 telnet www.12345.com 80 的时候,那么将无法看到 PHP 的信息。 7.7.7.7.关闭注册全局变量 在 PHP 中提交的变量,包括使用 POST 或者 GET 提交的变量,都将自动注册为全局变量,能够直接访问, 这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭: register_globals = Off 当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取 GET 提交的变量 var,那 么就要用$_GET['var']来进行获取,这个 php 程序员要注意。 8.8.8.8.打开magic_quotes_gpcmagic_quotes_gpcmagic_quotes_gpcmagic_quotes_gpc 来防止 SQLSQLSQLSQL 注入 SQL 注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini 中有 一个设置: magic_quotes_gpc = Off 这个默认是关闭的,如果它打开后将自动把用户提交对 sql 的查询进行转换,比如把 ' 转为 '等,这对防 止 sql 注射有重大作用。所以我们推荐设置为: magic_quotes_gpc = On 9.9.9.9.错误信息控制 一般 php 在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含 php 脚本当前的路径 信息或者查询的 SQL 语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提 示: display_errors = Off 如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息: error_reporting = E_WARNING & E_ERROR 当然,我还是建议关闭错误提示。 10.10.10.10.错误日志 建议在关闭 display_errors 后能够把错误信息记录下来,便于查找服务器运行的原因:
  • 20. LAMPLAMPLAMPLAMP 安全全攻略 log_errors = On 同时也要设置错误日志存放的目录,建议根 apache 的日志存在一起: error_log = D:/usr/local/apache2/logs/php_error.log 注意:给文件必须允许 apache 用户的和组具有写的权限。 12.php.ini12.php.ini12.php.ini12.php.ini 包含补丁文件 在 php.ini 中引用。在配置文件内引用的话,将影响到所以的网站,包含所有页面 在 php.ini 中,找到此节: ; Automatically add files before or after any PHP document. ;auto_prepend_file = "phpids.php" ;auto_append_file = "alert.php" 默认是空,请添加所包含的文件。同时找到: ; UNIX: "/path1:/path2" ;include_path = ".:/php/includes" ; ; Windows:"path1;path2" include_path = ".;F:PHPnowhtdocs" mysqlmysqlmysqlmysql 方面 1.修改 root 用户口令,删除空口令 ............................................................................... 2.删除默认数据库和数据库用户.................................................................................. 3.改变默认 mysql 管理员帐号 .................................................................................. 4.关于密码的管理 ..................................................................................................... 5.使用独立用户运行 msyql........................................................................................ 6.禁止远程连接数据库 .............................................................................................. 7.限制连接用户的数量 ............................................................................................ 8.用户目录权限限制 ................................................................................................ 9.命令历史记录保护................................................................................................... 10.禁止 MySQL 对本地文件存取 ............................................................................ 11.MySQL 服务器权限控制 ..................................................................................... 12.使用 chroot 方式来控制 MySQL 的运行目录 ................................................... 13.关闭对无关的 Web 程序访问的支持 ............................................................... 14.数据库备份策略.............................................................................................. 15. Mysqld 安全相关启动选项............................................................................ 16.information_schema 安全............................................................................... 1.1.1.1.修改rootrootrootroot 用户口令,删除空口令
  • 21. LAMPLAMPLAMPLAMP 安全全攻略 缺省安装的 MySQL 的 root 用户是空密码的,为了安全起见,必须修改为强密码,所谓的强密码,至少 8 位,由字母、数字和符号组成的不规律密码。使用 MySQL 自带的命令 mysaladmin 修改 root 密码,同时也 可以登陆数据库,修改数据库 mysql 下的 user 表的字段内容,修改方法如下所示: # /usr/local/mysql/bin/mysqladmin -u root password “upassword” //使用 mysqladmin #mysql> use mysql; #mysql> updateuser set password=password('upassword') where user='root'; #mysql> flush privileges; //强制刷新内存授权表,否则用的还是在内存缓冲的口令 2.2.2.2.删除默认数据库和数据库用户 一般情况下,MySQL 数据库安装在本地,并且也只需要本地的 php 脚本对 mysql 进行读取,所以很多用户 不需要,尤其是默认安装的用户。MySQL 初始化后会自动生成空用户和 test库,进行安装的测试,这会对 数据库的安全构成威胁,有必要全部删除,最后的状态只保留单个 root 即可,当然以后根据需要增加用户 和数据库。 #mysql> show databases; #mysql> drop database test; //删除数据库 test #usemysql; #delete from db; //删除存放数据库的表信息,因为还没有数据库信息。 #mysql> delete from user where not (user='root') ; // 删除初始非 root 的用户 #mysql> delete from user where user='root' and password=''; //删除空密码的 root,尽量重复操作 Query OK, 2 rows affected (0.00 sec) #mysql> flush privileges; //强制刷新内存授权表。 4.4.4.4.关于密码的管理 密码是数据库安全管理的一个很重要因素,不要将纯文本密码保存到数据库中。如果你的计算机有安全危 险,入侵者可以获得所有的密码并使用它们。相反,应使用 MD5()、SHA1()或单向哈希函数。也不要从词 典中选择密码,有专门的程序可以破解它们,请选用至少八位,由字母、数字和符号组成的强密码。在存 取密码时,使用 mysql 的内置函数 password()的sql 语句,对密码进行加密后存储。例如以下方式在 users 表中加入新用户。 #mysql> insert into users values (1,password(1234),'test'); 5.5.5.5.使用独立用户运行msyqlmsyqlmsyqlmsyql 绝对不要作为使用 root 用户运行 MySQL 服务器。这样做非常危险,因为任何具有 FILE 权限的用户能够用 root 创建文件(例如,~root/.bashrc)。mysqld 拒绝使用 root 运行,除非使用--user=root 选项明显指定。应该 用普通非特权用户运行 mysqld。正如前面的安装过程一样,为数据库建立独立的 linux 中的 mysql 账 户 , 该账户用来只用于管理和运行 MySQL。 要想用其它 Unix 用户启动 mysqld,,增 加 user 选项指定/etc/my.cnf 选项文件或服务器数据目录的 my.cnf 选 项文件中的[mysqld]组的用户名。 #vi /etc/my.cnf [mysqld]
  • 22. LAMPLAMPLAMPLAMP 安全全攻略 user=mysql 该命令使服务器用指定的用户来启动,无论你手动启动或通过 mysqld_safe 或 mysql.server 启动,都能确保 使用 mysql 的身份。也可以在启动数据库是,加上 user 参数。 # /usr/local/mysql/bin/mysqld_safe --user=mysql & 作为其它 linux 用户而不用 root 运行 mysqld,你不需要更改 user 表中的 root 用户名,因为 MySQL 账户的 用户名与 linux 账户的用户名无关。确保mysqld 运行时,只使用对数据库目录具有读或写权限的 linux 用户 来运行。 6.6.6.6.禁止远程连接数据库 在命令行 netstat -ant 下看到,默认的 3306 端口是打开的,此时打开了 mysqld 的网络监听,允许用户远程 通过帐号密码连接数本地据库,默认情况是允许远程连接数据的。为了禁止该功能,启动 skip-networking, 不监听 sql 的任何 TCP/IP 的连接,切断远程访问的权利,保证安全性。假如需要远程管理数据库,可通过 安装 PhpMyadmin 来实现。假如确实需要远程连接数据库,至少修改默认的监听端口,同时添加防火墙规 则,只允许可信任的网络的 mysql 监听端口的数据通过。 # 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 7.7.7.7.限制连接用户的数量 数据库的某用户多次远程连接,会导致性能的下降和影响其他用户的操作,有必要对其进行限制。可以通 过限制单个账户允许的连接数量来实现,设置 my.cnf 文件的 mysqld 中的 max_user_connections 变量来完成 。 GRANT 语句也可以支持 资源控制选项来限制服务器对一个账户允许的使用范围。 #vi /etc/my.cnf [mysqld] max_user_connections 2 8.8.8.8.用户目录权限限制 默认的 mysql 是安装在/usr/local/mysql,而对应的数据库文件在/usr/local/mysql/var 目录下,因此,必须保证 该目录不能让未经授权的用户访问后把数据库打包拷贝走了,所以要限制对该目录的访问。确保 mysqld 运 行时,只使用对数据库目录具有读或写权限的 linux 用户来运行。 # chown -R root /usr/local/mysql/ //mysql 主目录给 root # chown -R mysql.mysql /usr/local/mysql/var //确保数据库目录权限所属 mysql 用户 9.9.9.9.命令历史记录保护 数据库相关的 shell 操作命令都会分别记录在.bash_history,如果这些文件不慎被读取,会导致数据库密码 和数据库结构等信息泄露,而登陆数据库后的操作将记录在.mysql_history 文件中,如果使用 update 表信息 来修改数据库用户密码的话,也会被读取密码,因此需要删除这两个文件,同时在进行登陆或备份数据库 等与密码相关操作时,应该使用-p 参数加入提示输入密码后,隐式输入密码,建议将以上文件置空。 # rm .bash_history .mysql_history //删除历史记录
  • 23. LAMPLAMPLAMPLAMP 安全全攻略 # ln -s /dev/null .bash_history //将 shell 记录文件置空 # ln -s /dev/null .mysql_history //将 mysql 记录文件置空 10.10.10.10.禁止 MySQLMySQLMySQLMySQL对本地文件存取 在 mysql 中,提供对本地文件的读取,使用的是 load data local infile 命令,默认在 5.0 版本中,该选项是默 认打开的,该操作令会利用 MySQL 把本地文件读到数据库中,然后用户就可以非法获取敏感信息了,假 如你不需要读取本地文件,请务必关闭。应该禁止 MySQL 中用“LOAD DATA LOCAL INFILE”命令。网络 上流传的一些攻击方法中就有用它 LOAD DATA LOCALINFILE的,同时它也是很多新发现的 SQL Injection 攻击利用的手段!黑客还能通过使用 LOAD DATALOCAL INFILE 装载“/etc/passwd”进一个数据库表,然后 能用 SELECT 显示它,这个操作对服务器的安全来说,是致命的。可以在 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 tableusers fields terminated by ','; #ERROR 1148 (42000):The used command is not allowed with this MySQLversion --local-infile=0 选项启动 mysqld 从服务器端禁用所有 LOAD DATA LOCAL 命令,假如需要获取本地文件, 需要打开,但是建议关闭。 11.MySQL11.MySQL11.MySQL11.MySQL 服务器权限控制 MySQL 权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的 SELECT、 INSERT、UPDATE和 DELETE 等权限(详见 user 超级用户表)。它的附加的功能包括有匿名的用户并对于 MySQL 特定的功能例如 LOAD DATA INFILE 进行授权及管理操作的能力。 管理员可以对 user,db,host 等表进行配置,来控制用户的访问权限,而 user 表权限是超级用户权限。只 把 user 表的权限授予超级用户如服务器或数据库主管是明智的。对其他用户,你应该把在 user 表中的权限 设成'N'并且仅在特定数据库的基础上授权。你可以为特定的数据库、表或列授权,FILE 权限给予你用 LOAD DATA INFILE 和 SELECT ... INTO OUTFILE 语句读和写服务器上的文件,任何被授予 FILE 权限的用户都 能读或写 MySQL 服务器能读或写的任何文件。(说明用户可以读任何数据库目录下的文件,因为服务器可 以访问这些文件)。 FILE 权限允许用户在 MySQL 服务器具有写权限的目录下创建新文件,但不能覆盖已 有文件在 user 表的 File_priv 设置 Y 或 N。,所以当你不需要对服务器文件读取时,请关闭该权限。 #mysql> load data infile 'sqlfile.txt' into table loadfile.users fields terminated by ','; Query OK, 4 rows affected (0.00 sec) //读取本地信息 sqlfile.txt' Records: 4 Deleted: 0 Skipped: 0 Warnings: 0 #mysql> updateuser set File_priv='N' where user='root'; //禁止读取权限 Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; //刷新授权表 Query OK, 0 rows affected (0.00 sec) #mysql> load data infile 'sqlfile.txt' into table users fields terminated by ','; //重登陆读取文件 #ERROR 1045 (28000):Access denied for user 'root'@'localhost' (using password:YES) //失败 # mysql> select * from loadfile.users into outfile 'test.txt' fields terminated by ','; ERROR 1045 (28000):Access denied for user 'root'@'localhost' (using password:YES) 为了安全起见,随时使用 SHOW GRANTS 语句检查查看谁已经访问了什么。然后使用 REVOKE 语句删除
  • 24. LAMPLAMPLAMPLAMP 安全全攻略 不再需要的权限。 12.12.12.12.使用chrootchrootchrootchroot 方式来控制 MySQLMySQLMySQLMySQL 的运行目录 Chroot 是 linux 中的一种系统高级保护手段,它的建立会将其与主系统几乎完全隔离,也就是说,一旦遭到 什么问题,也不会危及到正在运行的主系统。这是一个非常有效的办法,特别是在配置网络服务程序的时 候。 13.13.13.13.关闭对WebWebWebWeb 访问的支持 如果不打算让 Web 访问使用 MySQL 数据库,没有提供诸如 PHP 这样的 Web 语言的时候,重新设置或编 译你的 PHP,取消它们对 MySQL 的默认支持。假如服务器中使用 php 等 web 程序,试试用 Web 形式非法 的请求,如果得到任何形式的 MySQL 错误,立即分析原因,及时修改 Web 程序,堵住漏洞,防止 MySQL 暴露在 web 面前。 对于 Web 的安全检查,在 MySQL 官方文档中这么建议,对于 web 应用,至少检查以下清单: ? 试试用 Web 形式输入单引号和双引号(‘'’和‘"’)。如果得到任何形式的 MySQL 错误,立即分析原因。 ? 试试修改动态 URL,可以在其中添加%22(‘"’)、%23(‘#’)和%27(‘'’)。 ? 试试在动态 URL 中修改数据类型,使用前面示例中的字符,包括数字和字符类型。你的应用程序应足 够安全,可以防范此类修改和类似攻击。 ? 试试输入字符、空格和特殊符号,不要输入数值字段的数字。你的应用程序应在将它们传递到 MySQL 之前将它们删除或生成错误。将未经过检查的值传递给 MySQL 是很危险的! ? 将数据传给 MySQL 之前先检查其大小。 ? 用管理账户之外的用户名将应用程序连接到数据库。不要给应用程序任何不需要的访问权限。 14.14.14.14.数据库备份策略 使用 mysqldump 进行备份非常简单,如果要备份数据库” nagios_db_backup ”,使用命令,同时使用管道 gzip 命令对备份文件进行压缩,建议使用异地备份的形式,可以采用 Rsync等方式,将备份服务器的目录挂载 到数据库服务器,将数据库文件备份打包在,通过 crontab 定时备份数据: #!/bin/sh time=`date+"("%F")"%R` $/usr/local/mysql/bin/mysqldump -u nagios -pnagios nagios | gzip >/home/sszheng/nfs58/nagiosbackup/nagios_backup.$time.gz # crontab -l # m h dom mon dow command 00 00 * * * /home/sszheng/shnagios/backup.sh 恢复数据使用命令: gzip -d nagios_backup.(2008-01-24)00:00.gz nagios_backup.(2008-01-24)00:00 #mysql –u root -p nagios < /home/sszheng/nfs58/nagiosbackup/nagios_backup.(2008-01-24)12:00 15.15.15.15. MysqldMysqldMysqldMysqld 安全相关启动选项 ? --local-infile[={0|1}]
  • 25. LAMPLAMPLAMPLAMP 安全全攻略 如果用--local-infile=0 启动服务器,则客户端不能使用 LOCAL in LOADDATA 语句。 ? --old-passwords 强制服务器为新密码生成短(pre-4.1)密码哈希。当服务器必须支持旧版本客户端程序时,为了保证兼容性这 很有用。 ? (OBSOLETE) --safe-show-database 在以前版本的 MySQL 中,该选项使 SHOW DATABASES 语句只显示用户具有部分权限的数据库名。在 MySQL 5.1 中,该选项不再作为现在的 默认行为使用,有一个 SHOW DATABASES 权限可以用来控制每 个账户对数据库名的访问。 ? --safe-user-create 如果启用,用户不能用 GRANT 语句创建新用户,除非用户有 mysql.user 表的 INSERT 权限。如果你想让 用户具有授权权限来创建新用户,你应给用户授予下面的权限: mysql> GRANT INSERT(user) ONmysql.user TO 'user_name'@'host_name'; 这样确保用户不能直接更改权限列,必须使用 GRANT 语句给其它用户授予该权限。 ? --secure-auth 不允许鉴定有旧(pre-4.1)密码的账户。 16.information_schema16.information_schema16.information_schema16.information_schema 安全 在用户角度来看,INFORMATION_SCHEMA 只是一个以插件方式存在的存储引擎,编译安装的时候 --disable-information-schema 就行了 added TRIGGER_ACLcheck for I_S.TRIGGERS http://bugs.mysql.com/bug.php?id=38837 http://bugs.mysql.com/bug.php?id=27629 Phpmyadmin 里隐藏方法 $cfg['servers'][$i]['hide_db'] = 'information_schema'; Iptables 方面: iptables -F iptables -X iptables -Z iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport 22 -jACCEPT iptables -A INPUT -p tcp --dport 80 -jACCEPT iptables -A INPUT -p tcp --dport 443 -jACCEPT iptables -A INPUT -m state --stateRELATED,ESTABLISHED -jACCEPT iptables -P INPUT DROP