原文地址 http://zxf261.blog.51cto.com/701797/748756
原創作品,允許轉載,轉載時請務必以超連結形式標明文章
原始出處 、作者資訊和本聲明。否則將追究法律責任。http://zxf261.blog.51cto.com/701797/748756
sudo 是linux下常用的允許普通使用者使用超級使用者權限的工具,允許系統管理員讓普通使用者執行一些或者全部的root命令,如halt,reboot,su等等。這樣不僅減少了root使用者的登陸和行政時間,同樣也提高了安全性。Sudo不是對shell的一個代替,它是面向每個命令的。它的特性主要有這樣幾點:
1.sudo能夠限制使用者只在某台主機上運行某些命令。
2.sudo提供了豐富的日誌,詳細地記錄了每個使用者幹了什麼。它能夠將日誌傳到中心主機或者Log Service器。
3.sudo使用時間戳檔案來執行類似的“檢票”系統。當使用者調用sudo並且輸入它的密碼時,使用者獲得了一張存活期為5分鐘的票(這個值可以在編譯的時候改變)。
4.sudo的設定檔是sudoers檔案,它允許系統管理員集中的系統管理使用者的使用許可權和使用的主機。它所存放的位置預設是在/etc/sudoers,屬性必須為0411。
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 將要執行的指令放在背景執行
-p prompt 可以更改問密碼的提示,其中 %u 會代換為使用者的帳號名稱, %h 會顯示主機名稱
-u username/#uid 不加此參數,代表要以 root 的身份執行指令,而加了此參數,可以以 username 的身份執行指令(#uid 為該 username 的使用者號碼)
-s 執行環境變數中的 SHELL 所指定的 shell ,或是 /etc/passwd 裡所指定的 shell
-H 將環境變數中的 HOME (家目錄)指定為要變更身份的使用者家目錄(如不加 -u 參數就是系統管理者 root )
command 要以系統管理者身份(或以 -u 更改為其他人)執行的指令
範例:
sudo -l 列出目前的許可權
sudo -V 列出 sudo 的版本資訊
指令名稱:sudoers(在fc5下顯示不能找到此命令,但用man可以查到其用法。)
用來顯示可以使用sudo的使用者
sudoers的配置
sudoers 是sudo的主要設定檔,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 details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
# Uncomment to allow people in group wheel to run all commands
# %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 -h now
##################################################################
1. 最簡單的配置,讓普通使用者support具有root的所有許可權
執行visudo之後,可以看見預設只有一條配置:
root ALL=(ALL) ALL
那麼你就在下邊再加一條配置:
support ALL=(ALL) ALL
這樣,普通使用者support就能夠執行root許可權的所有命令
以support使用者登入之後,執行:
sudo su -
然後輸入support使用者自己的密碼,就可以切換成root使用者了
2. 讓普通使用者support只能在某幾台伺服器上,執行root能執行的某些命令
首先需要配置一些Alias,這樣在下面配置許可權時,會方便一些,不用寫大段大段的配置。Alias主要分成4種
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1) 配置Host_Alias:就是主機的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
2) 配置Cmnd_Alias:就是允許執行的命令的列表,命令前加上!表示不能執行此命令.
命令一定要使用絕對路徑,避免其他目錄的同名命令被執行,造成安全隱患 ,因此使用的時候也是使用絕對路徑!
Cmnd_Alias COMMAND_FLAG = command1, command2, command3 ,!command4
3) 配置User_Alias:就是具有sudo許可權的使用者的列表
User_Alias USER_FLAG = user1, user2, user3
4) 配置Runas_Alias:就是使用者以什麼身份執行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
5) 配置許可權
配置許可權的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不要求輸入密碼驗證的話,則按照這樣的格式來配置
USER_FLAG HOST_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 details on how to write a sudoers file.
#
# Host alias specification
Host_Alias EPG = 192.168.1.1, 192.168.1.2
# User alias specification
# Cmnd alias specification
Cmnd_Alias SQUID = /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm
Cmnd_Alias ADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
support EPG=(ALL) NOPASSWD: SQUID
support EPG=(ALL) NOPASSWD: ADMPW
# Uncomment to allow people in group wheel to run all commands
# %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 -h now
###############################################################
linux為使用者添加sudo許可權
用sudo時提示"xxx is not in the sudoers file. This incident will be reported.其中XXX是你的使用者名稱,也就是你的使用者名稱沒有許可權使用sudo,我們只要修改一下/etc/sudoers檔案就行了。下面是修改方 法:
1)進入超級使用者模式。也就是輸入"su -",系統會讓你輸入超級使用者密碼,輸入密碼後就進入了超級使用者模式。(當然,你也可以直接用root用)
2)添加檔案的寫入權限。也就是輸入命令"chmod u+w /etc/sudoers"。
3)編輯/etc/sudoers檔案。也就是輸入命令"vim /etc/sudoers",輸入"i"進入編輯模式,找到這一 行:"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"(這裡的xxx是你的使用者名稱),然後儲存(就是先按一 下Esc鍵,然後輸入":wq")退出。
4)撤銷檔案的寫入權限。也就是輸入命令"chmod u-w /etc/sudoers"。