sudo的用法

sudo的用法


Linux是一种多用户的操做系统,统一时间能够登陆多个用户进行操做,同时在LiNux之上用户又分为系统用户和普通用户,不一样的用户对系统(系统中的文件)拥有不一样的操做权限。linux

​ root拥有全部的操做权限,其余普通用户只有定义的操做权限,这里的定义是经过必定的管理机制来进行限定,若是普通用户想执行一些超越自身权限的命令式就必须以拥有该命令权限的用户身份或者切换到拥有对应权限的用户当中去执行。docker

用户身份切shell

  • su命令安全

    经过su命令能够切换到其余用户来进行一些操做,可是前提是咱们必须拥有所切换用户的口令信息bash

  • sudo命令ide

    假如咱们想让一个普通用户拥有一些只有root能够执行的命令,但又不能讲root的密码信息告诉别人,此时可使用sudo命令操作系统

    并不是全部的用户都可以运行sudo命令,这由sudo的配置文件/etc/sudoers来进行定义debug

    1. 语法格式日志

      sudo [-u USERNAME] COMMANDcode

      一般是普通用户以root身份来执行命令,sudo不加-u参数默认就是以root身份执行COMMAND

      所以,能够直接使用 sudo COMMAND

    2. 配置文件:/etc/sudoers

      配置sudo必须经过编辑/etc/sudoers文件,并且只有root才能够修改它,还必须使用visudo命令编辑。之因此使用visudo有两个缘由,一是它可以防止两个用户同时修改它;二是它也能进行有限的语法检查。

      visudo

      语法规则:

      ​ 帐号 登录者的来源主机名(可切换的身份) 能够经过sudo执行的命令

      例如:jacky ALL=(root) /usr/bin/passwd

      这表示从任何主机访问过来的本地用户jacky容许切换到root用户来执行/usr/bin/passwd命令

      exmaple2: jacky ALL=(root) ALL

      表示容许任意主机的本地用户jacky切换到root用户执行全部命令

      1. ALL表明全部,必须大写

      2. 若是后面是命令必须为绝对路径,多个命令用逗号隔开

      3. 前面的使用者帐号能够是一个组,这样表示:%GROUP_NAME,例如%dockeruser

      4. 若是在执行sudo的时候不须要输入密码,则能够在命令前面这样表示:

      NOPASSWD: COMMAND

      强制密码验证则使用

      PASSWD: COMMAND

      example:

      %wheel ALL=(ALL) NOPASSWD: ALL

      表示wheel组内的全部用户能够经过任何主机切换到任何用户,能够免密执行任何命令

      1. 若是能够同时切换多个用户如何表示:

      foobar linux=(jimmy,rene) /bin/kill

      主机名为linux上的用户 foobar能够切换到jimmy,rene这两个用户下,容许执行/bin/kill命令

      切换的的时候须要使用-u选项

      若是不想使用-u选项,能够设置默认切换用户,以下

      Defaults:foobar runas_default=jimmy

      1. 其余管理选项

      命令格式:sudo [options] COMMAND

       选项:

      -b:在后台执行指令;
      -h:显示帮助;
      -H:将HOME环境变量设为新身份的HOME环境变量;
      -k:结束密码的有效期限,也就是下次再执行sudo时便须要输入密码;。
      -l:列出目前用户可执行与没法执行的指令;
      -p:改变询问密码的提示符号;
      -s<shell>:执行指定的shell;
      -u<用户>:以指定的用户做为新的身份。若不加上此参数,则预设以root做为新的身份;
      -v:延长密码有效期限5分钟;
      -V :显示版本信息。

      日志与安全

      sudo为安全考虑得很周到,不只能够记录日志,还能在有必要时向系统管理员报告。可是,sudo的日志功能不是自动的,必须由管理员开启。这样来作:

      touch /var/log/sudo
      vi /etc/syslog.conf

      在syslog.conf最后面加一行(必须用tab分割开)并保存:

      local2.debug                    /var/log/sudo

      重启日志守候进程,

      ps aux grep syslogd

      把获得的syslogd进程的PID(输出的第二列是PID)填入下面:

      kill –HUP PID

      这样,sudo就能够写日志了:

      [foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg
      Desktop install.log
      install.log.syslog
      $cat /var/log/sudoJul 28 22:52:54 localhost sudo:   foobar :
      TTY=pts/1 ; pwd=/home/foobar ; USER=root ; command=/bin/ls /root

      不过,有一个小小的“缺陷”,sudo记录日志并非很忠实:

      [foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null
      cat /var/log/sudo...Jul 28 23:10:24 localhost sudo:   foobar : TTY=pts/1 ;
      PWD=/home/foobar ; USER=root ; COMMAND=/bin/cat /etc/shadow

      重定向没有被记录在案!为何?由于在命令运行以前,shell把重定向的工做作完了,sudo根本就没看到重定向。这也有个好处,下面的手段不会得逞:

      [foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 权限不够

      sudo 有本身的方式来保护安全。以root的身份执行sudo-V,查看一下sudo的设置。由于考虑到安全问题,一部分环境变量并无传递给sudo后面的命令,或者被检查后再传递的,好比:PATH,HOME,SHELL等。固然,你也能够经过sudoers来配置这些环境变量。

相关文章
相关标签/搜索