linux 查看當前用戶id、whoami用戶列表、用戶組、用戶權限/etc/passwd、/etc/group、/etc/shadow以及切換用戶身份、su、sudo、/etc/sudoers

一、查看當前用戶之id、whoami

命 令:id 

功能說明:查看顯示目前登陸賬戶的uid和gid及所屬分組及用戶名 

語  法:id [-gGnru][--help][--version][用戶名稱] 

補充說明:id會顯示用戶以及所屬羣組的實際與有效ID。若兩個ID相同,則僅顯示實際ID。若僅指定用戶名稱,則顯示目前用戶的ID。 
這個命令在溢出時經常用到,查看是不是溢出root成功,執行一下id命令,顯示uid=0,則成功了。 

參  數: 
 -g或--group  顯示用戶所屬羣組的ID。 
 -G或--groups  顯示用戶所屬附加羣組的ID。 
 -n或--name  顯示用戶,所屬羣組或附加羣組的名稱。 
 -r或--real  顯示實際ID。 
 -u或--user  顯示用戶ID。 
 -help  顯示幫助。 
 -version  顯示版本信息 

執行結果: 

[root]#id 
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) 
[root]#su  linuxso 
[]$id 
uid=505(linuxso) gid=505(linuxso) groups=504(test),505(linuxso)

[root]-> whoami
root
[root]-> id root
uid=0(root) gid=0(root) groups=0(root)

二、查看用戶列表、用戶組之/etc/passwd、/etc/group、/etc/shadow

以下參考:http://blog.chinaunix.net/uid-24837409-id-3174035.html
在Linux中,用戶(User)和用戶組(Group)的配置文件,是作爲系統管理員的你最應該瞭解和掌握的系統基礎文件之一。從另一方面來說,瞭解這些文件也是系統安全管理的重要組成部份,作爲一個合格的系統管理員一定要對用戶和用戶組配置文件瞭解透徹才行;
   【1】、用戶(User)相關:
  談到用戶,就不得不談用戶管理、用戶配置文件、以及用戶查詢和管理的控制工具;用戶管理主要通過修改用戶配置文件完成,用戶管理控制工具最終目的也是爲了修改用戶配置文件。
  那麼,什麼是用戶查詢和管理控制工具呢?用戶查詢和控制工具是查詢、添加、修改和刪除用戶等系統管理工具,比如查詢用戶的id和finger命
令,添加用戶的useradd 或adduser 、userdel 用戶的刪除 、設置密碼的passwd命令 、修改用戶usermod
等等;我們需要知道的是通過用戶查詢和控制工具所進行的動作的最終目的也是修改用戶配置文件;所以我們進行用戶管理的時候,直接修改用戶配置文件一樣可以
達到用戶管理的目的。
  瞭解了上面所說的,我們便能實實在在的感覺到用戶(User)配置文件的重要性:其實用戶和用戶組在系統管理中是不可分割的,但爲了說明問題,
我們還是得把用戶(User)的配置文件單列出來解說,其中包括/etc/passwd 和/etc/shadow
文件;在這之中,你還能瞭解UID的重要性;
  通過本標題,您可以瞭解或掌握的內容有:瞭解/etc/passwd和/etc/shadow;什麼UID ;
  與用戶相關的系統配置文件主要有/etc/passwd
和/etc/shadow,其中/etc/shadow是用戶資訊的加密文件,比如用戶的密碼口令的加密保存等;/etc/passwd
和/etc/shadow 文件是互補的;我們可以通過對比兩個文件來差看他們的區別;
  1、關於/etc/passwd 和 UID;
  /etc/passwd 是系統識別用戶的一個文件,做個不恰當的比喻,/etc/passwd
是一個花名冊,系統所有的用戶都在這裏有登錄記載;當我們以beinan 這個賬號登錄時,系統首先會查閱 /etc/passwd
文件,看是否有beinan 這個賬號,然後確定beinan的UID,通過UID 來確認用戶和身份,如果存在則讀取/etc/shadow
影子文件中所對應的beinan的密碼;如果密碼覈實無誤則登錄系統,讀取用戶的配置文件;
  1)/etc/passwd 的內容理解:
  在/etc/passwd 中,每一行都表示的是一個用戶的信息;一行有7個段位;每個段位用:號分割,比如下面是我的系統中的/etc/passwd 的兩行:
   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
   linuxsir:x:501:502::/home/linuxsir:/bin/bash
  第一字段:用戶名(也被稱爲登錄名);在上面的例子中,我們看到這兩個用戶的用戶名分別是 beinan 和linuxsir;
  第二字段:口令;在例子中我們看到的是一個x,其實密碼已被映射到/etc/shadow 文件中;
  第三字段:UID ;請參看本文的UID的解說;
  第四字段:GID;請參看本文的GID的解說;
  第五字段:用戶名全稱,這是可選的,可以不設置,在beinan這個用戶中,用戶的全稱是beinan sun ;而linuxsir 這個用戶是沒有設置全稱;
  第六字段:用戶的家目錄所在位置;beinan 這個用戶是/home/beinan ,而linuxsir 這個用戶是/home/linuxsir ;
  第七字段:用戶所用SHELL 的類型,beinan和linuxsir 都用的是 bash ;所以設置爲/bin/bash ;
  2)關於UID 的理解:
  UID 是用戶的ID 值,在系統中每個用戶的UID的值是唯一的,更確切的說每個用戶都要對應一個唯一的UID
