命令:sudo

sudo:
su:switch user,切换用户;
登陆式切换:
su - USERNAME
su -l USERNAME
非登陆式切换:
su USERNAME
非交互式切换:
su - USERNAME -c "SHELL_COMMAND"
su操做有缺陷:
若是使用root用户登陆,切换至其余任何用户,均无需用户密码认证;
若是使用非root用户登陆,企图切换至root用户,须要root用户的密码进行认证;网络

sudo命令:sudo, sudoedit — execute a command as another user
        以另外一个用户的身份执行被受权指定的命令;大多数状况下,此处的另外一个用户身份指的是root用户;

    受权机制;
        受权时,参考其配置文件以完成最终受权,配置文件的路径:
            /etc/sudoers

        对于此配置文件/etc/sudoers,共分为两类内容:
            1.别名的定义(aliases):用于定义基本变量;   //全部别名定义的名称所有字母必须是大写
            2.用户规格(user specification):也能够称为"受权项",包括哪些用户能够从哪些主机以哪些用户身份执行哪些操做的具体内容;在其中能够调用以前定义过的别名(变量);

        配置文件的格式:
            每行只能有一个受权项;其格式为:
                who  where=(whom) what

            //注意:经过编辑/etc/sudoers文件完成受权,并且全部经过此文件受权的操做都必须以sudo命令来启用执行;为了可以及时发现编辑的配置文件中是否存在语法错误,一般会使用visudo命令来编辑此配置文件;
                visudo:visudo — edit the sudoers file

            who:这次使用sudo受权的目标用户;
                username:单个用户帐户的名称;
                #uid:单个用户帐户的UID;
                %groupname:受权的目标是组,即指定组名所表明的组内全部用户帐户;
                %#gid:受权的目标是组,即指定gid所表明的组内全部用户帐户;
                User_Alias:事先定义过的用户帐户的别名;

            where:定义被受权访问的客户端主机;
                ipaddress/hostname:单个主机;若是指定主机名,则必须可以被当前主机正确解析;
                Network Address:网络地址;
                    ipaddress/netmask
                    ipaddress/prefix
                Host_Alias:事先定义过的主机的别名;
                ALL:内建的特定别名,表示全部主机;

            whom:受权用户后续命令的执行者的真实身份,一般是root用户;
                username:单个用户帐户的名称;
                #uid:单个用户帐户的UID;
                Runas_Alias:事先定义过的命令执行者用户帐户的别名;
                ALL:内建的特定别名,表示全部用户帐户;

            what:这次被受权可以以whom身份执行的命令;
                command:单个命令;建议使用命令的绝对路径;
                directory:指的是指定目录下全部的命令;
                sudoedit:特殊命令;用于受权其余用户能够执行sudo命令,而且能够编辑修改/etc/sudoers文件的内容;
                Cmnd_Alias:事先定义过的命令的别名;
                ALL:内建的特定别名,表示全部命令;

基本的sudo受权示例:
    zhangsan        ALL=(root)      /usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel,/bin/passwd [a-zA-Z0-9]*,!/bin/passwd root          //禁止修改root密码的操做

定义别名的方法:
    Alias_Type ALIASNAME = item1, item2, ...
        Alias_Type:
            User_Alias;
            Host_Alias;
            Runas_Alias;
            Cmnd_Alias;

        ALIASNAME:别名的名称,必须所有使用大写字母;

    示例:
        User_Alias USERADMINS = tom, zhangsan, jerry, %lisi
        Cmnd_Alias USERADMINCMNDS = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel, /bin/passwd [a-zA-Z0-9]*, !/bin/passwd root

        USERADMINS  ALL=(root)  USERADMINCMNDS

    经常使用的标签:
        PASSWD:在执行被受权的特定命令以前,要求必须键入密码以事先身份验证;
        NOPASSWD:在执行被受权的特定命令以前,无需键入密码进行身份验证;

    示例:
        User_Alias USERADMINS = tom, zhangsan, jerry, suse, %lisi

        USERADMINS ALL=(root) NOPASSWD: /usr/sbin/useradd, PASSWD: /usr/sbin/usermod, /usr/sbin/userdel, /bin/passwd [a-zA-Z0-9]*, !/bin/passwd root

    注意:PASSWD、NOPASSWD等标签只能在受权项中使用,不能用于别名定义的语法;

    ***慎重注意:在使用sudo受权passwd,su,sudo,sudoedit,visudo等具备特殊意义的命令时,务必要考虑全面(例如禁止修改root用户的密码等操做)。***
相关文章
相关标签/搜索