sudo命令详细介绍

下面来为大家介绍sudo命令,首先,这个命令什么用呢,在正常的工作中,我们可是没有那么容易就获得root权限的(因为root权限太大了,很容易误操作引发大问题)。但有时我们在删除或者执行其他一些操作的时候权限不够怎么办呢??这时我们就需要用到sudo了,这个命令就是在执行一个操作的时候临时拥有root权限。
当然这个sudo的擦欧洲哦是root给你的权限,给你多大权限你能干多大事。今天就来主要说一sudo如何配置。

在做这个命令的实验之前我们先创建一个普通用户ming

[root@centos6 ~]# useradd ming

su命令
然后来说一下这个命令,su我们都知道,切换用户,如从root切换到ming用户就可以用哪个su

[root@centos6 ~]# su - ming
[ming@centos6 ~]$ 

因为我们是root,所以在切换过去的时候没输密码,还可以指定-c选项,用切换的用户执行一条命令后再回到当前用户,实现效果就是这样

[root@centos6 ~]# su - ming -c "whoami"
ming
[root@centos6 ~]# 

好了好了,该说sudo了(我都迫不及待了)
在上面就说过sudo是以root身份来执行一些操作,当然也可以以其他身份来执行操作(root权限最大,以其他用户身份执行什么操作呢?),正常来说sudo都是借用root身份来执行,看下面我以普通用户身份来执行一个操作

[ming@centos6 ~]$ useradd liang
-bash: /usr/sbin/useradd: Permission denied

sudo配置
看看,权限不够,很明显,普通用户怎么能创建用户呢??但如果这个用户是人力资源管理的人呢?这时候就需要他有创建用户的权限,怎么做呢?
当然是改配置文件啦(这种zz问题)
配置文件就是/etc/sudoers, /etc/sudoers.d/ (目录,后面介绍)这两个,为啥会有两个?因为/etc/sudoers是主配置文件,/etc/sudoers.d是为了让用户来自定义配置的。我们就在主配置文件中操作啦。看一下

[root@centos6 ~]# vim /etc/sudoers

(内容太多,不列出来来啦,自己去看)
我们可以看到这个文件是只读的,虽然可以强制保存退出,但是还是很痛苦,哪错了我们也不知道,所以这里就有一个方法啦,就是用visudo来编辑配置文件,很好用的一个命令,不近可以使语法高亮显示,还能在你写错的时候提醒你,怎么搞呢
编辑/etc/profile.d下的一个.sh文件或者~/.bash_profile文件,也就是让它永久生效啦

[root@centos6 ~]# vim ~/.bash_profile
    export EDITOR=vim     #在最后添加这一行
[root@centos6 ~]# source ~/.bash_profile  #使其生效   

之后我们再打visudo就能直接编辑配置文件了,来实现我们的目的,让ming能创建用户

在配置文件中写(如果进入看了就可以知道大概语法)

root    ALL=(ALL)       ALL

能看到其中一行是如上所示,我来解释一下
用户 登入主机=(代表用户) 命令
那么我们要实现目的就照着这样写一行就行了

 ming    ALL=(ALL)       /usr/sbin/useradd

这样就行了,要注意的是我们的要执行的命令是要写绝对路径的,可以通过which 来查询一个命令的绝对路径

我们保存退出去试试

[root@centos6 ~]# su - ming
[ming@centos6 ~]$ sudo useradd liang
[sudo] password for ming: 

在这里要输的是ming的登录密码,先回到root下给他个密码再回来试试

[root@centos6 ~]# passwd ming
[root@centos6 ~]# su - ming
[ming@centos6 ~]$ sudo useradd liang
[sudo] password for ming: 
[ming@centos6 ~]$ id liang
uid=502(liang) gid=502(liang) groups=502(liang)

这下就可以了吧!!!
我要说的是在这里我们给的这个sudo命令没什么bug,但是如果我们需要某个用户有更改其他人密码的权限,就要小心给了,因为如果他把root密码给改了,那么他就谋权篡位了,这是不允许的,所以配置策略一定要写完美,给予sudo权限时要把所有情况想过来一个遍,然后再写策略。

命令那里,也就是/usr/sbin/useradd这里是支持文件名通配符的(glob),也就是支持这些
* 匹配0或多个任意字符
? 匹配任意1个字符
[0-9]表示数字
[a-z] 表示aAbBcC……z
[A-Z] 表示AbBcC……Z
[a-Z] 表示所有大小写字母
[ae] 表示是a或e的单一字符
[^ae] 表示即不是a也不是e的其他任意单一字符
[:lower:] 表示小写字母
[:upper:] 表示大写字母
[:alpha:] 表示大小写字母
[:digit:] 表示任意数字 等于0-9
[:alnum:] 表示任意字母及数字 等于a-Z0-9或[[:digit:][:alpha:]]
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符 文件名不可能包含回车,故此处使用与[:blank:]:效果相同
[:punct:]: 表示符号

/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd ?*

也就是可以像这样写,当然我这样写是不完善的,因为bug很大,大家可以看一看又是什么bug会威胁到上帝的身份。
在文件中有这么一行

%wheel  ALL=(ALL)       ALL

这一行指的是组wheel,也就是在这个组中的用户拥有跟root一样的权限。感觉这个组里的人应该是公司的BOSS,当然我们也可以照着这个写一个组,给予我们自定的权限

接下来说一下那个自定义的目录/etc/sudoers.d/我们可以直接用visudo -f命令创建一个文件,在这个文件中写跟我们上面授权样式一样的东西,跟写在主配置文件中效果一样一样的

[root@centos6 ~]# visudo -f /etc/sudoers.d/ming
 ming    ALL=(ALL)       /usr/sbin/useradd

到这里sudo的配置就说的差不多了,下面介绍一下sudo命令的常用选项
sudo [-u user] COMMAND
-u 就是制定用户啦,以指定用户的身份来执行COMMAND,默认不指定就是root
-k 清除时间戳(1970-01-01),下次需要重新输密码 。上面我们sudo第一次时需要密码,第二次就不需要了,-k的用法不用多说了吧
其实我感觉sudo的主要用法就是它的配置,这些个选项用到的并不是很多。

猜你喜欢

转载自blog.csdn.net/professorman/article/details/82431005