,系統管理員應該確保這一規則。系統用戶的UID的值從0開始,是一個正整數,至於最大值可以在/etc/login.defs
可以查到,一般Linux發行版約定爲60000; 在Linux 中,root的UID是0,擁有系統最高權限;
  UID 在系統唯一特性,做爲系統管理員應該確保這一標準,UID
的唯一性關係到系統的安全,應該值得我們關注!比如我在/etc/passwd 中把beinan的UID
改爲0後,你設想會發生什麼呢?beinan這個用戶會被確認爲root用戶。beinan這個帳號可以進行所有root的操作;
  UID 是確認用戶權限的標識,用戶登錄系統所處的角色是通過UID 來實現的,而非用戶名,切記;把幾個用戶共用一個UID
是危險的,比如我們上面所談到的,把普通用戶的UID 改爲0,和root共用一個UID
,這事實上就造成了系統管理權限的混亂。如果我們想用root權限,可以通過su或sudo來實現;切不可隨意讓一個用戶和root分享同一個UID ;
  UID是唯一性,只是要求管理員所做的,其實我們修改/etc/passwd 文件,可以修改任何用戶的UID的值爲0,
  一般情況下,每個Linux的發行版都會預留一定的UID和GID給系統虛擬用戶佔用,虛擬用戶一般是系統安裝時就有的,是爲了完成系統任務所必須的用戶,但虛擬用戶是不能登錄系統的,比如ftp、nobody、adm、rpm、bin、shutdown等;
  在Fedora 系統會把前499 個UID和GID 預留出來,我們添加新用戶時的UID
從500開始的,GID也是從500開始,至於其它系統,有的系統可能會把前999UID和GID預留出來;以各個系統中/etc/login.defs
中的 UID_MIN 的最小值爲準; Fedora 系統 login.defs的UID_MIN是500,而UID_MAX
值爲60000,也就是說我們通過adduser默認添加的用戶的UID的值是500到60000之間;而Slackware
通過adduser不指定UID來添加用戶,默認UID 是從1000開始;
  2、關於/etc/shadow ;
  1)/etc/shadow 概說;
  /etc/shadow文件是/etc/passwd 的影子文件,這個文件並不由/etc/passwd
而產生的,這兩個文件是應該是對應互補的;shadow內容包括用戶及被加密的密碼以及其它/etc/passwd
不能包括的信息,比如用戶的有效期限等;這個文件只有root權限可以讀取和操作,權限如下:
  -r——– 1 root root 1.5K 10月 16 09:49 /etc/shadow
  /etc/shadow 的權限不能隨便改爲其它用戶可讀,這樣做是危險的。如果您發現這個文件的權限變成了其它用戶組或用戶可讀了,要進行檢查,以防系統安全問題的發生;
  如果我們以普通用戶查看這個文件時,應該什麼也查看不到,提示是權限不夠:
  [beinan@localhost ~]$ more /etc/shadow
   /etc/shadow: 權限不夠
  2)/etc/shadow 的內容分析;
  /etc/shadow 文件的內容包括9個段位,每個段位之間用:號分割;我們以如下的例子說明;
  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
   linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
  第一字段:用戶名(也被稱爲登錄名),在/etc/shadow中,用戶名和/etc/passwd 是相同的,這樣就把passwd 和shadow中用的用戶記錄聯繫在一起;這個字段是非空的;
  第二字段:密碼(已被加密),如果是有些用戶在這段是x,表示這個用戶不能登錄到系統;這個字段是非空的;
  第三字段:上次修改口令的時間;這個時間是從1970年01月01日算起到最近一次修改口令的時間間隔(天數),您可以通過passwd 來修改用戶的密碼,然後查看/etc/shadow中此字段的變化;
  第四字段:兩次修改口令間隔最少的天數;如果設置爲0,則禁用此功能;也就是說用戶必須經過多少天才能修改其口令;此項功能用處不是太大;默認值是通過/etc/login.defs文件定義中獲取,PASS_MIN_DAYS 中有定義;
  第五字段:兩次修改口令間隔最多的天數;這個能增強管理員管理用戶口令的時效性,應該說在增強了系統的安全性;如果是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_MAX_DAYS 中定義;
  第六字段:提前多少天警告用戶口令將過期;當用戶登錄系統後,系統登錄程序提醒用戶口令將要作廢;如果是系統默認值,是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_WARN_AGE 中定義;
  第七字段:在口令過期之後多少天禁用此用戶;此字段表示用戶口令作廢多少天后,系統會禁用此用戶,也就是說系統會不能再讓此用戶登錄,也不會提示用戶過期,是完全禁用;
  第八字段:用戶過期日期;此字段指定了用戶作廢的天數(從1970年的1月1日開始的天數),如果這個字段的值爲空,帳號永久可用;
  第九字段:保留字段,目前爲空,以備將來Linux發展之用;
  如果更爲詳細的,請用 man shadow來查看幫助,您會得到更爲詳盡的資料;
  我們再根據實例分析:
  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
   linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
  第一字段:用戶名(也被稱之爲登錄名),在例子中有峽谷兩條記錄,也表示有兩個用戶beinan和linuxsir
  第二字段:被加密的密碼,如果有的用戶在此字段中是x,表示這個用戶不能登錄系統,也可以看作是虛擬用戶,不過虛擬用戶和真實用戶都是相對的,系統管理員隨時可以對任何用戶操作;
  第三字段:表示上次更改口令的天數(距1970年01月01日),上面的例子能說明beinan和linuxsir這兩個用戶,是在同一天更改了用戶密碼,當然是通過passwd 命令來更改的,更改密碼的時間距1970年01月01日的天數爲13072;
  第四字段:禁用兩次口令修改之間最小天數的功能,設置爲0
  第五字段:兩次修改口令間隔最多的天數,在例子中都是99999天;這個值如果在添加用戶時沒有指定的話,是通過/etc/login.defs來獲取默認值,PASS_MAX_DAYS 99999;您可以查看/etc/login.defs來查看,具體的值;
  第六字段:提前多少天警告用戶口令將過期;當用戶登錄系統後,系統登錄程序提醒用戶口令將要作廢;如果是系統默認值,是在添加用戶時由/etc
