1. 程式人生 > >淺談Centos使用者許可權管理

淺談Centos使用者許可權管理

淺談Centos使用者許可權管理

2014年12月03日 11:02:56 lyg520lj 閱讀數:586

一.使用者與組的概念
1.理解linux多使用者,多工的特性
Linux是一個真實的、完整的多使用者多工作業系統,多使用者多工就是可以在系統上建立多個使用者,而多個使用者可以在同一時間內登入同一個系統執行各自不同的任務,而互不影響,例如某臺linux伺服器上有4個使用者,分別是root、www、ftp和mysql,在同一時間內,root使用者可能在檢視系統日誌,管理維護系統,www使用者可能在修改自己的網頁程式,ftp使用者可能在上傳軟體到伺服器,mysql使用者可能在執行自己的SQL查詢,每個使用者互不干擾,有條不紊的進行著自己的工作,而每個使用者之間不能越權訪問,比如www使用者不能執行mysql使用者的SQL查詢操作,ftp使用者也不能修改www使用者的網頁程式,因此可知,不同使用者具有不同的許可權,每個使用者是在許可權允許的範圍內完成不同的任務,linux正是通過這種許可權的劃分與管理,實現了多使用者多工的執行機制。
2.linux下使用者的角色分類
 在linux下使用者是根據角色定義的,具體分為三種角色:
 超級使用者:擁有對系統的最高管理許可權,預設是root使用者。
 普通使用者:只能對自己目錄下的檔案進行訪問和修改,具有登入系統的許可權,例如上面提到的www使用者、ftp使用者等。
 虛擬使用者:也叫“偽”使用者,這類使用者最大的特點是不能登入系統,它們的存在主要是方便系統管理,滿足相應的系統程序對檔案屬主的要求。例如系統預設的bin、adm、nobody使用者等,一般執行的web服務,預設就是使用的nobody使用者,但是nobody使用者是不能登入系統的。
3.使用者和組的概念
 我們知道,Linux是一個多使用者多工的分時作業系統,如果要使用系統資源,就必須向系統管理員申請一個賬戶,然後通過這個賬戶進入系統。這個賬戶和使用者是一個概念,通過建立不同屬性的使用者,一方面,可以合理的利用和控制系統資源,另一方面也可以幫助使用者組織檔案,提供對使用者檔案的安全性保護。
 每個使用者都用一個唯一的使用者名稱和使用者口令,在登入系統時,只有正確輸入了使用者名稱和密碼,才能進入系統和自己的主目錄。
 使用者組是具有相同特徵使用者的邏輯集合,有時我們需要讓多個使用者具有相同的許可權,比如檢視、修改某一個檔案的許可權,一種方法是分別對多個使用者進行檔案訪問授權,如果有10個使用者的話,就需要授權10次,顯然這種方法不太合理;另一種方法是建立一個組,讓這個組具有檢視、修改此檔案的許可權,然後將所有需要訪問此檔案的使用者放入這個組中,那麼所有使用者就具有了和組一樣的許可權。這就是使用者組,將使用者分組是Linux 系統中對使用者進行管理及控制訪問許可權的一種手段,通過定義使用者組,在很大程度上簡化了管理工作。
4.使用者和組的關係:
使用者和使用者組的對應關係有:一對一、一對多、多對一和多對多;下圖展示了這種關係:


 一對一:即一個使用者可以存在一個組中,也可以是組中的唯一成員。
 一對多:即一個使用者可以存在多個使用者組中。那麼此使用者具有多個組的共同許可權。
 多對一:多個使用者可以存在一個組中,這些使用者具有和組相同的許可權。
 多對多:多個使用者可以存在多個組中。其實就是上面三個對應關係的擴充套件。

