正常情况下,在使用sudo命令时,系统是要求输入密码的。输入的密码会保存一小段时间,在这段时间内,sudo不再要求输入密码,之后,再使用sudo,系统仍会要求输入密码,但是在制作镜像过程中,我们可能会在系统自启动项启动很多服务,而且可能有些服务必须使用sudo才能实现,所以实现sudo的无密码也是非常有必要的。
如果希望实现该操作,只需要修改系统的一个文件即可/etc/sudoers
1、查看/etc/sudoers文件权限
sm@ubuntu:~$ ll /etc/sudoers -r--r----- 1 root root 745 Feb 11 2014 /etc/sudoers
2、保险起见,复制一个备份文件
sm@ubuntu:~$ sudo cp /etc/sudoers /etc/sudoers_bak [sudo] password for sm: no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory
3、由于该文件为只读文件,使用nano编辑器修改
sm@ubuntu:~$ sudo nano /etc/sudoers
在有效的最后一行,我们需要修改以下内容
# Allow members of group sudo to execute any command # 原始为:%sudo ALL=(ALL:ALL) ALL # 修改为: %sudo ALL=(ALL:ALL) NOPASSWD:ALL
注意:添加一个NOPASSWD关键字,并添加一个英文的“:”。
然后使用Ctrl+O保存,再按Ctrl+X退出即可。
注意:如果在云环境下,用户特别注重安全起见,该操作要慎用!
我在实际操作过程中就是缺少了一个英文的“:”,导致修改再使用sudo命令,报如下错误
sm@ubuntu:/etc$ sudo rm sudoers >>> /etc/sudoers: syntax error near line 26 <<< sudo: parse error in /etc/sudoers near line 26 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin sm@ubuntu:/etc$ sudo vi sudoers >>> /etc/sudoers: syntax error near line 26 <<< sudo: parse error in /etc/sudoers near line 26 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin sm@ubuntu:/etc$ sm@ubuntu:/etc$ sudo passwd >>> /etc/sudoers: syntax error near line 26 <<< sudo: parse error in /etc/sudoers near line 26 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
这是由于sudoers文件已经破坏,而且不能生效,
重启电脑,在进入Grub选择界面后,选中 带有“recovery mode”字样的一行(一般是第二行),然后就会进入recovery模式界面
使用上下键选择root条目,这样就可以得到root权限。
然后,按如下操作即可:
1、查看df
sm@ubuntu:~$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 101016992 2652844 93209744 3% / none 4 0 4 0% /sys/fs/cgroup udev 1010544 4 1010540 1% /dev tmpfs 204272 1180 203092 1% /run none 5120 0 5120 0% /run/lock none 1021348 0 1021348 0% /run/shm none 102400 0 102400 0% /run/user2、把根目录重新mount为可读写模式
# mount -o remount,rw /dev/sda1 /3、增加可写权限
# chmod u+w /etc/sudoers4、修复出错位置
# vi /etc/sudoers5、恢复原有权限
# chmod u-w /etc/sudoers6、重启操作系统
# reboot