/login.defs文件定義中獲取,在PASS_WARN_AGE 中定義;在例子中的值是7 ,表示在用戶口令將過期的前7天警告用戶更改期口令;
  第七字段:在口令過期之後多少天禁用此用戶;此字段表示用戶口令作廢多少天后,系統會禁用此用戶,也就是說系統會不能再讓此用戶登錄,也不會提示用戶過期,是完全禁用;在例子中,此字段兩個用戶的都是空的,表示禁用這個功能;
  第八字段:用戶過期日期;此字段指定了用戶作廢的天數(從1970年的1月1日開始的天數),如果這個字段的值爲空,帳號永久可用;在例子中,
我們看到beinan這個用戶在此字段是空的,表示此用戶永久可用;而linuxsir這個用戶表示在距1970年01月01日後13108天后過期,算
起來也就是2005年11月21號過期;哈哈,如果有興趣的的弟兄,自己來算算,大體還是差不多的;);
  第九字段:保留字段,目前爲空,以備將來Linux發展之用;
【2】、關於用戶組;
  具有某種共同特徵的用戶集合起來就是用戶組(Group)。用戶組(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件;在本標題下,您還能瞭解到什麼是GID ;
  1、/etc/group 解說;
  /etc/group
文件是用戶組的配置文件,內容包括用戶和用戶組,並且能顯示出用戶是歸屬哪個用戶組或哪幾個用戶組,因爲一個用戶可以歸屬一個或多個不同的用戶組;同一用
戶組的用戶之間具有相似的特徵。比如我們把某一用戶加入到root用戶組,那麼這個用戶就可以瀏覽root用戶家目錄的文件,如果root用戶把某個文件
的讀寫執行權限開放,root用戶組的所有用戶都可以修改此文件,如果是可執行的文件(比如腳本),root用戶組的用戶也是可以執行的;
  用戶組的特性在系統管理中爲系統管理員提供了極大的方便,但安全性也是值得關注的,如某個用戶下有對系統管理有最重要的內容,最好讓用戶擁有獨立的用戶組,或者是把用戶下的文件的權限設置爲完全私有;另外root用戶組一般不要輕易把普通用戶加入進去,
  2、/etc/group 內容具體分析
  /etc/group 的內容包括用戶組(Group)、用戶組口令、GID及該用戶組所包含的用戶(User),每個用戶組一條記錄;格式如下:
  group_name:passwd:GID:user_list
  在/etc/group 中的每條記錄分四個字段:
  第一字段:用戶組名稱;
  第二字段:用戶組密碼;
  第三字段:GID
  第四字段:用戶列表,每個用戶之間用,號分割;本字段可以爲空;如果字段爲空表示用戶組爲GID的用戶名;
  我們舉個例子:
  root:x:0:root,linuxsir 注:用戶組root,x是密碼段,表示沒有設置密碼,GID是0,root用戶組下包括root、linuxsir以及GID爲0的其它用戶(可以通過/etc/passwd查看);;
  beinan:x:500:linuxsir 注:用戶組beinan,x是密碼段,表示沒有設置密碼,GID是500,beinan用戶組下包括linuxsir用戶及GID爲500的用戶(可以通過/etc/passwd查看);
  linuxsir:x:502:linuxsir 注:用戶組linuxsir,x是密碼段,表示沒有設置密碼,GID是502,linuxsir用戶組下包用戶linuxsir及GID爲502的用戶(可以通過/etc/passwd查看);
  helloer:x:503: 注:用戶組helloer,x是密碼段,表示沒有設置密碼,GID是503,helloer用戶組下包括GID爲503的用戶,可以通過/etc/passwd查看;
  而/etc/passwd 對應的相關的記錄爲:
  root:x:0:0:root:/root:/bin/bash
   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
   linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
   helloer:x:502:503::/home/helloer:/bin/bash
  由此可以看出helloer用戶組包括 helloer用戶;所以我們查看一個用戶組所擁有的用戶,可以通過對比/etc/passwd和/etc/group來得到;
  2、關於GID ;
  GID和UID類似,是一個正整數或0,GID從0開始,GID爲0的組讓系統付予給root用戶組;系統會預留一些較靠前的GID給系統虛擬
用戶(也被稱爲僞裝用戶)之用;每個系統預留的GID都有所不同,比如Fedora
預留了500個,我們添加新用戶組時,用戶組是從500開始的;而Slackware
是把前100個GID預留,新添加的用戶組是從100開始;查看系統添加用戶組默認的GID範圍應該查看 /etc/login.defs 中的
GID_MIN 和GID_MAX 值;
  我們可以對照/etc/passwd和/etc/group 兩個文件;我們會發現有默認用戶組之說;我們在 /etc/passwd
中的每條用戶記錄會發現用戶默認的GID
;在/etc/group中,我們也會發現每個用戶組下有多少個用戶;在創建目錄和文件時,會使用默認的用戶組;我們還是舉個例子;
  比如我把linuxsir 加爲root用戶組,在/etc/passwd 和/etc/group 中的記錄相關記錄爲:
  linuxsir用戶在 /etc/passwd 中的記錄;我們在這條記錄中看到,linuxsir用戶默認的GID爲502;而502的GID 在/etc/group中查到是linuxsir用戶組;
  linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
  linuxsir 用戶在 /etc/group 中的相關記錄;在這裏,我們看到linuxsir用戶組的GID 爲502,而linuxsir 用戶歸屬爲root、beinan用戶組;
  root:x:0:root,linuxsir
   beinan:x:500:linuxsir
   linuxsir:x:502:linuxsir
  我們用linuxsir 來創建一個目錄,以觀察linuxsir用戶創建目錄的權限歸屬;
  [linuxsir@localhost ~]$ mkdir testdir
   [linuxsir@localhost ~]$ ls -lh
  總用量 4.0K
  drwxrwxr-x 2 linuxsir linuxsir 4.0K 10月 17 11:42 testdir
  通過我們用linuxsir 來創建目錄時發現,testdir的權限歸屬仍然是linuxsir用戶和linuxsir用戶組的;而沒有歸屬root和beinan用戶組,明白了吧;
  但值得注意的是,判斷用戶的訪問權限時,默認的GID 並不是最重要的,只要一個目錄讓同組用戶可以訪問的權限,那麼同組用戶就可以擁有該目錄的訪問權,在這時用戶的默認GID 並不是最重要的;
  3、/etc/gshadow 解說;
  /etc/gshadow是/etc/group的加密資訊文件,比如用戶組(Group)管理密碼就是存放在這個文件。/etc
/gshadow和/etc/group是互補的兩個文件;對於大型服務器,針對很多用戶和組,定製一些關係結構比較複雜的權限模型,設置用戶組密碼是極
有必要的。比如我們不想讓一些非用戶組成員永久擁有用戶組的權限和特性,這時我們可以通過密碼驗證的方式來讓某些用戶臨時擁有一些用戶組特性,這時就要用
到用戶組密碼;
  /etc/gshadow 格式如下,每個用戶組獨佔一行;
  groupname:password:admin,admin,…:member,member,…
  第一字段:用戶組
  第二字段:用戶組密碼,這個段可以是空的或!,如果是空的或有!,表示沒有密碼;
  第三字段:用戶組管理者,這個字段也可爲空,如果有多個用戶組管理者,用,號分割;
  第四字段:組成員,如果有多個成員,用,號分割;
  舉例:
  beinan:!::linuxsir
   linuxsir:oUS/q7NH75RhQ::linuxsir
  第一字段:這個例子中,有兩個用戶組beinan用linuxsir
  第二字段:用戶組的密碼,beinan用戶組無密碼;linuxsir用戶組有已經,已經加密;
  第三字段:用戶組管理者,兩者都爲空;
  第四字段:beinan用戶組所擁有的成員是linuxsir ,然後還要對照一下/etc/group和/etc/passwd
查看是否還有其它用戶,一般默認添加的用戶,有時同時也會創建用戶組和用戶名同名稱; linuxsir 用戶組有成員linuxisir ;
  如何設置用戶組的密碼? 我們可以通過 gpasswd 來實現;不過一般的情況下,沒有必要設置用戶組的密碼;不過自己實踐一下也有必要;下面是一個爲linuxsir用戶組設置密碼的例子;
  gpasswd 的用法: gpasswd 用戶組
  
[email=root@localhost]root@localhost[/email]
~]# gpasswd linuxsir
  正在修改 linuxsir 組的密碼
  新密碼:
  請重新輸入新密碼:
  用戶組之間的切換,應該用 newgrp ,這個有點象用戶之間切換的su ;我先舉個例子:
  [beinan@localhost ~]$ newgrp linuxsir
  密碼:
  [beinan@localhost ~]$ mkdir lingroup
   [beinan@localhost ~]$ ls -ld lingroup/
  drwxr-xr-x 2 beinan linuxsir 4096 10月 18 15:56 lingroup/
  [beinan@localhost ~]$ newgrp beinan
   [beinan@localhost ~]$ mkdir beinangrouptest
   [beinan@localhost ~]$ ls -ld beinangrouptest
  drwxrwxr-x 2 beinan beinan 4096 10月 18 15:56 beinangrouptest
  說明:我是以beinan用戶組切換到linuxsir用戶組,並且建了一個目錄,然後再切換回beinan用戶組,又建了一個目錄,請觀察兩個目錄屬用戶組的不同;還是自己體會吧;
