简介:

Sudolinux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如haltrebootsu等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。Sudo不是对shell的一个代替,它是面向每个命令的。

       Sudo是可以让某个用户不需要拥有管理员的账号密码,可以执行管理员的权限的。作为管理员可以指派某些用户可以执行某些特定命令,类似与suid


sudo:

su : switch user

-  : 完全切换

-l : 完全切换

su - hadoop -c echo $UID

sudo:

把有限的管理操作授权给普通用户,并且还能限定其仅能够在某些主机上执行此类的命令;

操作过程还会被记录与日志当中,以便日后审计


使用sudo的过程:

1、定义sudo授权, 配置文件:/etc/sudoers

语法格式: who which_host=(who) command

who:以谁的身份

which_host:在那些主机上=(who:拥有谁的权限)

command:能够执行的命令

注意: 确保普通用户的$PATH路径能够与管理员一致

命令 : visudo 能够直接打开编辑/etc/sudoers

1、## Allow root to run any commands anywhere
hadoop  ALL=(root)  /usr/sbin/useradd

hadoop 用户,能够在所有的主机上,执行管理员添加用户的命令


配置文件:支持别名:作用域范围只能在sudoers

仅能支持大写字母,别名可以嵌套使用

    第一部分,将主机分类。这些都是随便分得,目的是为了更好地管理 ,能够使用主机名
Host_Alias LOCALNET = 172.16.0.0/16, 127.0.0.0/8

    第二部分,将操作类型分类,以谁的身份来执行命令。

Runas_Alias ADMIN = root
    第三部分,将主机分类。这些都是随便分得,目的是为了更好地管理。
Host_Alias SPARC = bigtime, eclipse, moet, anchor
Host_Alias CUNETS = 128.138.0.0/255.255.0.0
Host_Alias CSNETS = 128.138.243.1, 128.138.204.0/24, 128.138.242.0
Host_Alias SERVERS = master, mail, www, ns

第四部分,定义命令和命令地路径。命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全

隐患因此使用的时候也是使用绝对路径!

Cmnd_Alias USERCMND = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel, /bin/passwd
USERADMINALL=(root) USERCMND
Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\
  /usr/sbin/restore, /usr/sbin/rrestore
  Cmnd_Alias KILL = /usr/bin/kill
  Cmnd_Alias PRINTING = /usr/sbin/, ! /usr/sbin/useradd, /usr/bin/lprm



实例:

 1、定义主机别名:

Host_Alias LOCALNET = 172.16.0.0/16, 127.0.0.0/8

2、定义用户别名:

User_Alias USERADMIN = hadoop, hive

 3、定义命令别名

Cmnd_Alias USERCMND = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel, /bin/passwd
USERADMINALL=(root) USERCMND

 4、定义操作类型

Runas_Alias ADMIN = root

 5、引用

USERADMINLOCALNET=(ADMIN) NOPASSWD: USERCMND

  注释NOPASSWWD可以不需要用户执行命令时不用输入密码

USERADMINLOCALNET=(ADMIN) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, PASSWD: /usr/sbin/userdel, /usr/bin/passwd, ! /usr/bin/passwd root

  注释:控制部分密码需要输密码:通过打标签的方式 PASSWD:  ! :不允许用户输出的命令


另外:创建wheel组:将用户加进wheel组,用户能够以管理员的什么执行所有命令,并且不需要输密码

## Allows people in group wheel to run all commands
# %wheelALL=(ALL)ALL
## Same thing without a password
%wheelALL=(ALL)NOPASSWD: ALL


       sudo常用参数选项

           -V 显示版本编号

           -h 会显示版本编号及指令的使用方式说明

           -l 显示出自己(执行sudo的使用者)的权限

           -v 因为sudo在第一次执行时或是在N分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过N分钟,也会问密码

           -k 将会强迫使用者在下一次执行sudo时问密码(不论有没有超过N分钟)

           -b 将要执行的指令放在后台执行