1. 程式人生 > >Linux下的sudo及配置

Linux下的sudo及配置

nan oot 自己的 行操作 分類 clas 有效 輸入密碼 DDU

sudo的常用命令

man sudoers                     # 參閱幫助
visudo                          # 編輯sudoers文件的命令
sudo -l                         # 查看可執行或禁止執行的命令
sudo -u user1 /bin/ls           # 指定user1用戶的身份執行命令
sudo -u user1 -H /bin/ls        # 以user1的環境變量執行ls命令
sudo -g gp1 /bin/ls             # 指以gp1組的身份執行
sudo
-u user1 -g gp1 /bin/ls # 指定用戶和組的身份執行 sudo -k # 清除sudo保存的密碼 sudo -b fdisk -l # 將-b後面的命令放在後臺執行 sudo -s /bin/bash # 更改sudo的shell解釋器

sudoers配置詳解

配置文件存放路勁

/etc/sudoers

特殊符號的用法

#        用於註釋
\X       轉義字符
\‘        換行符*        匹配零個或多個字符
? 匹配單個字符 [...] 匹配指定範圍的字符 [!...]匹配非指定範圍的字符

別名定義規則(可選)

別名的格式

Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
# NAME 即別名,NMAE的命名是包含大寫字母、下劃線以及數字,但必須以一個大寫字母開頭,比如SYNADM、SYN_ADM或SYNAD0是合法的,sYNAMDA或1SYNAD是不合法的;
# item 按中文翻譯是項目,在這裏我們可以譯成成員,如果一個別名下有多個成員,成員與成員之間,通過半角,號分隔;成員必須是有效並真實存在的。什麽是有效的呢?比如主機名,可以通過w查看用戶的主機名(或ip地址),如果您只是本地機操作,只通過hostname 命令就能查看;用戶名當然是在系統中存在 的,在
/etc/passwd中必須存在;對於定義命令別名,成員也必須在系統中事實存在的文件名(需要絕對路徑);成員並非僅限於單一條目,可以是別名或者組。

別名的分類

User_Alias:      用戶別名,別名成員可以是用戶或用戶組(用戶組前面要加%號)
Runas_Alias:     用來定義runas別名,這個別名指定的是“目的用戶”,即sudo 允許切換至的用戶; 
Host_Alias:      定義主機別名;
Cmnd_Alias:      定義命令別名;

別名的實例

Host_Alias 
HT01=localhost,st05,st04,10,0,0,4,255.255.255.0,192.168.1.0/24
# 註:定義主機別名HT01,通過=號列出成員

Host_Alias HT02=st09,st10
# 註:主機別名HT02,有兩個成員

User_Alias SYSAD=beinan,linuxsir,bnnnb,lanhaitun
# 註:定義用戶別名,下有四個成員;要在系統中確實在存在的;

User_Alias SYSAD=beinan,linuxsir,bnnnb,lanhaitun:NETAD=beinan,bnnb:WEBMASTER=linuxsir
# 註:上面三行的別名定義,可以通過這一行來實現

Cmnd_Alias 
USERMAG=/usr/sbin/adduser,/usr/sbin/userdel,/usr/bin/passwd [A-Za-z]*,/bin/chown,/bin/chmod
# 註:命令別名下的成員必須是文件或目錄的絕對路徑;

Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \ 
                                /usr/local/bin/tcsh, /usr/bin/rsh, \ 
                                /usr/local/bin/zsh
# 註:別名的內容過長,可以通過換行符進行操作

Cmnd_Alias KILL = /usr/bin/kill:PWMAG = /usr/sbin/reboot,/usr/sbin/halt
# 註:這一行就代表了KILL和PWMAG命令別名,把KILL和PWMAG的別名定義合並在一行寫也是可以的;

Runas_Alias DBADM=mysql:OP = root, operator
# 註:這行是上面兩行的等價行;至於怎麽理解Runas_Alias ,我們必須得通過授權規則的實例來理解;

授權定義規則(必選)

授權規則是分配權限的執行規則,我們前面所講到的定義別名主要是為了更方便的授權引用別名;如果系統中只有幾個用戶,其實下放權限比較有限的話,可以不用定義別名,而是針對系統用戶直接直接授權,所以在授權規則中別名並不是必須的;

授權的格式