【3】、通過用戶和用戶組配置文件來查詢或管理用戶;
  1、用戶和用戶組查詢的方法;
  1)通過查看用戶(User)和用戶組的配置文件的辦法來查看用戶信息
  我們已經用戶(User)和用戶組(Group)的配置文件已經有個基本的瞭解,通過查看用戶(User)和用戶組的配置文件,我們就能做到對系統用戶的瞭解,當然您也可以通過id 或finger 等工具來進行用戶的查詢等任務。
  對於文件的查看,我們可以通過 more 或cat 來查看,比如 more /etc/passwd 或cat /etc/passwd ;其它工具也一樣,能對文本查看就行,比如less 也好
  比如我們可以通過more 、cat 、less命令對/etc/passwd 的查看,雖然命令不同,但達到的目的是一樣的, 都是得到/etc/passwd 的內容;
  [root@localhost ~]# more /etc/passwd
   [root@localhost ~]# cat /etc/passwd
   [root@localhost ~]# less /etc/passwd
  2)通過id和finger 工具來獲取用戶信息;
  除了直接查看用戶(User)和用戶組(Group)配置文件的辦法除外,我們還有id和finger工具可用,我們一樣通過命令行的操作,來
完成對用戶的查詢;id和finger,是兩個各有測重的工具,id工具更測重用戶、用戶所歸屬的用戶組、UID 和GID 的查看;而finger
測重用戶資訊的查詢,比如用戶名(登錄名)、電話、家目錄、登錄SHELL類型、真實姓名、空閒時間等等;
  id 命令用法;
  id 選項 用戶名
  比如:我想查詢beinan和linuxsir 用戶的UID、GID 以及歸屬用戶組的情況:
  [root@localhost ~]# id beinan
   uid=500(beinan) gid=500(beinan) groups=500(beinan)
  注:beinan的UID 是 500,默認用戶組是beinan,默認用戶組的GID 是500,歸屬於beinan用戶組;
  [root@localhost ~]# id linuxsir
   uid=505(linuxsir) gid=502(linuxsir) groups=502(linuxsir),0(root),500(beinan)
  注:linuxsir的UID 是505,默認用戶組是linuxsir ,默認用戶組的GID 是502,歸屬於linuxsir(GID爲502)、root(GID爲0),beinan(GID爲500);
  關於id的詳細用法,我會在專門用戶查詢的文章來介紹;您可以通過man id 來查看用法,用起來還是比較簡單的;
  finger 的用法
  finger 選項 用戶名1 用戶名2 …
  詳細用法請參看man finger ;關於更爲詳細用法,我會在專門用戶查詢的文章來介紹;
  如果finger 不加任何參數和用戶,會顯示出當前在線用戶,和w命令類似;對比一下;不過各有測重;
  [root@localhost ~]# w
   14:02:42 up 1:03, 3 users, load average: 0.04, 0.15, 0.18
   USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
   linuxsir tty1 - 13:39 22:51 0.01s 0.01s -bash
   beinan tty2 - 13:53 8:48 11.62s 0.00s /bin/sh /usr/X1
   beinan pts/0 :0.0 13:57 0.00s 0.14s 1.08s gnome-terminal
   [root@localhost ~]# finger
   Login Name Tty Idle Login Time Office Office Phone
   beinan beinan sun tty2 8 Oct 18 13:53
   beinan beinan sun pts/0 Oct 18 13:57 (:0.0)
   linuxsir linuxsir open tty1 22 Oct 18 13:39 linuxsir o +1-389-866-771
  如果我們在finger 後面加上用戶名,就可以看到用戶更爲詳細的信息,可以一次查看多個用戶,用空格分開,比如下面的例子中,我們一次查詢兩個用戶beinan和linuxsir的信息;
  [root@localhost ~]# finger beinan linuxsir
   Login: beinan 注:用戶名(也是登錄名) Name: beinan sun (用戶名全稱)
   Directory: /home/beinan 注:家目錄 Shell: /bin/bash 注:所用SHELL類型
   On since Tue Oct 18 13:53 (CST) on tty2 10 minutes 55 seconds idle 注:空閒時間;
   On since Tue Oct 18 13:57 (CST) on pts/0 from :0.0
   No mail.
   No Plan.
   Login: linuxsir Name: linuxsir open
   Directory: /home/linuxsir Shell: /bin/bash
   Office: linuxsir office, +1-389-866-7715
   On since Tue Oct 18 13:39 (CST) on tty1 24 minutes 58 seconds idle
   No mail.
   No Plan.
  3)用戶組查詢的辦法;
  我們可以通過用戶來查詢所歸屬的組,用groups 來查詢;比如我查詢beinan和linuxsir 所歸屬的組,我們可以用groups 來查詢;
  [root@localhost ~]# groups beinan linuxsir
   beinan : beinan
   linuxsir : linuxsir root beinan
  注:這是通過groups 同時查看了用戶beinan和linuxsir所歸屬的組;
  2、通過修改用戶(User)和用戶組(Group)配置文件的辦法來添加;
  由於我們已經在前面說過,可以通過修改配置文件的辦法來管理用戶,所以此主題應該包括此內容;當然通過用戶及用戶組管理工具(比如
adduser、userdel、usermod 、userinfo、groupadd 、groupdel
、groupmod等)也是可以的,通過管理工具對用戶的管理我們將要在專門一篇文章中介紹;
  通過修改用戶(User)和用戶組(Group)配置文件的方法管理用戶之用戶的添加流程;
  我們先以添加用戶爲例,對用戶的刪除和修改都比較簡單;
  1)修改 /etc/passwd ,添加用戶記錄;
  我們按/etc/passwd的格式的約定來添加新的用戶記錄;當然您要讓一個用戶失效,可以刪除您想要刪除的用戶記錄;值得注意的是,不能讓UID 重複;
  比如我想添加lanhaitun 這個用戶,我發現UID 508沒有用戶用,並且我想把其用戶組也設置爲lanhaitun ,用戶組的GID 也設置爲508,如果GID 沒有佔用的話;
  我們要打開 /etc/passwd ,在最下面加一行;
  lanhaitun:x:508:508::/home/lanhaitun:/bin/bash
  然後執行pwconv ,讓/etc/passwd 和/etc/shadow同步,您可以查看 /etc/shadow的內容是否同步;
  [root@localhost beinan]# pwconv
  2)修改/etc/group
  首先,我們得查看是否有lanhaitun用戶組,以及GID 508 是否被其它用戶組佔用;
  [root@localhost ~]# more /etc/group |grep lanhaitun
   [root@localhost ~]# more /etc/group |grep 508
  通過查看,我們發現沒有被佔用;所以我們要添加lanhaitun 的記錄到 /etc/group
  lanhaitun:x:508:
  其次,是運行 grpconv 來同步/etc/group 和/etc/gshadow內容,您可以通過查看/etc/gshadow的內容變化確認是不是添加組成功了;
  [root@localhost beinan]# grpconv
  3)創建用戶的家目錄,並把用戶啓動文件也複製過去;
  創建用戶的家目錄,我們要以/etc/passwd 中添加的新用戶的記錄爲準,我們在/etc/passwd