二 使用者配置檔案概述
1.使用者和組相關的配置檔案
(1)/etc/passwd檔案
系統使用者配置檔案,是使用者管理中最重要的一個檔案。這個檔案記錄了Linux系統中每個使用者的一些基本屬性,並且對所有使用者可讀。/etc/passwd中每一行記錄對應一個使用者,每行記錄又被冒號分割,其格式和具體含義如下:
使用者名稱:口令:使用者標識號:組標識號:註釋性描述:主目錄:預設shell 
下面是/etc/passwd檔案的部分輸出:
[root

@localhost ~]# more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
下面是每個欄位的詳細含義:
 使用者名稱:是代表使用者賬號的字串。
 口令:存放著加密後的使用者口令,雖然這個欄位存放的只是使用者口令的加密串,不是明文,但是由於/etc/passwd檔案對所有使用者都可讀,所以這仍是一個安全隱患。因此,現在許多Linux 版本都使用了shadow技術,把真正加密後的使用者口令存放到/etc/shadow檔案中,而在/etc/passwd檔案的口令欄位中只存放一個特殊的字元,例如用“x”或者“*”來表示。 
 使用者標識號:就是使用者的UID,每個使用者都有一個UID,並且是唯一的,通常UID號的取值範圍是0~65535,0是超級使用者root的標識號,1~99由系統保留,作為管理賬號,普通使用者的標識號從100開始。而在Linux系統中,普通使用者UID預設從500開始。UID是linux下確認使用者許可權的標誌,使用者的角色和許可權都是通過UID來實現的,因此多個使用者公用一個UID是非常危險的,會造成系統許可權和管理的混亂,例如將普通使用者的UID設定為0後,這個普通使用者就具有了root使用者的許可權,這是極度危險的操作。因此要儘量保持使用者UID的唯一性。
 組標識號:就是組的GID,與使用者的UID類似,這個欄位記錄了使用者所屬的使用者組。它對應著/etc/group檔案中的一條記錄。
 註釋性描述:欄位是對使用者的描述資訊,比如使用者的住址、電話、姓名等等。
 主目錄:也就是使用者登入到系統之後預設所處的目錄,也可以叫做使用者的主目錄、家目錄、根目錄等等。
 預設shell:就是使用者登入系統後預設使用的命令直譯器,shell是使用者和linux核心之間的介面,使用者所作的任何操作,都是通過shell傳遞給系統核心的。linux下常用的shell有sh、bash、csh等,管理員可以根據使用者的習慣,為每個使用者設定不同的shell。
(2)/etc/shadow檔案
使用者影子檔案,由於/etc/passwd檔案是所有使用者都可讀的,這樣就導致了使用者的密碼容易出現洩露,因此,linux將使用者的密碼資訊從/etc/passwd中分離出來,單獨的放到了一個檔案中,這個檔案就是/etc/shadow,該檔案只有root使用者擁有讀許可權,從而保證了使用者密碼的安全性。
下面介紹下/etc/shadow檔案內容的格式:
使用者名稱:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:保留欄位
例如:下面是/etc/shadow檔案的部分輸出:
[root
@localhost
~]# more /etc/shadow
root:$1$Uvip.QJI$GteCsLrSSfpnMs.VCOvbs/:14169:0:99999:7:::
bin:*:13934:0:99999:7:::
daemon:*:13934:0:99999:7:::
adm:*:13934:0:99999:7:::
下面是每個欄位的詳細含義:
 使用者名稱:與/etc/passwd檔案中的使用者名稱有相同的含義。
 加密口令:存放的是加密後的使用者口令字串,如果此欄位是“*”、“!”、“x”等字元,則對應的使用者不能登入系統。 
 最後一次修改時間:表示從某個時間起,到使用者最近一次修改口令的間隔天數。可以通過passwd 來修改使用者的密碼,然後檢視/etc/shadow中此欄位的變化。
 最小時間間隔:表示兩次修改密碼之間的最小時間間隔。
 最大時間間隔:表示兩次修改密碼之間的最大時間間隔,這個設定能增強管理員管理使用者的時效性。
 警告時間:表示從系統開始警告使用者到密碼正式失效之間的天數。
 不活動時間:此欄位表示使用者口令作廢多少天后,系統會禁用此使用者,也就是說系統不再讓此使用者登入,也不會提示使用者過期,是完全禁用。
 失效時間:表示該使用者的帳號生存期,超過這個設定時間,帳號失效,使用者就無法登入系統了。如果這個欄位的值為空,帳號永久可用。
 保留欄位:linux的保留欄位,目前為空,以備linux日後發展之用。
