Virtualmin/Webmin配置隔离的虚拟主机(Ubuntu)

需要实现的目标:

  1. 允许使用PHP、MySQL、FTP,不允许使用SSH登录
  2. FTP目录限制在用户的home目录下
  3. 每一个vhost在运行php时不可读取其他目录,防止被挂马后影响其他应用
  4. php运行用户与ftp相同,这样上传文件权限统一

准备设置
sudo apt-get install apache2-mpm-itk
这个是切换apache权限的,这个后面会讲,或者看这里:http://bigamekiller.blog.sohu.com/161124712.html
现在知道这个补丁的bug是在stop apache后,一些进程关不掉,需要手动killall -9 apache2才可。

Virtualmin/Webmin安装

# webmin
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.620_all.deb
dpkg --install webmin_1.620_all.deb
# 如果这时候需要其他包,可以再运行 apt-get -f install

# virtualmin
wget http://software.virtualmin.com/gpl/scripts/install.sh
chmod +x install.sh
./install.sh



模块设置
在System Settings -> Features and Plugins中,关闭不必要的模块。我只保留如下模块:

   Feature or Plugin   Source   Version   Domains   Default?   Actions   
Administration userCore3.98.gpl1Show domains
Home directoryCore3.98.gpl1Show domains
Show domains
Show domains
Show domains
Show domains
Show domains
Show domains
Show domains
Show domains
 Show domains
Show domains
Show domains
Show domains
Configure | Open
Configure
Configure | Open
Configure | Open



禁止SSH
由于不允许虚拟主机以ssh方式访问,直接在System Customization -> Custom Shells中,保留/bin/false(勾选其enabled, admin, Mailbox, default).


限制FTP根目录
在Limits and Validation -> FTP Directory Restrictions,这里 勾上Active,选择Users' home directories,以及Users' home directories。

限制php读取目录
在System settints -> Edit Server Template中,选择Apache Website,
找到 Default PHP execution mode,使用 mod_php运行。(使用FastCGI模式似乎无法使用php_admin_value配置……)

在Directives and settings for new websites的配置模板中加入一行:
php_admin_value open_basedir "${HOME}/public_html:/tmp"
<IfModule mpm_itk_module>
    AssignUserId ${USER} ${USER}
</IfModule>

即:
ServerName ${DOM}
ServerAlias www.${DOM}
DocumentRoot ${HOME}/public_html
php_admin_value open_basedir "${HOME}/public_html:/tmp"
<IfModule mpm_itk_module>
    AssignUserId ${USER} ${USER}
</IfModule>
ErrorLog /var/log/virtualmin/${DOM}_error_log
CustomLog /var/log/virtualmin/${DOM}_access_log combined
ScriptAlias /cgi-bin/ ${HOME}/cgi-bin/
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory ${HOME}/public_html>
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
</Directory>
<Directory ${HOME}/cgi-bin>
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
</Directory>




这样就限制了php脚本读取其他文件目录了。同时保证运行权限与文件所属权限相同~

另外一种替代方案,是fcgi + mod_suexec,可以让php执行用户变为virtual host的用户,解决上面的问题,但由于cgi方式下不能设置“php_admin_value open_basedir”,所以对于open_basedir的限制只能在/etc/php5下的php.ini进行,模板用不起来。同时,使用fcgi运行的话,会产生用户自己配置的php.ini,这样就算在总ini中设置了,也会被覆盖。这种情况下只是用户权限相同,而无法限制目录访问。
像apache jail这种高级东西,研究了一下也不太适合。。。。。。




完成&测试
建立一个virtual server,各选项默认即可。
检查以下内容:
  1. SSH无法登录
  2. FTP登录后,访问被限制在用户目录下
  3. 上传PHP木马,确定只可访问public_html目录
  4. php木马运行whoami,发现不是www-data,而是home所属用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值