LAMP 安全全攻略
作者:kindle
此文档由 网络资 料收 集以及 经验 整理出 来的 ,有什 么不 足之处 欢迎 大家多 提意 见,
mail:k indle@live.cn
注:版权归 linux 安全网(linux520.com)所有,转载请注明出处
目录
Linux 加固
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...........................................................................................
Apache 加固
1.修改 banner.......................................................................................
2.修改默认的 http 状态响应码 404,503 等默认页面........................
3.Apache 的访问权限控制 ................................................................
LAMP 安全全攻略
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 模块...............................................................................
Php 加固
1. 打开 php 的安全模式.....................................................................
2. 安全模式下执行程序主目录 .......................................................
3. 安全模式下包含文件......................................................................
4. 控制 php 脚本能访问的目录 .........................................................
5. 关闭危险函数...................................................................................
6. 关闭 PHP 版本信息在 http 头中的泄漏.........................................
7. 关闭注册全局变量 .........................................................................
8. 打开 magic_quotes_gpc 来防止 SQL 注入......................................
9. 错误信息控制....................................................................................
10. 错误日志.............................................................................................
11. 关闭远程文件打开.............................................................................
12. Php.ini 包含补丁文件.........................................................................
:
mysql 方面:
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 安全..............................................................................
总结
LAMP 安全全攻略
========================================================================
介绍
这个教程将一步步的指引你,使你的 Linux 系统变得安全。
任何默认安装的操作系统都是不够安全的,本文将指引你如何建立一个
相对安全的 Linux 系统。
========================================================================
1.BIOS
你应该总是在系统启动的时候设置一个 BIOS 密码和禁用从 CD-ROM 和软盘引导。
这将防止一些人未经允许访问你的系统和更改 BIOS 设置
2.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.禁用 telnet
早期的 Linux 默认开启 telnet 服务,telnet,ftp,rlogin 都是明文传输的协议
是容易被嗅探到的,这就是为什么推荐使用安全的版本(sftp,scp,ssh)的原因
如果你必须要使用 telnet,那么至少应该隐藏 banner 信息
方法:
修改/etc/xinetd.d/telnet
disable=yes
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*
LAMP 安全全攻略
chmod 750 *++*
chmod 750 ld
chmod 750 as
chmod 755 mysqlaccess
把用户添加到组里
修改/etc/group
compiler:x:520:user1,user2
5.ProFTP
你可以通过修改 proftpd.conf 来禁止 root 登陆
方法:
修改/etc/proftpd.conf
Add RootLogin off
重启 proftpd /sbin/service proftpd stop
/sbin/service proftpd start
6.TCP wrappers
编辑 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.创建 SU 用户组
因为我们在 SSH 禁止了 root 用户访问并且禁用了 telnet,所有我们应该
分配给一些用户 su 权限来获取 root 特权
方法:
vi /etc/group
添加一行 wheel:x:10:root,user1,user2
chgrp wheel /bin/su
chmod o-rwx /bin/su
8.root 通知
LAMP 安全全攻略
当一个具有 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.history 安全
这是一个避免删除.bash_history 或重定向到/dev/null 的好主意
因此他不能清除或删除他最后执行的命令
方法:
chattr +a .bash_history
chattr +i .bash_history
获取用户的人会知道他的历史命令锁定并且要同意才可以使用服务
10.
10.使用欢迎信息
你必须提供一些信息让攻击者知道该系统不对公众开放。
在国外有类似案件,攻击者入侵一个系统并且系统没有这些信息,
这种情况下法院不能做任何裁决,因为系统说 welcome
方法:
删除/etc/redhat-release
编辑/etc/issue /etc/motd 并显示警告信息
11.
11.禁用所有特殊账户
你应该从系统中删除所有默认用户和组
例如 news,lp,sync,shutdown,uucp,games,halt 等
方法:
删除账户 userdel name
删除组 groupdel name
锁定特定账户:/usr/sbin/usermod -L -s /bin/false user
12.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
LAMP 安全全攻略
chmod 700 /usr/bin/gcc
chmod 700 /usr/bin/make
chmod 700 /bin/rpm
13.
13.指定允许 root 登陆的 TTY 设备
/etc/securetty 文件允许你指定 root 可以从哪个 TTY 设备登录
方法:
vi /etc/securetty
只留 2 个连接
tty1
tty2
14.
14.选择一个安全的密码
在/etc/login.defs 文件中定义了 shadow 密码的具体配置
默认密码长度最短为 5 字符,你应该至少设置为 8
方法:
vi /etc/login.defs
PASS_M IN_LEN 8
15.
15.检测 Rootkit
用 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.安装补丁
你要经常检查更新以修复某些缺陷或系统稳定性的改进
否则你存在漏洞的系统将会不时的遭受新的攻击
LAMP 安全全攻略
方法:
列出可用更新:up2date -l
安装未排除的更新:up2date -u
安装包括排除的更新 up2date -uf
17.
17.隐藏 Apache 信息
你应该隐藏 Apache 的 banner 信息使攻击者不知道 Apache 的版本,从而使他们难以利用漏洞
方法:
修改/etc/httpd/conf/httpd.conf
改变服务器签名:ServerSi gnature Off
重启 Apache /sbin/service httpd restart
18.
18.隐藏 php 信息
你应该隐藏 php 的 banner 信息,原因同上
方法:
修改 php.ini
改变 expose_php=Off
重启 Apache
19.
19.关闭不用的服务
你应该把任何未使用的服务关闭,可以在/etc/xinetd.d 文件夹里找到
方法:
cd /etc/xinetd.d
grep disable *
这将显示所有服务开启或关闭的状态,然后根据需要来开启或关闭服务
20.
20.检测监听的端口
检测是否有必要开放端口是非常重要的
方法:
netstat -tulp 或
lsof -i -n | egrep 'COMMAND|LISTEN|UDP'或
nmap!
21.
21.关闭端口和服务
重点是关闭在系统启动时打开的不需要的端口
方法:
对于正在运行的服务,可以执行 chkconfig -list | grep on
禁用服务可以执行 chkconfig servicename off
然后停止正在运行的服务:/etc/init.d/service stop
22.
22.删除不用的 rpm 包
首先应该清楚你的系统的作用,它是 web,mail,file 服务器或其他
然后觉得哪些包是必要的,之后删除不需要的软件包
方法:
LAMP 安全全攻略
首先列出安装列表 rpm -qa
更详细的信息 rpm -qi rpmname
还可以检测删除包可能出现的冲突 rpm -e --test rpmname
23.
23.禁用危险的 php 函数
你应该禁用 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.安装配置防火墙
高级策略防火墙(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
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"
=
passive
port
range
for
Pure FTPD
LAMP 安全全攻略
2.CPanel 配置
Common ingress (inbound) ports
#
Common
ingress
(inbound)
TCP
ports
-3000_3500
=
passive
port
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.安装配置 BFD(
BFD(暴力破解检测)
BFD 是一个用于分析应用日志和检测验证失败的模块化 shell 脚本
而且安装配置和用法都是非常容易的。使用 BFD 的原因很简单。
其实在 LINUX 领域几乎没有结合防火墙或实时设备来监控不验证和
暴力攻击审计的程序。在用 BFD 之前你必须安装 APF 防火墙。
range
for
Pure FTPD
LAMP 安全全攻略
方法:
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 Force Warning for $HOSTNAME"
#
然后 vi /usr/local/bfd/ignore.hosts
把你的 IP 设置成允许主机,避免意外的锁定自己。
之后重启 BFD /usr/local/sbin/bfd -s
26.
(sysctl.conf)
26.内核加固(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 source route 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
LAMP 安全全攻略
# 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 source route 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
LAMP 安全全攻略
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
LAMP 安全全攻略
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.更改 SSH 端口
更改 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/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/
LAMP 安全全攻略
/dev/shm 目录:
编辑/etc/fstab
把 none /dev/shm tmpfs defaults,rw 0 0
改为 none /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0
apache 方面
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....................................................................................
1 编译源代码,修改默认的 banner
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.Apache 的访问权限控制
htpasswd -b -c /(存放密码文件路径)/.htpasswd username password
Alias /hack "/var/www/html/hack/"
<Directory "/var/www/html/hack">
LAMP 安全全攻略
authname "test"
authtype basic
authuserfile /var/www/html/hack/.htpasswd
require user kindle
</Directory>
3.
3.关闭危险指令
清除 FollowSymlinks 指令
关闭索引目录
Options Indexes FollowSymLinks
关闭 CGI 执行程序
4.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.掌握 Apache 的 Order Allow Deny 判断原则
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>
LAMP 安全全攻略
6.mod_rewrite 重写 URL 请求的引擎
重写规则的作用范围
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 端口的请求, 地址内容不变,将http://变成 https://
url
7.Speling 模块去除 url 大小写
确认 speling 模块存在并已加载
启动 speling
<Directory "/usr/local/downloads">
CheckSpelling .
AllowOverride None
Order allow,deny
Allow from all
</Directory>
8.Limit 模块限制 IP 连接数
下载模块 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
添加
全局变量:
< IfModule mod_limitipconn.c >
< Location / >
# 所有虚拟主机的/目录
MaxConnPerIP 3
# 每 IP 只允许 3 个并发连接
LAMP 安全全攻略
NoIPLimit image/* # 对图片不做 IP 限制
< /Location >
< Location /mp3 > # 所有主机的/mp3 目录
# 每 IP 只允许一个连接请求
MaxConnPerIP 1
OnlyIPLimit audio/mpeg video
# 该限制只对视频和音频格式的文件
< /Location >
< /IfModule >
9.
9.让服务器支持安全 HTTPS 协议 :
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.安装 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
Php 方面
1 打开 php 的安全模式...............................................................
2 安全模式下执行程序主目录 ...............................................
3 安全模式下包含文件.............................................................
4 控制 php 脚本能访问的目录 ...............................................
5 关闭危险函数.........................................................................
LAMP 安全全攻略
6 关闭 PHP 版本信息在 http 头中的泄漏...............................
7 关闭注册全局变量 .............................................................
8 打开 magic_quotes_gpc 来防止 SQL 注入.........................
9 错误信息控制.....................................................................
10 错误日志...........................................................................
关闭远程文件打开
Php.ini 包含补丁文件
1.
1.打开 php 的安全模式
php 的安全模式是个非常重要的内嵌的安全机制,能够控制一些 php 中的函数,比如 system(),同时把很多
文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd 但是默认的 php.ini 是没
有打开安全模式的,我们把它打开:safe_mode = on
当 safe_mode 打开时,safe_mode_gid 被关闭,那么 php 脚本能够对文件进行访问,而且相同组的用户也能
够对文件进行访问。建议设置为:safe_mode_gid = off
如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操
作的时候。
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.安全模式下包含文件
如果要在安全模式下包含某些公共文件,那么就修改一下选项:
safe_mode_include_dir = D:/usr/www/include/
其实一般 php 脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。
4.
4.控制 php 脚本能访问的目录
使用 open_basedir 选项能够控制 PHP 脚本只能访问指定的目录,这样能够避免 PHP 脚本访问.不应该访问
的文件,一定程度上限制了 phpshell 的危害,我们一般可以设置为只能访问网站目录:
open_basedir = /var/www/html
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,
LAMP 安全全攻略
shell_exec, passthru, phpinfo, escapeshellarg,escapeshellcmd
以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,
就能够抵制大部分的 phpshell 了。
注:disable_classes 可以禁用某些类,如果有多个用逗号分隔类名
6.
6.关闭 PHP 版本信息在 http 头中的泄漏
我们为了防止黑客获取服务器中 php 版本的信息,可以关闭该信息斜路在 http 头中:
expose_php = Off
比如黑客在 telnet www.12345.com 80 的时候,那么将无法看到 PHP 的信息。
7.
7.关闭注册全局变量
在 PHP 中提交的变量,包括使用 POST 或者 GET 提交的变量,都将自动注册为全局变量,能够直接访问,
这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:
register_globals = Off
当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取 GET 提交的变量 var,那
么就要用$_GET['var']来进行获取,这个 php 程序员要注意。
8.
8.打开 magic_quotes_gpc 来防止 SQL 注入
SQL 注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。php.ini 中有
一个设置:
magic_quotes_gpc = Off
这个默认是关闭的,如果它打开后将自动把用户提交对 sql 的查询进行转换,比如把 ' 转为 \'等,这对防
止 sql 注射有重大作用。所以我们推荐设置为:
magic_quotes_gpc = On
9.
9.错误信息控制
一般 php 在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含 php 脚本当前的路径
信息或者查询的 SQL 语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提
示:
display_errors = Off
如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:
error_reporting = E_WARNING & E_ERROR
当然,我还是建议关闭错误提示。
10.
10.错误日志
建议在关闭 display_errors 后能够把错误信息记录下来,便于查找服务器运行的原因:
LAMP 安全全攻略
log_errors = On
同时也要设置错误日志存放的目录,建议根 apache 的日志存在一起:
error_log = D:/usr/local/apache2/logs/php_error.log
注意:给文件必须允许 apache 用户的和组具有写的权限。
12.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:\PHPnow\htdocs"
mysql 方面
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.修改 root 用户口令,删除空口令
LAMP 安全全攻略
缺省安装的 MySQL 的 root 用户是空密码的,为了安全起见,必须修改为强密码,所谓的强密码,至少 8
位,由字母、数字和符号组成的不规律密码。使用 MySQL 自带的命令 mysaladmin 修改 root 密码,同时也
可以登陆数据库,修改数据库 mysql 下的 user 表的字段内容,修改方法如下所示:
# /usr/local/mysql/bin/mysqladmin -u root password “upassword” //使用 mysqladmin
#mysql> use mysql;
#mysql> update user set password=password('upassword') where user='root';
#mysql> flush privileges; //强制刷新内存授权表,否则用的还是在内存缓冲的口令
2.
2.删除默认数据库和数据库用户
一般情况下,MySQL 数据库安装在本地,并且也只需要本地的 php 脚本对 mysql 进行读取,所以很多用户
不需要,尤其是默认安装的用户。MySQL 初始化后会自动生成空用户和 test 库,进行安装的测试,这会对
数据库的安全构成威胁,有必要全部删除,最后的状态只保留单个 root 即可,当然以后根据需要增加用户
和数据库。
#mysql> show databases;
#mysql> drop database test; //删除数据库 test
#use mysql;
#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.关于密码的管理
密码是数据库安全管理的一个很重要因素,不要将纯文本密码保存到数据库中。如果你的计算机有安全危
险,入侵者可以获得所有的密码并使用它们。相反,应使用 MD5()、SHA1()或单向哈希函数。也不要从词
典中选择密码,有专门的程序可以破解它们,请选用至少八位,由字母、数字和符号组成的强密码。在存
取密码时,使用 mysql 的内置函数 password()的sql 语句,对密码进行加密后存储。例如以下方式在 users
表中加入新用户。
#mysql> insert into users values (1,password(1234),'test');
5.
5.使用独立用户运行 msyql
绝对不要作为使用 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]
LAMP 安全全攻略
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.禁止远程连接数据库
在命令行 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.限制连接用户的数量
数据库的某用户多次远程连接,会导致性能的下降和影响其他用户的操作,有必要对其进行限制。可以通
过限制单个账户允许的连接数量来实现,
设置 my.cnf 文件的 mysqld 中的 max_user_connections 变量来完成 。
GRANT 语句也可以支持 资源控制选项来限制服务器对一个账户允许的使用范围。
#vi /etc/my.cnf
[mysqld]
max_user_connections 2
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.命令历史记录保护
数据库相关的 shell 操作命令都会分别记录在.bash_history,如果这些文件不慎被读取,会导致数据库密码
和数据库结构等信息泄露,而登陆数据库后的操作将记录在.mysql_history 文件中,如果使用 update 表信息
来修改数据库用户密码的话,也会被读取密码,因此需要删除这两个文件,同时在进行登陆或备份数据库
等与密码相关操作时,应该使用-p 参数加入提示输入密码后,隐式输入密码,建议将以上文件置空。
# rm .bash_history .mysql_history //删除历史记录
LAMP 安全全攻略
# ln -s /dev/null .bash_history //将 shell 记录文件置空
# ln -s /dev/null .mysql_history //将 mysql 记录文件置空
10.
10.禁止 MySQL 对本地文件存取
在 mysql 中,提供对本地文件的读取,使用的是 load data local infile 命令,默认在 5.0 版本中,该选项是默
认打开的,该操作令会利用 MySQL 把本地文件读到数据库中,然后用户就可以非法获取敏感信息了,假
如你不需要读取本地文件,请务必关闭。应该禁止 MySQL 中用“LOAD D ATA LOCAL INFILE”命令。网络
上流传的一些攻击方法中就有用它 LOAD D ATA LOCAL INFILE 的,
同时它也是很多新发现的 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 table users fields terminated by ',';
#ERROR 1148 (42000): The used command is not allowed with this MySQL version
--local-infile=0 选项启动 mysqld 从服务器端禁用所有 LOAD D ATA LOCAL 命令,假如需要获取本地文件,
需要打开,但是建议关闭。
11.MySQL 服务器权限控制
MySQL 权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的 SELECT、
INSERT、UPDATE 和 DELETE 等权限(详见 user 超级用户表)
。它的附加的功能包括有匿名的用户并对于
MySQL 特定的功能例如 LOAD D ATA INFILE 进行授权及管理操作的能力。
管理员可以对 user,db,host 等表进行配置,来控制用户的访问权限,而 user 表权限是超级用户权限。只
把 user 表的权限授予超级用户如服务器或数据库主管是明智的。对其他用户,你应该把在 user 表中的权限
设成'N'并且仅在特定数据库的基础上授权。
你可以为特定的数据库、
表或列授权,
FILE 权限给予你用 LOAD
D ATA 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> update user 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 语句删除
LAMP 安全全攻略
不再需要的权限。
12.
12.使用 chroot 方式来控制 MySQL 的运行目录
Chroot 是 linux 中的一种系统高级保护手段,它的建立会将其与主系统几乎完全隔离,也就是说,一旦遭到
什么问题,也不会危及到正在运行的主系统。这是一个非常有效的办法,特别是在配置网络服务程序的时
候。
13.
13.关闭对 Web 访问的支持
如果不打算让 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.数据库备份策略
使用 mysqldump 进行备份非常简单,
如果要备份数据库” nagios_db_backup ”,
使用命令,
同时使用管道 gzip
命令对备份文件进行压缩,建议使用异地备份的形式,可以采用 Rsync 等方式,将备份服务器的目录挂载
到数据库服务器,将数据库文件备份打包在,通过 crontab 定时备份数据:
#!/bin/sh
time=`date +"("%F")"%R`
$/usr/local/mysql/bin/mysqldump
-u
nagios
-pnagios
nagios
|
>/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. Mysqld 安全相关启动选项
?
--local-infile[={0|1}]
gzip
LAMP 安全全攻略
如果用--local-infile=0 启动服务器,则客户端不能使用 LOCAL in LOAD DATA 语句。
?
--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) ON mysql.user TO 'user_name'@'host_name';
这样确保用户不能直接更改权限列,必须使用 GRANT 语句给其它用户授予该权限。
?
--secure-auth
不允许鉴定有旧(pre-4.1)密码的账户。
16.information_schema 安全
在用户角度来看,INFORMATION_SCHEM A 只是一个以插件方式存在的存储引擎,编译安装的时候
--disable-information-schema 就行了
added TRIGGER_ACL check 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 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
LAMP 安全全攻略