(3)/etc/group檔案
使用者組配置檔案,使用者組的所有資訊都存放在此檔案中。
下面介紹下/etc/group檔案內容的格式:
組名:口令:組標識號:組內使用者列表
例如:下面是/etc/group的部分輸出:
[root@localhost ~]# more /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
下面是/etc/group每個欄位的含義:
 組名:是使用者組的名稱,由字母或數字構成。與/etc/passwd中的使用者名稱一樣,組名不能重複。
 口令:存放的是使用者組加密後的口令字串,密碼預設設定在/etc/gshadow檔案中,而在這裡用“x”代替,linux系統下預設的使用者組都沒有口令,可以通過gpasswd來給使用者組新增密碼。
 組標識號:就是GID,與/etc/passwd中的組標識號對應。
 組內使用者列表: 顯示屬於這個組的所有使用者,多個使用者之間用逗號分隔。
2./etc/login.defs檔案
用來定義建立一個使用者時的預設設定,比如指定使用者的UID和GID的範圍,使用者的過期時間、是否需要建立使用者主目錄等等。
下面是rhel5下的/etc/login.defs檔案,簡單介紹如下:
MAIL_DIR        /var/spool/mail
當建立使用者時,同時在目錄/var/spool/mail中建立一個使用者mail檔案
PASS_MAX_DAYS   99999
#指定密碼保持有效的最大天數
PASS_MIN_DAYS   0
表示自從上次密碼修改以來多少天后使用者才被允許修改口令
PASS_MIN_LEN    5
指定密碼的最小長度
PASS_WARN_AGE   7
表示在口令到期前多少天系統開始通知使用者口令即將到期
UID_MIN                   500
指定最小UID為500 ,也就是說新增使用者時,使用者的UID 從500開始
UID_MAX                 60000
指定最大UID為60000
GID_MIN                   500
指定最小GID為500,也就是新增組時,組的GID從500開始。
GID_MAX                 60000
指定最大GID為60000
CREATE_HOME     yes
此項是指定是否建立使用者主目錄,yes為建立,no為不建立。
3./etc/default/useradd檔案
當我們通過useradd命令不加任何引數建立一個使用者後,使用者預設的主目錄一般位於/home下,預設使用的shell是/bin/bash,這是為什麼呢,看看/etc/default/useradd這個檔案的內容就完全明白了。
[root@localhost ~]# more /etc/default/useradd
# useradd defaults file
GROUP=100  
HOME=/home  #此項表示將新建使用者的主目錄放在/home目錄下
INACTIVE=-1 #此項表示是否啟用帳號過期禁用,-1表示不啟用
EXPIRE=     #此項表示帳號過期日期,不設定表示不啟用
SHELL=/bin/bash  #此項指定了新建使用者的預設shell型別
SKEL=/etc/skel  #此項用來指定使用者主目錄預設檔案的來源,也就是說新建使用者主目錄下的檔案都是從這個目錄下複製而來的
CREATE_MAIL_SPOOL=no
/etc/default/useradd檔案定義了新建使用者的一些預設屬性,比如使用者的主目錄、使用的shell等等,通過更改此檔案,可以改變建立新使用者的預設屬性值。
改變此檔案有兩種方法,一種是通過文字編輯器方式更改,另一種是通過useradd命令來更改。這裡介紹一下第二種方法:
Useradd命令加“-D”引數後,就可以修改配置檔案/etc/default/useradd,使用的一般格式為:
useradd -D [-g group] [-b base] [-s shell] [-f inactive] [-e expire ]
每個選項詳細含義如下:
 -g default_group
表示新建使用者的起始組名或者GID,組名必須為已經存在的使用者組名稱,GID也必須是已經存在的使用者組GID。與/etc/default/useradd檔案中“GROUP”行對應。
 -b default_home
指定新建使用者主目錄的上級目錄,也就是所有新建使用者都會在此目錄下建立自己的主目錄。與/etc/default/useradd檔案中HOME行對應。
 -s default_shell
指定新建使用者預設使用的shell,與/etc/default/useradd檔案中“SHELL”行對應。
 -f default_inactive
指定使用者帳號過期多長時間後就永久停用,與/etc/default/useradd檔案中“INACTIVE”行對應。
 -e default_expire_date
