如何让root像用户一样使用sudoedit?

如何让root像用户一样使用sudoedit?

我正在为自己编写一个包装器,vim它可以检测用户何时尝试编辑不属于他们的文件,并建议使用sudoeditvisudo。我想使用sudoedit而不是sudo vim,因为我相信这是最佳实践。

问题是,当用户运行 时sudo vim FILENAME,我无法让它sudoedit表现得像由用户调用一样。我的意思是,编辑文件的临时副本应该属于调用者而不是 root,而且我假设还存在更微妙的安全策略差异。

以下是我的脚本的一部分 - 假设它被称为vim

#!/bin/bash

# check if script ran by root
if [[ $# -eq 1 ]]  && [ -f $1 ] && [ "$EUID" -eq 0 ]
then
    # warning: root has to be a sudoers to be able to run the sudo command
    if [[ $(realpath $1) == "/etc/sudoers" ]]
    then
        echo "Using visudo to edit $1"
        # using a heredoc makes vim throw:
        # Vim: Warning: Input is not from a terminal
        # and vim takes a full 2 seconds to open
        sudo -i -u USERNAME bash << EOF
# two password prompts for USERNAME are displayed
# user's cached auth is not used
sudo visudo
EOF
        exit 0
    else
        echo "Using sudoedit to edit $1"
        # the temp file still belongs to root:
        # the -u argument does not do anything
        sudo -u USERNAME -e "$1"
        exit 0
    fi
fi
# default behavior
vim "$@"
  • 使用 heredocsudoedit以用户身份运行似乎在安全策略方面具有正确的效果,但从用户的角度来看我不喜欢这种行为
  • 以用户身份运行sudo -e实际上并不是以用户身份运行

我想到另一个选择是sudo在我的 .bashrc 中创建一个函数,以便在调用时sudo vim,正确的命令由正确的用户调用 - 请参阅这个答案中的最后一条建议。但是,我不确定包装sudo/改变其行为是否是个好主意。

有人能建议我该如何做我想做的事,或者我是否应该这样做吗?

相关内容