曾经在Ubuntu下经常都是使用sudo命令来执行一些高权限的操作,因为Ubuntu下默认是不开启root用户的,所以在执行一些必要的操作时就必须要使用sudo命令,但是今天突然发现当我在CentOS使用sudo命令执行时,却失败了,经过一番查看,终于找到原因,先总结如下:

在CentOS下当你要执行sudo 命令时,系统首先会查看/etc/sudoers中的记录,如果有当前用户的记录存在,那么系统就会响应当前普通用户的命令,即允许当前普通用户通过sudo来执行一些只有root才有权限执行的操作,如果没有,那么就会执行失败,如下

当我以普通用户sharp建立递归目录时系统给出提示,权限拒绝,于是我便使用sudo命令来执行,即使在我输入正确的root用户密码之后冷然提示错误。

[sharp@sharpshooter ~]$ mkdir -p /aaa/bbb/ccc
mkdir: cannot create directory `/aaa/bbb/ccc': Permission denied
[sharp@sharpshooter ~]$ sudo mkdir -p /aaa/bbb/ccc
Password:
Sorry, try again.
Password:
Sorry, try again.
Password:
解决方法很简单,就是编辑使用root用户编辑/etc/sudoers这个文件即可

首先我切换到root用户下,利用vim查看sudoers里面的内容如下:

[sharp@sharpshooter ~]$ visudo     #建议最好用visudo这个命令,为什么?你懂的。
## Networking
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database
Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

## Processes
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
Defaults    requiretty

Defaults    env_reset
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                        LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                        _XKB_CHARSET XAUTHORITY"

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL            =                        (ALL)                                  ALL
#账户   所登录的主机                     可以切换的用户                 可以执行的命令#

其他什么的都不需要我们看,只需要看我用红色标记出来的那一句即可,分别代表什么意思我大概也标出来了#-----#之间的就是,所以我就在里面添加如下一行即可

sharp    ALL            =                        (ALL)                                  ALL

#大概意思就是sharp这个用户,可以在任何地方登录主机,可以切换到任何的用户执行任何的命令,怎么样,够霸道吧,当然我这里只是在个人实验的机子上这样做而已。

这个时候我在执行如上命令的时候就正常了。

[sharp@sharpshooter ~]$ sudo mkdir -p /aaa/bbb/ccc
Password:     #注意这里你的密码还是输入sharp这个用户自己的密码,并不是root用户的密码
[sharp@sharpshooter ~]$
[sharp@sharpshooter ~]$ ll /aaa/bbb/
total 4
drwxr-xr-x 3 root root 4096 Sep  8 18:31 ccc
[sharp@sharpshooter ~]$