返回》

在LiteSpeed网络服务器中集成了Bubblewrap支持

LiteSpeed系列的高性能网络服务器提供了许多安全隔离请求的方法,从而提供了防止攻击的保护。在即将发布的LiteSpeed Enterprise(6.0)和OpenLiteSpeed(1.6.15)中,我们增加了对Flatpak的bubblewrap的集成支持,提供了更大的隔离和攻击保护。一、bubblewrap有什么好处Bubblewrap是一个由Flatpak编写的轻量级沙盒应用程序,在他们的wiki上有详细描述。它所做的是实现Linux命名空间,基本上给应用程序(本例中为LiteSpeed)一个完整的沙盒,其中包括操作系统支持的隔离挂载、用户/组ID、进程间通信、用户、c组、主机名称等。例如,有了隔离挂载命名空间:每个请求只能看到为该请求指定的文件系统,甚至可以拒绝对你指定的任何目录内的任何文件的写入权限。有了隔离的用户和组,用户将只能看到他们自己的用户ID、组ID和能力。默认情况下甚至会创建独立的/etc/passwd和/etc/group文件,其内容由你指定。通过隔离的进程间通信,每个进程只能看到你指定的命名管道,或Unix域套接字,这限制了一个进程可以联系的应用程序。如果没有指定的文件系统访问权,就不可能与应用程序通信。与CloudLinux CageFS类似,但可能没有那么全面,一个气泡包的进程是完全独立的。因此大大减少了攻击的机会。二、为什么要整合它使用bubblewrap可以配置到以前版本的LiteSpeed(或其他网络服务器)中,但是,它需要对你的服务器进行复杂的重新配置,以便直接调用bwrap程序,并从中调用你的程序。通过将其整合到LiteSpeed中,bubblewrap适用于大量的应用程序类型,并且只需要非常简单的配置改变。整合后,它可以在CGI应用程序以及FCGI应用程序上运行,如果没有整合,这是不可能的。三、如何在LiteSpeed Web服务器中进行bubblewrap在大多数情况下,你可以在现有的LiteSpeed配置中启用bubblewrap,方法是在安全配置中把Bubblewrap Container设置为On。有关OpenLiteSpeed的详情请见这里。如果你没有定制一个Bubblewrap命令(大多数用户不会),它将使用默认的。/bin/bwrap --ro-bind /usr /usr --ro-bind /lib /lib --ro-bind-try /lib64 /lib64 --ro-bind /bin /bin --ro-bind /sbin /sbin --dir /var --dir /tmp --proc /proc --symlink../tmp var/tmp --dev /dev --ro-bind-try /etc/localtime /etc/localtime --ro-bind-try /etc/ld.so.cache /etc/ld.so.cache --ro-bind-try /etc/resolv.conf /etc/resolv.conf --ro-bind-try /etc/ssl /etc/ssl --ro-bind-try /etc/pki /etc/pki --ro-bind-try /etc/man_db.conf /etc/man_db.conf --ro-bind-try /home/$USER /home/$USER --bind-try /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock --bind-try /home/mysql/mysql.sock /home/mysql/mysql.sock --bind-try /tmp/mysql.sock /tmp/mysql.sock --unshare-all --share-net --die-with-parent --dir /run/user/$UID '$PASSWD 65534' '$GROUP 65534' 隔离的关键是bubblewrap的参数 --unshare-all 和 --share-net.--unshare-all 指定上述的所有隔离.--share-net 需要允许你的应用程序访问网络.让我们看看这给你的隔离。第一个参数只是bubblewrap程序的位置。其余的参数将:将下列目录(和它们的子目录)挂载为只读目录:/usr/lib/lib64 (if it exists)/bin/sbin/etc/ssl (if it exists)/etc/pki (if it exists)/home/(your user’s directory) (if it exists)将以下文件挂载为只读:/etc/localtime (if it exists)/etc/ld.so.cache (if it exists)/etc/resolv.conf (if it exists)/etc/man_db.conf (if it exists)将以下文件挂载为读写文件:/var/lib/mysql/mysql.sock (if it exists)/home/mysql/mysql.sock (if it exists)/tmp/mysql.sock (if it exists).创建以下空目录:/var/tmp/run/user/(your user’s ID)创建符号链接:from ../tmp to var/tmp提供最低限度的访问:/proc/dev当LiteSpeed终止时,就会终止创建自定义:/etc/passwd file with only your user’s entry and 65534 (nobody)/etc/group file with only your group’s entry and 65534 (nogroup)大多数程序将能够以这些默认值运行,其结果是以最小的配置获得巨大的保护。如果你的程序不在挂载的目录中,使用不在文件或目录列表中的文件,或者需要对不在可写列表中的文件进行写入访问,你的程序将无法访问它所需要的东西,并会失败。在这种情况下,你将需要创建一个自定义的命令行。四、如何自定义所有的定制都是在Bubblewrap命令的命令行中进行的。基本上,它使用你的bubblewrap版本中的bubblewrap参数,以及LiteSpeed为提供更好的定制而添加的一些额外的令牌。$USER被替换成用户的实际用户名。$UID被替换为你的用户的用户ID。$GID被替换为你的组的ID。$PASSWD被替换为创建一个自定义的/etc/passwd文件,其中有一个用户行,为你正在运行的用户。如果你把这个选项用单引号括起来,你可以添加以空格分隔的额外用户。默认是”$PASSWD 65535″,它创建了一个两行的/etc/hosts文件,包含你的用户和nobody用户。$GROUP与$PASSWD一样,但创建一个自定义的/etc/group。请注意,大多数用户将能够使用默认的Bubblewrap命令,把它留空。1、举个栗子最简单的例子是最糟糕的,因为它没有给你的应用程序提供额外的保护。将Bubblewrap Container设置为On,将Bubblewrap Command设置为:/bin/bwrap --dev-bind / /2、更好的栗子这是一个更好的Bubblewrap命令的例子,因为它挂载的文件和目录比默认的还要少。它不包括/var,不包括/etc/man_db.conf,不包括数据库套接字,只包括/etc/passwd中的用户和/etc/group中的组:bin/bwrap --ro-bind /usr /usr --ro-bind /lib /lib --ro-bind-try /lib64 /lib64 --ro-bind /bin /bin --ro-bind /sbin /sbin --dir /tmp --proc /proc --dev /dev --ro-bind-try /etc/localtime /etc/localtime --ro-bind-try /etc/resolv.conf /etc/resolv.conf --ro-bind-try /etc/ssl /etc/ssl --ro-bind-try /etc/pki /etc/pki --ro-bind-try /home/$USER /home/$USER --unshare-all --share-net --die-with-parent --dir /run/user/$UID $PASSWD $GROUP三、赶快尝试吧要尝试它,请升级到支持bubblewrap的LiteSpeed Enterprise或OpenLiteSpeed版本,并为一个应用程序打开它。这将向您展示像bubblewrap这样的集成沙盒在LiteSpeed这样强大的网络服务器中的威力。
THE END