sudo详解

  假设有这样一种情况,有50台服务器需要管理。但管理员的精力有限,随后找了两个助手,希望其中一个人管理50台服务器的网络设定,另外一个人管理50台服务器的用户。分工如下:

  50台服务器:

    网络:定义网络属性(实现启动网卡、关闭网卡、为网卡配置IP地址等功能);创建Tom用户实现网络管理。

    用户:实现用户管理(删除用户、创建用户、修改用户信息等);创建Jerry用户实现用户管理。

  

  对于Linux系统而言,只有root用户才能实现上述两个功能;那么如何能够让用户以管理员的身份去执行者两个操作呢?只能通过给出管理员的账号密码来实现。而对于Tom用户而言,给出root密码后,不仅可以定义网络属性,还能做别的操作;一旦给出root密码之后,它所能做的操作远不止我们期望它所能做的工作。所以为了完成上述功能,又能保证在某些时刻发生错误之后能够追踪问题的执行者,Linux引入了sudo机制。

su(switch user)

sudo(sudo COMMAND,切换用户,来执行某种命令的操作):用来定义某个用户能够以另外一个用户的身份通过哪些主机执行某命令

  一个用户能够以另外一个用户的身份执行某条命令,但它并不需要切换到那个用户的身份去执行,只不过在执行这条命令的那一刻,他拥有那个对应用户的权限,这种机制有点类似于suid(在执行那个命令的时候用的是文件属主的身份)。

扫描二维码关注公众号,回复: 5490402 查看本文章

  使用sudo的用户能够使用的命令仅仅是通过配置文件定义给它的命令。而为了避免其它人冒充身份执行管理命令,要求执行命令时需要输入用户密码。

sudo的配置文件:/etc/sudoers

  每一行定义了一个sudo条目

  who(哪个用户) which_hosts(哪些主机)=(runas(以谁的身份)) TAG:COMMAND(命令)

   TAG:

    NOPASSWD(表示用户使用sudo时可以不用输入命令)

    PASSWD(需要输入密码)

   

   对于多个用户定义可以使用相同的身份执行多条相同的命令(如:对3个用户定义可以以root用户的身份执行useradd,userdel,passwd等命令),便捷方式应使用别名(类似)的方式

    who:User_Alias

    which:Host_Alias

    runas:Runas_Alias

    command:Cmnd_Alias

  别名:(别名的定义遵循EBEF原则,EBEF是一种描述性的语言,这种描述性的语言可以定义一个宏,定义方法通常是::=,也可以简单的进行=)

    举例:

    别名必须全部而且只能使用大写英文字母组合。

    用户别名:

      User_Alias USERADMIN = 

        用户的用户名

        组名,使用%引导

        还可以包含其它已经定义的用户别名(嵌套别名)  

    主机别名:

      Host_Alias

        主机名

        IP

        网络地址

        其它主机别名

    运行身份别名:

      Runas_Alias

        用户名

        %组名

        其它的Runas别名

    命令别名:

      Cmnd_Alias

        命令路径(一般而言是可执行文件的路径)

        目录(表示此目录下的所有命令都包含进来了)

        其它事先定义过的命令别名

visudo:专门用来编辑/etc/sudoers的命令,这个命令本身可以检查/etc/sudoers文件语法的正确性。

  举例:定义hadoop用户能够以root用户的身份执行useradd和usermod命令

    未使用别名的方式:

    使用别名的方式:

  

  使用sudo命令在第一次认证通过之后会将密码(认证信息)记录下来并让其有效期为5分钟。而 sudo -k COMMMAND 则会让此前的认证信息失效并重新进行验证。

sudo命令:  

  sudo
      -l    #列出当前用户(可以使用的所有sudo类命令)可以以哪个用户的身份运行哪个命令
      -k    #让认证信息失效
      -c    #

使用sudo命令的操作信息会被记录到/var/log/secure文件中

猜你喜欢

转载自www.cnblogs.com/long-cnblogs/p/10497511.html