您的位置:首页 > 运维架构 > Linux

Linux避免多次sudo时重复输入密码的另一种实现

2014-02-07 14:40 387 查看
之所以称为”另一种实现”是因为在网络上搜索类似的标题时,几乎所有的建议都是去修改/etc/sudoers这个文件,加上NOPASSWORD这个参数来搞定。

在我们的系统中,因为某种安全原因,只允许用户在某些情况下输入密码来获取root权限,但不能总有超级用户的权限。可是总让用户频繁输入密码确实很难受(作为一个有良心的程序员,还是希望自己的用户不要太辛苦

),怎么办呢?又找了一下sudo的男人(man)发现线索...

-S The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device.

sudo接受从标准输入传入的参数,这样我们就可以让用户输入一次密码,保存下来,然后每次sudo的时候将密码通过标准输入传过去就可以了,像这样:

echo 密码 | sudo -S 其它参数

但是,怎么保证用户输入的密码是正确的呢?虽然我们知道用户的密码保存在/etc/shadow里面,但是首先这个文件的权限是400,只有root可读,其它用户无法访问,其次,即使能够读到密码,里面也是加密的,如何比对加密后的字符串可能又是一篇很长的文章。

于是,取了个巧:用户执行sudo后,如果密码正确,就具有超级用户的权限了,否则,命令返回错误,这样不就可以检查密码正确性了吗?

ADMPW=""
while true
do
read -esp "Please input the password: " ADMPW

echo $ADMPW | sudo -S bash -c 'cat /etc/shadow' 1>/dev/null 2>&1
if [ $? -ne 0 ]; then
echo
echo "Wrong password, try again"
sleep 1
else
break
fi
done


后面,就可以拿着密码为所欲为了
echo $ADMPW | sudo -S bash -c 'do whatever you want’


/etc/sudoers里面的配置,当前用户在wheel群组中

# Uncomment to allow people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: