1. 程式人生 > >Linux學習筆記三【文件及目錄的權限管理篇】

Linux學習筆記三【文件及目錄的權限管理篇】

權限 pass local pad shell 寫入 src authent 控制

文件及目錄的權限管理

  上篇簡單介紹了下文件和目錄的一些簡單的操作,接下來介紹用戶和文件權限的管理。首先了解用戶和組賬號的配置文件,然後是管理用戶和組賬號,最後要會設置文件和目錄權限和歸屬。

Linux基於用戶身份對資源訪問進行控制。用戶賬號分為超級用戶root(相當於windows下的Administrator),然後是普通用戶。Linux中是不建議使用root登錄系統執行管理任務的,因為這很不安全。要是誤刪了系統中某個重要的文件,那就玩完了。

用戶賬號文件——passwd

  用於保存用戶的賬號的基本信息,文件位置:/etc/passwd,每一行對應一個用戶的賬號記錄,下面是取出最後兩行記錄的賬號信息,然後來分析它每個字段的含義(字段之間用冒號分隔)。

  技術分享圖片

字段1 linuxidc:用戶賬號的名字;

  字段2 x :密碼占位符

  字段3 500:用戶賬號的UID號(RedHat和CentOS中默認從500開始)

  字段4 500:用戶所屬主賬號的GID號(也是默認從500開始)

  字段5 zhoujie:用戶全名

  字段6 /home/linuxidc :用戶的宿主目錄,即家目錄

  字段7 /bin/bash :登錄shell信息

  基於系統運行和管理需要,所有用戶都可以訪問passwd文件中的內容,但只有root用戶才能更改

  用戶密碼文件——shadow

  用於保存密碼串、密碼有效期等信息,文件位置:/etc/shadow,每一行對應一個用戶的密碼記錄。下面列出最後兩行記錄並解釋每個字段的含義:

技術分享圖片

  字段1 :用戶賬號的名稱

  字段2 :加密的密碼字串信息(采用MD5加密)

  字段3 :上次修改密碼的時間

字段4:密碼的最短有效天數,默認值為 0

  字段5:密碼的最長有效天數,默認值為 99999

  字段6:提前多少天警告用戶口令將要過期,默認值為 7

  字段7:在密碼過期後多少天禁用此用戶(默認為空)

  字段8:賬號失效時間(默認為空)

  字段9 :保留字段(未使用)

默認只要root用戶能夠讀取該文件中的內容,並且不允許root直接編輯該文件中的內容。那麽添加用戶時如何來指定選項以實現這些功能呢?下面將簡單介紹如何添加用戶、組。

  添加用戶賬號——useradd

技術分享圖片

用戶賬號的初始配置文件

  文件來源——新建用戶賬號時,從/etc/skel目錄中復制而來

主要的用戶初始配置文件有 :

   ~/.bash_profile:用戶每次登錄時執行     ~/.bashrc:每次進入新的Bash環境時執行,默認設置了一些命令的別名    ~/.bash_logout:用戶每次退出登錄時執行 可通過cat命令查看上述文件的內容。 設置/更改用戶口令——passwd 一般我不會也沒有必要解釋每個命令的帶的參數,但是passwd我會介紹它的參數含義及用法,因為我覺得在系統維護中會常用到。
[linuxidc@localhost ~]$ su - root
口令:
[root@localhost ~]# passwd -l linuxidc ==>鎖定用戶linuxidc的賬號
Locking password for user linuxidc.
passwd: Success
[root@localhost ~]# passwd -S linuxidc  ==>查看用戶狀態
linuxidc LK 2013-02-03 0 99999 7 -1 (Password locked.)  ==>為鎖定狀態
[root@localhost ~]# tail -2 /etc/shadow  ==>賬號鎖定後,有木有發現密碼位前面多了兩個!!,表示密碼不可用
linuxidc:!!$1$XRmjIBM9$SgXA00pPfvhjvxt/9..Lh.:15739:0:99999:7:::
user1:!!:15771:0:99999:7:::
[root@localhost ~]# passwd -u linuxidc  ==>為賬號linuxidc解鎖
Unlocking password for user linuxidc.   ==>已被成功解鎖
passwd: Success.
[root@localhost ~]# passwd -S linuxidc   ==>再次查看用戶狀態
linuxidc PS 2013-02-03 0 99999 7 -1 (Password set, MD5 crypt.)
[root@localhost ~]# tail -2 /etc/shadow  ==>觀察密碼位變化,沒有了兩個!!,表示密碼可用
linuxidc:$1$XRmjIBM9$SgXA00pPfvhjvxt/9..Lh.:15739:0:99999:7:::
user1:!!:15771:0:99999:7:::
[root@localhost ~]# passwd -d linuxidc  ==>清楚用戶linuxidc的密碼
Removing password for user linuxidc.  ==>密碼已被成功清除
passwd: Success
[root@localhost ~]# tail -2 /etc/shadow ==>查看密碼位有什麽變化
linuxidc::15771:0:99999:7:::  ==>密碼位變空了。。。
user1:!!:15771:0:99999:7:::
[root@localhost ~]# passwd linuxidc   ==>為用戶重新設定密碼
Changing password for user linuxidc.
New UNIX password: 
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.  ==>OK,密碼已經設置成功了
[root@localhost ~]# 