中添加新用戶lanhaitun ,她的家目錄是處於/home/lanhaitun ;另外我們還需要把/etc/skel
目錄下的.*隱藏文件複製過去;
  [root@localhost ~]# cp -R /etc/skel/ /home/lanhaitun
   [root@localhost ~]# ls -la /home/lanhaitun/
   總用量 48
   drwxr-xr-x 3 root root 4096 10月 18 14:53 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 root root 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 root root 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 root root 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 root root 5619 10月 18 14:53 .canna
   -rw-r–r– 1 root root 438 10月 18 14:53 .emacs
   -rw-r–r– 1 root root 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 root root 4096 10月 18 14:53 .kde
   -rw-r–r– 1 root root 658 10月 18 14:53 .zshrc
  4)改變新增用戶家目錄的屬主和權限;
  我們發現新增用戶的家目錄的屬主目前是root ,並且家目錄下的隱藏文件也是root權限;
  [root@localhost ~]# ls -ld /home/lanhaitun/
   drwxr-xr-x 3 root root 4096 10月 18 14:53 /home/lanhaitun/
  所以我們要通過chown 命令來改變/home/lanhaitun目錄歸屬爲lanhaitun用戶;
  [root@localhost ~]# chown -R lanhaitun:lanhaitun /home/lanhaitun
  查看是否已經更換了屬主爲lanhaitun用戶所有;
  [root@localhost ~]# ls -ld /home/lanhaitun/
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
   [root@localhost ~]# ls -la /home/lanhaitun/
   總用量 48
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 lanhaitun lanhaitun 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 lanhaitun lanhaitun 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 lanhaitun lanhaitun 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 lanhaitun lanhaitun 5619 10月 18 14:53 .canna
   -rw-r–r– 1 lanhaitun lanhaitun 438 10月 18 14:53 .emacs
   -rw-r–r– 1 lanhaitun lanhaitun 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .kde
   -rw-r–r– 1 lanhaitun lanhaitun 658 10月 18 14:53 .zshrc
  看來已經實現了;
  但這樣還是不夠的,因爲/home/lanhaitun/的目錄權限可能會過於公開;
  drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
  我們看到 /home/lanhaitun/ 目錄的權限爲 drwxr-xr-x ,也就是同組用戶和其它用戶組所能查看,爲了保密,我們有理由把新增用戶家目錄的權限設置爲只有其自己可讀可寫可執行;於是… …
  [root@localhost ~]# chmod 700 /home/lanhaitun/
   [root@localhost ~]# ls -ld /home/lanhaitun/
   drwx—— 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
  我們用其它用戶,當然得把具有超級權限的root用戶除外;比如我以beinan用戶來查看lanhaitun的家目錄會得到如下信息;
  [beinan@localhost ~]$ ls -la /home/lanhaitun/
   ls: /home/lanhaitun/: 權限不夠
  如此看來,lanhaitun用戶的家目錄是安全的 
