简介:
Sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了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 将要执行的指令放在后台执行