asp.net手机网站开发,wordpress登录验证失败,建设信息港网站,h5网页制作代码Jail的简介
Jail是FreeBSD操作系统中一个功能强大的安全机制#xff0c;自FreeBSD 4.X版本起便投入使用#xff0c;并且随着系统的发展#xff0c;其功能、效率、稳定性和安全性得到了持续的强化。
Jail基于chroot的概念#xff0c;通过更改一系列程序的根目录#xff0…
Jail的简介
Jail是FreeBSD操作系统中一个功能强大的安全机制自FreeBSD 4.X版本起便投入使用并且随着系统的发展其功能、效率、稳定性和安全性得到了持续的强化。
Jail基于chroot的概念通过更改一系列程序的根目录为程序提供了一个隔离的安全环境将其与系统的其他部分完全分隔开来。在Jail的环境中运行的程序无法访问其环境之外的任何文件或资源从而有效防止了潜在的安全威胁。因此即使一个在Jail环境中运行的服务被攻击者渗透也不会导致整个系统面临风险。
然而传统的chroot环境存在诸多限制它只适用于简单的工作场景对于需要高度灵活性、复杂性和进阶功能的应用来说并不理想。而且随着时间的推移越来越多的方法被发现可以逃离chroot环境这使得它不再是确保服务安全的最佳方案。
为了克服这些限制Jail对传统chroot环境的概念进行了多方面的改进。它不仅限制了程序对文件系统的访问还通过虚拟化技术实现了对用户、网络子系统等系统资源的隔离。这使得Jail能够提供更精细的控制参数以调整其对环境资源的访问方式。从某种程度上讲Jail可以被视为一种操作系统层级的虚拟化技术。
Jail的四个核心要素包括
子树状目录作为进入Jail的起点目录一旦程序进入Jail它将无法访问该目录之外的文件系统。主机名称每个Jail都有其独特的主机名称用于标识和区分不同的Jail环境。IP地址为Jail分配一个独立的IP地址通常是现有网络接口的别名地址。这使得Jail能够独立于主机系统进行网络通信。可执行指令指定在Jail中可执行的程序路径名称。该路径是相对于Jail环境根目录的。
AppJail简介
AppJail是一个基于BSD-3开源许可的框架它完全采用sh和C语言编写借助FreeBSD Jail机制创建出隔离、可移植且易于部署的环境其运行方式与应用程序相似。
该框架的主要目标是简化系统管理员和开发人员的工作流程通过提供一个统一的接口来实现。此接口融合了FreeBSD的基本工具自动化了Jail环境的创建和管理流程使得复杂操作变得简单直接。
AppJail提供了一种高效且直观的方法来处理复杂的系统部署和管理任务。
AppJail手册AppJail Handbook 源码GitHub - DtxdF/AppJail: Simple and easy-to-use tool for creating portable jails. 安装
使用pkg直接安装
pkg install -y appjail
配置文件在这里/usr/local/etc/appjail/appjail.conf
如果需要开机启动需要在/etc/rc.conf文件中加入appjail_enableYES
可以使用命令
sysrc appjail_enableYES
简单使用
appjail fetch
显示
appjail fetch [00:00:00] [ debug ] Running (www): fetch -Rpm -o /usr/local/appjail/cache/components/amd64/14.1-RELEASE/default/MANIFEST https://download.freebsd.org/releases/amd64/14.1-RELEASE/MANIFEST /usr/local/appjail/cache/components/amd64/14.1 1046 B 5237 kBps 00s [00:03:24] [ debug ] Done: base.txz
3分半搞定而且时间显示是灰色的看着很高级的感觉。
然后快速执行
appjail quick myjail start login
appjail quick myjail start login [00:00:00] [ debug ] [myjail] quick parameters: start login
[00:00:12] [ info ] [myjail] Done. [00:00:12] [ debug ] [myjail] Copying /etc/localtime as /usr/local/appjail/jails/myjail/jail/etc/localtime [00:00:12] [ debug ] [myjail] Copying /etc/resolv.conf as /usr/local/appjail/jails/myjail/jail/etc/resolv.conf [00:00:12] [ debug ] [myjail] Setting the boot flag to the myjail jail ... [00:00:17] [ debug ] [myjail] Template generated: [00:00:17] [ debug ] [myjail] exec.start: /bin/sh /etc/rc [00:00:17] [ debug ] [myjail] exec.stop: /bin/sh /etc/rc.shutdown jail [00:00:17] [ debug ] [myjail] mount.devfs [00:00:28] [ debug ] [myjail] Locking myjail ... [00:00:28] [ info ] [myjail] Starting myjail...
[00:01:27] [ debug ] [myjail] Trying to log in to myjail ... FreeBSD 14.1-RELEASE (GENERIC) releng/14.1-n267679-10e31f0946d8
Welcome to FreeBSD!
Release Notes, Errata: https://www.FreeBSD.org/releases/ Security Advisories: https://www.FreeBSD.org/security/ FreeBSD Handbook: https://www.FreeBSD.org/handbook/ FreeBSD FAQ: https://www.FreeBSD.org/faq/ Questions List: https://www.FreeBSD.org/lists/questions/ FreeBSD Forums: https://forums.FreeBSD.org/
Documents installed with the system are in the /usr/local/share/doc/freebsd/ directory, or can be installed later with: pkg install en-freebsd-doc For other languages, replace en with a language code like de or fr.
Show the version of FreeBSD installed: freebsd-version ; uname -a Please include that output and any error messages when posting questions. Introduction to manual pages: man man FreeBSD directory layout: man hier
To change this login announcement, see motd(5). rootmyjail:~ # 1分半jail从创建到启动就完成了
看下系统
uname -a FreeBSD myjail.appjail 14.1-RELEASE FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC amd64
当然现在系统还没有配置好网络需要进行配置
配置
/usr/local/etc/appjail/appjail.conf:
EXT_IFjext
ON_IFjext
FREEBSD_VERSION13.2-RELEASE
FREEBSD_ARCHamd64
IMAGE_ARCHamd64
SHORTEN_DOMAIN_NAMES1
# Remove the # character if you want to use ZFS with AppJail.
#ENABLE_ZFS1
配置网络
网络方面没有调通。
启动的时候直接配上ip
appjail quick myjail aliasigb0 ip4192.168.1.120/24 overwrite start
当然网桥没有配置好所以这里暂时没有成功。
配置网段
执行命令
appjail network add development 192.168.1.0/24appjail network add development 192.168.1.0/24 [00:00:01] [ debug ] Network information: [00:00:01] [ debug ] - ADDRESS192.168.1.0 [00:00:01] [ debug ] - NETWORK192.168.1.0 [00:00:01] [ debug ] - NETMASK255.255.255.0 [00:00:01] [ debug ] - CIDR24 [00:00:01] [ debug ] - WILDCARD0.0.0.255 [00:00:01] [ debug ] - BROADCAST192.168.1.255 [00:00:01] [ debug ] - MINADDR192.168.1.1 [00:00:01] [ debug ] - MAXADDR192.168.1.254 [00:00:01] [ debug ] - ADDRESSES254 [00:00:01] [ debug ] - NAMEdevelopment [00:00:01] [ debug ] - DESCRIPTION [00:00:01] [ debug ] - GATEWAY192.168.1.1 [00:00:01] [ debug ] Done.
删除配置网段
appjail network remove -f development删除之后配置到192.168.3.0网段
appjail network add development 192.168.3.0/24
不过这里没有再配上去显示报错
[00:00:00] [ error ] The development network is already created. 设定jail的虚拟网卡地址
appjail quick myjail \virtualnetdevelopment:myjail \overwrite \start
查看ip appjail network hosts -REj myjail
appjail network hosts -REj myjail 192.168.1.2 development 可见已经拿到了192.168.1.2网络地址 ping一下试试
appjail cmd jexec otherjail ping -c4 192.168.1.1
能ping通。
不过现在因为跟外面的192.168.1.0/24网段冲突所以还不能上外网不过至少整个流程基本ok了。
基本操作流程
启动一个已经创建好的jail appjail start myjail
登录 appjail login myjail
登进去之后可以使用exit退出登录 停止jail
appjail stop webapp 导出jail appjail image export -t py -c zstd webapp
执行后显示
myjail is currently running. rootfbhost:~ # appjail image export -t pytt -c zstd myjail [00:00:11] [ info ] [myjail] Exporting myjail ... [00:00:11] [ debug ] [myjail] Generating /usr/local/appjail/cache/images/myjail/pytt-amd64-image.appjail ... [00:00:12] [ info ] [myjail] Done. [00:00:12] [ debug ] [myjail] Setting (ajspec): tags: pytt [00:00:12] [ debug ] [myjail] Setting (ajspec): pytt.arch: amd64 [00:00:12] [ debug ] [myjail] Setting (ajspec): pytt.name: myjail [00:00:12] [ debug ] [myjail] Setting (ajspec): pytt.timestamp.amd64: 1717590767 [00:00:12] [ debug ] [myjail] Setting (ajspec): pytt.sum.amd64: 3b9719c5d5e35d474b07fca8c161ca9ef2f2fa64e8e0f0efe59f28cb3d573f83 [00:00:12] [ debug ] [myjail] Setting (ajspec): pytt.size.amd64: 878988 [00:00:12] [ info ] [myjail] Saved as /usr/local/appjail/cache/images/myjail/pytt-amd64-image.appjail 文件大小800k
看看myjail的信息
appjail image metadata info myjail
Name : myjail (pytt)
Build on :- amd64
Image : amd64- SHA256 3b9719c5d5e35d474b07fca8c161ca9ef2f2fa64e8e0f0efe59f28cb3d573f83- SIZE 878988- TIMESTAMP Wed Jun 5 20:32:47 2024
Installed :- /usr/local/appjail/cache/images/myjail/pytt-amd64-image.appjail上传jail到github
# scp \/usr/local/appjail/cache/images/webapp/py-amd64-image.appjail \root192.168.1.107:/var/mks/makejails/darkhttpd/appdata/AppJail-images/webapp
...
# cp /usr/local/appjail/cache/images/webapp/py-amd64-image.appjail /tmp/imgs/AppJail-images/webapp
# git clone gitgithub.com:DtxdF/webapp-image
...
# cp /usr/local/appjail/cache/images/webapp/.ajspec webapp-image
# appjail image metadata set -t py -f webapp-image/.ajspec source:amd64http://localhost:8080/AppJail-images/webapp/py-amd64-image.appjail
# appjail image metadata set -t py -f webapp-image/.ajspec source:amd64http://192.168.1.107:8080/AppJail-images/webapp/py-amd64-image.appjail
# git -C webapp-image add .ajspec
# git -C webapp-image commit -m Add ajspec file
# git -C webapp-image push
... 还没看懂这部分感觉是把img存盘文件设为.ajsped文件上传到github的 是不能用原名py-amd64-image.appjail 还是怎么回事 这部分试验以后再做。
从github导入jail
appjail image import -t py ghDtxdF/webapp-image
AppJail特有的tiny jail
TinyJails是AppJail的一个功能用于导出仅包含运行应用程序所需文件的jail。
先创建一个hello.c文件
#include stdio.h
#include stdlib.hint
main(void)
{
printf(Hello, world!\n);
return EXIT_SUCCESS;
}
生成files.lst 文件里面只有一句
/usr/local/bin/hello
编译执行
cc -o hello hello.cappjail quick tinyjail
appjail cmd local tinyjail mkdir -p usr/local/bin
appjail cmd local tinyjail mv $PWD/hello usr/local/binappjail jail create -I tinyexportfiles:files.lst output:hello.appjail compress:xz tinyjail cc -o hello hello.c
appjail quick tinyjail appjail cmd local tinyjail mkdir -p usr/local/bin appjail cmd local tinyjail mv $PWD/hello usr/local/bin appjail jail create -I tinyexportfiles:files.lst output:hello.appjail compress:xz tinyjail 显示
appjail jail create -I tinyexportfiles:files.lst output:hello.appjail compress:xz tinyjail [00:00:00] [ info ] [tinyjail] Exporting tinyjail as a tiny jail ... [00:00:00] [ debug ] [tinyjail] (1/2): Checking /usr/local/bin/hello ... [00:00:00] [ debug ] [tinyjail] (2/2): Ignoring empty line... [00:00:01] [ debug ] [tinyjail] (1/1): Copying usr/local/bin/hello ... [00:00:01] [ debug ] [tinyjail] Generating hello.appjail ... [00:00:01] [ info ] [tinyjail] Done.
在其它机器上我们可以安装并执行这个tiny jail
appjail jail create -I tinyimporthello.appjail hello_tinyappjail start hello_tinyappjail cmd jexec hello_tiny hello#Hello, world!
appjail cmd jexec hello_tiny hello Hello, world!
总结
AppJail是非常好的Jail管理软件。当然由于个人原因网络这块还没调通先搁置。 调试
appjail fetch 的时候报错Not Found
appjail fetch [00:00:00] [ debug ] Running (www): fetch -Rpm -o /usr/local/appjail/cache/components/amd64/14.1-BETA3/default/MANIFEST https://download.freebsd.org/releases/amd64/14.1-BETA3/MANIFEST fetch: https://download.freebsd.org/releases/amd64/14.1-BETA3/MANIFEST: Not Found [00:00:01] [ error ] fetch -Rpm -o /usr/local/appjail/cache/components/amd64/14.1-BETA3/default/MANIFEST https://download.freebsd.org/releases/amd64/14.1-BETA3/MANIFEST exits with a non-zero exit status. 现在是14.1-RC 升级FreeBSD具体见使用freebsd-update 升级FreeBSD-CSDN博客