일반 사용자가 네트워크 네임스페이스를 사용할 수 있도록 허용하는 스크립트는 무엇입니까?

일반 사용자가 네트워크 네임스페이스를 사용할 수 있도록 허용하는 스크립트는 무엇입니까?

네트워크 네임스페이스(netns)를 사용하는 아키텍처가 있습니다. 일반 사용자가 이러한 네트워크에서 일부 작업을 수행할 수 있도록 허용하고 싶습니다.

netns-exec.sh나는 다음에서 영감을 받아 스크립트를 작성할 수 있습니다 .이 게시물을 실행하는 데 사용되는 에는 다음이 sudo포함됩니다.

ip netns exec $1 su $USER -c "$2"

내 sudoer 파일에 추가했습니다.

user ALL=(ALL) /path/to/netns-exec.sh

하지만 너무 추악해서 악몽을 꿀 수도 있을 것 같아요. 일반 사용자가 네임스페이스를 사용할 수 있도록 하는 더 나은 솔루션이 있습니까? 사용자를 유용한 그룹에 넣는 것이 가능합니까? 검색했지만 아무것도 찾지 못했습니다.

답변1

지옥불 이 일을 할 수 있어

firejail --noprofile --netns=nameOfNetSpace command

또는Netns 실행,nsutils그리고회로망루트가 필요하지 않습니다

답변2

솔루션 1

"netns"라는 그룹을 추가하고 여기에 원하는 모든 사용자를 추가하세요. 그런 다음 root:netns에 소유권을 부여하고 그룹에 읽기/실행 기능을 부여합니다.

다시 말해서:

# New group netns
sudo groupadd --system netns

# Add root to "netns", not sure if needed
sudo usermod -aG netns root

# Do this for every needed user
sudo usermod -aG netns $UserName

# Change ownership to root, grant rw acces to group netns
sudo chown root:netns /path/to/netns-exec.sh
sudo chmod 633 /path/to/netns-exec.sh

솔루션 2

이 솔루션은 더 간단합니다. 다음과 같이 sudoers 파일을 편집해야 합니다.이 예.

user ALL=(ALL) /bin/ip netns

답변3

스크립트는 아니지만 루트가 아닌 사용자가 Linux 네트워크 네임스페이스 내에서 프로세스를 실행할 수 있도록 하는 매우 미니멀하고 편집증적인 C 프로그램을 작성했습니다.

소스 코드는 여기에 있습니다:netns-exec.c

답변4

개인적으로 일반 사용자가 다른 네트워크 네임스페이스에서 명령을 실행하도록 허용하는 것이 가능한지 모르겠지만 주석이 달린 이 쉘 스크립트가 귀하의 요구에 더 적합할 수 있습니다.

#!/bin/bash
# ip netns wrapper script, nns.
# Usage: nns nsname cmdline

case "${1}" in
    do)
        shift # remove "do"
        NSNAME="${1}" # remember nsname
        shift # remove nsname to get argument list for su -c
        [ -z "${NSNAME}" -o -z "${1}" ] && exit 1 # if either nsname or arglist is empty - error out
        echo ip netns exec "${NSNAME}" su "${SUDO_USER}" -c "${*}" # execute, ${*} merges separate arguments into single word for su/sh -c parsing. See with strace.
    ;;
    *)
        SCRIPTNAME="${0}" # remember script full path
        exec sudo "${SCRIPTNAME}" do "${@}" # run it through sudo with elevated privileges
    ;;
esac

어딘가에 설치 /usr/bin하고 사용자가 실행할 수 있도록 하세요.

관련 정보