Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在unix中创建临时沙盒环境_Unix_Sandbox - Fatal编程技术网

在unix中创建临时沙盒环境

在unix中创建临时沙盒环境,unix,sandbox,Unix,Sandbox,只是想知道有没有办法为运行命令创建一个临时沙盒环境 我的要求是我在unix中托管一个webservice,我需要执行一个commanline工具来将输出返回到webservice客户端。由于我正在将从客户端接收到的值传递给commanline工具,因此我希望在沙盒环境中执行命令。我不确定,但您可以尝试使用“chroot”命令创建新的“root”环境,例如 如果您有目录结构,并且希望“保护”“许可证”文件 您可以创建一个chroot环境,如下所示 itily@openzooey:~$ mkdir

只是想知道有没有办法为运行命令创建一个临时沙盒环境


我的要求是我在unix中托管一个webservice,我需要执行一个commanline工具来将输出返回到webservice客户端。由于我正在将从客户端接收到的值传递给commanline工具,因此我希望在沙盒环境中执行命令。

我不确定,但您可以尝试使用“chroot”命令创建新的“root”环境,例如

如果您有目录结构,并且希望“保护”“许可证”文件

您可以创建一个chroot环境,如下所示

itily@openzooey:~$ mkdir chroot_example
itily@openzooey:~$ cd chroot_example/
itily@openzooey:~/chroot_example$ mkdir -p usr/lib lib bin etc
itily@openzooey:~/chroot_example$ cd bin/
itily@openzooey:~/chroot_example/bin$ cp /bin/ls .
itily@openzooey:~/chroot_example/bin$ ldd ls 
        libsec.so.1 =>   /lib/libsec.so.1
        libnvpair.so.1 =>        /lib/libnvpair.so.1
        libcmdutils.so.1 =>      /lib/libcmdutils.so.1
        libcurses.so.1 =>        /lib/libcurses.so.1
        libc.so.1 =>     /lib/libc.so.1
        libavl.so.1 =>   /lib/libavl.so.1
        libidmap.so.1 =>         /usr/lib/libidmap.so.1
        libnsl.so.1 =>   /lib/libnsl.so.1
        libuutil.so.1 =>         /lib/libuutil.so.1
        libmp.so.2 =>    /lib/libmp.so.2
        libmd.so.1 =>    /lib/libmd.so.1
        libm.so.2 =>     /lib/libm.so.2
现在填充ls命令所需的“共享库”(使用ldd我们知道哪些是所需的共享库)

itily@openzooey:~/chroot_example/bin$ ldd ls |awk '{print "cp "$3" lib/"}'
cp /lib/libsec.so.1 lib/
cp /lib/libnvpair.so.1 lib/
cp /lib/libcmdutils.so.1 lib/
cp /lib/libcurses.so.1 lib/
cp /lib/libc.so.1 lib/
cp /lib/libavl.so.1 lib/
cp /usr/lib/libidmap.so.1 lib/
cp /lib/libnsl.so.1 lib/
cp /lib/libuutil.so.1 lib/
cp /lib/libmp.so.2 lib/
cp /lib/libmd.so.1 lib/
cp /lib/libm.so.2 lib/
现在我们需要复制到新的“lib”和usr/lib目录

itily@openzooey:~/chroot_example/bin$ cd ..
itily@openzooey:~/chroot_example$ ldd /bin/ls |awk '{print "cp "$3" lib/"}'|bash 
itily@openzooey:~/chroot_example$ ls -ltr
total 9
drwxr-xr-x   2 itily    staff          2 dic 22 14:37 etc
drwxr-xr-x   2 itily    staff          3 dic 22 14:37 bin
drwxr-xr-x   2 itily    staff         14 dic 22 14:38 lib

itily@openzooey:~/chroot_example$ cp /usr/lib/libidmap.so.1 usr/lib/
itily@openzooey:~/chroot_example$ cp /usr/lib/ld.so.1 usr/lib/
itily@openzooey:~/chroot_example$ cd lib/
itily@openzooey:~/chroot_example/lib$ ls -l
total 7615
-rwxr-xr-x   1 itily    staff      14044 dic 22 14:38 libavl.so.1
-rwxr-xr-x   1 itily    staff    1721400 dic 22 14:38 libc.so.1
-rwxr-xr-x   1 itily    staff      26748 dic 22 14:38 libcmdutils.so.1
-rwxr-xr-x   1 itily    staff     293876 dic 22 14:38 libcurses.so.1
-rwxr-xr-x   1 itily    staff      97852 dic 22 14:38 libidmap.so.1
-rwxr-xr-x   1 itily    staff     398704 dic 22 14:38 libm.so.2
-rwxr-xr-x   1 itily    staff      87164 dic 22 14:38 libmd.so.1
-rwxr-xr-x   1 itily    staff      25140 dic 22 14:38 libmp.so.2
-rwxr-xr-x   1 itily    staff     648776 dic 22 14:38 libnsl.so.1
-rwxr-xr-x   1 itily    staff      74776 dic 22 14:38 libnvpair.so.1
-rwxr-xr-x   1 itily    staff      97500 dic 22 14:38 libsec.so.1
-rwxr-xr-x   1 itily    staff      49556 dic 22 14:38 libuutil.so.1
itily@openzooey:~/chroot_example/lib$ cd ..
所以,最后的结构是

itily@openzooey:~/chroot_example$ ls -l
total 12
drwxr-xr-x   2 itily    staff          3 dic 22 14:37 bin
drwxr-xr-x   2 itily    staff          5 ene 10 20:43 etc
drwxr-xr-x   2 itily    staff         14 ene 10 20:48 lib
drwxr-xr-x   3 itily    staff          3 ene 10 20:40 usr
您还需要组、passwd和其他文件

itily@openzooey:~/chroot_example$ echo "this is a test" > etc/license
itily@openzooey:~/chroot_example$ cd etc/
itily@openzooey:~/chroot_example/etc$ cat /etc/group |grep staff > group
itily@openzooey:~/chroot_example/etc$ cat /etc/passwd |grep itily > passwd
现在可以运行chroot命令,但如果尝试以非root用户身份运行,则会出现错误

itily@openzooey:~$ chroot chroot_example bin/ls /etc
chroot: cannot change root directory to chroot_example: Not owner
因此,您需要以root用户身份运行

我希望这就是你想要的


Urko,

您没有说哪个Unix.Solaris区域可以轻松完成此操作。下面是一个如何设置的示例:


我经常在Debian Linux的沙盒中开发,喜欢使用chroots,这样我就不会破坏我的主机,以防我意外地做了一些愚蠢的事情(这种情况经常发生)。我为Debian和Ubuntu编写了一组脚本,为我创建chroots(x86-64中的跨发行版和x86),你可能会发现它们很有用


基本上,我正在寻找centOS,这是我的主机提供商所拥有的。但知道solaris有这么好的东西是很有可能的……其他操作系统也有类似的选项,但我没有使用过。我读过的几本书是Linux VServer和OpenVZ。
itily@openzooey:~$ chroot chroot_example bin/ls /etc
chroot: cannot change root directory to chroot_example: Not owner
itily@openzooey:~$ pfexec chroot chroot_example /bin/ls -l /etc
total 6
-rw-r--r--   1 101      10            11 Jan 10 19:43 group
-rw-r--r--   1 101      10            18 Jan 10 19:42 license
-rw-r--r--   1 101      10            49 Jan 10 19:43 passwd