Linux之sudo
一、sudo简介
sudo是unix/linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的权力,让他们执行一些只有超级用户或其他特许用户才能完成的任务,比如:运行一些像restart,reboot,passwd之类的命令,或者编辑一些系统配置文件,这样不仅减少了用户登录次数和管理时间,也提高了系统安全性。
sudo的特点:限制用户只在某台主机上运行某些命令、详细地记录了每个用户干了什么,能够将日志传到中心主机或者日志服务器、管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机(默认存放位置是/etc/sudoers)、使用时间戳文件来完成类似“检票”的系统(如:当用户调用sudo并且输入它的密码时,用户获得了一张存活期5分钟的票)
二、sudo常见用法:
-V 显示版本编号
-h 会显示版本编号及指令的使用方式说明
-l 显示出自己(执行sudo的使用者)的权限
-v 因为sudo在第一次执行时或是在N分钟内没有执行(N预设为五)会问密码。这个参数是重新做一次确认,如果超过N分钟,也会问密码
-k 将会强迫使用者在下一次执行sudo是问密码(不论有没有超过N分钟)
-b 将要执行的指令放在背景执行
-p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
-u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
-s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
三、sudo配置文件/etc/sudoers常用的一些参数说明
查看操作系统已安装sudo
# rpm -qa|grep sudo
sudo-1.8.6p3-19.el6.x86_64
#visudo //编辑该文件
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
## Allows people in group wheel to run all commands without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
说明:
root ALL=(ALL) ALL
root表示被授权的用户,这里是根用户;
第一个ALL表示所有计算机;
第二个ALL表示所有用户;
第三个ALL表示所有命令;
通用格式
user host run_as command
user:一位或几位用户,在/etc/group中可以用一个%代替它,组对象的名称一定要用百分号%开头
host:一个或几个主机名
run_as:作为哪个用户运行,常见选项是root和ALL
command:想让用户或组运行的一个或几个根级别命令
如:centos ALL=(ALL) useradd,userdel
注:授权centos用户在所有计算机上以root身份运行useradd,userdel命令
注:切换用户,用sudo执行命令时必须重新输入普通用户的密码
让部分用户或者部分主机、已某些特定用户(root),共同执行某些命令,权限配置,可利用配置别名Alias(把用户、主机、命令归类放在一起)
Alias主要分成4种 :Host_Alias 、Cmnd_Alias 、User_Alias 、Runas_Alias
1) 配置Host_Alias:就是主机的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
2) 配置Cmnd_Alias:就是允许执行的命令的列表,命令前加上!表示不能执行此命令.
注意:命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!
Cmnd_Alias COMMAND_FLAG = command1, command2, command3 ,!command4
3) 配置User_Alias:就是具有sudo权限的用户的列表
User_Alias USER_FLAG = user1, user2, user3
4) 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
5) 配置权限
配置权限的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密码验证的话,则按照这样的格式来配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG
例子:让普通用户centos只能在服务器192.168.2.6;192.168.2.7上,执行root能执行命令删除、修改密码,查看服务等
############################################################################
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
Host_Alias EPG = 192.168.2.6, 192.168.2.7 //允许执行的主机
# User alias specification
# Cmnd alias specification
Cmnd_Alias SQUID = /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm
Cmnd_Alias ADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
centos EPG=(ALL) NOPASSWD: SQUID //root权限,不需要密码验证
centos EPG=(ALL) NOPASSWD: ADMPW
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
###############################################################
练习:
1、授权centos用户可以运行fdisk命令完成磁盘管理,以及使用mkfs或mke2fs实现文件系统管理;
2、授权gentoo用户可以运行逻辑卷管理的相关命令
1).新建用户centos,gentoo密码分别为centos、gentoo
2).修改/etc/sudoers配置文件
Cmnd_Alias SYDCMD=/sbin/fdisk,/sbin/mkfs,/sbin/mke2fs
Cmnd_Alias LVCMD=/sbin/lv*
root ALL=(ALL) ALL
centos ALL=(root) NOPASSWD: SYDCMD
gentoo ALL=(root) NOPASSWD: LVCMD
3).验证