标签: chroot

如何监禁linux用户

是否有类似于chroot的东西,但对于用户?

我们即将授予客户端访问服务器的权限,并希望他们只查看我们允许的目录.

linux chroot jail

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

fork/chroot等效于Windows服务器应用程序

我在Linux上运行的C中编写了一个小型自定义Web服务器应用程序.当应用程序收到请求时,它调用fork()并在一个单独的进程中处理请求,该进程被chroot到包含我想要提供的文件的特定目录中.

我想将应用程序移植到Windows,但是在这个平台上没有fork()和chroot(),并且似乎没有任何直接的等价物.你能指点我在Windows中提供这个功能的简单(并且写得最好)的代码示例吗?我的C并不是那么好,所以越简越好.

c windows webserver fork chroot

5
推荐指数
1
解决办法
5651
查看次数

在Linux上,人们是否chroot Java Web应用程序或使用IPTables并以非root身份运行?

当您运行要在端口80上同时提供静态和动态内容的Java Servlet容器时,您会遇到是否运行服务器的经典问题:

  1. 如果可以的话,有希望成为chroot监狱的根本(还没有得到这个工作)
  2. 作为非root用户,然后使用IPTables将端口80转发到容器正在运行的其他端口(> 1024)
  3. 两者:作为非root用户,IPTables和chroot jail.

选择的问题.1是chrooting的复杂性,仍然是运行root的安全问题.选择的问题.2是每个Linux发行版都有不同的持久化IPTables的方式.选项3当然可能是想法,但很难设置.

最后,每个发行版都有守护脚本中令人讨厌的差异.

人们发现什么是最好的发动机不可知解决方案,是否有资源来展示如何做到这一点?

编辑:我宁愿不在servlet容器前运行Apache,因为该站点主要是动态的,总内存占用很重要(托管成本).

java linux security webserver chroot

5
推荐指数
1
解决办法
1699
查看次数

使用LD_PRELOAD覆盖从另一个libc函数调用的libc函数

我有一个项目旨在运行php-cgi chrooted for mass virtual hosting(超过10k虚拟主机),每个虚拟主机都有自己的chroot,在Ubuntu Lucid x86_64下.

我想避免在每个chroot中创建必要的环境,例如/ dev/null,/ dev/zero,locales,icons ......以及php模块认为它们在chroot之外运行所需的任何东西.

目标是让php-cgi在chroot中运行,但允许他访问chroot之外的文件,只要这些文件(对于大多数文件)以只读模式打开,并且在允许列表上(/ dev/log,/ dev/zero,/ dev/null,语言环境的路径...)

显而易见的方法似乎是创建(或使用它,如果它存在)一个内核模块,它可以挂钩并重定向chroot之外的可信open()路径.但我不认为这是最简单的方法:

  • 我从来没有做过内核模块,所以我没有正确估计难度.
  • 似乎有多个系统调用来挂钩文件"open"(open,connect,mmap ...),但我想有一个与文件打开相关的所有内容的通用内核函数.

我确实希望尽量减少php或它的模块的补丁数量,以最大限度地减少每次我将平台升级到最新的稳定PHP版本所需的工作量(以及更频繁和更快地从上游PHP版本更新),所以我发现从外部修补PHP的行为会更好(因为我们有一个特定的设置,所以修补PHP并向上游建议补丁是不相关的).

相反,我正在尝试用户态解决方案:使用LD_PRELOAD挂钩libc函数,这在大多数情况下运行良好并且实现得很快,但是我遇到了一个我无法单独解决的问题.(想法是与在chroot外部运行的守护进程通信,并使用ioctl SENDFD和RECVFD从中获取文件描述符).

当我调用syslog()(首先没有openlog())时,syslog()调用connect()来打开文件.

例:

folays@phenix:~/ldpreload$ strace logger test 2>&1 | grep connect
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
connect(1, {sa_family=AF_FILE, path="/dev/log"}, 110) = 0
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,我试图挂钩libc的connect()函数,但没有成功.我还尝试在我的preload库的_init()函数中为dlopen()添加一些标志,以测试其中一些是否可以使这个工作,但没有成功

这是我的预加载库的相关代码:

