Detecting a chroot jail from within

后端 未结 8 704
名媛妹妹
名媛妹妹 2020-12-24 03:02

How can one detect being in a chroot jail without root privileges? Assume a standard BSD or Linux system. The best I came up with was to look at the inode value for \"/\"

8条回答
  •  既然无缘
    2020-12-24 03:35

    If you are not in a chroot, the inode for / will always be 2. You may check that using

    stat -c %i /
    

    or

    ls -id /
    

    Interresting, but let's try to find path of chroot directory. Ask to stat on which device / is located:

    stat -c %04D /
    

    First byte is major of device and lest byte is minor. For example, 0802, means major 8, minor 1. If you check in /dev, you will see this device is /dev/sda2. If you are root you can directly create correspondong device in your chroot:

    mknode /tmp/root_dev b 8 1
    

    Now, let's find inode associated to our chroot. debugfs allows list contents of files using inode numbers. For exemple, ls -id / returned 923960:

    sudo debugfs /tmp/root_dev -R 'ls <923960>'
     923960  (12) .       915821  (32) ..     5636100  (12) var   
    5636319  (12) lib    5636322  (12) usr    5636345  (12) tmp   
    5636346  (12) sys    5636347  (12) sbin   5636348  (12) run   
    5636349  (12) root   5636350  (12) proc   5636351  (12) mnt   
    5636352  (12) home   5636353  (12) dev    5636354  (12) boot   
    5636355  (12) bin    5636356  (12) etc    5638152  (16) selinux   
    5769366  (12) srv    5769367  (12) opt    5769375  (3832) media 
    

    Interesting information is inode of .. entry: 915821. I can ask its content:

    sudo debugfs /tmp/root_dev -R 'ls <915821>'
    915821  (12) .              2  (12) ..    923960  (20) debian-jail   
    923961  (4052) other-jail  
    

    Directory called debian-jail has inode 923960. So last component of my chroot dir is debian-jail. Let's see parent directory (inode 2) now:

    sudo debugfs /tmp/root_dev -R 'ls <2>'
          2  (12) .           2  (12) ..          11  (20) lost+found    1046529  (12) home   
     130817  (12) etc    784897  (16) media     3603  (20) initrd.img   
     261633  (12) var    654081  (12) usr     392449  (12) sys            392450  (12) lib   
     784898  (12) root   915715  (12) sbin   1046530  (12) tmp   
    1046531  (12) bin    784899  (12) dev     392451  (12) mnt   
     915716  (12) run        12  (12) proc   1046532  (12) boot               13  (16) lib64   
     784945  (12) srv    915821  (12) opt       3604  (3796) vmlinuz 
    

    Directory called opt has inode 915821 and inode 2 is root of filesystem. So my chroot directory is /opt/debian-jail. Sure, /dev/sda1 may be mounted on another filesystem. You need to check that (use lsof or directly picking information /proc).

提交回复
热议问题