指定使用者帳號的過期時間。與/etc/default/useradd檔案中“EXPIRE”行對應。
例子:
useradd –D不加任何引數時,顯示/etc/default/useradd檔案的當前設定
[root@localhost ~]# useradd -D  
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
如果要修改新增使用者時的預設shell為/bin/csh,可以這麼操作:
[root@localhost ~]# useradd -D -s /bin/csh
[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/csh
SKEL=/etc/skel
4./etc/skel目錄
在建立一個新使用者後,會在新使用者的主目錄下看到類似.bash_profile, .bashrc, .bash_logout等檔案,這些檔案是怎麼來的呢,如果我想讓新建立的使用者在主目錄下預設擁有自己指定的配置檔案,該如何設定呢?
/etc/skel目錄就是解決這個問題的,/etc/skel目錄定義了新建使用者在主目錄下預設的配置檔案,更改/etc/skel目錄下的內容就可以改變新建使用者預設主目錄的配置檔案資訊。

使用者管理工具  

一.新增、切換、刪除使用者組命令groupadd/newgrp/groupdel
1.groupadd命令
用來新建一個使用者組。語法格式為:
groupadd [-g -o] gid  group
各個選項具體含義如下:
-g:指定新建使用者組的GID號,該GID號必須唯一,不能和其它使用者組的GID號重複。
-o:一般與-g選項同時使用,表示新使用者組的GID可以與系統已有使用者組的GID相同。
例如:
建立一個linuxfans的使用者組和一個fanslinux使用者組,GID分別為1020和1030
[root@localhost ~]# groupadd -g 1020 linuxfans
[root@localhost ~]# groupadd -g 1030 fanslinux
[root@localhost ~]# more /etc/group|grep  linuxfans
linuxfans:x:1020:
[root@localhost ~]# more /etc/group|grep  fanslinux
fanslinux:x:1030:
2.newgrp命令
如果一個使用者同時屬於多個使用者組,那麼使用者可以在使用者組之間切換,以便具有其他使用者組的許可權,newgrp主要用於在多個使用者組之間進行切換,語法格式為:
newgrp <使用者組>
 例子:下面通過例項講述newgrp的用法:
首先建立了3個使用者組group1、group2和group3.
[root@localhost ~]# groupadd group1
[root@localhost ~]# groupadd group2
[root@localhost ~]# groupadd group3
下面建立了一個使用者user1,同時指定user1的主使用者組為group1,附加使用者組為group2和group3
[root@localhost ~]# useradd -g group1 -G group2,group3 user1
[root@localhost ~]# more /etc/group|grep user1
group2:x:501:user1
group3:x:502:user1
下面是對使用者user1設定密碼
[root@localhost ~]# passwd user1
Changing password for user user1.
New UNIX password: 
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.
下面是切換到user1使用者下,通過newgrp切換使用者組進行的一系列操作,從中可以看出newgrp的作用。
[root@localhost ~]# su - user1
[user1@localhost ~]$ whoami
user1
[user1@localhost ~]$ mkdir user1_doc
[user1@localhost ~]$ newgrp group2
[user1@localhost ~]$ mkdir user2_doc
[user1@localhost ~]$ newgrp group3
[user1@localhost ~]$ mkdir user3_doc
[user1@localhost ~]$ ll
total 12
drwxr-xr-x  2 user1 group1 4096 Oct 24 01:18 user1_doc
drwxr-xr-x  2 user1 group2 4096 Oct 24 01:18 user2_doc
drwxr-xr-x  2 user1 group3 4096 Oct 24 01:19 user3_doc
[user1@localhost ~]$
3.groupdel命令
表示刪除使用者組,語法格式為:
groupdel [群組名稱]
當需要從系統上刪除使用者組時,可用groupdel指令來完成這項工作。如果該使用者組中仍包括某些使用者,則必須先刪除這些使用者後,然後才能刪除使用者組。
例如:刪除linuxfans這個使用者組
[root@localhost ~]# groupdel  linuxfans
二. 新增、修改和刪除使用者命令useradd/usermod/userdel 
1.useradd建立使用者的過程
useradd不加任何引數建立使用者時,系統首先讀取新增使用者配置檔案/etc/login.defs和/etc/default/useradd,根據這兩個配置檔案中定義的規則新增使用者,然後會向/etc/passwd和/etc/group檔案新增使用者和使用者組記錄,同時/etc/passwd和/etc/group對應的加密檔案也會自動生成記錄,接著系統會自動在/etc/default/useradd檔案設定的目錄下建立使用者主目錄,最後複製/etc/skel目錄中的所有檔案到新使用者的主目錄中,這樣一個新的使用者就建立完成了。
2.useradd的使用語法
useradd語法的一般格式為:
useradd  [-u uid [-o]] [-g group] [-G group,...]
                [-d home] [-s shell] [-c comment]
                [-f inactive] [-e expire ] name
各個選項具體含義如下:
 -u uid:即使用者標識號,此標識號必須唯一。
 -g group:指定新建使用者登入時所屬的預設組,或者叫主組。此群組必須已經存在。
 -G group:指定新建使用者的附加組,此群組必須已經存在。附加組是相對與主組而言的,當一個使用者同時是多個組中的成員時,登入時的預設組成為主組,而其它組稱為附加組。
 -d home:指定新建使用者的預設主目錄,如果不指定,系統會在/etc/default/useradd檔案指定的目錄下建立使用者主目錄。
 -s shell:指定新建使用者使用的預設shell,如果不指定,系統以/etc/default/useradd檔案中定義的shell作為新建使用者的預設shell。
 -c comment:對新建使用者的說明資訊。
 -f inactive:指定帳號過期多長時間後永久停用。當值為0時帳號則立刻被停權。而當值為-1時則關閉此功能,預設值為-1
 -e expire:指定使用者的帳號過期時間,日期的指定格式為MM/DD/YY。
 name:指定需要建立的使用者名稱。
3.usermod的使用語法
 usermod用來修改使用者的賬戶屬性資訊,使用語法如下:
usermod  [-u uid [-o]] [-g group] [-G group,...]
                [-d 主目錄 [-m]] [-s shell] [-c 註釋] [-l 新名稱]
                [-f 失效日期] [-e 過期日期][-L|-U] Name
各個選項具體含義如下:
 -u uid:指定使用者新的UID值,此值必須為唯一的ID值,除非用-o選項。
 -g group:修改使用者所屬的組名為新的使用者組名,此使用者組名必須已經存在。
 -G group:修改使用者所屬的附加組。
 -d 主目錄:修改使用者登入時的主目錄。
 -s shell:修改使用者登入系統後預設使用的shell
 -c 註釋:修改使用者的註釋資訊。
 -l 新名稱:修改使用者帳號為新的名稱。
 -f 失效日:帳號過期多少天后永久禁用。
 -e 過期日:增加或修改使用者賬戶的過期時間。
 -L:鎖定使用者密碼,使密碼無效。
 -U:解除密碼鎖定。
 Name:要修改屬性的系統使用者。
4.userdel的使用語法
Userdel用來刪除一個使用者,若指定“-r”引數不但刪除使用者,同時刪除使用者的主目錄以及目錄下的所有檔案。語法格式為:
userdel [-r][使用者帳號]
5.應用舉例
1)新增一個使用者mylinux,指定所屬的主使用者組為fanslinux,附加使用者組為linuxfans,同時指定使用者的預設主目錄為/opt/mylinux
[root@localhost ~]# useradd -g fanslinux -G linuxfans -d /opt/mylinux mylinux
[root@localhost ~]# more /etc/passwd|grep mylinux
mylinux:x:523:1030::/opt/mylinux:/bin/bash
[root@localhost ~]# more /etc/group|grep mylinux
linuxfans:x:1020:mylinux
 2)新增一個使用者test_user,指定UID為686,預設的shell為/bin/csh,讓其歸屬為使用者組linuxfans和fanslinux,同時新增對此使用者的描述,
