正常情况下,在使用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/user
2、把根目录重新mount为可读写模式
# mount -o remount,rw /dev/sda1 /
3、增加可写权限
# chmod u+w /etc/sudoers
4、修复出错位置
# vi /etc/sudoers
5、恢复原有权限
# chmod u-w /etc/sudoers
6、重启操作系统
# reboot