註意,“未設置密碼”的用戶賬號尚未完成初始化,處於不可登錄狀態,與“空密碼”的情況不同,普通用戶可以使用passwd命令,但只能更改自己的密碼。另外,被鎖定的賬號也不能登錄系統。

  修改用戶賬號的屬性——usermod

它的命令有幾個功能和passwd是一樣的,比如L和U參數就是鎖定和解鎖賬戶的,不過要大寫。其他選項和useradd的中的一樣,就是更改uid,gid等。

  刪除用戶賬號——userdel 刪除賬號時直接用”userdel 用戶名“就行了,但是這樣刪除的話,用戶的家目錄依然存在,這時你若要再建立一個與剛才同名的賬號那是不行的,所以我習慣帶上-r選項,刪的徹底點,即連同家目錄一起刪除,反正刪除賬號後家目錄也沒什麽用了。   還有兩個域組賬號相關的文件,即/etc/group 和/etc/gshadow,不太常用,尤其是後者,知道下應該就行了。

添加組賬號——groupadd

  添加一個組賬號,在新建用戶時,若要指定用戶的gid和組名稱,則必須先保證這個組要存在,所以要先建立組,簡單的操作如下:

[root@localhost ~]#groupadd -g 1000 test  ==>創建一個組gid為1000
[root@localhost ~]#tail -3 /etc/group
linuxidc:x:500:
user1:x:504:
test:x:1000:
[root@localhost ~]#

刪除組賬號——groupdel

很簡單,直接接用戶名作為參數,刪除組賬號後,從/etc/group文件中將查不到相應的記錄。

  用戶和組賬號查詢:

id命令——查詢用戶身份標識

groups命令——查詢用戶所屬的組

  finger命令——查詢用戶的詳細信息

  users、w、who命令查詢已登錄到主機的用戶信息

              文件/目錄的權限和歸屬

將ls帶上參數l或直接打ll命令,則可以查看用戶對文件的使用權。

   技術分享圖片

   第一列權限位由10位(比如d rwx rwx r-x)組成,其中第一位表示文件類型,d表示目錄,l表示鏈接文件,b表示塊文件,c表示字符文件,-表示普通文件。關於rwx-分別表示讀、寫、執行、無權限,r w x - 四個權限字符分別可表示為8進制數字4,2,1,0,即 rwx rwx r-x權限也可表示為775,其中前三位rwx(7)表示文件所有者(owner)對該文件的權限,中間3位rwx(7)表示文件所在的組(group)對該文件的權限,最後三位r-x(5)表示其他用戶(other)對該文件的權限,也即ugo權限。

  設置文件/目錄的權限——chmod

