sudo權(quán)限委派介紹
- su 切換身份:su –l username –c ‘command'
- sudo
- 來(lái)自sudo包
- man 5 sudoers
- sudo能夠授權(quán)指定用戶(hù)在指定主機(jī)上運(yùn)行某些命令。如果未授權(quán)用戶(hù)嘗試使 用 sudo,會(huì)提示聯(lián)系管理員
- sudo可以提供日志,記錄每個(gè)用戶(hù)使用sudo操作
- sudo為系統(tǒng)管理員提供配置文件,允許系統(tǒng)管理員集中地管理用戶(hù)的使用權(quán)限和使用的主機(jī)
- sudo使用時(shí)間戳文件來(lái)完成類(lèi)似“檢票”的系統(tǒng),默認(rèn)存活期為5分鐘的“入場(chǎng)券”
- 通過(guò)visudo命令編輯配置文件,具有語(yǔ)法檢查功能 :
- visudo –c 檢查語(yǔ)法
visudo -f /etc/sudoers.d/test
sudo
- 配置文件:/etc/sudoers, /etc/sudoers.d/
- 時(shí)間戳文件:/var/db/sudo
- 日志文件:/var/log/secure
- 配置文件支持使用通配符glob:
- ?:任意單一字符
*:匹配任意長(zhǎng)度字符
[wxc ] 匹配其中一個(gè)字符
[!wxc] 除了這三個(gè)字符的其它字符
\x : 轉(zhuǎn)義
[[alpha]] :字母 示例: /bin/ls [[alpha]]*
- 配置文件規(guī)則有兩類(lèi):
- 1、別名定義:不是必須的
2、授權(quán)規(guī)則:必須的
sudoers
- 授權(quán)規(guī)則格式:
- 用戶(hù) 登入主機(jī)=(代表用戶(hù)) 命令
- 示例:
- root ALL=(ALL) ALL
- 格式說(shuō)明:
- user: 運(yùn)行命令者的身份
- host: 通過(guò)哪些主機(jī)
(runas):以哪個(gè)用戶(hù)的身份
command: 運(yùn)行哪些命令
別名
- 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
最近,我編寫(xiě)了一個(gè)簡(jiǎn)短的Bash程序,將MP3文件從一個(gè)網(wǎng)絡(luò)主機(jī)上的USB拇指驅(qū)動(dòng)器復(fù)制到另一個(gè)網(wǎng)絡(luò)主機(jī)上。這些文件被復(fù)制到我為志愿者組織運(yùn)行的服務(wù)器上的一個(gè)特定目錄,從那里可以下載和播放這些文件。
我的程序還做了一些其他的事情,比如在文件被復(fù)制之前更改它們的名稱(chēng),以便它們?cè)诰W(wǎng)頁(yè)上按日期自動(dòng)排序。它還刪除USB驅(qū)動(dòng)器上的所有文件,驗(yàn)證傳輸是否正確完成。這個(gè)不錯(cuò)的小程序有幾個(gè)選項(xiàng),例如-h為了展示幫助,-t用于測(cè)試模式,以及其他幾個(gè)。
盡管我的程序非常出色,但它必須作為root運(yùn)行才能執(zhí)行其主要功能。不幸的是,這個(gè)組織只有少數(shù)人對(duì)管理我們的音頻和計(jì)算機(jī)系統(tǒng)有興趣,這使我能夠找到半技術(shù)人員,并訓(xùn)練他們登錄到用于執(zhí)行傳輸和運(yùn)行這個(gè)小程序的計(jì)算機(jī)中。
這并不是說(shuō)我不能親自運(yùn)行這個(gè)項(xiàng)目,而是由于各種原因,包括旅行和生病,我并不總是在那里。即使在我在場(chǎng)的時(shí)候,作為“懶惰的系統(tǒng)管理員”,我也喜歡讓別人為我做我的工作。因此,我編寫(xiě)腳本來(lái)自動(dòng)化這些任務(wù),并使用sudo來(lái)指定幾個(gè)用戶(hù)來(lái)運(yùn)行這些腳本。許多Linux命令要求用戶(hù)是root用戶(hù)才能運(yùn)行。這可以保護(hù)系統(tǒng)免受意外損壞,比如我自己的愚蠢和惡意用戶(hù)的故意破壞。
做你做得很好的事
sudo程序是一個(gè)方便的工具,它允許我作為一個(gè)具有根訪問(wèn)權(quán)限的系統(tǒng)管理員,將所有或幾個(gè)管理任務(wù)的責(zé)任委托給計(jì)算機(jī)的其他用戶(hù)。它允許我在不損害根密碼的情況下執(zhí)行該委托,從而在主機(jī)上保持高度的安全性。
例如,讓我們假設(shè)我給了常規(guī)用戶(hù)“ruser”對(duì)我的Bash程序“myprog”的訪問(wèn)權(quán)限,它必須作為root運(yùn)行才能執(zhí)行其部分功能。首先,用戶(hù)使用自己的密碼以ruser身份登錄,然后使用以下命令運(yùn)行myprog。
myprog
sudo程序檢查/etc/sudoers文件并驗(yàn)證ruser是否允許運(yùn)行myprog。如果是這樣的話,sudo請(qǐng)求用戶(hù)輸入他們的密碼-而不是根密碼。在ruser輸入密碼后,程序?qū)⑦\(yùn)行。此外,sudo用程序運(yùn)行的日期和時(shí)間、完整的命令以及運(yùn)行它的用戶(hù)記錄對(duì)myprog的訪問(wèn)事實(shí)。此數(shù)據(jù)已登錄。/var/log/security.
我發(fā)現(xiàn)讓sudo運(yùn)行每個(gè)命令的日志來(lái)進(jìn)行培訓(xùn)是很有幫助的。我能看出誰(shuí)做了什么,他們是否正確地輸入了命令。
我這樣做是為了授權(quán)我自己和另一個(gè)用戶(hù)運(yùn)行一個(gè)程序;然而,sudo可以用來(lái)做更多的事情。它允許sysadmin將管理網(wǎng)絡(luò)功能或特定服務(wù)的權(quán)限委托給一個(gè)人或一組受信任的用戶(hù)。它允許在保護(hù)根密碼安全性的同時(shí)委派這些函數(shù)。
配置sudoers文件
作為一個(gè)系統(tǒng)管理員,我可以使用/etc/sudoers文件以允許用戶(hù)或用戶(hù)組訪問(wèn)單個(gè)命令、定義的命令組或所有命令。這種靈活性是使用sudo進(jìn)行委托的力量和簡(jiǎn)單性的關(guān)鍵。
一開(kāi)始我發(fā)現(xiàn)sudoers文件非?;靵y,所以下面我從我使用它的主機(jī)復(fù)制并解構(gòu)了整個(gè)sudoers文件。希望當(dāng)你通過(guò)這個(gè)分析的時(shí)候,它對(duì)你來(lái)說(shuō)不會(huì)很模糊。順便說(shuō)一句,我發(fā)現(xiàn)基于RedHat的發(fā)行版中的默認(rèn)配置文件往往有大量的注釋和示例來(lái)提供指導(dǎo),這使事情變得更簡(jiǎn)單,減少了在線搜索的需求。
不要使用標(biāo)準(zhǔn)編輯器修改sudoers文件。使用visudo命令,因?yàn)樗脑O(shè)計(jì)目的是在保存文件并退出編輯器后立即啟用任何更改。除了Vi之外,還可以使用與visudo.
讓我們從一開(kāi)始就用幾種別名來(lái)分析這個(gè)文件。
宿主別名
主機(jī)別名部分用于創(chuàng)建可用于提供訪問(wèn)的命令或命令別名的主機(jī)組。其基本思想是為組織中的所有主機(jī)維護(hù)這個(gè)單一文件,并將其復(fù)制到/etc每一個(gè)主人。因此,可以將某些主機(jī)(如服務(wù)器)配置為一個(gè)組,使某些用戶(hù)能夠訪問(wèn)特定的命令,例如啟動(dòng)和停止httpd、DNS和網(wǎng)絡(luò)等服務(wù)的能力;掛載文件系統(tǒng)的能力等等。
可以在主機(jī)別名中使用IP地址而不是主機(jī)名。
## 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
默認(rèn)sudoers文件,修改為粗體。
用戶(hù)別名
用戶(hù)別名配置允許根將用戶(hù)排序?yàn)閯e名組,以便整個(gè)組能夠訪問(wèn)特定的根功能。這是我添加了一行的部分。User_Alias AUDIO = dboth, ruser,它定義了別名音頻,并為該別名分配了兩個(gè)用戶(hù)。
如sudoers文件中所述,可以簡(jiǎn)單地使用/etc/groups文件而不是別名。如果您已經(jīng)在其中定義了一個(gè)滿(mǎn)足您需要的組,如“audio”,請(qǐng)使用該組名,前面是%這樣的標(biāo)志:%audio在為sudoers文件后面的組分配將可用的命令時(shí)。
命令別名
在sudoers文件的下面是一個(gè)命令別名部分。這些別名是相關(guān)命令的列表,例如安裝更新或新的RPM包所需的網(wǎng)絡(luò)命令或命令。這些別名允許sysadmin輕松地允許訪問(wèn)命令組。
本節(jié)中已經(jīng)設(shè)置了許多別名,這些別名可以方便地將訪問(wèn)委托給特定類(lèi)型的命令。
環(huán)境缺省
下一節(jié)將設(shè)置一些默認(rèn)環(huán)境變量。本節(jié)中最有趣的項(xiàng)目是!visiblepw行,如果用戶(hù)環(huán)境設(shè)置為顯示密碼,則阻止sudo運(yùn)行。這是一種不應(yīng)被推翻的安全防范措施。
指揮部分
命令部分是sudoers文件的主要部分。通過(guò)在這里添加足夠的條目,您需要做的每一件事都可以在沒(méi)有所有別名的情況下完成?;粫?huì)讓事情變得簡(jiǎn)單多了。
本節(jié)使用您已經(jīng)定義的別名告訴sudo誰(shuí)可以在哪個(gè)主機(jī)上做什么。當(dāng)您理解本節(jié)中的語(yǔ)法時(shí),這些示例是不言自明的。讓我們看看我們?cè)诿畈糠种姓业降恼Z(yǔ)法。
ruser =ALL ALL
這意味著ruser可以像任何用戶(hù)一樣在任何主機(jī)上運(yùn)行任何程序。
這是我們的用戶(hù),ruser的通用條目。第一ALL在行中,指示此規(guī)則適用于所有主機(jī)。第二ALL允許ruser像其他用戶(hù)一樣運(yùn)行命令。默認(rèn)情況下,命令以根用戶(hù)的身份運(yùn)行,但ruser可以在sudo命令行上指定程序以其他用戶(hù)的身份運(yùn)行。最后一次ALL意味著ruser可以不受限制地運(yùn)行所有命令。這將有效地使ruser根。
注意,根有一個(gè)條目,如下所示。這使得根用戶(hù)可以對(duì)所有主機(jī)上的所有命令進(jìn)行全方位的訪問(wèn)。
root =ALL ALL
這意味著root可以任何用戶(hù)的身份在任何主機(jī)上運(yùn)行任何程序。
為了嘗試這一點(diǎn),我注釋掉了行,并作為根用戶(hù),嘗試在沒(méi)有sudo的情況下運(yùn)行chown。那確實(shí)奏效了-真讓我吃驚。然后我用sudo chown這個(gè)消息失敗了,“根不在sudoers文件中,這個(gè)事件將被報(bào)告?!边@意味著root可以root的身份運(yùn)行所有東西,但在使用sudo命令時(shí)則不能運(yùn)行。這將防止root用戶(hù)以其他用戶(hù)的身份通過(guò)sudo命令,但是root有很多方法可以繞過(guò)這個(gè)限制。
下面的代碼是我為控制對(duì)myprog的訪問(wèn)而添加的代碼。它指定在音頻組中列出的用戶(hù),如在sudoers文件頂部定義的那樣,只能訪問(wèn)一個(gè)主機(jī)上的一個(gè)程序myprog,即guest 1。
AUDIO guest1=usrlocalbinmyprog
允許音頻組中的用戶(hù)訪問(wèn)主機(jī)用戶(hù)1上的myprog。
請(qǐng)注意,上述行的語(yǔ)法僅指定允許此訪問(wèn)的主機(jī)和程序。它沒(méi)有指定用戶(hù)可以像其他用戶(hù)一樣運(yùn)行程序。
繞過(guò)密碼
您也可以使用NOPASSWORD允許組音頻中指定的用戶(hù)運(yùn)行myprog,而不需要輸入他們的密碼。以下是如何:
AUDIO guest1=NOPASSWORD : usrlocalbinmyprog
允許音頻組中的用戶(hù)訪問(wèn)主機(jī)用戶(hù)1上的myprog。
我沒(méi)有為我的程序這么做,因?yàn)槲艺J(rèn)為擁有sudo訪問(wèn)權(quán)限的用戶(hù)必須停下來(lái)思考他們正在做什么,這可能會(huì)對(duì)此有所幫助。我以我的小程序的條目為例。
wheel
sudoers文件的命令部分中的輪規(guī)范(如下圖所示)允許“wheel”組中的所有用戶(hù)在任何主機(jī)上運(yùn)行所有命令。wheel組定義在/etc/group文件,并且必須將用戶(hù)添加到組中才能工作。%組名稱(chēng)前面的簽名意味著sudo應(yīng)該在/etc/group檔案。
wheel ALL = ALL ALL
允許作為“wheel”組成員的所有用戶(hù),如/etc/group文件,可以在任何主機(jī)上運(yùn)行所有命令。
這是一種將完全根訪問(wèn)委托給多個(gè)用戶(hù)的好方法,而無(wú)需提供根密碼。只需將用戶(hù)添加到wheel組中,就可以讓他們?cè)L問(wèn)完全的根權(quán)限。它還提供了一種通過(guò)sudo創(chuàng)建的日志條目監(jiān)視其活動(dòng)的方法。某些發(fā)行版(如Ubuntu)將用戶(hù)ID添加到/etc/group,它允許他們使用sudo命令,用于所有特權(quán)命令。
最后思想
我在這里使用sudo是為了一個(gè)非常有限的目標(biāo)-為一兩個(gè)用戶(hù)提供訪問(wèn)單個(gè)命令的權(quán)限。我用兩行(如果您忽略我自己的評(píng)論)來(lái)完成這一任務(wù)。將執(zhí)行某些任務(wù)的權(quán)限委托給沒(méi)有根訪問(wèn)權(quán)限的用戶(hù)是很簡(jiǎn)單的,并且可以節(jié)省您作為系統(tǒng)管理員的大量時(shí)間。它還生成可以幫助檢測(cè)問(wèn)題的日志條目。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接