首先让我说我是通用软件的支持者(一般来说;-).我不是Python的专家,但似乎'virtualenv'实用程序解决了几乎相同的问题'chroot'可以帮助解决 - 引导一个可以作为root传递的目录树,从而有效地保护真正的目录树,如果需要.
由于我不是已经提到的Python专家,我想知道 - virtualenv可以解决chroot不能解决的问题是什么?我的意思是,我不能只是设置一个漂亮的假根树(可能使用工会安装),chroot并pip install在我的新环境中做一个我想要的包,然后在我的新环境的范围内玩,运行python脚本,什么不是?
我在这里错过了什么吗?
在任何应用程序目录中都无法在本地安装软件包/模块,我的意思是,没有root权限,以及随后没有覆盖或添加文件/usr/lib或/usr/local/lib?看起来这就是virtualenv的作用,但我认为它必须符号链接或以其他方式为每个创建的环境提供python解释器,不是吗?
在编写用于完全自动化虚拟机设置的perl脚本(Xen pv)时,我遇到了一个很小的问题.
使用perl的chroot函数我在guest文件系统上做我的事情,然后我需要回到我的初始真正的根.我到底怎么回事?
脚本示例:
`mount $disk_image $mount_point`;
chdir($mount_point);
chroot($mount_point);
#[Do my things...]
#<Exit chroot wanted here>
`umount $mount_point`;
#[Post install things...]
Run Code Online (Sandbox Code Playgroud)
我试过退出; 但显然退出整个脚本.
正在寻找一种退出chroot的方法我发现了许多旨在退出已经设置好的chroot 的脚本(权限提升).由于我在这里做chroot这些方法不适用.
试过一些疯狂的事情:
opendir REAL_ROOT, "/";
chdir($mount_point);
chroot($mount_point);
chdir(*REAL_ROOT);
Run Code Online (Sandbox Code Playgroud)
但是没有去.
更新 一些要考虑的要点:
当我尝试从 chroot 监狱内部建立 ssl 连接时,出现以下错误:
twisted.internet.error.ConnectionLost: Connection to the other side was lost in a non-clean fashion.
Run Code Online (Sandbox Code Playgroud)
我使用 openssl 0.9.6 和 pyopenssl 来建立 ssl 连接,并且我在 Linux (centos 5.5) 上使用适用于 python 2.4 的twisted python 库。
经过一些故障排除后,我发现 openssl 失败是因为它试图读取 /dev/random 文件,而失败是因为 chroot 内没有 /dev/random 。我已经确认,如果我在 chroot 中创建 /dev/random 文件,连接就会成功。
如果我无法从程序中访问 /dev/random ,初始化 openssl 的正确方法是什么?
我可以 chrootDir.chroot
Dir.chroot("/var/chroot/mychroot")
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能从 chroot 返回呢?
当我使用命令时:schroot -c 32bit -- bash --login -c "rm -rf ~/SC32 ;"
我收到这些错误:
E:20copyfiles:cp:无法创建常规文件`/ var/lib/schroot/mount/32bit-dcc62f68-de18-4d2a-95d9-b71f0be314ce/etc/resolv. conf':没有这样的文件或目录
E:32bit-dcc62f68-de18-4d2a-95d9-b71f0be314ce:Chroot设置失败:stage = setup-start
因为我是Linux环境的新手我不知道如何解决这个问题错误.
我正在使用的Cent操作系统是6.3和x64架构我也在/etc/schroot/schroot.conf中配置了32位
[32bit]
type=directory
description=CentOS 6.3 32bit
directory=/chroot/32bit
users=temp
root-groups=root
personality=linux32
Run Code Online (Sandbox Code Playgroud)
另外我有这个目录/ chroot/32bit
我不是系统的root用户.
任何人都可以告诉我该怎么做才能解决这个错误?
我正在尝试自动化应用程序部署,作为我需要将文件上传到服务器的一部分。我已经为 SFTP 服务器创建了一个最小用户并配置了 chroot,但我不知道如何上传非交互式文件。
目前我正在做 scp myfile buildUser@myserver.com:newBuilds/
我试过sftp buildUser@myserver.com myfile(newBuilds是 chroot 目录)但这没有上传任何东西,但它确实连接了。
支持这种方法而不使用的原因scp是限制 scp 访问要困难得多(根据我所了解的信息)。
我正在用Python编写一个Web服务器作为业余爱好项目.该代码针对*NIX机器.我刚开始在Linux上开发,甚至比Python本身更新.
我担心人们会打破我用来提供网站的文件夹.最明显的方法是过滤对/../../etc/passwd等文档的请求.但是,我担心可能有一些聪明的方法可以上去我不知道的目录树,因此我的过滤器无法捕获.
我正在考虑使用os.chroot添加,以便根目录是网站本身.这是一种防止这些越狱攻击的安全方法吗?这样做有什么潜在的陷阱会伤害我的道路吗?
在安装CakePHP 2.0之后(修改过,我说我在cakephp 2.0的干净安装上遇到同样的问题)我发现自己面临一个我无法解决的错误.
组态:
服务器:debian weezy 7
用户:测试
结构:/ wwwjail/siteroot/test/htdocs/[app/...]
nginx配置
cat/etc/nginx/sites-available/test
server {
listen IP:80 default;
server_name domain.fr;
access_log /var/log/nginx/test.access.log;
error_log /var/log/nginx/test.error.log;
autoindex off;
index index.php index.html;
root /wwwjail/siteroot/test/htdocs/;
location ~ \.php$ {
try_files $uri =404;
fastcgi_intercept_errors on;
fastcgi_pass unix:/wwwjail/siteroot/test/php-fpm.sock;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
}
Run Code Online (Sandbox Code Playgroud)
php5-fpm配置
cat /etc/php5/fpm/pool.d/test.conf
[test]
listen = /wwwjail/siteroot/test/php-fpm.sock
chroot = /wwwjail/siteroot/test/htdocs
user = test
group = test
listen.allowed_clients = 127.0.0.1
listen.owner = test
listen.group = test
listen.backlog = -1
pm …Run Code Online (Sandbox Code Playgroud) 在bash中,将函数传递给主机chroot的理想方法是什么?
例如,
install_script () {
wget some_source_files && configure && make && make install
}
Run Code Online (Sandbox Code Playgroud)
和,
some_command -v foo >/dev/null 2>&1 || install_script
Run Code Online (Sandbox Code Playgroud)
但如果我想从主机执行同样的操作,我该怎么做呢?
我能想到的一种方法是将函数传递给chrooted目录中的文件,
cat > $chrooted_dir/etc/install_script.sh <<"EOF"
#!/bin/bash
wget source_files ; ./configure ; make ; make install
EOF
Run Code Online (Sandbox Code Playgroud)
并从主机执行,
chroot $chrooted_dir /bin/bash "check_command || /etc/install_script.sh"
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更优雅的方式来解决这个问题?理想情况下,我想从主机中的cript执行命令,并在chroot系统内执行一些安装.
PS:我也很欣赏任何相关的源/链接来理解bash句柄函数声明和随后对chrooting的继承.