[root@localhost ~]# useradd  -u 686 -s /bin/csh  -G linuxfans,fanslinux  -c "This is test user" test_user
[root@localhost ~]# more /etc/passwd|grep test_user
test_user:x:686:686:This is test user:/home/test_user:/bin/csh
[root@localhost ~]# more /etc/group|grep test_user  
fanslinux:x:1030:test_user
linuxfans:x:1020:mylinux,test_user
test_user:x:686:
 3)修改使用者test_user的主使用者組為新建的組test_group1,同時修改test_user的附加組為linuxfans和root,最後修改test_user的預設登入shell為/bin/bash
[root@localhost ~]# groupadd test_group1  #新增一個新的使用者組
[root@localhost ~]# more /etc/group|grep test_group1 #顯示新增使用者組的資訊
test_group1:x:1031:
[root@localhost ~]# usermod -g test_group1 -G linuxfans,root -s /bin/bash test_user
[root@localhost ~]# more /etc/passwd|grep test_user   #從輸出可知,使用者的屬性已經更改                                        
test_user:x:686:1031:This is test user:/home/test_user:/bin/bash
[root@localhost ~]# more /etc/group|grep test_user   #從輸出可知,使用者組的屬性也同步更改   
root:x:0:root,test_user
linuxfans:x:1020:mylinux,test_user
test_user:x:686:
4)如何鎖定、解除使用者密碼
下面首先對test_user和mylinux使用者設定密碼
[root@localhost ~]# passwd  test_user
Changing password for user test_user.
New UNIX password: 
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd  mylinux
Changing password for user mylinux.
New UNIX password: 
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.
下面的操作是通過su命令切換到mylinux使用者下,然後在mylinux下再次切換到test_user使用者下,這裡的切換使用者是為了說明一個問題:從超級使用者root切換到普通使用者下,是不需要輸入普通使用者密碼的,系統也不會去驗證密碼。但普通使用者之間切換是需要密碼驗證的。
[root@localhost ~]# su – mylinux  #通過su命令切換到mylinux使用者下
[mylinux@localhost ~]$ whoami      #用whoami命令檢視當前使用者
mylinux
[mylinux@localhost ~]$ su - test_user  #這裡是從mylinux使用者下切換到test_user使用者下,需要輸入密碼
Password: 
[mylinux@localhost ~]$ whoami          #成功切換到test_user使用者下
test_user
接下來,在root使用者下執行usermod鎖定test_user的密碼,測試test_user是否還能登入,從下面可以看出,密碼鎖定後,出現登入失敗。
[root@localhost ~]# usermod -L test_user  #鎖定test_user使用者的密碼
[root@localhost ~]# su - mylinux  
[mylinux@localhost ~]$ whoami
mylinux
[mylinux@localhost ~]$ su - test_user  #這裡輸入的密碼是正確的,但是提示密碼錯誤,因為密碼被鎖定了
Password: 
su: incorrect password
[mylinux@localhost ~]$ whoami
mylinux
最後對test_user解除密碼鎖定,登入正常。
[root@localhost ~]# usermod -U test_user  #解除密碼鎖定
[root@localhost ~]# su – mylinux
[mylinux@localhost ~]$ whoami
mylinux
[mylinux@localhost ~]$ su - test_user
Password: 
[test_user@localhost ~]$ whoami  #密碼鎖定解除後,test_user使用者可以登入系統
test_user

