关于虚拟主机安全,大家给点意见

关于虚拟主机安全,大家给点意见

以下为我的安装过程,第一次做虚拟主机,大家给点意见,安全方面应该还要注意点什么

安装apache
./configure --prefix=/usr/local/apache2 --enable-module=so --enable-shared=max --enable-rewrite --enable-deflate --enable-

expires --enable-headers --with-mpm=prefork
make
make install

修改
DocumentRoot "/usr/local/apache2/htdocs"

DocumentRoot "/home/www"
修改
<Directory "/usr/local/apache2/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Directory "/home/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

修改
User nobody
Group #-1

User www
Group www


增加虚拟主机
<VirtualHost *:80>
    ServerAdmin webmaster@abc.com
    DocumentRoot /home/www/vhost/www.abc.com
    ServerName www.abc.com
    ErrorLog logs/abc-com-error_log
    CustomLog logs/abc-com-access_log common
    php_admin_value open_basedir /home/www/vhost/www.abc.com
</VirtualHost>


安装mysql

groupadd mysql
useradd -g mysql mysql
cd /usr/local
cd mysql
scripts/mysql_install_db --user=mysql
chown -R root  .
chown -R mysql data
chgrp -R mysql .
mkdir -p /var/run/mysqld
chown -R mysql.mysql /var/run/mysqld/
启动
/usr/local/mysql/bin/mysqld_safe --user=mysql &

修改mysql密码
use mysql
UPDATE user SET Password = password ( 'vhost' ) WHERE User = 'root' ;
set password for root@localhost = OLD_PASSWORD('vhost');


安装php4

省去安装gd、jpeg等部分

./configure --prefix=/usr/local/php4 --with-mysql --with-apxs2=/usr/local/apache2/bin/apxs --enable-versioning --disable-

debug --enable-track-vars  --with-gd=/usr/local --with-jpeg-dir --with-png-dir --with-zlib --enable-mbstring --with-mcrypt -

-with-config-file-path=/usr/local/php4/lib --with-exec-dir=/home/vhost --enable-safe-mode --enable-bcmath --enable-inline-

optimization

make
make install
cp php.ini-dist /usr/local/php4/lib/php.ini

修改php.ini
打开safe_mode
safe_mode = On
safe_mode_exec_dir = /home/www/vhost
过滤危险脚本
disable_functions=phpinfo,system,exec,passthru,shell_exec,popen,is_dir

错误日志
log_errors = On
error_log = /usr/local/php/log/php_error.log


安装vsftpd

vi builddefs.h

#undef VSF_BUILD_PAM
修改为
#define VSF_BUILD_PAM

make
install -m 755 vsftpd /usr/local/sbin/vsftpd-pam
install -m 644 vsftpd.8 /usr/share/man/man8
install -m 644 vsftpd.conf.5 /usr/share/man/man5
install -m 644 vsftpd.conf /etc/vsftpd-pam.conf
建立用户列表
vi /etc/.ftpuser
vhost01
passwd01
vhost02
passwd02
生成数据库
db_load -T -t hash -f /etc/.ftpuser /etc/vsftpd_login.db

建立认证文件
vi /etc/pam.d/ftp在最后增加
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

配置文件
vi /etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=066  #则用户上传文件默认为711
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
ftpd_banner=vhost test
chroot_local_user=YES
guest_enable=YES
guest_username=www
listen=YES
listen_port=21
tcp_wrappers=YES

user_config_dir=/etc/vsftpd_user_config
user_sub_token=$USER
max_per_ip=1                  #只允许单ip单线程,避免用户滥用ftp
anon_max_rate=100000  #100kbyte/s

建立目录mkdir /etc/vsftpd_user_config
在该目录下添加用户配置文件,文件名同虚拟用户名,如test用户则建立test文件
vi test
local_root=/home/www/vhost/www.test.com
将用户chroot到/home/www/vhost/www.test.com

启动vsftpd
/usr/local/sbin/vsftpd /etc/vsftpd.conf &

顶下,大家给给意见把。小弟第一次做虚拟主机服务器,参考了很多文章,把自己的安装过程都写下了。
继续,抄前面的帖子,下了个mod_security2来用

配置mod_security
安装
前提:系统需要 libxml2
vi Makefile
修改top_dir为apache的安装目录
top_dir = /usr/local/apache2
停止apache
make install
如果遇到错误
“Warning! dlname not found in /usr/local/apache2/modules/mod_security2.la
进入apache的build目录
mv
在apache里添加:libtool libtool.bak
ln -s /usr/bin/libtool /usr/local/apache2/build/libtool
重新安装一次就ok了
在apache里加配置:       
LoadFile /usr/lib/libxml2.so
LoadModule security2_module modules/mod_security2.so

<IfModule mod_security.c>
SecFilterEngine On            #过滤引擎On,分析每个请求
SecFilterCheckURLEncoding On
SecFilterDefaultAction "deny,log,status:500"
#SecFilterForceByteRange 32 126
#SecFilterScanPOST On
SecAuditLog logs/audit_log
SecFilter "../"
SecFilter /etc/*passwd
SecFilter /bin/*sh
#for css attack
SecFilter "<( | )*script"
SecFilter "<(.| )+>"
#for sql attack
SecFilter "delete[ ]+from"
SecFilter "insert[ ]+into"
SecFilter "select.+from"
SecFilter "union[ ]+from"
SecFilter "drop[ ]"
</IfModule>
还没看明白这些东西,大概知道是在防sql注入等

如果能suexec+fastcgi就更好了
机器不跑cgi

ftp部分测试到有错误
需要增加限制虚拟用户chroot的配置
user_config_dir=/etc/vsftpd_user_config
user_sub_token=$USER
建立vsftpd_user_config目录
在目录下建立个用户的配置文件,文件名与用户名同样
包含:
local_root=/home/www/vhost/test
这样的话用户登陆进来会被限制在/home/www/vhost/test


另外限速部分应该为
anon_max_rate=100000
测试到实际的速度与这个速度有差距,比如我设置这个是100kbyte/s
实际上只能下到64kbyte左右

又解决一个问题,与大家分享:)
如果不是高强度要求场合,mod_security2杀伤性太大,容易误伤。


QUOTE:
原帖由 HonestQiao 于 2007-4-25 08:42 发表
如果不是高强度要求场合,mod_security2杀伤性太大,容易误伤。

这些误伤表现在什么方面,服务器是做虚拟主机用的。


QUOTE:
原帖由 zxxz79 于 2007-4-25 08:59 发表

这些误伤表现在什么方面,服务器是做虚拟主机用的。

简单例如:如果我发一帖,其中有这些内容,也会被误伤。


你做虚拟主机的话,一般只要:
1. 用户操作目录限制,部分安全函数限制
2. ftp目录限制
3. 软件本身chroot

就可以了
斑竹神速:)
那按我现在这个流程做的话,去掉mod_security后是否还有什么需要特别注意的?
软件的chroot是不是指vsftp里的chroot及mysql、apache使用指定用户启动?
另mod_security2杀伤力大,那mod_security 1.9x的杀伤力是不是就小点?