授權用戶 主機=命令動作 
# 這三個要素缺一不可,但在動作之前也可以指定切換到特定用戶下,在這裏指定切換的用戶要用括號括起來,如果不需要密碼直接運行命令的,應該加NOPASSWD:參數,但這些可以省略;舉例說明; 

授權的實例

beinan ALL=/bin/chown,/bin/chmod
# 如果我們在/etc/sudoers 中添加這一行,表示beinan 可以在任何可能出現的主機名的系統中,可以切換到root用戶下執行  /bin/chown 和/bin/chmod 命令,通過sudo -l 來查看beinan 在這臺主機上允許和禁止運行的命令;

beinan ALL=(root)    /bin/chown,/bin/chmod 
# 如果我們把第一個實例中的那行去掉,換成這行;表示的是beinan 可以在任何可能出現的主機名的主機中,可以切換到root下執行  /bin/chown ,可以切換到任何用戶招執行/bin/chmod 命令,通過sudo -l 來查看beinan 在這臺主機上允許和禁止運行 的命令; 

beinan ALL=(root)    NOPASSWD:    /bin/chown,/bin/chmod
# 如果換成這個例子呢?表示的是beinan可以在任何可能出現的主機名的主機中,可以切換到root下執行 /bin/chown,不需要輸入beinan用戶的密碼;並且可以切換到任何用戶下執行/bin/chmod命令,但執行chmod時需要beinan輸入自己的密碼;通過sudo -l來查看beinan 在這臺主機上允許和禁止運行的命令; 

beinan ALL=/bin/more
# beinan 不但能看到/etc/shadow文件的內容,還能看到只有root權限下才能看到的其它文件的內容,比如; /etc/gshadow 

beinan ALL=/bin/more /etc/shadow 
# 我只想把/etc/shadow 的內容可以讓他查看;可以加入下面的一行;

%beinan ALL=/usr/sbin/*,/sbin/* 
# 如果我們在 /etc/sudoers 中加上如上一行,表示beinan用戶組下的所有成員,在所有可能的出現的主機名下,都能切換到root用戶下運行 /usr/sbin和/sbin目錄下的所有命令; 

beinan ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk
# 本規則表示beinan用戶在所有可能存在的主機名的主機上運行/usr/sbin和/sbin下所有的程序,但fdisk 程序除外;

User_Alias SYSADER=beinan,linuxsir,%beinan 
User_Alias DISKADER=lanhaitun 
Runas_Alias OP=root 
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root 
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk     # 註:定義命令別名DSKCMD,下有成員parted和fdisk
SYSADER ALL= SYDCMD,DSKCMD 
DISKADER ALL=(OP) DSKCMD 
# 第一行:定義用戶別名SYSADER 下有成員 beinan、linuxsir和beinan用戶組下的成員,用戶組前面必須加%號; 
# 第二行:定義用戶別名 DISKADER ,成員有lanhaitun 
# 第三行:定義Runas用戶,也就是目標用戶的別名為OP,下有成員root 
# 第四行:定義SYSCMD命令別名,成員之間用,號分隔,最後的!/usr/bin/passwd root 表示不能通過passwd 來更改root密碼; 
# 第五行:定義命令別名DSKCMD,下有成員parted和fdisk ; 
# 第六行: 表示授權SYSADER下的所有成員,在所有可能存在的主機名的主機下運行或禁止 SYDCMD和DSKCMD下定義的命令。更為明確遙說, beinan、linuxsir和beinan用戶組下的成員能以root身份運行 chown 、chmod 、adduser、passwd,但不能 更改root的密碼;也可以以root身份運行 parted和fdisk ,本條規則的等價規則是:beinan,linuxsir,%beinan ALL=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,/sbin/parted,/sbin/fdisk 
# 第七行:表示授權DISKADER 下的所有成員,能以OP的身份,來運行 DSKCMD ,不需要密碼;更為明確的說 lanhaitun 能以root身份運行 parted和fdisk 命令;其等價規則是:lanhaitun ALL=(root) /sbin/parted,/sbin/fdisk
SYSADER ALL= NOPASSWD: SYDCMD, NOPASSWD: DSKCMD # NOPASSWD:後面跟不想輸入密碼即可執行的命令

註意事項

visudo只能由root用戶來操作,也必須由root用戶來操作

文章來自摘抄:https://my.oschina.net/aiguozhe/blog/38706

Linux下的sudo及配置