Отключение overlayfs вызывает нестабильность в usystem linux

Я пытаюсь использовать overlayfs для создания очень легкого контейнера в качестве тестовой среды (не предназначенной для защиты от взлома).

Я создал два сценария в качестве доказательства концепции: для создания тестовой среды и один для разборки среды.

Построение окружения, кажется, работает, хотя при этом создается множество монтировок, которые отображаются в окружении, а это не то, что я хотел, и, вероятно, именно они вызывают мои проблемы.

Затем у меня есть другой сценарий, чтобы раскрутить среду (т.е. удалить все монтирования, указывающие на мою среду), и тогда возникают проблемы. Просто выдача umounts для всех монтировок говорит мне, что устройства заняты, но umount с '-l' кажется в порядке, но через некоторое время (возможно, когда umounts действительно срабатывает) я обнаружил, что он говорит мне, что не может открыть какие-либо терминалы, и мне нужно перезагрузить систему, чтобы вернуть ее в рабочее состояние.



    #!/bin/bash
    
    #
    # Create test environment
    
    is_su()
    {
        id=`id -u`
        if [ $id -ne 0 ]
        then
            echo >&2 $0: Must run under superuser - you do not have superuser authority.
            exit 1
        fi
    }
    
    #
    # Check we are running with superuser authority (sudo)
    is_su
    
    #
    # Temprarily set our test directory - later this will be a command parameter
    base=$HOME/Dev/parden/test/t1
    
    #
    #  Test we have a directory for local data and a union mount point
    for dir in local mount
    do
        if [ ! -d "$base/$dir" ]
        then
            echo >&2 "$0: Directory '$base/$dir' missing."
            exit 1
        fi
    done
    
    #
    # What is the non-super user we with to run under
    usr=`users`
    grp=( `groups` )
    echo path=$PWD
    ug=$usr:$grp
    echo user=$ug
    
    #
    # Now create the union file system over the root
    unionfs-fuse -o cow -o allow_other "/=ro:$base/local=rw" "$base/mount"
    
    #
    # Mount /dev and /tmp so we can still access real devices
    mount --rbind /dev "$base/mount/dev"
    mount --rbind /dev "$base/mount/tmp"
    
    #
    # Now place ourselves in jail until we want to get out
    cd "$base/mount/$base"
    chroot --userspec=$ug "$base/mount"



    #!/bin/bash
    
    #
    # Unwind test environment
    
    is_su()
    {
        id=`id -u`
        if [ $id -ne 0 ]
        then
            echo >&2 $0: Must run under superuser - you do not have superuser authority.
            exit 1
        fi
    }
    
    umount_maps()
    {
        base=$1
        #
        # Collect list of mounts that mention test environment
        mnt=$(mount -l | grep "$base" | sed -e "s/.* on //" -e "s/ .*//" | tr "\n", " ")
        echo $(echo "$mnt" | wc -w) mounts found
        if [ $(echo "$mnt" | wc -w) -eq 0 ]
        then
            return 1
        fi
        for m in $mnt
        do
            echo Dismounting $m
            #
            # Dismount using '-l' to stop a lot of looping to wait for device to become dismounted
            umount -l $m
        done
        return 0
    }
    
    #
    # Check we are running with superuser authority (sudo)
    is_su
    
    #
    # Temprarily set our test directory - later this will be a command parameter
    base=$HOME/Dev/parden/test/t1
    
    #
    # Dismount every device mapped to our test environment
    umount_maps $base
    
    #
    # Wait a short while and try and run a sudo program and yo get
    #
    # --> sudo: no tty present and no askpass program specified
    #
    # and are unable to open more terminal sessions.

Я использую Ununtu 18.04.

0 ответов

Другие вопросы по тегам