现在的位置: 首页 > 操作系统 > 正文

Linux中sudo是什么?有什么特性

2020年02月14日 操作系统 ⁄ 共 4593字 ⁄ 字号 评论关闭

  如果有两个用户,一个是用来管理网络属性,一个是用对用户进行管理,这就意味着这两个用户需要root的权限,那么这就超过他们需要的权限了,这就引入了sudo。

  什么是sudo?

  Sudo是可以让某个用户不需要拥有管理员的账号密码,可以执行管理员的权限的。

  作为管理员可以指派某些用户可以执行某些特定命令,类似与suid (不需要切换到某些用户下,但是可以执行这些用户的命令,不仅如此这些买了还是指定给他们的命令,超出这些命令的执行都不会成功)。

  所以sudo就是某用户能够以另外一个用户的身份通过那些主机执行哪些命令。sudo为了怕别人冒充,在使用的过程当中需要输入该用户的密码。

  它的特性主要有这样几点:

  § Sudo能够限制用户只在某台主机上运行某些命令。

  § Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。

  § Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。

  § Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性为0440(为了避免其他用户去查看该文件)。

  [root@localhost ~]# ll /etc/sudoers --只有root用户和属于root组的用户才有查看的权限。

  -r--r-----. 1 root root 3938 Jun 7 2017 /etc/sudoers

  [test@localhost ~]$ cat /etc/sudoers

  cat: /etc/sudoers: Permission denied

  visudo

  编辑命令visudo(这个命令是用来编辑sudo配置文件的,可以检查语法准确性,不要使用vim sudoers,使用这种方式是不会检查语法错误的)。

  sudo的语法和别名

  配置文件里面每一行都是一个sudo条目(语法格式 who which_hosts=(runas)) command)

  意思就是谁可以以谁的身份,可以从哪些主机连接进来,运行什么命令。

  ## Allow root to run any commands anywhere

  root ALL=(ALL) ALL

  管理员可以一任意人的身份,在任意主机上执行任意命令。

  下面这些信息可以使用[root@localhost ~]# man sudoers --来查看sudoers文档。

  sudo支持用户别名,使用man sudoers可以查看(who which_hosts=(runas)) command)。

  以下英文信息都是man手册里面的:

  Aliases

  There are four kinds of aliases: User_Alias, Runas_Alias, Host_Alias and Cmnd_Alias.

  Alias ::= 'User_Alias' User_Alias (':' User_Alias)* | --相当于who

  'Runas_Alias' Runas_Alias (':' Runas_Alias)* | --相当于 runas

  'Host_Alias' Host_Alias (':' Host_Alias)* | --相当于which_hosts

  'Cmnd_Alias' Cmnd_Alias (':' Cmnd_Alias)* --相当于command

  User_Alias ::= NAME '=' User_List

  Runas_Alias ::= NAME '=' Runas_List

  Host_Alias ::= NAME '=' Host_List

  Cmnd_Alias ::= NAME '=' Cmnd_List

  下面是别名使用例子(注意在使用别名的时候都要使用大写的字符,并且是全英文的)。

  EXAMPLES

  Below are example sudoers file entries. Admittedly, some of these are a bit contrived. First, we allow a few envi?

  ronment variables to pass and then define our aliases:

  # Run X applications through sudo; HOME is used to find the

  # .Xauthority file. Note that other programs use HOME to find

  # configuration files and this may lead to privilege escalation!

  Defaults env_keep += "DISPLAY HOME"

  # User alias specification --用户别名可以包含用户的用户名,组名(如果使用组名,那么组里面所有成员都被包含,组名使用%引导),还可以包含其他用户别名(意思就是别名可以嵌套别名)

  User_Alias FULLTIMERS = millert, mikef, dowdy -表示FULLTIMERS别名包含了millert, mikef, dowdy这三个用户

  User_Alias PARTTIMERS = bostley, jwfox, crawl

  User_Alias WEBMASTERS = will, wendy, wim

  # Runas alias specification -以另外哪个用户身份执行命令,可以包含用户名,也可以包含%组名,或者是其他的runas别名

  Runas_Alias OP = root, operator

  Runas_Alias DB = oracle, sybase

  Runas_Alias ADMINGRP = adm, oper

  # Host alias specification --可以包含主机名,IP,网络地址,其他主机别名

  Host_Alias SPARC = bigtime, eclipse, moet, anchor :\

  SGI = grolsch, dandelion, black :\

  ALPHA = widget, thalamus, foobar :\

  HPPA = boa, nag, python

  Host_Alias CUNETS = 128.138.0.0/255.255.0.0

  Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0

  Host_Alias SERVERS = master, mail, www, ns

  Host_Alias CDROM = orion, perseus, hercules

  # Cmnd alias specification --注意,这里的命令最好使用绝对路径。如果使用的是目录,那么代表该目录下面所有的命令都包含进去了。或者使用命令别名。

  Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\

  /usr/sbin/restore, /usr/sbin/rrestore,\

  sha224:0GomF8mNN3wlDt1HD9XldjJ3SNgpFdbjO1+NsQ== \

  /home/operator/bin/start_backups

  Cmnd_Alias KILL = /usr/bin/kill

  Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm

  Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown

  Cmnd_Alias HALT = /usr/sbin/halt

  Cmnd_Alias REBOOT = /usr/sbin/reboot

  Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh,\

  /usr/local/bin/tcsh, /usr/bin/rsh,\

  /usr/local/bin/zsh

  Cmnd_Alias SU = /usr/bin/su

  Cmnd_Alias PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less

  最后注意别名必须先定义,再去使用,而且只能使用大写的英文字母。

  sudo具体用法举例

  定义hadoop用户可以以root身份执行useradd,usermod两个命令。

  [root@localhost ~]# useradd hadoop

  [root@localhost ~]# su - hadoop

  [hadoop@localhost ~]$ useradd

  -bash: /usr/sbin/useradd: Permission denied

  [hadoop@localhost ~]$ sudo useradd

  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 hadoop:

  hadoop is not in the sudoers file. This incident will be reported. --在dudo文件里面还没有定义所以执行不了,所以百八十sduo这个命令想随便使用就可以随便使用。

  ALL是一个通配符,代表所有主机,即代表所有,可以代表所以用户,所有主机,所有命令。

  hadoop ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod --在配置文件的最末尾加上该条目,该ALL代表在任意一台主机,这里注意命令使用绝对路径

  [hadoop@localhost ~]$ sudo useradd tom

  [sudo] password for hadoop:

  [hadoop@localhost ~]$ id tom

  uid=1003(tom) gid=1004(tom) groups=1004(tom)

  [hadoop@localhost ~]$ tail -1 /etc/passwd

  tom:x:1003:1004::/home/tom:/bin/bash

  [hadoop@localhost ~]$ sudo usermod -s /bin/csh tom

  [hadoop@localhost ~]$ tail -1 /etc/passwd --可以看到在执行第二个命令没有让输入密码,因为sudo在默认第一次通过身份验证后,有效期为五分钟,即五分钟内不需要输入密码

  tom:x:1003:1004::/home/tom:/bin/csh

  [hadoop@localhost ~]$ sudo userdel tom --可以看到,如果使用了未授权的命令,是没有权限执行的。

抱歉!评论已关闭.