Linux實戰教學筆記15:用戶管理初級(下)

第十四節 用戶管理初級(下)

標籤(空格分隔): Linux實戰教學筆記-陳思齊java

---更多資料點我查看python

1,用戶查詢相關命令id,finger,users,w,who,last,lastlog,groups

本節主要介紹在用戶管理中,查詢用戶的幾種常見工具id,finger,w,who,last,lastlog,groups的用法。linux

用戶查詢工具的原理:
在用戶管理中,用戶查詢是經過幾個經常使用的工具來完成的,好比id,finger,groups,users....,咱們都知道用戶的配置文件是/etc/passwd,用戶組的配置文件是/etc/group文件,咱們對用戶的查詢除了經過查詢工具之外,咱們還能直接查看用戶和用戶組的配置文件或相關的用戶日誌記錄信息來達到查詢的目的;
用戶查詢工具的原理也是讀取與用戶和用戶組有關的配置文件以及相關的用戶日誌記錄信息,而後按必定的規則和條件輸出。nginx

1.1 id命令

id命令是用來查詢用戶的信息,好比用戶所歸屬於哪些用戶組,以及UID和GID等。id命令的用法很是簡單,咱們舉例說明一下:
1)id命令語法
語法格式:id(參數)【用戶名】
若是id後面不接任何參數和任何用戶,默認顯示當前操做用戶的用戶名,所歸屬的用戶組,UID和GID等。
2)id命令實例
實例1:查詢自身的相關信息(不加任何參數和用戶名)正則表達式

