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

        對於此配置文件,共分爲兩類內容:
            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

定義別名的方法:
    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等標籤只能在授權項中使用,不能用於別名定義的語法;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章