void __attribute__((constructor)) my_init(void)
{
  printf("INIT preloadz %s\n", __progname);
  dlopen(getenv("LD_PRELOAD"), RTLD_NOLOAD | RTLD_DEEPBIND …
Run Code Online (Sandbox Code Playgroud)

c chroot preload

5
推荐指数
1
解决办法
4248
查看次数

绕过dev / urandom | random进行测试

我想编写一个功能测试用例,用随机数测试一个具有已知值的程序。我已经在单元测试期间使用模拟程序对其进行了测试。但我也希望将其用于功能测试(当然,并非所有功能都可以:)

/dev/urandom仅对一个进程进行覆盖的最简单方法是什么?有没有办法对chroot单个文件执行类似的操作,然后让所有其他文件“通过”?

linux testing random chroot

5
推荐指数
1
解决办法
789
查看次数

如何在sles 12中创建chroot环境?

我正在尝试在sles 12中创建一个chroot环境.是否有任何可用的工具可以为我自动执行任务,就像我们对Fedora进行模拟一样?TIA

chroot sles

5
推荐指数
0
解决办法
228
查看次数

是否可以使用Slurm在chroot环境中运行用户的作业

我正在使用Slurm。我希望用户只能访问他们自己的/home/(他们执行他们的工作或目录),Ubuntu的由安装包sudo的用户,和二进制文件的用户/bin,如:lscatrm等。

我不希望每个用户都可以read/write访问其他用户的文件和重要文件,例如/etc/passwd

我观察到,当任何文件在slurm-job新用户下运行时,它可以read在root(/)目录下的所有文件,例如/etc/passwd


从的起点可以强制SLURM只能访问作业的运行文件夹,而不能更改任何其他文件?答案,建议使用chroot

如果要确保作业无法在特定目录之外进行写操作,则可以chroot在作业提交脚本中使用该命令,但这看起来有些奇怪,并且比UNIX权限更难管理。


chroot()系统调用改变进程的根目录由路径名指定的目录

是否可以在chroot环境(chroot()-jailed)中运行用户的作业Slurm


作为一种替代解决方案,我控制了文件访问是通过UNIX权限进行的,其中作业只能在提交用户具有写入权限的地方进行写入,请参阅: slurm:如何在另一个用户下提交作业并防止读取其他用户文件?

chroot slurm

5
推荐指数
1
解决办法
95
查看次数

C:在chroot内部调用system()

我有一个用C语言编写的程序,它在jail中运行chrooted,可以进行一些系统调用,例如system ( "ls" ).问题是当我在jail中运行它时程序不执行系统调用.我已经包含了所有必需的可执行文件库(使用lddbash命令找到它们),以及bash可执行文件(/bin/bash)和它的库(也可以找到ldd).似乎缺少某些东西.有没有人对此有所了解?

c system chroot call libraries

4
推荐指数
1
解决办法
853
查看次数

在 chroot-environment OpenBSD 中配置设备

我已经挠头一段时间了,找不到让它工作的方法......

我想在我的 OpenBSD 服务器上运行一些 cgi 脚本(用 Python 编写)。由于 OpenBSD 上的网络服务器在监狱中运行,我重新创建了整个文件夹结构(/bin /dev /usr /usr/local/lib 等),但是当我'时仍然收到“500 服务器内部错误”我试图导入一些需要访问 /dev/urandom 设备的 Python 模块。

我已经使用 mknod 创建了设备特殊文件。

ls -la /dev/*random
ls -la /dev/{null,zero}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出

crw-r--r--  1 root  wheel   45,   3 Sep 13 11:09 /dev/arandom
crw-r--r--  1 root  wheel   45,   0 Jul 15 19:02 /dev/random
crw-r--r--  1 root  wheel   45,   1 Jul 15 19:02 /dev/srandom
crw-r--r--  1 root  wheel   45,   2 Jul 15 19:02 /dev/urandom
Run Code Online (Sandbox Code Playgroud)

crw-rw-rw-  1 root  wheel    2,   2 Sep 16 01:30 /dev/null …
Run Code Online (Sandbox Code Playgroud)

python openbsd cgi chroot jail

4
推荐指数
1
解决办法
1405
查看次数

OpenBSD 上有哪些类似 Jail/Chroot/Sandbox 的机制?

我最近开始使用 OpenBSD。我想创建简单的即发即弃容器/VM 或其他东西(它应该用作沙箱)。

用户可以上传他的源代码(C++/Java/Perl),它会在服务器(OpenBSD)上编译,如果编译成功,它应该执行这个文件,然后将结果返回到网页。

我如何在 OpenBSD 中提供这个?

另外,我应该使用 chroot,因为 'jail' 将在 6.0 中删除吗?或者还有其他可能在 OpenBSD 中创建“沙箱”吗?

security openbsd bsd chroot sandbox

4
推荐指数
1
解决办法
8022
查看次数

标签 统计

chroot ×10

c ×3

linux ×3

jail ×2

openbsd ×2

security ×2

webserver ×2

bsd ×1

call ×1

cgi ×1

fork ×1

java ×1

libraries ×1

preload ×1

python ×1

random ×1

sandbox ×1

sles ×1

slurm ×1

system ×1

testing ×1

windows ×1