[root@chensiqi1 ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

說明:在不加任何參數的狀況下,查詢的是當前操做用戶的用戶名,UID,GID和用戶所歸屬主用戶組(或稱作初始有效用戶組)和附屬用戶組,在本例中,用戶名是root,UID是0,所歸屬的主用戶組是root,GID爲0.root同時屬於bin,daemon....等用戶組。shell

實例2:id後面換用戶名
若是咱們想查詢系統中指定用戶屬於哪些用戶組及UID和GID相應內容,能夠直接執行「id用戶名」,這裏的用戶名必須是系統中真實存在的apache

[root@chensiqi1 ~]# id chensiqi3 uid=808(chensiqi3) gid=801(sa) groups=801(sa)

說明:查詢用戶chensiqi3的信息,用戶chensiqi3,UID爲808,所歸屬的主要用戶組爲sa,主用戶組的GID是801。
正如前文所講的,用戶和用戶組的對應關係,能夠是一對一,一對多,多對一,或多對多的交叉關係,本例就是一個用戶屬於多個用戶組的狀況,就象一我的屬於多個組織和集體同樣,這是合法。
總結:id的命令很簡單,在生產場景中經常使用的方法就是「id 用戶名」或「id」的方法。centos

1.2 finger命令

finger命令側重於用戶信息的查詢,查詢的內容包括用戶名,家目錄,登陸shell類型,用戶真實的名字,辦公地址,辦公電話,也包括登陸終端,寫狀態,時間等;
前文咱們經過useradd,chsh,chfn,usermod等命令修改的信息,均可以經過finger命令查看數組

finger參數選項 註釋說明(帶特殊顏色的,須要掌握)
-l 顯示全部信息
-m 禁止對用戶真實名字進行匹配
-p 把.plan和project文件中內容省略
-s 顯示短格式信息

1.3 w,who,users,last,lastlog命令

w,who和users幾個命令工具,通常是用來查詢已登陸當前主機的用戶信息:finger命令也有這個功能。而看用戶更詳細的登陸信息,不一樣命令的側重點略有差異,你們能夠仔細對比下。tomcat

[root@chensiqi1 ~]# w #顯示已經登錄的用戶,而且都作了什麼的信息 10:28:30 up 8:55, 1 user, load average: 0.06, 0.06, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.197.1 09:41 0.00s 0.03s 0.00s w ??oot@chensiqi1 ~]# who # 顯示哪些用戶在登陸,終端及登陸時間,來源主機? root pts/0 Feb 20 09:41 (192.168.197.1) [root@chensiqi1 ~]# users #僅顯示哪些用戶在登陸 root [root@chensiqi1 ~]# finger ##不加參數也表示顯示登陸用戶的相關信息,但這個命令還能夠顯示其餘未登陸的用戶信息 Login Name Tty Idle Login Time Office Office Phone root root pts/0 Feb 20 09:41 (192.168.197.1) [root@chensiqi1 ~]# last #顯示已登陸的用戶列表及登陸時間等 root pts/0 192.168.197.1 Mon Feb 20 09:41 still logged in root pts/1 192.168.197.1 Sun Feb 19 23:24 - 05:35 (06:11) root pts/0 192.168.197.1 Sun Feb 19 21:34 - 00:22 (02:47) root pts/0 192.168.197.1 Sun Feb 19 11:11 - 20:43 (09:32) 如下省略.... [root@chensiqi1 ~]# lastlog #報告最近的全部系統用戶的登陸信息 Username Port From Latest root pts/0 192.168.197.1 Mon Feb 20 09:41:51 -0500 2017 bin **Never logged in** daemon **Never logged in** adm **Never logged in** lp **Never logged in** sync **Never logged in** shutdown **Never logged in** 如下省略...

總結:
w,who,users,last,lastlog等幾個命令的功能有不少類似的地方,具體細節,上文已經解釋說明,這幾個命令咱們會常常用到,但使用的方法通常就是僅僅執行命令自己而已。

2,Linux用戶身份切換命令

  • 咱們知道linux系統中,超級用戶root具備超級管理權限。因爲權限太大,若是管理很差,就會對系統安全帶來嚴重隱患。在工做場景中,咱們只在必要時才使用超級用戶root的權限。通常的臨時性處理工做,都是以普通用戶的身份完成的。那麼,當普通用戶須要超級用戶的權限時,是怎麼進行切換管理的呢?這就不得不提到兩個重要的用戶身份切換命令su和sudo。下面咱們就講解這兩個命令是如何完成用戶切換工做的,達到系統管理目的的?
  • 在linux系統中,每一個文件,目錄和進程,都是歸屬於某一個用戶的,沒有用戶的許可,其餘的普通用戶是沒法操做的,root除外。root用戶的特權還表如今root能夠超越任何用戶和用戶組來對文件或目錄進行讀取,修改或刪除(在系統正常的許可範圍內);對可執行程序的執行,終止;對硬件設備的添加,建立和移除等;也能夠對文件和目錄進行屬主和權限進行修改。

2.1 su命令

2.1.1 su命令介紹

  • 簡單的說,su命令就是切換用戶身份的命令。好比,咱們以普通用戶chensiqi登陸到系統後,當要在系統中執行useradd添加用戶時,會發現chensiqi用戶沒有這個權限,這個權限只能由root權限執行。解決方法一是退出chensiqi用戶,從新以root用戶登陸。二是咱們直接在chensiqi用戶下,使用su命令來切換到root下進行添加用戶工做,等工做完成後再退出root用戶。毫無疑問,上面兩個方法,經過su命令切換是一種比較好的辦法。
  • 經過su命令能夠再用戶之間切換,超級權限用戶root向普通或虛擬用戶切換不須要密碼驗證(這就是超級權限所在),其餘普通用戶之間或者普通用戶切換到root,都須要切換用戶的密碼驗證。

2.1.2 su命令用法

su 【選項參數】【用戶】
爲了方便查看,用表格的方式把su命令的經常使用參數選項列表顯示,以下所示:
|su參數選項|註釋說明【帶特殊顏色表示重要,須要掌握】|
|--|--|
| - | 使一個shell成爲登陸的shell,如執行su - chensiqi時,表示該用戶想改變身份爲chensiqi,而且使用chensiqi用戶的環境變量配置,如/home/chensiqi/.bash_profile等|
|-c|臨時切換到某一個用戶,執行一個命令,執行完,自動返回到當前用戶;切換到一個shell,執行一個命令,而後退出所切換的用戶環境|
|-m|切換用戶時,不重置用戶環境比納涼,-p的功能同-m這個參數爲su默認值。|
|-s|若是/etc/shells容許,則運行指定的shell|

2.1.3 su命令實例

當不加任何參數執行su命令時,表示要切換到root用戶,但這樣執行,會遇到一些問題。由於雖然是切換到root用戶了,但並無改變爲root用戶登陸環境,用戶默認的登陸環境,能夠在/etc/passwd中查獲得,包括家目錄,shell類型等。比較規範的操做方法是su -。

實例1:由普通用戶chensiqi切換到root用戶。

[chensiqi@chensiqi1 ~]$ whoami #確認當前用戶爲chensiqi root chensiqi [chensiqi@chensiqi1 ~]$ su #不加用戶就表示切換到root,固然也能夠su root root Password: [root@chensiqi1 chensiqi]# env HOSTNAME=chensiqi1 SHELL=/bin/bash HISTSIZE=500 USER=chensiqi MAIL=/var/spool/mail/chensiqi PWD=/home/chensiqi HOME=/root LOGNAME=chensiqi 如下省略無關內容... 提示:細心的同窗應該已經看到了,若是使用su而不加上「-」這個參數,那麼,切換前的用戶的相關信息還會存在,這會引發不少麻煩,甚至出現意想不到的結果。所以,切換用戶時,最好是「su - 用戶名」。這是生產場景中標準的切換用戶的操做方法。 [root@chensiqi1 chensiqi]# exit #退出當前用戶,這個命令也能夠用ctrl+d [chensiqi@chensiqi1 ~]$ su - root Password: [root@chensiqi1 ~]# env | egrep "USER|MALL|PWD|LOGNAME" USER=root PWD=/root LOGNAME=root 提示:此次和上次就不一樣了,全部的環境變量信息都切換到了root下。所以,請你們在切換用戶時必定要加上「su - 用戶名」,這裏提醒下,不光是切換到root,切換到其餘用戶也是同樣。

2.1.4 su命令總結

1)普通用戶切換到root用戶,可以使用su -或su - root.必須輸入root的密碼才能完成切換。
2)root用戶切換到普通用戶,可以使用「su - 普通用戶」的寫法。不須要輸入任何密碼就能完成切換。切換到普通用戶後,在執行一些命令如ifconfig時,可能會遇到環境變量PATH路徑問題而找不到某些系統命令(通常/sbin,/usr/sbin等下面的命令),這時就須要將普通用戶的PATH,配置成root的PATH內容,前面的文章已講解過這個配置方法,不清楚的同窗,能夠查詢一下。提示:Centos6.4以上系統不存在這個問題
3)若是僅但願以某用戶的角色執行命令,而不直接切換到該用戶下操做,可使用su - 用戶名 -c 「命令」的方式.

實例2:由root切換到普通用戶chensiqi

[root@chensiqi1 ~]# su - chensiqi ##從root切換到任何普通用戶,不須要輸入密碼 [chensiqi@chensiqi1 ~]$ env | egrep "USER|MATL|PWD|LOGNAME" USER=chensiqi PWD=/home/chensiqi LOGNAME=chensiqi

