查看了man sudo,也在网上找了些资料。但是感觉说的还是不够全或是准确,不能解答自己所有的疑问。
自己结合这些资料,亲自动手实验后总结了如下心得。
Sudo的作用,资料太多了,就不详细说了。简单地说,主要作用就是有root权限的admin可以不告诉普通用户root的密码,而能让该用户使用root权限执行部分或者所有的命令或是操作。怎么做到这点呢?就是在/etc/sudoers中设置普通用户或是组的权限。
设置权限的基本规则如下:
授权用户 主机=命令动作
这三个要素缺一不可,但在动作之前也可以指定切换到特定用户下,在这里指定切换的用户要用()号括起来,如果不需要密码直接运行命令的,应该加NOPASSWD:参数,但这些可以省略
授权用户主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)][是否需要密码验证][命令2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3]......
注解:
凡是[]中的内容,是可以省略;命令与命令之间用,号分隔;通过本文的例子,可以对照着看哪些是省略了,哪些地方需要有空格。
在[(切换到哪些用户或用户组)],如果省略,则默认为root用户;如果是ALL,则代表能切换到所有用户。如果是否需要密码验证条件省略,则默认为需要输入验证密码;如果为NOPASSWD,则不用输入密码。
上述公式成立的条件是每个命令至少要包含一个要切换到的用户(组)或是是不需要验证密码;否则的话,如果要切换的用户和是否需要密码验证都省略的话,该命令就会follow它之前的一个命令的这些条件(切换的用户和是否需要密码验证)
如:
debian ALL=(debian)/bin/cat,/bin/more,(root)NOPASSWD: /usr/bin/vi
/bin/more的授权结果就是:(debian)/bin/more,follow它前面的/bin/cat的条件。
我们设置完/etc/sudoers之后,可以切换到你想要的用户下去查看该该用户能用sudo跑的命令的详细信息。
如上配置,切换到debian用户下,可以用 sudo-l查看到如下结果:
Userdebian may run the folowing commands on this host:
(debian)/bin/cat, (debian) /bin/more, (root) NOPASSWD: /usr/bin/vi
所以说,sudo -l真是一个好命令啊。如果你改完/etc/sudoer后不确定的话,就可以用sudo -l查看下授权之后的详细结果。呵呵
Sudo选项
-u<用户> 以指定的用户作为新的身份。若不加上此参数,则默认以root作为新的身份。
-v 延长密码有效期限5分钟。
如果用户使用sudo时,必须先输入密码,那么输入密码之后有5分钟的有效期限,超过期限则必须重新输入密码。也就是说在这5分钟之内,即使是sudo执行需要输入密码的命令也不用再输入密码了。但是如果在这五分钟之内你重新开一个terminal执行sudo命令的话,那还是需要重新输入密码的(如果需要密码)。