标签: chroot

Chroot vs Docker

我正在尝试学习有关容器的基础知识(本例中为Docker).据我从Docker doc和几个读数中学习,Docker基本上通过使用runc运行容器来提供隔离(以前使用LXC).它使用与主机相同的内核的方式.因此,容器映像需要与主​​机内核兼容.我发现这与chroot的作用非常相似.有人可以向我解释使用Docker而不是chroot的任何差异和/或优势吗?(除了Docker提供的附件包装,docker-hub以及Docker提供的所有优秀功能)

linux chroot docker

37
推荐指数
1
解决办法
1万
查看次数

如何在chroot jail中运行命令而不是root和没有sudo?

我正在设置一个最小的chroot,并希望避免使用sudo或su,但仍然以非root身份运行我的进程.这是运行chroot requiers root的一个技巧.我可以编写一个程序,它看起来像这样:

uid = LookupUser(args[username])  // no /etc/passwd in jail
chroot(args[newroot])
cd("/")
setuids(uid)
execve(args[exe:])
Run Code Online (Sandbox Code Playgroud)

这是我最好的选择,还是有一个标准工具可以帮助我?


在这里自己动手:

linux system chroot

21
推荐指数
4
解决办法
4万
查看次数

容器中的共享库

对于两个进程A和B,两者都使用库libc.so,libc.so只加载到内存中一次.当A和B都在同一主机和相同的rootfs上运行时,这是正常情况.

对于容器,如果A和B在不同的容器中运行,A和B是否共享相同的内存区域?

例如

imageA

--libc.so

--programA

imageB

--libc.so

--programB

我们使用chroot在不同的rootfs中运行A和B. 两个libc.so是一样的.libc.so会被加载到内存中两次吗?

containers shared chroot docker

21
推荐指数
2
解决办法
7640
查看次数

从内部探测chroot监狱

如何在没有root权限的情况下检测到chroot监狱?假设标准的BSD或Linux系统.我想出的最好的方法是查看"/"的inode值并考虑它是否相当低,但我想要一种更准确的检测方法.

[edit 20080916 142430 EST] 简单地查看文件系统是不够的,因为复制诸如/ boot和/ dev之类的东西以欺骗被监禁的用户并不困难.

[edit 20080916 142950 EST] 对于Linux系统,在/ proc中检查意外值是合理的,但是那些首先不支持/ proc的系统呢?

unix linux bsd posix chroot

19
推荐指数
3
解决办法
1万
查看次数

Bash:从chroot内部执行命令并切换用户

我正在写一个应该这样做的脚本......

chroot /chroot_dir/ su -
./startup.sh (This should run within the su environment)
Run Code Online (Sandbox Code Playgroud)

我试过这种方法:

chroot /chroot_dir /bin/bash -c " su -; ./startup.sh"
Run Code Online (Sandbox Code Playgroud)

这会尝试执行用户切换和脚本作为字符串命令来打击......但是它做什么,它是在"su - "之后"停止 "并且不执行脚本.但是,一旦我离开"su - "环境,它确实尝试运行startup.sh,但当然,它无法找到它.

基本上我需要嵌套"startup.sh"才能在"su - "环境中运行...

有任何想法吗?

非常感谢

unix linux bash chroot

17
推荐指数
3
解决办法
4万
查看次数

sftp chroot目录上的公钥授权

我想将公钥授权添加到我的sftp chroot目录,但我总是得到:

debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/test/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
Couldn't read packet: Connection reset by peer
Run Code Online (Sandbox Code Playgroud)

Chroot有效,因为可以使用密码进行授权.我在没有chroot的主机上有其他帐户,它可以使用此密钥.我尝试了很多次,但它仍然没有用.

在auth.log中的服务器上只有:连接由xxx [preauth]关闭

这是我的目录:

ls -laR /sftp/
/sftp/:
total 12
drwxr-xr-x  3 root root 4096 May  3 16:55 .
drwxr-xr-x 23 root root 4096 …
Run Code Online (Sandbox Code Playgroud)

linux ssh sftp chroot

14
推荐指数
2
解决办法
2万
查看次数

在docker容器内debootstrap

这是我的问题:我想在docker容器中构建一个chroot环境.问题是debootstrap无法运行,因为它无法在chroot中挂载proc:

W: Failure trying to run: chroot /var/chroot mount -t proc proc /proc

(日志问题原来是:mount: permission denied)

如果我run --privileged是容器,它(当然)工作......我真的非常想在Dockerfile中解除chroot(更清洁).有没有办法让它发挥作用?

非常感谢!

chroot docker

14
推荐指数
4
解决办法
5435
查看次数

chroot如何影响动态库的内存使用?