[linuxidc@localhost dirtest]$ ll
總計 36
drwxrwxr-x 2 linuxidc jzhou 4096 03-05 22:43 dirtest1
lrwxrwxrwx 1 linuxidc jzhou    8 03-05 22:45 linkfile -> testfile
-rw-rw-r-- 1 linuxidc jzhou   67 03-05 22:40 testfile
[linuxidc@localhost dirtest]$ chmod g-w,o+x testfile   ==>設置文件testfile的組權限和其他人權限,註意權限變化
[linuxidc@localhost dirtest]$ ls -l
總計 36
drwxrwxr-x 2 linuxidc jzhou 4096 03-05 22:43 dirtest1
lrwxrwxrwx 1 linuxidc jzhou    8 03-05 22:45 linkfile -> testfile
-rw-r--r-x 1 linuxidc jzhou   67 03-05 22:40 testfile  ==>看,權限變化了
[linuxidc@localhost dirtest]$ chmod 644 dirtest1/    ==>改變目錄dirtest1的權限,即讀寫|讀|讀
[linuxidc@localhost dirtest]$ ll
總計 36
drw-r--r-- 2 linuxidc jzhou 4096 03-05 22:43 dirtest1   ==>發現它的變化了沒
lrwxrwxrwx 1 linuxidc jzhou    8 03-05 22:45 linkfile -> testfile
-rw-r--r-x 1 linuxidc jzhou   67 03-05 22:40 testfile
[linuxidc@localhost dirtest]$ chown linuxidc:root testfile   ==>普通用戶沒有權限更改
chown: 正在更改 “testfile” 的所有者: 不允許的操作
[linuxidc@localhost dirtest]$ su root  ==>切換到root用戶
口令:
[root@localhost dirtest]# ll  
總計 36
drw-r--r-- 2 linuxidc jzhou 4096 03-05 22:43 dirtest1
lrwxrwxrwx 1 linuxidc jzhou    8 03-05 22:45 linkfile -> testfile
-rw-r--r-x 1 linuxidc jzhou   67 03-05 22:40 testfile
[root@localhost dirtest]# chown root:root testfile  ==>將文件testfile的擁有者和屬組都改為root
[root@localhost dirtest]# ll
總計 36
drw-r--r-- 2 linuxidc jzhou 4096 03-05 22:43 dirtest1
lrwxrwxrwx 1 linuxidc jzhou    8 03-05 22:45 linkfile -> testfile
-rw-r--r-x 1 root  root    67 03-05 22:40 testfile   ==>看,它的文件擁有者和所屬組都變為root了
[root@localhost dirtest]# 

修改目錄的權限和所屬組時可以指定-R選項以實現目錄裏的文件或者目錄也可以遞歸變化。若只修改文件/目錄所有者只需指定前者,即chown root testfile,若只修改文件/目錄所屬組的權限,前面的用戶可不寫,即chown :root testfile。

  附加權限位

  普通用戶並沒有權限修改“/etc/shadow”文件,那為什麽可以修改自己的登錄密碼呢?因為passwd命令程序被設置了SUID權限,普通用戶在執行該命令時臨時獲得相當於屬主用戶(root)的權限。

set位權限的主要用途:

   為可執行(有 x 權限的)文件設置,權限字符為“s”;

   其他用戶執行該文件時,將擁有屬主或屬組用戶的權限。

set位權限類型:    SUID:表示對屬主用戶增加SET位權限;    SGID:表示對屬組內的用戶增加SET位權限。
[root@localhost ~]# ls -l  /usr/bin/passwd
-rwsr-xr-x 1 root root 19876 2006-07-17 /usr/bin/passwd
==>普通用戶以root用戶的身份,間接更新了shadow文件中自己的密碼

註意:不要輕易為可執行文件設置SET位權限,特別是對於那些屬主、屬組是root的執行程序,使用SET位權限時更應該慎重。例如,若為vim編輯器程序設置SUID權限,將導致普通用戶也可以使用vim編輯器修改系統中的任何配置文件   

粘滯位(Sticky)

主要用途:    為公共目錄(例如,權限為777的)設置,權限字符為“t”    用戶不能刪除該目錄中其他用戶的文件   由於系統及服務程序運行的需要, Linux提供了/tmp、/var/tmp等臨時目錄,允許任意用戶、程序寫入數據,然而試想一下,若任意一個普通用戶都能夠刪除系統服務運行中使用的臨時文件,將造成什麽後果?設置粘滯位以後,正好可以保持一種動態的平衡:允許各用戶在目錄中任意寫入、刪除數據,但是禁止隨意刪除其他用戶的數據 。
[root@localhost ~]# ls  -ld  /tmp   /var/tmp
drwxrwxrwt 8 root root 4096 09-09 15:07 /tmp    ==>就是將t位代替執行位x
drwxrwxrwt 2 root root 4096 09-09 07:00 /var/tmp

其實這些特殊權限位用的不多,我認為只不過是為那幾種特殊的文件作個解釋罷了,不用深究的,知道派什麽用的就行了吧。

  使用附加權限

設置SET位、粘滯位權限 使用權限字符 chmod ug±s 可執行文件... chmod o±t 目錄名... 使用權限數字: chmod mnnn 可執行文件... m為4時,對應SUID,2對應SGID,1對應粘滯位,可疊加   SET位標記字符為“s”,若使用8進制數字形式,則SUID對應為“4”、SGID對應為“2”;在權限模式中可采用“nnnn”的形式時,如“4755”表示設置SUID權限、“6755”表示同時設置SUID、SGID權限。

Linux學習筆記三【文件及目錄的權限管理篇】