檔案與許可權的設定

 

所謂的檔案許可權,是指對檔案的訪問許可權,包括對檔案的讀、寫、刪除、執行等,在linux下,每個使用者都具有不同的許可權,普通使用者只能在自己的主目錄下進行寫操作,而在主目錄之外,普通使用者只能進行查詢、讀取操作,如何處理好檔案許可權和使用者之間的關係,是本節講述的重點。
一 檢視檔案的許可權屬性
使用ls命令就可以檢視檔案的以及目錄的許可權資訊,不帶任何引數的ls命令只顯示檔名稱,通過“ls –al”可以顯示檔案或者目錄的許可權資訊,看下面的輸出:
[root@localhost oracle]# ls -al
total 92
drwxr-xr-x   3 oracle oinstall  4096 Oct 30  2006 admin
drwxr-xr-x   2 oracle oinstall  4096 Oct 23 18:22 bin
-rwxr-xr-x   1 root   root      3939 Mar 20  2008 .createtablespace.pl
drwxr-xr-x   3 oracle oinstall  4096 Oct 30  2006 flash_recovery_area
drwxr-xr-x   2 oracle oinstall  4096 Jun 25 15:18 install
drwx------   2 oracle oinstall 16384 Jun 25 01:10 lost+found
drwxr-xr--   3 oracle oinstall  4096 Oct 30  2008 oradata
drwxr-xr-x   6 oracle oinstall  4096 Oct 30  2006 oraInventory
drwxr-xr-x   3 oracle dba       4096 Oct 28  2006 product
 為了能更詳細的介紹上面輸出中每個屬性的含義,下圖列出了oradata文件每列代表的含義:
 

下面通過具體的例項講述每列代表的含義。
1.第一列顯示文件型別與執行許可權,有十個字元組成,分為4個部分,下面將文件oradata許可權分解,如下圖所示
 

接著對每個部分解釋如下:
 文件型別部分:
當為“d”時,表示目錄;當為“l”時表示軟連結;當為“-”時表示檔案;當為“c”時表示串列埠字元裝置檔案;當為“b”時表示可供儲存的塊裝置檔案。由此可知,oradata是一個目錄。
在接下來的三個部分中,三個字元為一組,每個字元的含義為:“r”表示只讀,即read;“w”表示可寫,即write;“x”表示可執行,即execute;“-”表示無此許可權,即為空。
 User部分:
第二部分是對文件所有者(user)許可權的設定,“rwx”表示使用者對oradata目錄有讀、寫和執行的所有許可權。
 Group部分:
第三部分是對文件所屬使用者組(group)許可權的設定,“r-x”表示使用者組對oradata目錄有讀和執行的許可權,但是沒有寫的許可權。
 Others部分:
第四部分是對文件擁有者之外的其它使用者許可權的設定,“r--”表示其它使用者或使用者組對oradata目錄只有讀的許可權。
文件的操作許可權是可以指定和更改的,通過chmod命令即可更改檔案或者目錄的許可權,這個將在下節講述。
2.第二列顯示的是文件的連結數,這個連結數就是硬連結的概念,即多少個檔案指向同一個索引節點,舉例如下:
[root@localhost ~]#ls -al
-rw-r--r--   1 root root 60151 Oct 25 01:01 install.log
[root@localhost ~]#ln install.log  install.log1
[root@localhost ~]#ls –al  install.log
-rw-r--r--   2 root root 60151 Oct 25 01:01 install.log
[root@localhost ~]#ln install.log  install.log2
[root@localhost ~]#ls –al  install.log
-rw-r--r--   3 root root 60151 Oct 25 01:01 install.log
從上面可以看出,install.log檔案原始的連結數是1,然後做了兩個硬連結操作,install.log檔案的連線數變為3,這就是連線數的含義。
3.第三列顯示了文件所屬的使用者和使用者組,也就是文件是屬於哪個使用者以及哪個使用者組所有,例如上面的oradata目錄,所屬的使用者為oracle,所屬的組為oinstall組。檔案所屬的使用者和組是可以更改的,通過chown命令就可以修改文件的使用者屬性。
4.第四列顯示的是文件的大小,預設顯示的是以bytes為單位,但是也可以通過命令的引數修改顯示的單位,例如可以通過“ls -sh”組合人性化的顯示文件的大小。對於目錄,通常只顯示檔案系統預設block的大小。
5.第五列顯示文件最後一次的修改日期,通常以月、日、時、分的方式顯示,如果文件修改時間距離現在已經很遠了,會使用月、日、年的方式顯示。
6.第六列顯示的是文件名稱,linux下以“.”開頭的檔案是隱藏檔案,同理以“.”開頭的目錄是隱藏目錄,隱藏文件只有通過ls命令的“-a”選項才能顯示。
例如上面的.createtablespace.pl檔案就是一個隱藏檔案。
二 利用chown改變屬主和屬組
chown就是change owner的意思,主要作用就是改變檔案或者目錄的所有者,而所有者包含使用者和使用者組,其實chown就是對檔案所屬的使用者和使用者組進行的一系列設定。
chown使用的一般語法為:
[root@localhost ~]#chown [-R] 使用者名稱稱 檔案或目錄
[root@localhost ~]#chown [-R] 使用者名稱稱:使用者組組名稱 檔案或目錄
引數說明:
-R : 進行遞迴式的許可權更改,也就是將目錄下的所有檔案、子目錄都更新成為指定的使用者組許可權。常常用於變更某一目錄的情況。
注意,在執行操作前,確保指定的使用者以及使用者組在系統中是存在的。
例子1:修改隱藏檔案“.createtablespace.pl”的所屬使用者為oracle,所屬的使用者組為oinstall,操作如下:
[root@localhost ~]#chown oracle:oinstall .createtablespace.pl
[root@localhost ~]#ls -al  .createtablespace.pl
-rwxr-xr-x   1 oracle   oinstall      3939 Mar 20  2008 createtablespace.pl
注意,這裡要確保oracle使用者和oinstall組已經存在。
例子2:修改oradata目錄以及目錄下的所有檔案的所屬使用者為root,使用者組為dba組,
 [root@localhost ~]#chown -R root:dba oradata
