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

之所以称为”另一种实现”是因为在网络上搜索类似的标题时,几乎所有的建议都是去修改/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



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值