實例3:chensiqi用戶使用root身份執行一個命令。

[chensiqi@chensiqi1 ~]$ ls -l /root
ls: cannot open directory /root: Permission denied [chensiqi@chensiqi1 ~]$ su - root -c "ls -l /root" #這是su的參數組合,表示切換到root用戶,而且改變到root環境,而後列出root家目錄的文件,而後退出root用戶 Password: #須要輸入root密碼 total 44 -rw-r--r--. 1 root root 4 Feb 20 01:31 111 -rw-------. 1 root root 1144 Jan 11 22:26 anaconda-ks.cfg drwxr-xr-x. 2 root root 4096 Feb 19 08:41 chen -rw-r--r--. 1 root root 237 Feb 20 03:02 chen2017-02-20.tar.gz drwxr-xr-x. 3 808 root 4096 Feb 20 00:14 chensiqi -rw-r--r--. 1 root root 21764 Jan 11 22:26 install.log -rw-r--r--. 1 root root 0 Feb 20 00:21 stu1 -rw-r--r--. 1 root root 0 Feb 20 00:21 stu2 -rw-r--r--. 1 root root 0 Feb 20 00:21 stu3 -rw-r--r--. 1 root root 0 Feb 20 00:21 stu4 -rw-r--r--. 1 root root 0 Feb 20 00:21 stu5 -rw-r--r--. 1 root root 0 Jan 11 22:26 ww.etiantian.org

實例4:有關su命令參數生產環境應用案例

在生產場景中,爲了安全起見,咱們通常會使用普通用戶來啓動服務器進程(如:apache,nginx,resin,tomcat等),好比,下面例子:

[chensiqi@chensiqi ~]$ ps -ef | grep chensiqi #查看包含chensiqi用戶的服務進程 tddoc 9042 1 0 Jan16 ? 00:00:02 java -server -XMN125M -Xmn125M -Xms512M -Xmx512M -Xss2048k -Djava.rmi.server.logCalls=false -Dsun.rmi.transport.tcp.logLevel=WARNING -Xlogge:/home/tddoc/run/resin/logs/gc.log -jar /home/tddoc/run/resin/lib/resin.jar -server a 提示:這是一個resin(提供java服務的軟件)的服務進程,當前服務用戶是chensiqi

這個時候咱們就面臨一個問題,如何讓系統在每一次開機時也要自動以普通用戶啓動指定的服務腳本呢?答案在下面

[root@chensiqi1 ~]# tail -5 /etc/rc.local #把要執行的腳本防護開機自啓動配置文件/etc/rc.local中 #######分用戶方案啓動服務命令####### su - chensiqi -c '/bin/sh /homechensiqi/bin/deloy.sh' 提示:你們注意了,這裏就是在系統開機時,經過su - 用戶名 -c 「命令」,執行的啓動服務的命令,其中,/bin/sh /home/chensiqi/bin/deploy.sh就是僅限在chensiqi用戶下啓動的服務命令腳本。經過普通用戶跑服務是個很好的提高系統安全的好方法,在生產環境中,大多數服務(如,apache,nginx,resin,tomcat,rsync,lvs,haproxy,heartbeat,squid)等均可以經過普通用戶來啓動,而不用root。這樣作,使得系統安全又提升了一個等級。目前,taobao支持寶等大公司均有采用。 [root@chensiqi1 ~]# su - chensiqi -c "touch a.txt" [root@chensiqi1 ~]# ls -l /home/chensiqi/ total 0 -rw-rw-r--. 1 chensiqi chensiqi 0 Feb 21 00:11 a.txt
  • 1,從安全角度,普通用戶啓動服務安全些
  • 2,管理,用普通用戶便可管理對應的服務/軟件

2.1.5 su命令的優缺點

  • 毫無疑問,切換用戶身份的su命令爲咱們管理linux系統帶來了不少方便,經過切換到root下,能夠完成各類系統管理工做,只要任何一個普通用戶知道了root用戶的密碼,均可以以普通用戶的身份切換到root來完成原本沒法完成的系統管理工做。
  • 可是,這樣經過su命令切換到root後,也帶來了很大安全管理問題,好比系統有8個普通用戶,均可以經過切換到root身份進行系統管理,甚至還能夠改掉root的密碼,讓其餘的普通用戶沒法再實現系統管理,還有,這麼多用戶中,有任何一人對系統操做的重大失誤,均可以致使整個系統崩潰或數據損失。這樣的非集權式管理,在必定程序上就對系統的安全形成了較大威脅。在工做中,幾乎有一半的問題來自於內部。
  • 因此使用su命令切換身份在多個系統管理員共同管理的場合,並非最好的選擇,所以,我建議若是是通常的中小公司不超過3個管理員時,爲了管理方便,使用su來共同管理是能夠接受的。
  • 咱們既但願超級用戶root密碼掌握在少數或惟一的管理員手中,又但願多個系統管理員可以完成更多更復雜的系統管理工做。那麼,如何解決多個系統管理員都能管理系統而又不讓超級權限氾濫的需求呢?這就須要sudo命令來替代或結合su命令來完成這樣的苛刻且必要的管理需求。
    1,必須知道root用戶的密碼
    2,咱們但願普通用戶能夠臨時作回皇帝,可是咱們不想給root用戶的密碼,--sudo解決
    3,大部分企業故障,在工做中幾乎有一半的問題來自於內部。

3,sudo命令

3.1 sudo命令的用法

sudo 【參數選項】命令

