su -
#su - redhat     //当执行这个命令的时候表示切换到redhat用户,并且重新读取用户环境相关配置文件,具体的来说就是执行下用户家目录下.bash_profile和.bashrc文件,这个我们成为全切换
su
#su  redhat      //执行这个命令的时候系统不读取以上两个文件,所以我们一般称它为半切换,这样切换过去之后,redhat用户使用的依旧是此前用户的环境配置信息
sudo
sudo这个命令设计初的主要目的是为了使某些用户具有特定用户的一些特殊的权限,举例说明:比如A,B两个人,A是技术部经理,具有公司服务器上的root权限,B技术还不够成熟,只具有一般用户权限,因为项目原因,B需要具有添加用户的权限,这个时候该怎么办呢?给B管理员权限?那安全性能得到保证吗!对,这时候sudo就派上用场了…
1),sudo这个命令的定义在/etc/sudoers文件里面,这个文件内容的格式如下:
who  which host=(whom)  command         //表示某个用户在哪台主机上以哪个用户的身份执行什么命令
2),我们可以用vim来打开/etc/sudoers这个文件,但是因为这个文件对系统来说相当重要,所以有一个专门的命令visudo来对这个文件进行编辑,当有一个管理员对这个文件进行编辑的时候,这个文件会被系统加上一个“锁”,意思就是不允许多个管理员同时对其进行编辑,这也是为了系统安全着想
3),举例:比如我们需要redhat用户可以执行passwd命令,那么我们需要作如下配置:
  1),#visudo                                //打开/etc/sudoers配置文件
  2),在配置文件里添加如下行
     redhat   ALL=(root)  /usr/sbin/useradd
  3),#su - redhat                           //切换到redhat用户
  4),#sudo /usr/sbin/useradd jack           //普通用户redhat添加用户jack
  当然sudoers文件不是这么容易就能玩转的,假设如下情况,当我们想把好多个命令都给redhat用户使用权限(同理当我们想给很多个用户一个命令的使用权限或者让一个用户在不同的主机上登录时都可以拥有这么命令的使用权限),那么我们改怎么办呢?一行一行的写下去,那岂不是显得我们的linux太笨拙了……
这时候我们可以看一下sudoers的man文档,我们会发现这个真的很牛掰,牛掰到我们可以定义某个用户只能使用某个命令的某一个选项……linux解决上述问题用到了别名
 (1),下面是对多个用户的格式定义:
 User_Alias  NAME = gentoo, suse, ubuntu, %mygrp, USENAME  //可以加进去一个组,可以加进去另一个用户别名,这里如果是想把组加进去记得要在前面加“%”,不要问为什么,就是这样定义的
 (2),下面是对多个主机的格式定义:
 Host_Alias  NAME = 主机名, IP, network/mask, NAME       //这里是说后面可以是主机名、IP地址、网段、另外一个别名
 (3),下面是对以哪个用户的身份运行(多个)的格式定义:
 Runas_Alias NAME = 用户, 组, #用户ID, NAME             //这里是说后面可以是用户名,组名,用户ID(前面必须加“#”),另外一个别名
 (4),下面是对多个命令的格式定义:
 Cmnd_Alias NAME = 命令, 目录(目录中的所有命令),NAME    //这里是说后面可以跟命令,目录下的命令集合,另外一个别名
举例1:如何让redhat用户具有使用useadd、passwd、groupadd的权限
   1),#visudo                                             //编辑sudoers文件
   2),加入以下行
        Cmnd_Alias  USERADMIN = /usr/sbin/useradd, /usr/bin/passwd, /usr/sbin/groupadd
        redhat  All=(root)  USERADMIN
   3) ,#su - redhat                                        //切换到redhat用户
   4),#sudo /usr/sbin/useradd jobs                        //添加用户jobs
   5),#sudo /usr/bin/passwd jobs                          //更改jobs用户密码
举例2:如何让redhat和jobs用户具有使用passwd的权限
   只需在/etc/sudoers文件中加入
        User_Alias  RJ = redhat, jobs
        RJ  All=(root)  /usr/bin/passwd 即可,其他同例1
举例3:看下述内容表示的什么意思
        redhat  USERADMIN = /usr/sbin/passwd [A-z]*, !/usr/sbin/passwd root //表示redhat用户可以执行passwd命令更改任何用户的密码,除了root!这里也许你已经发现“!”的作用,把它加在前面就表示不包括这个命令,当然“!”也可以用到User_Alias,Host_Alias,Cmnd_Alias里面
举例4:如何让redhat和jobs用户可以执行关机命令shutdown的“-h”选项,并且只能在30秒之内
        User_Alias RJ = redhat, jobs
        redhat USERADMIN = /sbin/shutdown -h +30             //这就表示redhat和jobs用户能使用shutdown命令关机,并且只能使用在30秒内关机(想自定义时间都是不允许的)
4),sudo的一些选项,对于一些普通用户来说sudo可以使用如下选项
   -l                                      //查看自己能使用的命令
   -u                                      //指定以哪个用户的身份来运行命令
   -S                                      //表示可以通过标准输入来输入密码,相当于passwd --stdin
   -b                                      //表示把命令在后台运行
   #sudo
.....................................................ok!以上就是sudo的一些用法介绍,如果读者有什懡不懂得建议通过man sudoers来学习,上面真的很详细(英语不行的要吃大亏了),其实我们也可以定义什么时间才可以使用定义的命令等很多功能,不过这个要结合PAM认证可插入模块来学习,这里不再做出介绍