Linux是一種多用戶的操做系統,統一時間能夠登陸多個用戶進行操做,同時在LiNux之上用戶又分爲系統用戶和普通用戶,不一樣的用戶對系統(系統中的文件)擁有不一樣的操做權限。linux
root擁有全部的操做權限,其餘普通用戶只有定義的操做權限,這裏的定義是經過必定的管理機制來進行限定,若是普通用戶想執行一些超越自身權限的命令式就必須以擁有該命令權限的用戶身份或者切換到擁有對應權限的用戶當中去執行。docker
用戶身份切shell
su命令安全
經過su命令能夠切換到其餘用戶來進行一些操做,可是前提是咱們必須擁有所切換用戶的口令信息bash
sudo命令ide
假如咱們想讓一個普通用戶擁有一些只有root能夠執行的命令,但又不能講root的密碼信息告訴別人,此時可使用sudo命令操作系統
並不是全部的用戶都可以運行sudo命令,這由sudo的配置文件/etc/sudoers來進行定義debug
語法格式日誌
sudo [-u USERNAME] COMMANDcode
一般是普通用戶以root身份來執行命令,sudo不加-u參數默認就是以root身份執行COMMAND
所以,能夠直接使用 sudo COMMAND
配置文件:/etc/sudoers
配置sudo必須經過編輯/etc/sudoers
文件,並且只有root才能夠修改它,還必須使用visudo命令編輯。之因此使用visudo有兩個緣由,一是它可以防止兩個用戶同時修改它;二是它也能進行有限的語法檢查。
visudo
語法規則:
帳號 登錄者的來源主機名(可切換的身份) 能夠經過sudo執行的命令
例如:jacky ALL=(root) /usr/bin/passwd
這表示從任何主機訪問過來的本地用戶jacky容許切換到root用戶來執行/usr/bin/passwd命令
exmaple2: jacky ALL=(root) ALL
表示容許任意主機的本地用戶jacky切換到root用戶執行全部命令
ALL表明全部,必須大寫
若是後面是命令必須爲絕對路徑,多個命令用逗號隔開
前面的使用者帳號能夠是一個組,這樣表示:%GROUP_NAME,例如%dockeruser
NOPASSWD: COMMAND
強制密碼驗證則使用
PASSWD: COMMAND
example:
%wheel ALL=(ALL) NOPASSWD: ALL
表示wheel組內的全部用戶能夠經過任何主機切換到任何用戶,能夠免密執行任何命令
foobar linux=(jimmy,rene) /bin/kill
主機名爲linux上的用戶 foobar能夠切換到jimmy,rene這兩個用戶下,容許執行/bin/kill命令
切換的的時候須要使用-u選項
若是不想使用-u選項,能夠設置默認切換用戶,以下
Defaults:foobar runas_default=jimmy
命令格式:sudo [options] COMMAND
選項:
-b:在後臺執行指令; -h:顯示幫助; -H:將HOME環境變量設爲新身份的HOME環境變量; -k:結束密碼的有效期限,也就是下次再執行sudo時便須要輸入密碼;。 -l:列出目前用戶可執行與沒法執行的指令; -p:改變詢問密碼的提示符號; -s<shell>:執行指定的shell; -u<用戶>:以指定的用戶做爲新的身份。若不加上此參數,則預設以root做爲新的身份; -v:延長密碼有效期限5分鐘; -V :顯示版本信息。
日誌與安全
sudo爲安全考慮得很周到,不只能夠記錄日誌,還能在有必要時向系統管理員報告。可是,sudo的日誌功能不是自動的,必須由管理員開啓。這樣來作:
touch /var/log/sudo vi /etc/syslog.conf
在syslog.conf最後面加一行(必須用tab分割開)並保存:
local2.debug /var/log/sudo
重啓日誌守候進程,
ps aux grep syslogd
把獲得的syslogd進程的PID(輸出的第二列是PID)填入下面:
kill –HUP PID
這樣,sudo就能夠寫日誌了:
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log install.log.syslog $cat /var/log/sudoJul 28 22:52:54 localhost sudo: foobar : TTY=pts/1 ; pwd=/home/foobar ; USER=root ; command=/bin/ls /root
不過,有一個小小的「缺陷」,sudo記錄日誌並非很忠實:
[foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null cat /var/log/sudo...Jul 28 23:10:24 localhost sudo: foobar : TTY=pts/1 ; PWD=/home/foobar ; USER=root ; COMMAND=/bin/cat /etc/shadow
重定向沒有被記錄在案!爲何?由於在命令運行以前,shell把重定向的工做作完了,sudo根本就沒看到重定向。這也有個好處,下面的手段不會得逞:
[foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 權限不夠
sudo 有本身的方式來保護安全。以root的身份執行sudo-V
,查看一下sudo的設置。由於考慮到安全問題,一部分環境變量並無傳遞給sudo後面的命令,或者被檢查後再傳遞的,好比:PATH,HOME,SHELL等。固然,你也能夠經過sudoers來配置這些環境變量。