为什么会有sudo的出现

为什么会有sudo的出现呢?在linux起初,是没有这个命令,后来才把这个命令添加进去,而且现在基本上每个版本都会默认安装sudo.
原因呢?不是本来就有su命令吗,su也可以切换用户,包括切换到root用户,为什么还要引入sudo?答案就是安全。很简单,用su切换到root,需要输入root密码。同样,切换到其他用户,也需要输入密码。但是,用sudo来执行命令,包括一些root权限的命令,一样要输入密码,但是这个密码是该用户自己本身的密码,而不是其他或者root密码。
linux是一个多用户多任务操作系统,一个系统上如果多个用户都知道root账号密码,系统是非常危险;而且修改root密码后,要通知给多个人,也很麻烦。这个问题用sudo就可以轻松解决了。
如果想用其他账户来执行命令,便使用:

  1. sudo -u [username] [命令] -[命令参数]

其中输入的密码是该用户的密码,不是要转换的用户的密码.
sudo执行过程:

  1. 1.首先sudo会在/etc/sudoers文件中寻找执行该命令的用户是否在文件中;
  2. 2.如果在文件用,需要用户输入密码来进行验证;
  3. 3.如果验证通过,再执行sudo 后面的命令

从过程中知道,/etc/sudoers这个文件在执行命令的过程中起着关键作用。下面来看一下我电脑上的该文件的配置。
可以用命令visudo来修改sudo的配置文件,执行权限必须为root,也可以直接用vim /etc/sudoers编辑,效果是一样的。
下面是/etc/sudoers文件的部分内容:

  1. huang ALL=(ALL) NOPASSWD: ALL

  2. 用户账号 登录主机 = (可以变换的身份) 可以执行的命令

上面一行的解释就是:用户huang 可以在任何地方,任何主机上的用户名不用输入密码来执行任何命令.
如果账户huang想用用户test来执行命令,那么应该写成:

  1. huang ALL = (test) NOPASSWD:ALL

如果错写成:

  1. huang ALL = ALL

则默认的是仅能进行root身份切换,执行任何命令。
如果是某个用户组的话,需要在用户组前加上一个'%':

  1. %wheel ALL = (ALL) ALL

如果不想输入密码:

  1. %wheel ALL = (ALL) NOPASSWD:ALL

下面的例子摘自《鸟哥的私房菜--基础篇》

  1. User_Alias ADMPW = vbird, dmtsai, vbird1, vbird3
  2. ADMPW ALL = NOPASSWD: !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*,\
  3.                       !/usr/bin/passwd root

解释:系统上有四个账号:vbird,dmtsai,vbird1,vbird3,四账号加入到sudo内的ADMPW组中, 这四个账户可以使用/usr/bin/passwd * 来修改密码,但是不能使用/usr/bin/passwd 和 /usr/bin/passwd root,因此,这四个用户可以修改用户密码,但是修改root密码.

  1. User_Alias DNSMASTER = vbird, dmstai
  2. Cmnd_Alias DNSCMD = /etc/init.d/named, /usr/bin/vim /var/named/*
  3. DNSMASTER ALL = DNSCMD
posted @ 2011-09-22 22:24  上官惜玉  阅读(923)  评论(0)    收藏  举报