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命令

Linux之sudo_sudo

Linux之sudo_配置文件_02

Linux之sudo_用户登录_03


  注:切换用户,用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

Linux之sudo_用户登录_04

   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

Linux之sudo_sudo_05

Linux之sudo_系统管理员_06

   3).验证

Linux之sudo_sudo_07

Linux之sudo_配置文件_08