什么脚本可以允许普通用户使用网络命名空间?

Ras*_*guy 23 root sudo privileges network-namespaces

我有一个使用网络命名空间(netns)的架构。我想让普通用户在这些netns中做一些操作。

我可以写一个脚本netns-exec.sh,受这篇文章的启发,用 执行sudo,包含:

ip netns exec $1 su $USER -c "$2"
Run Code Online (Sandbox Code Playgroud)

并添加到我的 sudoer 文件中:

user ALL=(ALL) /path/to/netns-exec.sh
Run Code Online (Sandbox Code Playgroud)

但我觉得它太丑了,我完全可以做噩梦。有没有更好的解决方案来允许普通用户使用命名空间?是否可以将用户放入一些有用的组?我搜索了它,但一无所获。

小智 -2

就我个人而言,我不知道是否有可能允许普通用户在不同的网络命名空间中运行命令,但是这个带注释的 shell 脚本可能更适合您的需求:

#!/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
Run Code Online (Sandbox Code Playgroud)

将其安装在某个位置/usr/bin并允许您的用户执行它。