1、简介
sudo命令Linux系统管理指令,是允许系统管理员让普通用户执行一些或全部的root命令的一个工具。sudo命令提供了丰富的日志,详细记录了每个用户干了什么,并且使用时间戳来对用户通过了sudo执行认证的有效期进行限制。sudo命令相关信息存放在/etc/sudoers文件中,执行sudo命令的用户需提前将自己用户名及可执行命令等相关信息添加到该文件当中。sudo命令的执行无需知道超级管理员密码,因此部分系统甚至利用sudo来使得一般用户取代root作为管理账号使用。
2、sudo命令
命令语法:
sudo [options] COMMAND
常见options:
-l COMMAND :列出用户可执行或不可执行的命令信息;
-k:清楚此前缓存的用户成功认证的时间戳,默认缓存时间戳为5分钟;
3、visudo
sudo命令的配置文件为/etc/sudoers文件,里面记录了sudo用户的权限信息即分组信息。/etc/sudoers文件只能通过visudo命令进行编辑修改,为的是防止有多个用户同时修改此文件,并且进行相应的语法检查。默认情况下,visudoers是不会保存有语法错误的配置文件,但它会提示相应的错误,并询问如何处理。
执行visudo会自动打开/etc/sudoers文件,sudo用户授权语句的格式如下:
USERS LOCATION=(USERNAME|GROUP|Runas_alias) [NOPASSWD|PASSWD] COMMAND
USERS的字段可为:
username:授权用户名;
%groupname:授权用户组;
User_alias:授权的用户或组别名;
LOCATION可包括以下字段:
ip:规则匹配的IP地址;
hostname:规则匹配的主机名;
NetAddr:规则匹配的网段;
Host_alias:主机别名;
COMMAND则包括以下字段:
command:命令的绝对路径;
Cmnd_alias:命令的别名组;
[NOPASSWD|PASSWD]是指是否需要提供密码才能sudo运行命令。
另外visudo也可以定义相关的别名规则,其格式如下:
ALIAS_TYPE _Alias_NAME=item1,item2,item3...
ALIAS_TYPE的类型包括:
User_Alias:授权用户别名类型
Host_Alias:主机别名类型
Runas_Alias:作为哪些用户执行的别名类型
Cmnd_Alias:命令别名类型
而NAME定义的名称需为大写。
4、应用示列
使用visudo编辑/etc/visudoers文件:
[root@test ~]# visudo
#定义命令别名组1
Cmnd_Alias ADMINCOMMANDS1=/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd,!/usr/bin/passwd root
#定义命令别名组2
Cmnd_Alias ADMINCOMMANDS2=/usr/sbin/shutdown,/usr/sbin/reboot
#定义用户别名组
User_Alias ADMINUSERS=charlie,gentoo,magedu
#定义sudo命令授权规则
ADMINUSERS ALL=(root) NOPASSWD:ADMINCOMMANDS1,PASSWD:ADMINCOMMANDS2
:wq
#若文件无语法错误,则正常保存退出
测试sudo的授权:
[root@test ~]# su - charlie
[charlie@test ~]$ sudo -l
匹配此主机上 charlie 的默认条目:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2
QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME
LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 charlie 可以在该主机上运行以下命令:
(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd, !/usr/bin/passwd root, (root) PASSWD: /usr/sbin/shutdown, /usr/sbin/reboot
[charlie@test ~]$ sudo passwd root
对不起,用户 charlie 无权以 root 的身份在 test 上执行 /bin/passwd root。
[charlie@test ~]$ sudo passwd charlie
更改用户 charlie 的密码 。
[charlie@test ~]$ sudo shutdown -r now
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for charlie:
网友评论