sudo:授权之后,能够让某用户在不知道其他用户密码情况下以另外一个用户的身份(默认为管理员)运行命令;管理员可以指派某些用户可以执行某些特定命令。

它的特性主要有这样几点:

Sudo能够限制用户只在某台主机上运行某些命令。

Sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。

Sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。

Sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性为0440

配置文件:sudoers

    语法 who which_host=(whom) command

    root    ALL=(ALL)     ALL
    %wheel    ALL=(ALL)    ALL

sudo简介_sudo
    who: 运行命令者的身份,user
    where: 通过哪些主机,host
    (whom):以哪个用户的身份, runas---默认为root
    which: 运行哪些命令,command
配置项:
    users     hosts=(runas)     commands
    users定义方式:
        username
        #uid
        user_alias
        %group_name
        %#gid
    host定义方式
        ip
        hostname
        netaddr
    command定义方式
        command name
        directory
        sudoedit

以lee的身份使用sudo fdisk -l命令,没有输出,并且告知lee不在sudoerfile中,并且邮件报告此事件给root

sudo简介_sudo_02

root查看邮件:

sudo简介_sudo_03

执行了usermod -G wheel lee(把lee用户加入到wheel组后):执行命令成功,因为上面配置文件中,我们定义了wheel组里的所有人都可以通过所有主机连接进来执行所有命令:

sudo简介_sudo_04

上面的方式也可通过在配置文件中添加 lee    ALL=(ALL)    fdisk -l实现


    Alias_Type NAME = item1, item2, ...
    NAME: 必须使用全大写字母;
    Alias_Type:
        User_Alias
        Host_Alias
        Runas_Alias
        Cmnd_Alias

示例:

在配置文件中定义了用户别名NETADMIN,定义了命令别名NETADMINCMNDS,然后定义NETADMIN里的用户只能执行NETADMINCMNDS里的命令,所以netuser1和netuser2只可以通过sudo执行ip命令

sudo简介_sudo_05

下面配置定义了USERADMIN定义的用户可以不输入密码执行USERADMINCMNDS里的命令,但是,执行passwd时不能加root参数(就是不能改管理员密码)

sudo简介_sudo_06

# sudo [-u user] COMMAND

选项: 

-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

command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令