爲了方便,咱們用表格把sudo命令經常使用參數選項列表顯示,以下所示:
|sudo參數選項|註釋說明(帶特殊顏色的表示重要,須要掌握)|
|--|--|
|-l|列出用戶在主機上可用的和被禁止的命令:當配置好sudo權限規則後,可用這個參數來查看受權狀況|
|-v|驗證用戶的時間戳,當用戶運行sudo,輸入用戶的密碼後,在短期內能夠不用輸入口令直接進行sudo操做;用-v能夠跟蹤最新的時間戳|
|-u|指定以某個用戶身份執行特定的命令操做,chensiqi ALL=(ALL) /bin/cp|
|-k|同-K,刪除時間戳,下一個sudo命令要求提供密碼,前提是該用戶受權中不能有NOPASSWD參數。時間戳默認5分鐘也會時效。|

3.2 sudo命令實例

實例1:使用chensiqi用戶在/root目錄下創建文件

[chensiqi@chensiqi1 ~]$ whoami #查看當前用戶 chensiqi [chensiqi@chensiqi1 ~]$ sudo touch /root/ett #這是sudo生產場景的標準用法 [sudo] password for chensiqi: #提示輸入密碼,密碼爲當前用戶的密碼 Sorry, user chensiqi is not allowed to execute '/bin/touch /root/ett' as root on chensiqi1. #由於沒有sudo權限,因此不讓操做 接下來咱們進行權限配置 [root@chensiqi1 ~]# whoami #查看當前用戶 root [root@chensiqi1 ~]# grep chensiqi /etc/sudoers chensiqi ALL=(ALL) /bin/touch #給chensiqi用戶受權/bin/touch命令 [root@chensiqi1 ~]# su - chensiqi #切換帳戶 [chensiqi@chensiqi1 ~]$ sudo touch /root/ett #申請受權在/root下建立一個文件 [chensiqi@chensiqi1 ~]$ exit logout [root@chensiqi1 ~]# ls -l ett -rw-r--r--. 1 root root 0 Feb 21 01:17 ett

實例2:配置sudoers文件,對chensiqi進行受權,而後在實踐上例的操做

[root@chensiqi1 ~]# whoami #查看當前用戶 root [root@chensiqi1 ~]# sed -n '92p' /etc/sudoers #讀取受權信息 chensiqi ALL=(ALL) ALL [root@chensiqi1 ~]# visudo -c #檢查sudo配置文件是否有錯誤 /etc/sudoers: parsed OK

實例3:sudo與su兩個命令結合使用的案例
特別說明:這個案例操做,再生產環境中常常用到

[chensiqi@chensiqi1 ~]$ whoami
chensiqi
[chensiqi@chensiqi1 ~]$ sudo su - #切換root [sudo] password for chensiqi: #輸入當前用戶密碼 [root@chensiqi1 ~]# whoami root [root@chensiqi1 ~]# exit logout [chensiqi@chensiqi1 ~]$ sudo su - chensiqi2 #切換chensiqi2用戶,由於是基於root進行切換,因此不須要密碼了 [chensiqi2@chensiqi1 ~]$ whoami chensiqi2

實例4:chensiqi用戶經過sudo切換到chensiqi2用戶下建立目錄

[chensiqi@chensiqi1 ~]$ whoami
chensiqi
[chensiqi@chensiqi1 ~]$ sudo -u chensiqi2 mkdir /home/chensiqi2/tmpdir #臨時用chensiqi2的身份在其家目錄下建立一個文件夾 [chensiqi@chensiqi1 ~]$ ls -l /home/chensiqi2 #直接查看是不被容許的 ls: cannot open directory /home/chensiqi2: Permission denied [chensiqi@chensiqi1 ~]$ sudo -u chensiqi2 ls -l /home/chensiqi2 #申請臨時切換chensiqi2查看 total 4 -rw-r--r--. 1 chensiqi2 chensiqi2 0 Feb 11 02:21 readme drwxr-xr-x. 2 chensiqi2 chensiqi2 4096 Feb 21 01:51 tmpdir [chensiqi@chensiqi1 ~]$ whoami #當前用戶仍是chensiqi chensiqi

3.2 更改受權/etc/sudoers文件的幾個方法:

1)方法一:執行visudo命令直接編輯/etc/sudoers文件(推薦)

## user MACHINE=COMMANDS ## ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL chensiqi ALL=(ALL) ALL #前面sudo實例2的受權,一樣能夠設置。固然,位置未必非要在原有的配置文件root這裏。

特別說明:在沒有特殊需求的前提下,請你們必定要使用這個方法,這也是我建議同窗們使用的方法,這種受權方法,缺點就是必須和系統交互才能完成受權。

2)方法二:直接修改/etc/sudoers文件方法(不推薦)

[root@chensiqi1 ~]# echo "chensiqi ALL=(ALL) ALL" >> /etc/sudoers #經過echo命令追加一行受權規則,讓chensiqi用戶對全部的主機,能夠切換全部用戶,執行全部命令。 #特別提示:對於新手,請不要使用這個命令,若是配置出錯,會致使全部普通用戶沒法使用; #下面的不少命令作法實際上都是在爲咱們前面的不規範的操做再檢查處理,看看是否是有些得不償失? [root@chensiqi1 ~]# tail -1 /etc/sudoers chensiqi ALL=(ALL) ALL [root@chensiqi1 ~]# visudo -c #檢測sudo配置文件語法錯誤 /etc/sudoers: parsed OK [root@chensiqi1 ~]# ls -l /etc/sudoers -r--r-----. 1 root root 3756 Feb 21 02:40 /etc/sudoers 提示:查看sudoers文件的權限是否被更改了,權限必須爲440(-r--r----)不然會出現問題。

