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用戶;ide

受權機制;
    受權時,參考其配置文件以完成最終受權,配置文件的路徑:
        /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密碼的操做ui

定義別名的方法:
Alias_Type ALIASNAME = item1, item2, ...
Alias_Type:
User_Alias;
Host_Alias;
Runas_Alias;
Cmnd_Alias;code

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用戶的密碼等操做)。***
相關文章
相關標籤/搜索