<IMG onmousewheel="return imgzoom(this);" οnmοuseοver="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" οnclick="if(!this.resized) {return true;} else {window.open('http://linux.qisi.org/wp-includes/images/smilies/icon_wink.gif');}" alt="" src="http://linux.qisi.org/wp-includes/images/smilies/icon_wink.gif" οnlοad="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>


  5)設置新增用戶的密碼;
  以上各步驟都就序了,我們得爲新增用戶設置密碼了;要通過passwd 命令來生成;這個沒有辦法通過修改文件解決;
  passwd 的用法:
  passwd 用戶
  [root@localhost ~]# passwd lanhaitun
   Changing password for user lanhaitun.
   New UNIX password: 注:輸入您的密碼
   Retype new UNIX password: 再輸入一次
   passwd: all authentication tokens updated successfully. 注:設置密碼成功
  6)測試添增用戶是否成功;
  您可以用新增用戶登錄測試,也可以通過su 來切換用戶測試;
  [beinan@localhost ~]$ su lanhaitun
   Password:
   [lanhaitun@localhost beinan]$ cd ~
   [lanhaitun@localhost ~]$ pwd
   /home/lanhaitun
   [lanhaitun@localhost ~]$ ls -la
   總用量 52
   drwx—— 3 lanhaitun lanhaitun 4096 10月 18 15:15 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 lanhaitun lanhaitun 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 lanhaitun lanhaitun 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 lanhaitun lanhaitun 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 lanhaitun lanhaitun 5619 10月 18 14:53 .canna
   -rw-r–r– 1 lanhaitun lanhaitun 438 10月 18 14:53 .emacs
   -rw-r–r– 1 lanhaitun lanhaitun 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .kde
   -rw——- 1 lanhaitun lanhaitun 66 10月 18 15:15 .xauthOhEoTk
   -rw-r–r– 1 lanhaitun lanhaitun 658 10月 18 14:53 .zshrc
   [lanhaitun@localhost ~]$ mkdir testdir
   [lanhaitun@localhost ~]$ ls -lh
   總用量 4.0K
   drwxrwxr-x 2 lanhaitun lanhaitun 4.0K 10月 18 15:16 testdir
  通過上面一系列動作,我們會發現所創建的lanhaitun用戶已經成功;
  2、通過修改用戶(User)和用戶組(Group)配置文件的辦法來修改用戶或用戶組;
  我們可以修改/etc/passwd 和/etc/group 來達到修改用戶和用戶所歸屬的組,這個過程和添加新用戶時差不多;比如我想修改lanhaitun的用戶名全稱、公司以及電話等信息;我們可以修改/etc/passwd 實現;
  1)修改用戶信息;
  lanhaitun:x:508:508::/home/lanhaitun:/bin/bash 注:這是初始記錄;
  我們可以修改爲
  lanhaitun:x:508:508:lanhaitun wu,Office Dalian,13000000000:/home/lanhaitun:/bin/bash
  當然我們還可以修改用戶的bash 類型,家目錄等,當然如果修改家目錄,還得進行建家目錄、屬主和權限的操作,這和前面添加用戶的辦法在程序上有些是相同的;
  修改完成後,我們要進行pwconv 同步,通過finger 來查看用戶的信息等;
  [root@localhost lanhaitun]# pwconv
   [root@localhost lanhaitun]# finger lanhaitun
   Login: lanhaitun Name: lanhaitun wu
   Directory: /home/lanhaitun Shell: /bin/bash
   Office: Office Dalian, +1-300-000-0000
   Never logged in.
   No mail.
   No Plan.
  2)修改用戶所歸屬的組,可以通過/etc/group 修改實現;
  當然修改用戶和用戶組,不僅能通過修改配置文件來實現,還能過過 usermod 及chfn來實現;我將在以後的文檔中寫一寫,也比較簡單;您可以通過man來查看用法;在這裏我們先講一講如何通過修改配置文件來達到目的;
  如果我們想把lanhaitun 這個用戶歸屬到root用戶組,所以我們還能修改/etc/group 的辦法來達到目的;找到/etc/group 中的root開頭的一行,按其規劃加入lanhaitun;
  root:x:0:root,lanhaitun
  如果不明白,看前面/etc/group的解釋,謝謝;
  然後執行 grpconv 命令來同步/etc/group 和/etc/gshadow兩個文件的內容;
  [root@localhost ~]# grpconv
  查看lanhaitun歸屬組的信息;
  [root@localhost ~]# id lanhaitun
   uid=508(lanhaitun) gid=508(lanhaitun) groups=508(lanhaitun),0(root)
  3)刪除用戶及用戶組的辦法;
  這個比較簡單,我們可以通過刪除/etc/passwd 和/etc/group 相應的用戶和用戶組記錄就能達到目的,也能過過userdel 和groupdel 來實現對用戶及用戶組的刪除;
  如果是通過修改用戶和用戶組配置文件的辦法來刪除用戶,就是刪除相應的記錄就行了,如果不想保留其家目錄,刪除就是了。
  [root@localhost ~]# userdel lanhaitun
   [root@localhost ~]# userdel -r lanhaitun
  注:可以用userdel 來刪除lanhaitun 用戶,我們看到第二個例子中多了一個參數-r