Centos5.8 sudoers有權限屬性問題:

[root@C58 ~]# ll /etc/sudoers -rw-r--r-- 1 root root 3403 Aug 30 02:41 /etc/sudoers [root@C58 ~]# sudo su - sudo:/etc/sudoers is mode 0644 ,should be 0440 sudo:no valid sudoers sources found,quitting

Centos6.4 sudoers 權限不對也能夠登陸:

[root@C64 ~]# ll /etc/sudoers -rw-r--r-- 1 root root 4089 Aug 23 01:26 /etc/sudoers [root@C64 ~]# su - chensiqi [chensiqi@C64 ~]$ sudo su -

爲何我在這裏提出並強調這個配置方法呢?就是由於這個方法雖然比較危險,可是也有優勢,最主要的優勢就是不須要和系統作交互,能夠經過shell等腳本批量快速的添加,修改受權。

3.2.1 但以上直接修改sudoers的配置文件方法有如下須要注意的幾點:

1,echo命令是追加「>>」,不是重定向「>」,除了echo外,能夠用cat,sed等命令實現相似的功能。
2,修改操做完成必定要執行visudo -c進行語法檢查,這彌補了直接修改沒有語法檢查的不足。
3,確保/etc/sudoers權限是正確的(-r--r----),權限不對會致使sudo功能異常(Centos6權限不對也能夠登陸,可是/etc/sudoers是440是最安全的)
4,及時對受權的操做進行測試,驗證是否正確(最好不要退出當權受權窗口,以便發現問題及時恢復)。
5,確保知道正確的root用戶密碼,以便在sudo出現問題時能夠經過普通用戶等執行su - 命令切換到root進行恢復

看到了吧,有這麼多須要注意的問題,若是不注意,極可能會帶來災難性後果,所以沒有特殊緊急批量增長sudoers文件內容的需求,建議經過visudo來編輯修改,畢竟系統安全是至關重要的。

3)方法三:使用用戶組的方式實現sudo受權

經過受權一個用戶組的方式來配置/etc/sudoers,如:受權sa組具有以上全部主機的管理權限,這樣之後有增長用戶須要相同權限時,直接將用戶加入到sa組就能夠享受sa組的sudo受權了,是否是更簡單了呢。

#這是個單用戶受權 root ALL=(ALL) ALL #這是組受權 # %wheel ALL=(ALL) ALL %sa ALL=(ALL) ALL #注意用戶組受權和普通用戶的區別,開頭爲「%」百分號。sa組同用戶同樣必須是已經存在的,是系統用戶組。

使用用戶組實際受權的操做過程以下:

[root@chensiqi1 ~]# echo "%sa ALL=(ALL) ALL" >> /etc/sudoers [root@chensiqi1 ~]# visudo -c #檢查語法 /etc/sudoers: parsed OK [root@chensiqi1 ~]# tail -1 /etc/sudoers #查看一下 %sa ALL=(ALL) ALL

3.3 /etc/sudoers的規則大體可分爲兩類:

1,別名定義
2,受權規則

別名定義並非必須的,只是在受權規則多的時候更方便受權,但受權規則是必須的。
|用戶名|主機別名=(身份別名)|受權命令|
|--|--|--|
|root|ALL=(ALL)|ALL|
|User Aliases|HOST_Alias=(Runas_Alias)|cmd_Alias|

3.3.1 HOST_Alias 定義主機別名

實際語法爲:
## Host Aliases ## Groups of machines. You may prefer to use hostnames (perhap using) ## wildcards for entire domains or IP addresses instead. Host_Alias FILESERVERS = fs1,fs2 #請注意定義範圍,‘=’號兩邊有空格 Host_Alias MAILSERVERS = smtp,smtp2 #請注意定義規範,每一個成員用逗號分隔,逗號後面有空格。 說明: 1,在生產場景中,通常狀況下不須要設置主機別名,在定義受權規則時能夠經過ALL來匹配全部的主機。 2,請注意上面定義的規範,有些規範雖然不是必須的,但咱們仍是要求可以按照系統的標準來配置,這樣能夠避免意外的問題發生。 3,以上Host Aliases內容截取自/etc/sudoers文件,最後兩行取消了註釋。 4,其實就是一個邏輯上的主機組,當多臺服務器共享一個/etc/sudoers時候會用到這個主機別名。 ========================================= ## user MACHINE=COMMANDS ## The COMMANDS section may have other options added to it ## Allow root to run any commands anywhere root | ALL=(ALL) ALL #第一個ALL就是主機別名的應用位置 例: chensiqi 192.168.0.101=(ALL) ALL #這個的意思就是隻容許在192.168.0.108這臺電腦遠程登陸的chensiqi用戶才能需有root的全部權限。

3.3.2 User_Alias 定義用戶別名

別名成員能夠是用戶,用戶組(用戶組前面要加%號)

實際語法爲:
## User Aliases ## These aren't often neccessary,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,%groupname 提示: 1,設置用戶別名也不是必須的,更多的狀況,咱們能夠經過%groupname的方式來做爲成員。 2,以上User Aliases 內容截取自/etc/sudoer文件,最後一行取消了註釋 ===========================================  ## user MACHINE=COMMANDS ## The COMMANDS section may have other options added to it ## Allow root to run any commands anywhere ## which machines (the sudoers file can be shared between multiple systems) root ALL=(ALL) ALL #root用戶的位置就是用戶別名的應用位置

