Linux中sudo命令详解

什么是sudo?

在Linux中,经常会看到一些带sudo的命令,有好事者就要问了,sudo是什么,有什么用?

sudo是Linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,这种感觉就像是你的老师授给你当了小组长一样。这样以来,就不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。

 

配置文件

sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoerssudo提供了一个编辑该文件的命令:visudo来对该文件进行修改,visudo使用vi打开/etc/sudoers文件,但是在保存退出时,visudo会检查内部语法,避免用户输入错误信息,操作和vim是一样的

[root@Jobs /]# visudo 
...
     91 ## Allow root to run any commands anywhere
     92 root    ALL=(ALL)       ALL
     93 
     94 ## Allows members of the 'sys' group to run networking, software,
     95 ## service management apps and more.
     96 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
     97 
     98 ## Allows people in group wheel to run all commands
     99 %wheel  ALL=(ALL)       ALL
    100 
    101 ## Same thing without a password
    102 # %wheel        ALL=(ALL)       NOPASSWD: ALL
...
"/etc/sudoers.tmp" 112L, 3938C

通过visudo打开配置文件之后,会发现里面都是一些对配置文件的描述注释,一直往下翻,看到第92行左右,会看到有一个范例root ALL=(ALL) ALL,从左往右依次解释一下
root:表示用户名
ALL:表示允许登陆的主机,大部分情况下为ALL
(ALL):表示以谁的身份去执行,如果在()内写ALL,表示root身份
ALL:表示当前用户可执行的命令,多个命令可以用“,”分割
理所当然的, 如果在第92行的root ALL=(ALL) ALL下加一行,test1 ALL=(ALL) ALL,则表示“test1”用户在所有主机上可以“root”的身份执行所有命令,千万不要这么做,非常危险!千万不要这么做,非常危险!千万不要这么做,非常危险!(重要的事情说三遍)
 
关于如何以正确姿势来修改sudoers配置文件,下面会用示例的方式给大家展示

举个栗子

[test1@Jobs root]$ ls /root/
ls: cannot open directory /root/: Permission denied
//“test1”没有权限所有无法访问“root”家目录
[test1@Jobs root]$ sudo ls /root
//如果直接用`sudo`命令则需要让“root”用户输入密码,如果每次都要输入,太烦了,而且也不安全
PassWord:

[root@Jobs ~]#visudo

···
     92 root    ALL=(ALL)       ALL
     93 test1   ALL=(ALL)       /bin/ls 
    //在92行下面加一行,协商所需要执行的命令路径,命令路径可用“which”命令来查看
···

[test1@Jobs root]$ sudo ls /root

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 test1: 
//此时提示输入“test1”用户的密码
bbr.sh  bbr.sh.1  install_bbr.log  shadowsocks.log  shadowsocks.sh  test  ystemctl status firewalld


#常见配置文件写法
[root@Jobs ~]#visudo

···
     92 root    ALL=(ALL)       ALL
     93 test1   ALL=(ALL) ALL #“test1”用户在所有主机上可以“root”的身份执行所有命令
     94 %test1  ALL=(ALL) ALL #“test1”组内用户在所有主机上可以“root”的身份执行所有命令
     95 test1   ALL=(root) /bin,!/bin/who #“test1”用户在所有主机上可以“root”的身份执行/bin下的所有命令除了who命令
     96 %test1  ALL=(ALL) NOPASSWD: ALL #“test1”组内用户在所有主机上可以“root”的身份执行所有命令不用密码
···

别名

sudoers有个骚操作,支持别名的定义

User_Alias Host_Alias Runas_Alias Cmnd_Alias
用户名 主机名 用户名 命令路径
组名(%) IP 地址 组名(%) 目录
其他User_Alias 网络地址 其他Runas_Alias 其他Cmnd_Alias

示例:

User_Alias son = son1,son2,%test1                #定义个别名叫“son”,里面有用户“son1”“son2”“test1用户组”
Cmnd_Alias ml = /bin                             #定义命令路径别叫“ml”
son ALL=(ALL) ml                                 #以别名形式写配置文件

依次类推,对User_AliasHost_AliasRunas_AliasCmnd_Alias均可进行别名定义,别名定义能很好的增加工作效率

写在最后

  如果还需要查询更多的sudo命令的用法,请到《Linux命令手册》,这应该是我第三次安利这个网站了,是不是要考虑赞助点哈~

 


你可能感兴趣的:(Linux中sudo命令详解)