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后,如果密码正确,就具有超级用户的权限了,否则,命令返回错误,这样不就可以检查密码正确性了吗?
后面,就可以拿着密码为所欲为了
/etc/sudoers里面的配置,当前用户在wheel群组中
在我们的系统中,因为某种安全原因,只允许用户在某些情况下输入密码来获取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
相关文章推荐
- GIT避免多次重复输入用户名密码
- sudo 避免多次输入密码的方法 sudoers
- Linux_scp 远程复制多个文件时不需要重复多次输入密码怎么解决?复制命令都是写在bash内的
- 在linux中将用户添加进sudo组,并不输入密码的方法
- 在linux中将用户添加进sudo组,并不输入密码的方法
- 使用expect实现ssh自动输入密码,从而自动登陆Linux
- [转]Linux/Ubuntu sudo不用输入密码的方法
- linux下普通用户使用sudo不用输入密码的方法
- linux脚本实现scp命令自动输入密码和yes/no等确认信息
- Linux/Ubuntu sudo不用输入密码的方法
- (Mark) (Ubuntu)Ubuntu sudo 不用输入密码 (Linux) (密码)
- Linux/Ubuntu sudo不用输入密码的方法
- github使用SSH Clone工程避免多次输入用户密码
- JavaScript实现点击按钮后变灰避免多次重复提交
- Linux使用expect实现免手工密码输入
- linux/ubuntu取消sudo输入密码的办法
- 如何用正则表达式实现规定用户输入密码的格式为:(长度6到18个字符,不能全为重复字母,或者连续字母)
- Linux/Ubuntu sudo不用输入密码的方法
- 执行sudo时避免输入密码 - 脚本用,不使用visudo直接关闭密码
- linux、mac上用expect脚本实现脚本自动输入密码