3.3.3 Runas_Alias 定義runas別名

這個別名指定的是「用戶身份」,即sudo容許切換到的用戶身份

實際語法爲:
Runas_Alias     OP = root
==========================================
## user MACHINE=COMMANDS ## The COMMANDS section may have other options added to it ## Allow root to run any commands anywhere ## which machines (the sudoers file can be shared between multiple systems) root ALL=(ALL) ALL #小括號中得第二個ALL位置就是Runas_Alias別名的應用位置。

實例以下:

[chensiqi@chensiqi1 ~]$ whoami
chensiqi
[chensiqi@chensiqi1 ~]$ sudo -l
User chensiqi may run the following commands on this host: (chensiqi2) /bin/mkdir, (chensiqi2) /bin/ls #小括號裏是被受權的身份,也就是說能夠sudo -u chensiqi2 [chensiqi@chensiqi1 ~]$ sudo -u root ls /root #root身份未被受權,所以被拒絕 Sorry, user chensiqi is not allowed to execute '/bin/ls /root' as root on chensiqi1. [chensiqi@chensiqi1 ~]$ sudo -u chensiqi2 ls /home/chensiqi2 #申請以chensiqi2身份查看其家目錄,成功 ccccc [chensiqi@chensiqi1 ~]$ ls /home/chensiqi2 #直接查看失敗 ls: cannot open directory /home/chensiqi2: Permission denied [chensiqi@chensiqi1 ~]$ 

3.3.4 Cmd_Alias 定義命令別名

命令別名就是定義一個別名,包含一堆命令,即一組相關命令的集合。

提示:
1,命令別名就是設置用能夠執行哪些命令。
2,以上Command Alias 內容截取自/etc/sudoer文件,最後一行取消了註釋。
==========================================
## user MACHINE=COMMANDS ## The COMMANDS section may have other options added to it ## Allow root to run any commands anywhere ## which machines (the sudoers file can be shared between multiple systems) root ALL=(ALL) ALL #最後一個ALL的位置就是cmd_Alias命令別名

3.3.5 回顧下別名和具體受權配置的關係

用戶或組 主機(能夠執行sudo的機器) 能夠切換的用戶角色  
root ALL= (ALL) ALL
User_Alias Host_Alias Runas_Alias Cmd_Alias
用戶別名的位置 主機別名的位置(能夠在哪一個主機上執行sudo) Runas別名的位置(以誰的身份執行sudo受權命令) 命令別名的位置

什麼狀況下使用上述別名?

工做中通常有多個系統用戶,須要分類,分層次管理用戶的時候

定義別名的實踐例子:

因爲主機別名,在工做中使用的很少,這裏咱們就不講解了,若是同窗們感興趣,能夠查看man sudoers或less /etc/sudoers自行查看

生產環境實例:

實例1:定義用戶別名

sa ===> system administrator

User_Alias  ADMINS = chensiqi,chensiqi2,%sa  #注意定義的規範
#定義系統管理用戶別名ADMINS,包含成員chensiqi,chensiqi2及sa組成員 User_Alias NETADMINS = leo,maya #定義用戶別名NETADMINS來管理網絡,包含成員leo,maya User_Alias USERADMINS = zuma #定義用戶別名USERADMINS來管理用戶,包含成員zuma 特別說明:爲了方便管理,要儘量使用有意義的名稱做爲別名。另外,全部包含成員都必須是系統中存在的用戶或存在的組。

檢查並建立上述用戶及用戶組

[root@chensiqi1 ~]# id chensiqi uid=500(chensiqi) gid=802(chensiqi) groups=802(chensiqi) [root@chensiqi1 ~]# grep "^sa:" /etc/group sa:x:801: [root@chensiqi1 ~]# useradd leo && echo 123|passwd --stdin leo [root@chensiqi1 ~]# useradd maya && echo 123|passwd --stdin maya [root@chensiqi1 ~]# useradd zuma && echo 123|passwd --stdin zuma [root@chensiqi1 ~]# useradd chensiqi2 && echo 123|passwd --stdin chensiqi2

實例2:定義命令別名

Cmd_Alias   USERCMD = /usr/sbin/useradd,/user/sbin/userdel,/user/bin/passwd [A-Za-z]*,/bin/chown,/bin/chmod, ! /usr/bin/passwd root Cmd_Alias DISKCMD = /sbin/fdisk,/sbin/parted Cmd_Alias NETMAGCMD = /sbin/ifconfig,/etc/init.d/network Cmd_Alias CTRLCMD = /usr/sbin/reboot,/usr/sbin/halt 特別說明: 1)全部的命令別名下的成員必須是文件或目錄的絕對路徑 2)命令別名超過一行時,能夠經過「\」號換行。 3)定義時,能夠經過通配符,如/usr/bin/passwd [A-Za-z]*

上述用戶和命令別名實際上就是整理以下對應關係:
屏幕快照 2017-02-21 下午8.54.13.png-153.5kB

實例3:定義runas別名

Runas_Alias OP = root,chensiqi 特別說明:runas別迷ing的定義很少見,不經常使用,瞭解便可

3.4 /etc/sudoers配置文件中的受權規則

  • /etc/sudoers的受權規則就是分配權限的執行規則,前面咱們講到的定義別名主要爲了更方便受權引用別名。若是系統中的普通用戶很少,在受權時能夠不用定義別名,而是針對系統用戶直接受權,因此在受權規則中別名並非必須的,這一點你們要知道下,畢竟別名的技術理解和配置仍是有點難。
  • 關於受權規則,一般咱們能夠man sudoers來查看/etc/sudoers文件的配置信息,配置文件中的例子其實已經演示的很清楚了,這裏我僅給你們作一些必要的說明,若是想詳細瞭解受權規則寫法的,可執行man sudoers或man /etc/sudoers查詢。