虽然还有另一个类似主题的问题,但它并没有涵盖chrooted jails中共享库的内存使用.

假设我们有一些类似的chroots.更具体地说,完全相同的二进制文件和共享库集合实际上是主副本的硬链接以节省磁盘空间(为了防止文件系统更改的可能性,只读文件系统).

在这样的设置中如何影响内存使用?

linux memory-management chroot shared-libraries ld

12
推荐指数
1
解决办法
1168
查看次数

如何在El Capitan的Mac OS X"chroot"中使用DNS解析?

我正在尝试创建一个chroot来运行一个需要Internet访问的程序来构建一个沙盒化的,不可变的开发人员环境.到目前为止,我的监狱工作得很好:我可以在其中运行bash并从那里运行简单的程序!但DNS解析不起作用:

bash-3.2$ curl google.ca
curl: (6) Could not resolve host: google.ca
Run Code Online (Sandbox Code Playgroud)

我几乎肯定这是因为内部进程无法连接到mDNSResponder在jail外运行的守护进程.在监狱外面有一个mDNSResponder供整个系统使用的插座:

host ?  ls -lA /var/run/mDNSResponder
srw-rw-rw-  1 root  daemon  0 22 Oct 10:41 /var/run/mDNSResponder
Run Code Online (Sandbox Code Playgroud)

但是,在监狱里面却没有.所以,我试图用socat从监狱中创建一个Unix套接字"代理"到外面:我跑socat(以下命令)创建我的监狱内的插座,然后在监狱内运行再次卷曲,而且卷曲仍然给出了相同的错误消息.在mDNSResponder使用SIGUSR1 打开详细日志后,我在syslog中看到了这个:

2015-10-26 5:32:30.835 PM mDNSResponder[95]:  12: connect_callback: Adding FD for uid 0
2015-10-26 5:32:30.835 PM mDNSResponder[95]:  12: DNSServiceCreateConnection START PID[23271](socat)
2015-10-26 5:32:30.836 PM mDNSResponder[95]:  12: read_msg: ERROR failed to get errsd via SCM_RIGHTS
2015-10-26 5:32:30.836 PM mDNSResponder[95]:  12: DNSServiceCreateConnection STOP PID[23271](socat)
2015-10-26 5:32:30.836 …
Run Code Online (Sandbox Code Playgroud)

sockets macos chroot

12
推荐指数
1
解决办法
1639
查看次数

片刻后,Chrooted PHP-FPM脚本无法解析DNS

我需要一些帮助来理解为什么在PHP-FPM服务启动后PHP-FPM chrooted PHP脚本无法解决FQDN的几个瞬间.

当我(重新)启动PHP-FPM服务时,它工作(分辨率成功)几秒钟,然后解决方案失败.

我通过PHP-FPM(在PHP-FPM池配置文件中设置``chroot`)chroot一个PHP应用程序(实际上是一个WordPress),并给了它所需要的PHP:

  • 一个基本/etc/hosts文件
  • mount --bind的的/ etc/SSL /证书
  • A /dev/urandom(通过mknod)
  • 一个mount --bind将/ usr/share/zoneinfo中
  • 一个mount --bind的/ var/run中/ mysqld的套接字到MySQL.
  • 一个mount --bind/ var/run/nscd用于套接字到nscd解析器.
  • 存储PHP会话的地方

当WordPress抱怨它无法下载更新时,我注意到了这个问题:

stream_socket_client():php_network_getaddresses:getaddrinfo failed:名称或服务未知stream_socket_client():无法连接到tcp://www.wordpress.org:80(php_network_getaddresses:getaddrinfo failed:名称或服务未知)

示例脚本:

<?php
$domain = 'www.example.com';
echo 'gethostbynamel(): '; var_dump(gethostbynamel($domain));
echo 'checkdnsrr(): ';     var_dump(checkdnsrr($domain, 'A'));
echo 'dns_get_record(): '; var_dump(dns_get_record($domain));
?>
Run Code Online (Sandbox Code Playgroud)

当它工作时:

gethostbynamel(): array(1) {
  [0]=>
  string(13) "93.184.216.34"
}
checkdnsrr(): bool(true)
dns_get_record(): array(1) {
  [0]=>
  array(5) {
    ["host"]=>
    string(15) "www.example.com"
    ["class"]=>
    string(2) …
Run Code Online (Sandbox Code Playgroud)

php dns chroot

11
推荐指数
1
解决办法
1396
查看次数

标签 统计

chroot ×10

linux ×6

docker ×3

unix ×2

bash ×1

bsd ×1

containers ×1

dns ×1

ld ×1

macos ×1

memory-management ×1

php ×1

posix ×1

sftp ×1

shared ×1

shared-libraries ×1

sockets ×1

ssh ×1

system ×1