使用sudo来赋予普通用户root的权限

时间:2022-04-08 09:31:29

 常规来说,root的权限是不可随意分割的,所以很难既给某个用户完成一件任务的权力,比如说备份,而又不给这个人*运行系统的权力。如果把root给多个人去使用,显然是个不安全的做法。

    针对这个问题,现在广泛的采用SUDO的方式来解决。

    所谓的SUDO就是以普通用户的身份登录到系统,当需要完成某项任务时(假设此任务普通用户无权使用),在管理员root的授权下来完成。呵呵,对了,有点像WINDOWS中的委派。一旦用户得到授权后就可以去做原本自己不能做的事情,从而帮助管理员管理,减轻管理员的负担。

    执行sudo时,它会读取文件/etc/soduers,这个文件列出了授权使用sudo的人以及他们在每台主机上可以运行的命令。如果提供给sudo的命令允许运行,那么sudo就提示输入这个用户自己的口令并执行命令。在随后的5分钟内,再次使用sudo则不需输入口令。sudo没有定义好的日志文件,所以如果你要使用sudo的日志,你还得自己去配置一下。至于怎么去配咱们以后讨论。

如果你要配置sudo,建议你使用visudo来配置/etc/sudoers文件,(注意:如果你使用vim来编辑这个文件,必须在root用户下)它会检查是否有人在同时编辑修改此文件。以下是一个例子:

## Next comes the main part: which users can run what software on

## which machines (the sudoers file can be shared between multiple

## systems).

## Syntax:

##

##  user    MACHINE=COMMANDS

##

## The COMMANDS section may have other options added to it.

##

## Allow root to run any commands anywhere

#add the user ken have the root权限,并且使用的时候不需要passwd;

Ken  ALL=(ALL)NOPASSWD: ALL

root    ALL=(ALL)   ALL

 

## Allows members of the 'sys' group to run networking, software,

## service management apps and more.

# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

 

## Allows people in group wheel to run all commands

# %wheel    ALL=(ALL)   ALL

  

  上面第一部分是用来定义主机的,如果不定义那么你就得在第三部分手动写入。第二部分是用来定义服务的,如果不定义那么你就得在第三部分手动写入。建议你使用这种别名的方式来定义你的操作,这样sudoers的可读性更强。

    第三部分是关于权限的定义,也就是说谁可以用sudo干什么事情。其中格式如下:

  适用的用户  要注意的主机=(转换成谁的身份)可以使用什么命令

  如果没有定义括号中的内容,则表示只以root身份执行相应操作。!表示除什么以外
   
  当普通用户,例如tom,登录到系统要执行本来没有权限执行的操作时,他可以键入如下命令: 

    sudo su –

   然后键入自己的密码就可以了。
   

 

Alias主要分成4
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias

1) 配置Host_Alias:就是主机的列表
Host_Alias      HOST_FLAG = hostname1, hostname2, hostname3
2)
配置Cmnd_Alias:就是允许执行的命令的列表
Cmnd_Alias      COMMAND_FLAG = command1, command2, command3
3)
配置User_Alias:就是具有sudo权限的用户的列表
User_Alias USER_FLAG = user1, user2, user3
4)
配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
5)
配置权限
配置权限的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密码验证的话,则按照这样的格式来配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG


   
   
使用sudo的好处
    1
由于有日志可以提高安全审计的能力
    2
操作员不需要不受限制的root特权就能完成许多任务
    3
保证root密码的安全
    4
比使用su
    5
不需要改变root密码就能收回某些权限
    6
只需维护sudoers就可维护所以用户的特权列表
    7
降低遗留root shell的概率
    8
可以使用单个文件来控制对整个网络的访问权限
       
当然也有不足,比如说如果突破了能执行sudo命令的个人账户,就等同突破了root账户本身。但是确实有些应用需要root权限,譬如在嵌入式开发中制作目标文件系统的过程中,文件系统中的所有文件的usergroup都设置为root,但是用户的文件在cp的时候就会提示没有权限的问题,这样普通用户就需要需要有root这个权限,如果我们采用sudo的方式就解决这个问题,特别是使用sh script的时候就更灵活和方便了。