本篇文章為大家展示了怎么在Linux系統中利用Sudo委派權限,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
創新互聯主要從事成都網站制作、成都做網站、網頁設計、企業做網站、公司建網站等業務。立足成都服務姚安,10年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:13518219792
sudo權限委派介紹
su 切換身份:su –l username –c ‘command'
sudo
來自sudo包
man 5 sudoers
sudo能夠授權指定用戶在指定主機上運行某些命令。如果未授權用戶嘗試使 用 sudo,會提示聯系管理員
sudo可以提供日志,記錄每個用戶使用sudo操作
sudo為系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機
sudo使用時間戳文件來完成類似“檢票”的系統,默認存活期為5分鐘的“入場券”
通過visudo命令編輯配置文件,具有語法檢查功能 :
visudo –c 檢查語法
visudo -f /etc/sudoers.d/test
sudo
配置文件:/etc/sudoers, /etc/sudoers.d/
時間戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob:
?:任意單一字符
*:匹配任意長度字符
[wxc ] 匹配其中一個字符
[!wxc] 除了這三個字符的其它字符
\x : 轉義
[[alpha]] :字母 示例: /bin/ls [[alpha]]*
配置文件規則有兩類:
1、別名定義:不是必須的
2、授權規則:必須的
sudoers
授權規則格式:
用戶 登入主機=(代表用戶) 命令
示例:
root ALL=(ALL) ALL
格式說明:
user: 運行命令者的身份
host: 通過哪些主機
(runas):以哪個用戶的身份
command: 運行哪些命令
別名
Users和runas:
username
#uid
%group_name
%#gid
user_alias|runas_alias
host:
ip或hostname
network(/netmask)
host_alias
command:
command name
directory
sudoedit
Cmnd_Alias
最近,我編寫了一個簡短的Bash程序,將MP3文件從一個網絡主機上的USB拇指驅動器復制到另一個網絡主機上。這些文件被復制到我為志愿者組織運行的服務器上的一個特定目錄,從那里可以下載和播放這些文件。
我的程序還做了一些其他的事情,比如在文件被復制之前更改它們的名稱,以便它們在網頁上按日期自動排序。它還刪除USB驅動器上的所有文件,驗證傳輸是否正確完成。這個不錯的小程序有幾個選項,例如-h為了展示幫助,-t用于測試模式,以及其他幾個。
盡管我的程序非常出色,但它必須作為root運行才能執行其主要功能。不幸的是,這個組織只有少數人對管理我們的音頻和計算機系統有興趣,這使我能夠找到半技術人員,并訓練他們登錄到用于執行傳輸和運行這個小程序的計算機中。
這并不是說我不能親自運行這個項目,而是由于各種原因,包括旅行和生病,我并不總是在那里。即使在我在場的時候,作為“懶惰的系統管理員”,我也喜歡讓別人為我做我的工作。因此,我編寫腳本來自動化這些任務,并使用sudo來指定幾個用戶來運行這些腳本。許多Linux命令要求用戶是root用戶才能運行。這可以保護系統免受意外損壞,比如我自己的愚蠢和惡意用戶的故意破壞。
做你做得很好的事
sudo程序是一個方便的工具,它允許我作為一個具有根訪問權限的系統管理員,將所有或幾個管理任務的責任委托給計算機的其他用戶。它允許我在不損害根密碼的情況下執行該委托,從而在主機上保持高度的安全性。
例如,讓我們假設我給了常規用戶“ruser”對我的Bash程序“myprog”的訪問權限,它必須作為root運行才能執行其部分功能。首先,用戶使用自己的密碼以ruser身份登錄,然后使用以下命令運行myprog。
myprog
sudo程序檢查/etc/sudoers文件并驗證ruser是否允許運行myprog。如果是這樣的話,sudo請求用戶輸入他們的密碼-而不是根密碼。在ruser輸入密碼后,程序將運行。此外,sudo用程序運行的日期和時間、完整的命令以及運行它的用戶記錄對myprog的訪問事實。此數據已登錄。/var/log/security.
我發現讓sudo運行每個命令的日志來進行培訓是很有幫助的。我能看出誰做了什么,他們是否正確地輸入了命令。
我這樣做是為了授權我自己和另一個用戶運行一個程序;然而,sudo可以用來做更多的事情。它允許sysadmin將管理網絡功能或特定服務的權限委托給一個人或一組受信任的用戶。它允許在保護根密碼安全性的同時委派這些函數。
配置sudoers文件
作為一個系統管理員,我可以使用/etc/sudoers文件以允許用戶或用戶組訪問單個命令、定義的命令組或所有命令。這種靈活性是使用sudo進行委托的力量和簡單性的關鍵。
一開始我發現sudoers文件非常混亂,所以下面我從我使用它的主機復制并解構了整個sudoers文件。希望當你通過這個分析的時候,它對你來說不會很模糊。順便說一句,我發現基于RedHat的發行版中的默認配置文件往往有大量的注釋和示例來提供指導,這使事情變得更簡單,減少了在線搜索的需求。
不要使用標準編輯器修改sudoers文件。使用visudo命令,因為它的設計目的是在保存文件并退出編輯器后立即啟用任何更改。除了Vi之外,還可以使用與visudo.
讓我們從一開始就用幾種別名來分析這個文件。
宿主別名
主機別名部分用于創建可用于提供訪問的命令或命令別名的主機組。其基本思想是為組織中的所有主機維護這個單一文件,并將其復制到/etc每一個主人。因此,可以將某些主機(如服務器)配置為一個組,使某些用戶能夠訪問特定的命令,例如啟動和停止httpd、DNS和網絡等服務的能力;掛載文件系統的能力等等。
可以在主機別名中使用IP地址而不是主機名。
## Sudoers allows particular users to run various commands as ## the root user, without needing the root password. ## Examples are provided at the bottom of the file for collections ## of related commands, which can then be delegated out to particular ## users or groups. ## This file must be edited with the 'visudo' command. ## Host Aliases ## Groups of machines. You may prefer to use hostnames (perhaps using ## wildcards for entire domains) or IP addresses instead. # Host_Alias FILESERVERS = fs1, fs2 # Host_Alias MAILSERVERS = smtp, smtp2 ## User Aliases ## These aren't often necessary, as you can use regular groups ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname ## rather than USERALIAS # User_Alias ADMINS = jsmith, mikem User_Alias AUDIO = dboth, ruser ## Command Aliases ## These are groups of related commands... ## Networking # Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool ## Installation and management of software # Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum ## Services # Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig ## Updating the locate database # Cmnd_Alias LOCATE = /usr/bin/updatedb ## Storage # Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount ## Delegating permissions # Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp ## Processes # Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall ## Drivers # Cmnd_Alias DRIVERS = /sbin/modprobe # Defaults specification # Refuse to run if unable to disable echo on the tty. Defaults visiblepw Defaults env_reset Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS" Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE" Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY" Defaults secure_path = sbin:bin:usrsbin:usrbin:usrlocalbin ## Next comes the main part: which users can run what software on ## which machines (the sudoers file can be shared between multiple ## systems). ## Syntax: ## user MACHINE=COMMANDS ## The COMMANDS section may have other options added to it. ## Allow root to run any commands anywhere root =ALL ALL ## Allows members of the 'sys' group to run networking, software, ## service management apps and more. # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS ## Allows people in group wheel to run all commands wheel =ALL ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL ## Allows members of the users group to mount and unmount the ## cdrom as root # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom ## Allows members of the users group to shutdown this system # %users localhost=/sbin/shutdown -h now ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment) #includedir /etc/sudoers.d ############################################################ # Added by David Both to provide limited access to myprog # ############################################################ AUDIO guest1=usrlocalbinmyprog
默認sudoers文件,修改為粗體。
用戶別名
用戶別名配置允許根將用戶排序為別名組,以便整個組能夠訪問特定的根功能。這是我添加了一行的部分。User_Alias AUDIO = dboth, ruser,它定義了別名音頻,并為該別名分配了兩個用戶。
如sudoers文件中所述,可以簡單地使用/etc/groups文件而不是別名。如果您已經在其中定義了一個滿足您需要的組,如“audio”,請使用該組名,前面是%這樣的標志:%audio在為sudoers文件后面的組分配將可用的命令時。
命令別名
在sudoers文件的下面是一個命令別名部分。這些別名是相關命令的列表,例如安裝更新或新的RPM包所需的網絡命令或命令。這些別名允許sysadmin輕松地允許訪問命令組。
本節中已經設置了許多別名,這些別名可以方便地將訪問委托給特定類型的命令。
環境缺省
下一節將設置一些默認環境變量。本節中最有趣的項目是!visiblepw行,如果用戶環境設置為顯示密碼,則阻止sudo運行。這是一種不應被推翻的安全防范措施。
指揮部分
命令部分是sudoers文件的主要部分。通過在這里添加足夠的條目,您需要做的每一件事都可以在沒有所有別名的情況下完成。化名只會讓事情變得簡單多了。
本節使用您已經定義的別名告訴sudo誰可以在哪個主機上做什么。當您理解本節中的語法時,這些示例是不言自明的。讓我們看看我們在命令部分中找到的語法。
ruser =ALL ALL
這意味著ruser可以像任何用戶一樣在任何主機上運行任何程序。
這是我們的用戶,ruser的通用條目。第一ALL在行中,指示此規則適用于所有主機。第二ALL允許ruser像其他用戶一樣運行命令。默認情況下,命令以根用戶的身份運行,但ruser可以在sudo命令行上指定程序以其他用戶的身份運行。最后一次ALL意味著ruser可以不受限制地運行所有命令。這將有效地使ruser根。
注意,根有一個條目,如下所示。這使得根用戶可以對所有主機上的所有命令進行全方位的訪問。
root =ALL ALL
這意味著root可以任何用戶的身份在任何主機上運行任何程序。
為了嘗試這一點,我注釋掉了行,并作為根用戶,嘗試在沒有sudo的情況下運行chown。那確實奏效了-真讓我吃驚。然后我用sudo chown這個消息失敗了,“根不在sudoers文件中,這個事件將被報告。”這意味著root可以root的身份運行所有東西,但在使用sudo命令時則不能運行。這將防止root用戶以其他用戶的身份通過sudo命令,但是root有很多方法可以繞過這個限制。
下面的代碼是我為控制對myprog的訪問而添加的代碼。它指定在音頻組中列出的用戶,如在sudoers文件頂部定義的那樣,只能訪問一個主機上的一個程序myprog,即guest 1。
AUDIO guest1=usrlocalbinmyprog
允許音頻組中的用戶訪問主機用戶1上的myprog。
請注意,上述行的語法僅指定允許此訪問的主機和程序。它沒有指定用戶可以像其他用戶一樣運行程序。
繞過密碼
您也可以使用NOPASSWORD允許組音頻中指定的用戶運行myprog,而不需要輸入他們的密碼。以下是如何:
AUDIO guest1=NOPASSWORD : usrlocalbinmyprog
允許音頻組中的用戶訪問主機用戶1上的myprog。
我沒有為我的程序這么做,因為我認為擁有sudo訪問權限的用戶必須停下來思考他們正在做什么,這可能會對此有所幫助。我以我的小程序的條目為例。
wheel
sudoers文件的命令部分中的輪規范(如下圖所示)允許“wheel”組中的所有用戶在任何主機上運行所有命令。wheel組定義在/etc/group文件,并且必須將用戶添加到組中才能工作。%組名稱前面的簽名意味著sudo應該在/etc/group檔案。
wheel ALL = ALL ALL
允許作為“wheel”組成員的所有用戶,如/etc/group文件,可以在任何主機上運行所有命令。
這是一種將完全根訪問委托給多個用戶的好方法,而無需提供根密碼。只需將用戶添加到wheel組中,就可以讓他們訪問完全的根權限。它還提供了一種通過sudo創建的日志條目監視其活動的方法。某些發行版(如Ubuntu)將用戶ID添加到/etc/group,它允許他們使用sudo命令,用于所有特權命令。
上述內容就是怎么在Linux系統中利用Sudo委派權限,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。