在安全性、稳定性和性能方面,LXC(Linux 容器)和FreeBSD 的监狱之间有什么显着区别吗?
乍一看,这两种方法看起来非常相似。
如果我是 root,我可以简单地创建一个虚拟用户/组,相应地设置文件权限并以该用户身份执行该过程。但是我不是,所以有没有办法在没有root的情况下实现这一目标?
在 FreeBSD 4.9 中,只需一个命令即可轻松完成,例如
jail [-u username] path hostname ip-number command
Run Code Online (Sandbox Code Playgroud)
如果路径是/你像往常一样运行相同的程序,但它的所有网络通信都被限制为仅使用给定的 IP 地址作为源。有时它非常方便。
现在在 Linux 中有 LXC,它看起来与 FreeBSD jail(或 Solaris 的区域)非常相似——你能想出类似的方式来执行程序吗?
我有一个 FreeBSD jail,我在其中使用以下命令运行服务器:
/usr/sbin/daemon /path/to/script.py
Run Code Online (Sandbox Code Playgroud)
目前,每次我重新启动机器和监狱启动时,我都必须运行这个命令。我想让这个命令从/etc/rc. 有没有一种简单的方法可以为daemon命令创建 FreeBSD rc 脚本?
更新:我通读了有关 rc scripts 的 BSD 文档,并从中创建了以下脚本/etc/rc.d/pytivo:
#!/bin/sh
. /etc/rc.subr
name=pytivo
rcvar=pytivo_enable
procname="/usr/local/pytivo/pyTivo.py"
command="/usr/sbin/daemon -u jnet $procname"
load_rc_config $name
run_rc_command "$1"
Run Code Online (Sandbox Code Playgroud)
这可以在监狱启动时启动我想要作为守护进程的 python 脚本......(给定pytivo_enable="YES"是 in /etc/rc.conf)但是 rc 脚本不知道守护进程是否正在运行(它认为它不是在运行时)和当我尝试启动它时它会发出警告:
[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]#
Run Code Online (Sandbox Code Playgroud)
所以它很接近,并且有效,但我觉得我应该能够获得比这更好的功能。
我有一个关于向某人提供 shell 帐户的问题。它有多安全?他可以阅读 /etc。我如何提供一个安全的 shell 帐户,该帐户只会将用户限制在某些垃圾箱和他自己的家中?是 chroot 监狱的唯一途径吗?
我已经安装jailkit上Ubuntu 12.04,我已经建立了一个用户的shell来/bin/bash-但是当它被调用运行/etc/bash.bashrc,而不是/etc/profile
如果您以前没有使用jailkit过这里是它的要点:
所以我有一个testuser这样的条目/etc/passwd:
testuser:x:1002:1003::/home/jail/./home/testuser:/usr/sbin/jk_chrootsh
Run Code Online (Sandbox Code Playgroud)
在文件中/home/jail/etc/passwd有一个条目,如:
testuser:1001:1003::/home/testuser:/bin/bash
Run Code Online (Sandbox Code Playgroud)
我已经阅读了bash(1),所以我认为问题在于 bash 认为它没有被作为登录 shell 调用:
当 bash 作为交互式登录 shell 或作为具有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 读取并执行命令(如果该文件存在)。
我知道这bash实际上是被调用的,/usr/sbin/jk_chrootsh但我不明白如何bash确定它是什么类型的外壳,以及它应该运行哪组启动文件。
我想看看我是否可以解决这个问题 - 但我不明白:
ps:我也看了,login(1)运气不好。
是否可以在桌面系统上使用 LXC 来限制浏览器和其他过去已被证明容易受到某些类型攻击的软件。所以我想要实现的是监禁,比如 Firefox,仍然能够查看它的窗口等,但要确保它只能读写“气泡内”的任何东西,而不是主机系统。
lxc-sshdLXC 中的示例容器表明这样的事情应该是可能的(应用程序级容器),但我只在最多需要 TTY 的程序中看到了这一点。
这也可以在 KDE、GNOME、Unity 下工作吗?
我用GNOME运行Fedora,最近为 linux安装了Viber。它非常好,一切正常。
由于Viber不是开源软件,我决定以另一个用户身份运行它,以确保它无法在没有我同意的情况下访问我的文件,方法是创建一个user:group viber:viber。如果我尝试从属于我或任何其他用户的Viber文件内部打开,它无法读取它们。目标实现,但部分实现。现在,我偶然发现了另一个问题,即Viber仅适用于消息,当我尝试拨打电话时,它说找不到麦克风和扬声器?这种感觉,我知道为什么(我运行X服务器(GNOME)为自己和Viber的作为振动:振动(用户:组))。
如何让Viber 同时运行viber:viber,让它使用麦克风和扬声器,同时运行 GNOME 会话myusername:myusername?
SELinux 解决方案也是受欢迎的,但有具体的例子!chroot不是解决方案,因为据我所知,它会导致与上述相同的问题。
运行它的exec是:su - viber -c /opt/viber/Viber
如果您有一个网络服务器(例如 nginx),您通常会使用 fast-cgi 服务器或其他应用程序 http-server 来获取动态内容。这意味着在这两种情况下,web-server 进程和 fast-cgi(或 application-http-server 进程 - 在下面称为 slave)之间有一个很好的进程分离。
网络服务器的配置使得 fast-cgi 通过套接字或 http 请求被代理。
如果从属进程中存在安全问题,则为从属和 Web 服务器创建不同的用户可以保护文件系统位置。
但是我如何在 Linux 下更多地监禁从进程?
(例如无法上网、发邮件等)
我可以想到以下路线:
在当前发行版(例如 Debian)上,最方便的方法是什么?在实践中如何做到?任何配置示例?
我在 FreeBSD 9.0-STABLE 上执行以下操作:
mount_nullfs /foo /jail/foo
Run Code Online (Sandbox Code Playgroud)
在此之后,从内主机系统中,安装工程。所以这有效:
touch /foo/bar && ls /jail/foo/bar
Run Code Online (Sandbox Code Playgroud)
但是当我进入监狱时,挂载的目录是空的:
jexec 1 tcsh
ls /foo/bar
Run Code Online (Sandbox Code Playgroud)
我得到:
ls: /foo/bar: No such file or directory
Run Code Online (Sandbox Code Playgroud)
/foo 完全是空的。
当在主机系统中找到的 chroot 中挂载时,如何让挂载目录中的文件正确显示?