3.4.1 sudo受權規則實例

下面咱們結合別名受權和用戶受權規則舉幾個綜合應用的例子

實例1:對chensiqi的受權規則以下

chensiqi ALL=/usr/sbin/useradd,/usr/sbin/userdel

在測試以前,爲了防止已有的配置干擾,咱們把全部配置恢復到默認狀況,咱們經過比速凍命令在/etc/sudoers裏的內容,表示chensiqi能夠在全部系統中,切換到root用戶下以root身份執行/usr/sbin/useradd和/usr/sbin/userdel命令,切換到chensiqi用戶下查看受權的結果以下:

[chensiqi@chensiqi1 ~]$ sudo -l #查看受權結果 [sudo] password for chensiqi: #輸入密碼 User chensiqi may run the following commands on this host: (root) /usr/sbin/useradd #受權的命令 (root) /usr/sbin/userdel #受權的命令

值得注意的是,本例省略了指定切換到哪一個用戶下執行/usr/sbin/useradd和/usr/sbin/userdel命令,根據以前所講,User_Alias默認狀況下是切換到root用戶下執行:同時,受權時未加NOPASSWD:配置,所以默認狀況下,第一次執行是須要密碼的。

實例2:對chensiqi的受權規則更改成以下:

chensiqi    ALL=(root)      /usr/sbin/useradd,/usr/sbin/userdel ###上面一行表示chensiqi能夠在全部的主機中,切換到root下執行useradd和userdel命令,和實例1的功能是等價的。

實例3:用戶組的配置例子

