如何从非root用户将文件添加到/etc/sudoers.d/?

如何从非root用户将文件添加到/etc/sudoers.d/?

我正在尝试为 Centos 6.8 编写一个脚本,其中用户不是 root。现场没有管理员,因此需要通过同一脚本将脚本添加到 sudoers(通过将文件添加到 /etc/sudoers.d)。

看起来脚本应该提示用户输入 root 密码,对吧?如果不是,那么解决这个问题的约定是什么(除了当用户从 root 运行时将第二个脚本添加到 sudoers 中)?

我尝试过类似的事情:

echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo

和这个:

ALL=NOPASSWD:/usr/bin/rsync" | (sudo su -c 'EDITOR="tee" visudo -f /etc/sudoers.d/rsync')

按照建议这里,但这些只是给出继续提示。

我的基本问题是如何提示输入密码并使用它来授予用户运行脚本的权限。

另一种选择是以 root 身份运行脚本,但我想看看是否可以这样做。

答案1

如果您只是想提示输入密码来提升权限,则添加

sudo -v

在此之前的行中。该脚本将停止,询问密码,并在输入可接受的密码后继续,或者如果密码检查失败则退出。

有效地:

#!/bin/bash

# Initiate sudo session
sudo -v
# Execute command; sudo session for tee is already active.
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo

如果这是一个长时间运行的脚本,请考虑将其设为早期运行的函数:

sudo -v
while true;
do
    sudo -n true
    sleep 60
    kill -0 "$$" || exit
done 2>/dev/null &

您的脚本将如下所示:

#!/bin/bash

sudoChk () {
    sudo -v
    while true;
    do
        sudo -n true
        sleep 60
        kill -0 "$$" || exit
    done 2>/dev/null &
}

sudoChk
#...long running commands...
echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo
exit 0

您可能还在寻找:

sudo sh -c

代替

sudo su -c

相关内容