Linux-權限管理-su與sudo詳解

    概要:在linux上進行有關權限的操作時,往往會碰到這樣的問題:

1)爲什麼安裝軟件需要在apt-get之前加上sudo?剛剛安裝完畢,再次運行apt-get卻不需要再在前面加sudo

2)爲何有時運行sudo command的時候顯示user is not in the sudoers

3susudo有什麼不同?

4)多人使用同一臺主機,在授權很多用戶具有root權限的時候如何保證安全性?本文將主要爲你解答上述問題。


1.su


su – 運行替換用戶和組標識的shell,修改有效用戶標識和組標識爲USER.


1.1對比susu – root(後者等於su-

實例比較:

hyk@hyk-linux:~$su

Password:(注意,切換以後的pwd並沒有改變)

root@hyk-linux:/home#echo $HOME

/root

root@hyk-linux:/home#exit(後面顯示exit

exit

hyk@hyk-linux:~$su - root

Password:(切換以後pwd改變了)

root@hyk-linux:~#echo $HOME

/root

root@hyk-linux:~#exit(後面顯示logout

logout

從以上實例,看出:su-,以root身份登錄,執行實際用戶login以後的所有操作(包括環境變量的設置等);而前者只是簡單的用戶切換,pwd等信息。


1.2su的缺點

1)不安全su工具在多人蔘與的系統管理中,並不是最好的選擇,su只適用於一兩個人蔘與管理的系統,畢竟su並不能讓普通用戶受限的使用;超級用戶root密碼應該掌握在少數用戶手中。

2)麻煩:需要把root密碼告知每個需要root權限的人。


2.sudo


2.1sudo的出現背景

        由於su對切換到超級權限用戶root後,權限的無限制性,所以su並不能擔任多個管理員所管理的系統。如果用su來切換到超級用戶來管理系統,也不能明確哪些工作是由哪個管理員進行的操作。特別是對於服務器的管理有多人蔘與管理時,最好是針對每個管理員的技術特長和管理範圍,並且有針對性的下放給權限,並且約定其使用哪些工具來完成與其相關的工作,這時我們就有必要用到sudo

  通過sudo,我們能把某些超級權限有針對性的下放,並且不需要普通用戶知道root密碼,所以sudo相對於權限無限制性的su來說,還是比較安全的,所以sudo也能被稱爲受限制的su;另外sudo是需要授權許可的,所以也被稱爲授權許可的su

  sudo執行命令的流程是當前用戶切換到root(或其它指定切換到的用戶),然後以root(或其它指定的切換到的用戶)身份執行命令,執行完成後,直接退回到當前用戶;而這些的前提是要通過sudo的配置文件/etc/sudoers來進行授權;

注意:

hyk@hyk-linux:~$sudo apt-get install aaaa

[sudo]password for hyk:

看到沒有,執行sudo的時候,我們需要輸入的是當前用戶hyk的密碼,而不是root密碼。


2.2Sudo的特性:

       §sudo能夠限制用戶只在某臺主機上運行某些命令。

  §sudo提供了豐富的日誌,詳細地記錄了每個用戶幹了什麼。它能夠將日誌傳到中心主機或者日誌服務器。

  §sudo使用時間戳文件來執行類似的“檢票”系統。當用戶調用sudo並且輸入它的密碼時,用戶獲得了一張存活期爲5分鐘的票(這個值可以在編譯的時候改變)。也就是說,我剛剛輸入了sudocat /etc/issue 然後可以再次只需要輸入cat/etc/issue即可,不需要再次輸入sudo

  §sudo的配置文件是sudoers文件,它允許系統管理員集中的管理用戶的使用權限和使用的主機。它所存放的位置默認是在/etc/sudoers,屬性必須爲0411


2.3.sudo的使用