drwxr-xr--   3 root dba   4096 Oct 30  2006 oradata
三 利用chmod改變訪問許可權
chmod用於改變檔案或目錄的訪問許可權。該命令有兩種用法。一種是包含字母和操作符表示式的字元設定法;另一種是包含數字的數字設定法。
1. 字元設定法
使用語法為:
chmod [who] [+ | - | =] [mode] 檔名
命令中各選項的含義如下:
 who表示操作物件,可以是下面字母中的任何一個或者它們的組合。
 u 表示“使用者(user)”,即檔案或目錄的所有者。
 g 表示“使用者組(group)”,即檔案或目錄所屬的使用者組。
 o 表示“其他(others)使用者”。 
 a 表示“所有(all)使用者”。它是系統預設值。
 操作符號含義如下:
 “+”表示新增某個許可權。
 “-”表示取消某個許可權。
 “=”表示賦予給定的許可權,同時取消文件以前的所有許可權。
 mode表示可以執行的許可權,可以是“r“(只讀)、“w”(可寫)和“x”(可執行),以及它們的組合。
 檔名可以是以空格分開的檔案列表,支援萬用字元。
2.舉例
 修改install.log檔案,使其所有者具有所有許可權,使用者組和其它使用者具有隻讀許可權:
[root@localhost ~]# ls -al install.log
-rw------  1 root root 60151 Oct 17 16:11 install.log
[root@localhost ~]# chmod u=rwx,g+r,o+r install.log    
[root@localhost ~]# ls -al install.log             
-rwxr--r--  1 root root 60151 Oct 17 16:11 install.log
 修改/etc/fstab檔案的許可權,使其所有者具有讀寫許可權,使用者組和其它使用者沒有任何許可權:
[root@localhost ~]# ll /etc/fstab          
-rwxr--r--  1 root root 1150 Oct 23 09:30 /etc/fstab
[root@localhost ~]# chmod u-x,g-r,o-r /etc/fstab      
[root@localhost ~]# ll /etc/fstab                
-rw-------  1 root root 1150 Oct 23 09:30 /etc/fstab
3.數字設定法
首先了解一下用數字表示屬性的含義,0表示沒有任何許可權,1表示有可執行許可權,與上面字元表示法中的“x”有相同的含義。2表示有可寫許可權,與“w”對應,4表示有可讀許可權,對應與“r“。
如果想讓檔案的屬主擁有讀和寫的許可權,可以通過4(可讀)+2(可寫)=6(可讀可寫)的方式來實現,那麼用數字6就表示擁有讀寫許可權。
使用語法:
chmod [屬主許可權的數字組合] [使用者組許可權的數字組合] [其它使用者許可權的數字組合] 檔名
下圖展示了數字設定法的實現原理:

 


上圖數字設定法含義剖析
從圖中可以清晰的看出,“755”組合的代表含義,第一個“7”顯示了檔案所有者的許可權,是通過4(r)+2(w)+1(x)=7(rwx)而得到的。第二個“5”顯示了檔案所屬組的許可權,是通過4(r)+0(-)+1(x)=5(rx)而得到的,同理最後一個“5”也有類似的含義。
舉例:
某個檔案mysqltuner.pl的預設許可權為600,即“-rw-------”,表示只有此檔案的所有者(User)擁有讀寫許可權,其它使用者(Others)和組(Group)沒有對此檔案訪問的任何許可權。
首先修改此檔案的許可權為644,即“-rw-r--r--”,表示此檔案的所有者(User)擁有讀寫許可權,而其它使用者(Others)和組(Group)僅僅擁有讀的許可權,操作如下:
[linux1@localhost ~]$ ls -al mysqltuner.pl 
-rw------- 1 linux1 linux1 38063 Oct 26 07:49 mysqltuner.pl
[linux1@localhost ~]$ chmod 644  mysqltuner.pl
[linux1@localhost ~]$ ls -al mysqltuner.pl     
-rw-r--r-- 1 linux1 linux1 38063 Oct 26 07:49 mysqltuner.pl
然後接著修改mysqltuner.pl檔案的許可權為755,即“-rwxr-xr-x”,表示此檔案的所有者(User)擁有讀寫執行許可權,而其它使用者(Others)和組(Group)擁有對此檔案的讀和執行許可權。
[linux1@localhost ~]$ chmod 755  mysqltuner.pl 
[linux1@localhost ~]$ ls -al mysqltuner.pl     
-rwxr-xr-x 1 linux1 linux1 38063 Oct 26 07:49 mysqltuner.pl