ip 命名空间非 root shell

ip 命名空间非 root shell

我正在尝试运行ssh命令到另一个 IP 命名空间。我现在可以这样做,但它以 root 身份运行。我想以普通用户身份运行它。我想知道是否有办法在另一个网络命名空间中进入非 root shell。

我知道您可以使用它来进入另一个命名空间中的 root shell: sudo ip netns exec <namespace> bash

或者,有没有办法以非 root 用户身份运行单个命令?我知道你可以用以下命令以 root 身份运行命令: sudo ip netns exec <namespace> <command>

答案1

您正在搜索的命令是

su --command=' your command ' new_user_name

答案2

最好的解决方案是安装一个可以设置 root 权限的程序,这样它就可以执行与“ip netns exec”相同的操作来进入命名空间,但随后放弃 root 权限以执行实际的执行。不幸的是,我找不到这样的东西。

下一个最佳解决方案是脚本:

#! /bin/bash
if [[ "$USER" != "root" || "$SUDO_USER" == "" ]]; then
        echo Call this script from sudo
        exit 1
fi
NS="$1"
shift
ip netns exec "$NS" sudo -u "$SUDO_USER" $*

将其放在只有 root 才能写入的文件中,并放在路径中的某个位置,例如 /usr/local/bin/nsexec

然后,要在命名空间中以自己的用户身份启动 ssh,您可以执行以下操作:

sudo nsexec testnamespace ssh

将脚本名称放入 sudoers 文件中应该是安全的,这样您就不会被要求输入密码。由于命名空间是第一个参数,您甚至可以确保只有某些命名空间可以使用。

答案3

而不是 ssh hostname使用ssh username@hostname表单。或者您可以通过 ~/.ssh/config 文件指定不同的用户名:

Host foo*
User foobar

相关内容