主頁 > 知識庫 > Linux使用Sudo委派權(quán)限

Linux使用Sudo委派權(quán)限

熱門標(biāo)簽:檢查注冊表項 百度競價點擊價格的計算公式 硅谷的囚徒呼叫中心 美圖手機 智能手機 使用U盤裝系統(tǒng) 阿里云 網(wǎng)站建設(shè)

sudo權(quán)限委派介紹

  • su 切換身份:su –l username –c ‘command'
  • sudo
  • 來自sudo包
  • man 5 sudoers
  • sudo能夠授權(quán)指定用戶在指定主機上運行某些命令。如果未授權(quán)用戶嘗試使  用 sudo,會提示聯(lián)系管理員
  • sudo可以提供日志,記錄每個用戶使用sudo操作
  • sudo為系統(tǒng)管理員提供配置文件,允許系統(tǒng)管理員集中地管理用戶的使用權(quán)限和使用的主機
  • sudo使用時間戳文件來完成類似“檢票”的系統(tǒng),默認(rèn)存活期為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 : 轉(zhuǎn)義
    [[alpha]] :字母 示例: /bin/ls [[alpha]]*
  • 配置文件規(guī)則有兩類: 
  • 1、別名定義:不是必須的 
      2、授權(quán)規(guī)則:必須的

sudoers

  • 授權(quán)規(guī)則格式: 
  • 用戶 登入主機=(代表用戶) 命令
  • 示例:
  • 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文件從一個網(wǎng)絡(luò)主機上的USB拇指驅(qū)動器復(fù)制到另一個網(wǎng)絡(luò)主機上。這些文件被復(fù)制到我為志愿者組織運行的服務(wù)器上的一個特定目錄,從那里可以下載和播放這些文件。

我的程序還做了一些其他的事情,比如在文件被復(fù)制之前更改它們的名稱,以便它們在網(wǎng)頁上按日期自動排序。它還刪除USB驅(qū)動器上的所有文件,驗證傳輸是否正確完成。這個不錯的小程序有幾個選項,例如-h為了展示幫助,-t用于測試模式,以及其他幾個。

盡管我的程序非常出色,但它必須作為root運行才能執(zhí)行其主要功能。不幸的是,這個組織只有少數(shù)人對管理我們的音頻和計算機系統(tǒng)有興趣,這使我能夠找到半技術(shù)人員,并訓(xùn)練他們登錄到用于執(zhí)行傳輸和運行這個小程序的計算機中。

這并不是說我不能親自運行這個項目,而是由于各種原因,包括旅行和生病,我并不總是在那里。即使在我在場的時候,作為“懶惰的系統(tǒng)管理員”,我也喜歡讓別人為我做我的工作。因此,我編寫腳本來自動化這些任務(wù),并使用sudo來指定幾個用戶來運行這些腳本。許多Linux命令要求用戶是root用戶才能運行。這可以保護系統(tǒng)免受意外損壞,比如我自己的愚蠢和惡意用戶的故意破壞。

做你做得很好的事

sudo程序是一個方便的工具,它允許我作為一個具有根訪問權(quán)限的系統(tǒng)管理員,將所有或幾個管理任務(wù)的責(zé)任委托給計算機的其他用戶。它允許我在不損害根密碼的情況下執(zhí)行該委托,從而在主機上保持高度的安全性。

例如,讓我們假設(shè)我給了常規(guī)用戶“ruser”對我的Bash程序“myprog”的訪問權(quán)限,它必須作為root運行才能執(zhí)行其部分功能。首先,用戶使用自己的密碼以ruser身份登錄,然后使用以下命令運行myprog。

 myprog  

sudo程序檢查/etc/sudoers文件并驗證ruser是否允許運行myprog。如果是這樣的話,sudo請求用戶輸入他們的密碼-而不是根密碼。在ruser輸入密碼后,程序?qū)⑦\行。此外,sudo用程序運行的日期和時間、完整的命令以及運行它的用戶記錄對myprog的訪問事實。此數(shù)據(jù)已登錄。/var/log/security.

我發(fā)現(xiàn)讓sudo運行每個命令的日志來進行培訓(xùn)是很有幫助的。我能看出誰做了什么,他們是否正確地輸入了命令。

我這樣做是為了授權(quán)我自己和另一個用戶運行一個程序;然而,sudo可以用來做更多的事情。它允許sysadmin將管理網(wǎng)絡(luò)功能或特定服務(wù)的權(quán)限委托給一個人或一組受信任的用戶。它允許在保護根密碼安全性的同時委派這些函數(shù)。

配置sudoers文件

作為一個系統(tǒng)管理員,我可以使用/etc/sudoers文件以允許用戶或用戶組訪問單個命令、定義的命令組或所有命令。這種靈活性是使用sudo進行委托的力量和簡單性的關(guān)鍵。