,第一個例子是說只刪除lanhaitun用戶,其家目錄和mail等仍會保存;加上-r
參數,是刪除家目錄及mail等;所以要小心操作;用userdel 刪除用戶的同時,也會把其用戶組刪除;我們可以通過/etc/passwd
和/etc/group 的內容變化來查看;

三、切換用戶身份su、sudo、/etc/sudoers

以下內容參考:http://desert3.iteye.com/blog/1663995 

Linux系統中,有時候普通用戶有些事情是不能做的,除非是root用戶才能做到。這時就需要用su命令臨時切換到root身份來做事了。 

su:substitute['sʌbstɪtjuːt]代替 user 
su 的語法爲: 
su [OPTION選項參數] [用戶] 
-, -l, --login 登錄並改變到所切換的用戶環境; 
-c, --commmand=COMMAND 執行一個命令,然後退出所切換到的用戶環境; 

用su命令切換用戶後,可以用 exit 命令或快捷鍵[Ctrl+D]可返回原登錄用戶。 

例子: 
su 在不加任何參數,默認爲切換到root用戶,但沒有轉到root用戶家目錄下,也就是說這時雖然是切換爲root用戶了,但並沒有改變root登錄環境;用戶默認的登錄環境,可以在/etc/passwd 中查得到,包括家目錄,SHELL定義等; 
su 加參數 - ,表示默認切換到root用戶,並且改變到root用戶的環境; 


用su是可以切換用戶身份,如果每個普通用戶都能切換到root身份,如果某個用戶不小心泄漏了root的密碼,那豈不是系統非常的不安全?沒有錯,爲了改進這個問題,產生了sudo這個命令。使用sudo執行一個root才能執行的命令是可以辦到的,但是需要輸入密碼,這個密碼並不是root的密碼而是用戶自己的密碼。默認只有root用戶能使用sudo命令,普通用戶想要使用sudo,是需要root預先設定的,即,使用visudo命令去編輯相關的配置文件/etc/sudoers。如果沒有visudo這個命令,請使用 "yum install -y sudo" 安裝。 

默認root能夠sudo是因爲這個文件中有一行” root ALL=(ALL) ALL” 

sudo 的適用條件: 
由於su對切換到超級權限用戶root後,權限的無限制性,所以su並不能擔任多個管理員所管理的系統。如果用su來切換到超級用戶來管理系統,也不能明 確哪些工作是由哪個管理員進行的操作。特別是對於服務器的管理有多人蔘與管理時,最好是針對每個管理員的技術特長和管理範圍,並且有針對性的下放給權限, 並且約定其使用哪些工具來完成與其相關的工作,這時我們就有必要用到 sudo。 
通過sudo,我們能把某些超級權限有針對性的下放,並且不需要普通用戶知道root密碼,所以sudo 相對於權限無限制性的su來說,還是比較安全的,所以sudo 也能被稱爲受限制的su ;另外sudo 是需要授權許可的,所以也被稱爲授權許可的su; 
sudo 執行命令的流程:是當前用戶切換到root(或其它指定切換到的用戶),然後以root(或其它指定的切換到的用戶)身份執行命令,執行完成後,直接退回到當前用戶;而這些的前提是要通過sudo的配置文件/etc/sudoers來進行授權; 

從編寫 sudo 配置文件/etc/sudoers開始 
sudo的配置文件是/etc/sudoers ,我們可以用他的專用編輯工具visodu ,此工具的好處是在添加規則不太準確時,保存退出時會提示給我們錯誤信息;配置好後,可以用切換到您授權的用戶下,通過sudo -l 來查看哪些命令是可以執行或禁止的; 
/etc/sudoers 文件中每行算一個規則,前面帶有#號可以當作是說明的內容,並不執行;如果規則很長,一行列不下時,可以用\號來續行,這樣看來一個規則也可以擁有多個行; 
/etc/sudoers 的規則可分爲兩類;一類是別名定義,另一類是授權規則;別名定義並不是必須的,但授權規則是必須的; 

sudo授權規則(sudoers配置): 
授權用戶 主機=命令動作 
這三個要素缺一不可,但在動作之前也可以指定切換到特定用戶下,在這裏指定切換的用戶要用( )號括起來,如果不需要密碼直接運行命令的,應該加NOPASSWD:參數,但這些可以省略;舉例說明; 

sudoers的缺省配置: 

Html代碼  收藏代碼
  1. #############################################################   
  2. # sudoers file.   
  3. #   
  4. # This file MUST be edited with the 'visudo' command as root.   
  5. #   
  6. # See the sudoers man page for the details on how to write a sudoers file.   
  7. #   
  8. # Host alias specification   
  9. # User alias specification   
  10. # Cmnd alias specification   
  11. # Defaults specification   
  12. # User privilege specification   
  13. root    ALL=(ALL) ALL   
  14. # Uncomment to allow people in group wheel to run all commands   
  15. # %wheel        ALL=(ALL)       ALL   
  16. # Same thing without a password   
  17. # %wheel        ALL=(ALL)       NOPASSWD: ALL   
  18. # Samples   
  19. # %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom   
  20. # %users  localhost=/sbin/shutdown -h now   
  21. ##################################################################   

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 
配置示例:
 
Html代碼  收藏代碼
  1. ############################################################################   
  2. # sudoers file.   
  3. #   
  4. # This file MUST be edited with the 'visudo' command as root.   
  5. #   
  6. # See the sudoers man page for the details on how to write a sudoers file.   
  7. #   
  8. # Host alias specification   
  9. Host_Alias      EPG = 192.168.1.1, 192.168.1.2   
  10. # User alias specification   
  11. # Cmnd alias specification   
  12. Cmnd_Alias      SQUID = /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm  
  13.   
  14. Cmnd_Alias      ADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root   
  15. # Defaults specification   
  16. # User privilege specification   
  17. root    ALL=(ALL) ALL   
  18. support EPG=(ALL) NOPASSWD: SQUID   
  19. support EPG=(ALL) NOPASSWD: ADMPW  
  20. # Uncomment to allow people in group wheel to run all commands   
  21. # %wheel        ALL=(ALL)       ALL   
  22. # Same thing without a password   
  23. # %wheel        ALL=(ALL)       NOPASSWD: ALL   
  24. # Samples   
  25. # %users  ALL=/sbin/mount /cdrom,/sbin/umount /cdrom   
  26. # %users  localhost=/sbin/shutdown -h now   
  27. ###############################################################  
發佈了41 篇原創文章 · 獲贊 43 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章