在前面已經講解過了,若是用戶組出如今/etc/sudoers中,前面要加%sa
%sa ALL=/usr/sbin/*,/sbin/*

若是咱們在/etc/sudoers中間加入如上一行,表示sa用戶組下的全部成員,在全部主機下,可切換到root執行/usr/sbin和/sbin目錄下全部命令,*爲正則表達式寫法,表示全部。

實例4:禁止某個命令的執行

禁止某個命令的執行,要在命令動做前面加上!號:本例中也使用了通配符的*的用法:
chensiqi ALL=(ALL) /usr/sbin/*,/sbin/*,!/sbin/fdisk
這個規則表示chensiqi用戶在全部主機上能夠切換到任何身份,能夠運行/usr/sbin和/sbin目錄下全部命令,但fdisk命令除外。

3.4.2 sudo配置文件/etc/sudoers受權規則注意事項總結:

1)受權規則中的全部ALL字符串必須爲大寫字母。
2)Cmd_ALias(命令別名):容許執行的命令是有順序的。命令的順序是從後向前,即把禁止執行的命令放在容許執行的命令的後邊。再強調下,禁止的命令儘可能放在後邊
3)一行內容超長能夠用「」斜線換行。
4)「!」歎號表示非,就是命令取反的意思,即禁止執行的命令
5)根據實際狀況,來分類製做命令別名,用什麼給什麼。

3.4.3 [Centos6.7以前]關於遠程執行sudo命令

在默認狀況下,咱們是沒法經過ssh遠程執行sudo命令的,這是由於,遠程執行sudo,那麼密碼是明文的,這是被禁止的。但是在實際生產場景中咱們常常須要這樣的需求,怎麼解決呢?

localhost:~ chensiqi$ ssh chensiqi@chensiqi cat /etc/redhat-release   #用普通帳號連接查看遠程服務器系統版本 chensiqi@chensiqi's password: CentOS release 6.8 (Final) localhost:~ chensiqi$ ssh root@chensiqi sed -n '92p' /etc/sudoers #查看普通帳戶受權狀況 root@chensiqi's password: chensiqi ALL=(chensiqi2) /bin/mkdir,/bin/ls localhost:~ chensiqi$ ssh chensiqi@chensiqi sudo ls /root #ssh遠程執行sudo命令 chensiqi@chensiqi's password: sudo:沒有終端存在,且未指定 askpass 程序 提示: 爲什麼會有這樣的錯誤呢?咱們之因此用ssh來執行sudo其實爲的就是能夠免交互方式來獲得咱們想獲得的結果。可是普通用戶sudo在申請受權的時候,是須要輸入密碼的,所以,咱們想要成功,須要先進行免密碼操做。 localhost:~ chensiqi$ ssh chensiqi@chensiqi cat /etc/redhat-release #查看版本 chensiqi@chensiqi's password: CentOS release 6.8 (Final) localhost:~ chensiqi$ ssh root@chensiqi "sed -n '92p' /etc/sudoers" #查看受權資料 root@chensiqi's password: chensiqi ALL=(ALL) NOPASSWD: /bin/mkdir,/bin/ls #進行了免密碼配置 localhost:~ chensiqi$ ssh chensiqi@chensiqi "sudo ls /root" #遠程執行sudo。成功! chensiqi@chensiqi's password: 111 anaconda-ks.cfg chen chen2017-02-20.tar.gz chensiqi dsfds ett gsdgdsfg install.log sdfsdf stu1 stu2 stu3 stu4 stu5 ww.etiantian.org zzzz

特別提示:
設置了免密碼以後,之因此能成功,是由於linux系統版本爲Centos6.8,若是是以前的系統版本。那麼咱們須要作特殊處理。咱們能夠經過「ssh -t hostname sudo 」的方式來執行,也就是加了個-t參數。經過man ssh查看-t參數的幫助能夠得知,這是一個能夠強制ssh遠程執行原本須要屏幕的程序(免交互),會強制配置終端tty,即便本地沒有。

4,項目實戰經驗:配置sudo命令用戶行爲日誌審計

說明:所謂sudo命令日誌審計,並不記錄普通用戶的普通操做。而是記錄那些執行sudo命令的用戶的操做。

項目實戰:簡歷中的經驗說明模版

服務器日誌審計項目提出與實施 20xx.0x - 20xx.xx
1,權限方案實施後,權限獲得了細化控制,接下來進一步實施對全部用戶日誌記錄方案。
2,經過sudo和syslog(rsyslog)配合實現對全部用戶進行日誌審計並將記錄集中管理(發送到中心日誌服務器)
3,實施後讓全部運維和開發的全部執行的sudo管理命令都有記錄可查,杜絕了內部人員的操做安全隱患。

生產環境企業日誌審計解決方案:

所謂日誌審計,就是記錄全部系統及相關用戶行爲信息,而且能夠自動分析,處理,展現(包括文本或者錄像)

屏幕快照 2017-02-21 下午11.57.46.png-294.4kB

方法一:經過環境變量命令及rsyslog服務進行全部用戶的全部操做的所有日誌審計(信息量太大,不推薦)。

方法二:sudo配合rsyslog服務,進行日誌審計(審計信息較少,效果不錯)

方法三:在bash解釋器程序裏嵌入一個監視器,讓全部被審計的系統用戶使用修改過的增長了監視器的特殊bash程序做爲工做環境

方法四:齊治的堡壘機:商業產品

咱們今天要學習的是:sudo日誌審計:專門對使用sudo命令的系統用戶記錄其執行的命令相關信息。

方法五:python開發的開源產品

點我查看:CrazyEye開源堡壘機

方法六:

點我查看:開源跳板機(堡壘機)Jumpserver部署詳解

方法七:

shell跳板機:

屏幕快照 2017-02-20 下午9.56.36.png-206.1kB

1)安裝sudo命令,rsyslog服務

通常狀況下系統都是默認安裝了的。(Centos5爲syslog)

2)配置/etc/sudoers

增長配置「Defaults logfile=/var/log/sudo.log」到/etc/sudoers中,注意:不包含引號。
[root@chensiqi ~]# echo "Defaults logfile=/var/log/sudo.log">>/etc/sudoers
一行搞定sudo日誌審計

[root@chensiqi1 ~]# tail -1 /etc/sudoers Defaults logfile=/var/log/sudo.log [root@chensiqi1 ~]# visudo -c #檢查sudoers文件語法 /etc/sudoers: parsed OK

提示:下面的3),4)能夠不執行,直接切換到普通操做,而後查看/var/log/sudo.log有無記錄

[root@chensiqi1 ~]# cat /var/log/sudo.log Feb 21 11:30:55 : chensiqi : TTY=pts/0 ; PWD=/home/chensiqi ; USER=root ; COMMAND=/bin/ls /root

3)配置系統日誌/etc/rsyslog.conf(這裏能夠不配)

增長配置local2.debug到/etc/rsyslog.conf中

[root@chensiqi1 ~]# echo "local2.debug /var/log/sudo.log" >> /etc/rsyslog.conf #這裏能夠不配 [root@chensiqi1 ~]# tail -1 /etc/rsyslog.conf #查看配置結果 local2.debug /var/log/sudo.log

提示:若是是Centos5系列,那麼路徑爲/etc/syslog.conf

4)重啓rsyslog內核日誌記錄器

[root@chensiqi1 ~]# /etc/init.d/rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ] 提示: 若是是Centos5系列,啓動命令爲/etc/init.d/syslog restart

此時,會自動創建一個/var/log/sudo.log文件而且文件權限爲600,全部者和組均爲root

[root@chensiqi1 ~]# ll /var/log/sudo.log #確保只有root才能查看 -rw-------. 1 root chensiqi 100 Feb 21 11:30 /var/log/sudo.log

5)測試sudo日誌審計配置結果

[root@chensiqi1 ~]# whoami root [root@chensiqi1 ~]# su - chensiqi [chensiqi@chensiqi1 ~]$ sudo -u chensiqi2 mkdir /home/chensiqi2/ggggg #執行sudo操做 [chensiqi@chensiqi1 ~]$ exit logout [root@chensiqi1 ~]# cat /var/log/sudo.log #查看日誌記錄 Feb 21 11:30:55 : chensiqi : TTY=pts/0 ; PWD=/home/chensiqi ; USER=root ; COMMAND=/bin/ls /root Feb 21 11:43:21 : chensiqi : TTY=pts/0 ; PWD=/home/chensiqi ; USER=chensiqi2 ; COMMAND=/bin/mkdir /home/chensiqi2/ggggg

知識擴展:日誌集中管理(瞭解)

  • rsync + inotify或定時任務+rsync,推送到日誌管理服務器上,10.0.0.7_20170201.sudo.log
  • rsyslog服務來處理
  • 日誌收集解決方案:scribe,Flume,stom,logstash ELK

5,運維知識體系V2.0

點我查看:運維知識體系

6,生產環境IDC系統權限申請表

屏幕快照 2017-02-21 下午9.04.39.png-475kB

金牌IT職業再教育培訓機構,歡迎來校資源。QQ:215379068
相關文章
相關標籤/搜索