一開始我發(fā)現(xiàn)sudoers文件非?;靵y,所以下面我從我使用它的主機復(fù)制并解構(gòu)了整個sudoers文件。希望當(dāng)你通過這個分析的時候,它對你來說不會很模糊。順便說一句,我發(fā)現(xiàn)基于RedHat的發(fā)行版中的默認(rèn)配置文件往往有大量的注釋和示例來提供指導(dǎo),這使事情變得更簡單,減少了在線搜索的需求。

不要使用標(biāo)準(zhǔn)編輯器修改sudoers文件。使用visudo命令,因為它的設(shè)計目的是在保存文件并退出編輯器后立即啟用任何更改。除了Vi之外,還可以使用與visudo.

讓我們從一開始就用幾種別名來分析這個文件。

宿主別名

主機別名部分用于創(chuàng)建可用于提供訪問的命令或命令別名的主機組。其基本思想是為組織中的所有主機維護這個單一文件,并將其復(fù)制到/etc每一個主人。因此,可以將某些主機(如服務(wù)器)配置為一個組,使某些用戶能夠訪問特定的命令,例如啟動和停止httpd、DNS和網(wǎng)絡(luò)等服務(wù)的能力;掛載文件系統(tǒng)的能力等等。

可以在主機別名中使用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

默認(rèn)sudoers文件,修改為粗體。

用戶別名

用戶別名配置允許根將用戶排序為別名組,以便整個組能夠訪問特定的根功能。這是我添加了一行的部分。User_Alias AUDIO = dboth, ruser,它定義了別名音頻,并為該別名分配了兩個用戶。

如sudoers文件中所述,可以簡單地使用/etc/groups文件而不是別名。如果您已經(jīng)在其中定義了一個滿足您需要的組,如“audio”,請使用該組名,前面是%這樣的標(biāo)志:%audio在為sudoers文件后面的組分配將可用的命令時。

命令別名

在sudoers文件的下面是一個命令別名部分。這些別名是相關(guān)命令的列表,例如安裝更新或新的RPM包所需的網(wǎng)絡(luò)命令或命令。這些別名允許sysadmin輕松地允許訪問命令組。

本節(jié)中已經(jīng)設(shè)置了許多別名,這些別名可以方便地將訪問委托給特定類型的命令。

環(huán)境缺省

下一節(jié)將設(shè)置一些默認(rèn)環(huán)境變量。本節(jié)中最有趣的項目是!visiblepw行,如果用戶環(huán)境設(shè)置為顯示密碼,則阻止sudo運行。這是一種不應(yīng)被推翻的安全防范措施。

指揮部分

命令部分是sudoers文件的主要部分。通過在這里添加足夠的條目,您需要做的每一件事都可以在沒有所有別名的情況下完成。化名只會讓事情變得簡單多了。

本節(jié)使用您已經(jīng)定義的別名告訴sudo誰可以在哪個主機上做什么。當(dāng)您理解本節(jié)中的語法時,這些示例是不言自明的。讓我們看看我們在命令部分中找到的語法。

ruser =ALL ALL

這意味著ruser可以像任何用戶一樣在任何主機上運行任何程序。

這是我們的用戶,ruser的通用條目。第一ALL在行中,指示此規(guī)則適用于所有主機。第二ALL允許ruser像其他用戶一樣運行命令。默認(rèn)情況下,命令以根用戶的身份運行,但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。

我沒有為我的程序這么做,因為我認(rèn)為擁有sudo訪問權(quán)限的用戶必須停下來思考他們正在做什么,這可能會對此有所幫助。我以我的小程序的條目為例。

wheel

sudoers文件的命令部分中的輪規(guī)范(如下圖所示)允許“wheel”組中的所有用戶在任何主機上運行所有命令。wheel組定義在/etc/group文件,并且必須將用戶添加到組中才能工作。%組名稱前面的簽名意味著sudo應(yīng)該在/etc/group檔案。

wheel ALL = ALL ALL

允許作為“wheel”組成員的所有用戶,如/etc/group文件,可以在任何主機上運行所有命令。

這是一種將完全根訪問委托給多個用戶的好方法,而無需提供根密碼。只需將用戶添加到wheel組中,就可以讓他們訪問完全的根權(quán)限。它還提供了一種通過sudo創(chuàng)建的日志條目監(jiān)視其活動的方法。某些發(fā)行版(如Ubuntu)將用戶ID添加到/etc/group,它允許他們使用sudo命令,用于所有特權(quán)命令。

最后思想

我在這里使用sudo是為了一個非常有限的目標(biāo)-為一兩個用戶提供訪問單個命令的權(quán)限。我用兩行(如果您忽略我自己的評論)來完成這一任務(wù)。將執(zhí)行某些任務(wù)的權(quán)限委托給沒有根訪問權(quán)限的用戶是很簡單的,并且可以節(jié)省您作為系統(tǒng)管理員的大量時間。它還生成可以幫助檢測問題的日志條目。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

標(biāo)簽:山南 黃山 懷化 賀州 湘潭 煙臺 湖北 通遼

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux使用Sudo委派權(quán)限》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266