權限:在/etc/sudoers中有出現的使用者

  使用方式:sudo-V

  sudo-h

  sudo-l

  sudo-v

  sudo-k

  sudo-s

  sudo-H

  sudo[ -b ] [ -p prompt ] [ -u username/#uid] -s

  用法:sudo command

  說明:以系統管理者的身份執行指令,也就是說,經由sudo所執行的指令就好像是root親自執行

  參數:

  -V顯示版本編號

  -h會顯示版本編號及指令的使用方式說明

  -l顯示出自己(執行sudo的使用者)的權限

  -v因爲sudo在第一次執行時或是在N分鐘內沒有執行(N預設爲五)會問密碼,這個參數是重新做一次確認,如果超過N分鐘,也會問密碼

  -k將會強迫使用者在下一次執行sudo時問密碼(不論有沒有超過N分鐘)

  -b將要執行的指令放在背景執行

  -pprompt可以更改問密碼的提示語,其中%u會代換爲使用者的帳號名稱,%h會顯示主機名稱

  -uusername/#uid不加此參數,代表要以root的身份執行指令,而加了此參數,可以以username的身份執行指令(#uid爲該username的使用者號碼)

  -s執行環境變數中的SHELL所指定的shell,或是/etc/passwd裏所指定的shell

  -H將環境變數中的HOME(家目錄)指定爲要變更身份的使用者家目錄(如不加-u參數就是系統管理者root

  command要以系統管理者身份(或以-u更改爲其他人)執行的指令

  範例:

  sudo-l列出目前的權限

  sudo-V列出sudo的版本資訊


2.4.sudoers的配置

        sudoerssudo的主要配置文件,linux下通常在/etc目錄下,如果是solaris,缺省不裝sudo的,編譯安裝後通常在安裝目錄的etc目錄下,不過不管sudoers文件在哪兒,sudo都提供了一個編輯該文件的命令:visudo來對該文件進行修改。強烈推薦使用該命令修改sudoers,因爲它會幫你校驗文件配置是否正確,如果不正確,在保存退出時就會提示你哪段配置出錯的。
言歸正傳,下面介紹如何配置sudoers
首先寫sudoers的缺省配置:
#############################################################
#sudoers file.
#
# This file MUST be edited with the 'visudo'command as root.
#
# See the sudoers man page for the detailson how to write a sudoers file.
#
# Host alias specification
#User alias specification
# Cmnd alias specification
# Defaultsspecification
# User privilege specification
root ALL=(ALL)ALL
# Uncomment to allow people in group wheel to run allcommands
# %wheel ALL=(ALL) ALL
# Same thing without apassword
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %usersALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %userslocalhost=/sbin/shutdown -hnow
##################################################################
2.4.1.
最簡單的配置,讓普通用戶support具有root的所有權限
執行visudo之後,可以看見缺省只有一條配置:
root ALL=(ALL) ALL
那麼你就在下邊再加一條配置:
support ALL=(ALL) ALL
這樣,普通用戶support就能夠執行root權限的所有命令
support用戶登錄之後,執行:
sudo su -
然後輸入support用戶自己的密碼,就可以切換成root用戶了
2.4.2
讓普通用戶support只能在某幾臺服務器上,執行root能執行的某些命令
首先需要配置一些Alias,這樣在下面配置權限時,會方便一些,不用寫大段大段的配置。Alias主要分成4
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1)
配置Host_Alias:就是主機的列表
Host_AliasHOST_FLAG = hostname1, hostname2, hostname3
2)
配置Cmnd_Alias:就是允許執行的命令的列表,命令前加上!表示不能執行此命令.

命令一定要使用絕對路徑,避免其他目錄的同名命令被執行,造成安全隱患,因此使用的時候也是使用絕對路徑!
Cmnd_AliasCOMMAND_FLAG = command1, command2, command3 
!command4
3)
配置User_Alias:就是具有sudo權限的用戶的列表
User_AliasUSER_FLAG = user1, user2, user3
4)
配置Runas_Alias:就是用戶以什麼身份執行(例如root,或者oracle)的列表
Runas_AliasRUNAS_FLAG = operator1, operator2, operator3
5)
配置權限
配置權限的格式如下:
USER_FLAGHOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密碼驗證的話,則按照這樣的格式來配置
USER_FLAGHOST_FLAG=(RUNAS_FLAG) NOPASSWD:COMMAND_FLAG
配置示例:
############################################################################
#sudoers file.
#
# This file MUST be edited with the 'visudo'command as root.
#
# See the sudoers man page for the detailson how to write a sudoers file.
#
# Host aliasspecification
Host_Alias EPG = 192.168.1.1, 192.168.1.2
# Useralias specification
# Cmnd alias specification
Cmnd_Alias SQUID= /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm

Cmnd_AliasADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwdroot
# Defaults specification
# User privilegespecification
root ALL=(ALL) ALL
support EPG=(ALL) NOPASSWD:SQUID
support EPG=(ALL) NOPASSWD: ADMPW
# Uncomment to allowpeople in group wheel to run all command
# %wheel ALL=(ALL) ALL
#Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
#Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
#%users localhost=/sbin/shutdown -hnow

#################################################

注意:每種linux的發行版往往對sudoers文件進行了自己的處理,此時,我們往往需要通過man sudoers來查找相關變量的定義,然後進行設置


2.5授權管理sudo實例

1)問題:

用戶權限不夠:

hyk@hyk-linux:~$cat /etc/shadow

cat:/etc/shadow: Permission denied

2)解決辦法:指定用戶,授權特定命令

使用Visudo可以查看/etc的代碼如下:

Defaults env_reset

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

#Host alias specification

#User alias specification

#Cmnd alias specification

#User privilege specification

root ALL=(ALL:ALL) ALL

#Members of the admin group may gain root privileges

%adminALL=(ALL) ALL

#Allow members of group sudo to execute any command

%sudo ALL=(ALL:ALL) ALL

#See sudoers(5) for more information on "#include"directives:

#includedir/etc/sudoers.d

注意:

env_resetIfset, sudo will reset the environment to only contain theLOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*

variables. Any variables in the caller's environment thatmatch the env_keep and env_check lists are then added. The default contents of the env_keep and env_checklists are displayed when sudo is run by root withthe -V option. If the secure_path option is set, itsvalue will be used for the PATH environment variable. This flag is on by default. 

secure_pathPathused for every command run from sudo.This optionis not set by default.

        加入這一行:%guestALL=/bin/cat表示guest用戶組可以切換到root下執行cat來查看文件,保存,退出。實際上,由於secure_path的作用,guestone用戶已經能夠運行more等所有位於/bin下面的命令了

3)驗證:

查看guestone的通過sudo能執行哪些命令:

命令行輸入:guestone@hyk-linux:~$sudo -l




外部參考:

1linuxsusudo命令http://www.jb51.net/LINUXjishu/12713.html

2sudoers設置http://www.cnblogs.com/zhuowei/archive/2009/04/13/1435190.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章