Linux 是一個多用戶、多任務的操作系統;我們應該了解單用戶多任務和多用戶多任務的概念
單用戶多任務
一個beinan用戶,為了完成工作,執行了幾個任務;當然beinan這個用戶,其它的人還能以遠程登錄過來,也能做其它的工作。
多用戶多任務
比如LinuxSir.Org 服務器,上面有FTP 用戶、系統管理員、web 用戶、常規普通用戶等,在同一時刻,可能有的弟兄正在訪問論壇;有的可能在上傳軟件包管理子站,比如luma 或Yuking 兄在管理他們的主頁系統和FTP ;在與此同時,可能還會有系統管理員在維護系統;瀏覽主頁的用的是nobody用戶,大家都用同一個,而上傳軟件包用的是FTP用戶;管理員的對系統的維護或查看,可能用的是普通帳號或超級權限root帳號;不同用戶所具有的權限也不同,要完成不同的任務得需要不同的用戶,也可以說不同的用戶,可能完成的工作也不一樣;
值得注意的是:多用戶多任務並不是大家同時擠到一起接在一台機器的鍵盤和顯示器前來操作機器,多用戶可能通過遠程登錄來進行,比如對服務器的遠程控制,只要有用戶權限任何人都是可以上去操作或訪問的;
linux下用戶的角色分類
用戶在系統中是分角色的,在Linux系統中,由於角色不同,權限和所完成的任務也不同;值得注意的是用戶的角色是通過UID和GID識別的,特別是UID;在系統管理中,系統管理員一定要堅守UID唯一的特性;UID是linux下確認用戶權限的標志,用戶的角色和權限都是通過UID來實現的,例如將普通用戶的UID設置為0后,這個普通用戶就具有了root用戶的權限,這是極度危險的操作。因此要盡量保持用戶UID的唯一性。
在linux下用戶是根據角色定義的,具體分為三種角色:
超級用戶:是真實用戶,擁有對系統的最高管理權限,默認是root用戶。
普通用戶:是真實用戶,只能對自己家目錄下的文件進行訪問和修改,具有登錄系統的權限,但權限有限,例如上面提到的www用戶、ftp用戶等。這類用戶都是系統管理員自行添加的;
虛擬用戶:也叫“偽”用戶,與真實用戶區分開來,這類用戶最大的特點是不能登錄系統,它們的存在主要是方便系統管理,滿足相應的系統進程對文件屬主的要求。這類用戶都系統自身擁有的,而非后來添加的,當然我們也可以添加虛擬用戶。例如系統默認的bin、adm、nobody用戶等,一般運行的web服務,默認就是使用的nobody用戶,但是nobody用戶是不能登錄系統的。
多用戶系統從系統管理角度來說更為方便。從安全角度來說,多用戶管理的系統更為安全,比如beinan用戶下的某個文件不想讓其它用戶看到,只是設置一下文件的權限,只有beinan一個用戶可讀可寫可編輯就行了,這樣一來只有beinan一個用戶可以對其私有文件進行操作,Linux 在多用戶下表現最佳,Linux能很好的保護每個用戶的安全,重要的是要有安全意識
用戶
在Linux系統中還有一些用戶是用來完成特定任務的,比如nobody和ftp等,我們訪問LinuxSir.Org 的網頁程序,就是nobody用戶;我們匿名訪問ftp 時,會用到用戶ftp或nobody
用戶組
用戶組(group)就是具有相同特征的用戶(user)的集合體;比如有時我們要讓多個用戶具有相同的權限,比如查看、修改某一文件或執行某個命令,這時我們需要用戶組,我們把用戶都定義到同一用戶組,我們通過修改文件或目錄的權限,讓用戶組具有一定的操作權限,這樣用戶組下的用戶對該文件或目錄都具有相同的權限,這是我們通過定義組和修改文件的權限來實現的;
舉例:我們為了讓一些用戶有權限查看某一文檔,比如是一個時間表,而編寫時間表的人要具有讀寫執行的權限,我們想讓一些用戶知道這個時間表的內容,而不讓他們修改,所以我們可以把這些用戶都划到一個組,然后來修改這個文件的權限,讓用戶組可讀,這樣用戶組下面的每個用戶都是可讀的;
將用戶分組是Linux系統中對用戶進行管理及控制訪問權限的一種手段,通過定義用戶組,在很大程度上簡化了管理工作。
用戶和用戶組的對應關系是:一對一、多對一、一對多或多對多;
一對一:某個用戶可以是某個組的唯一成員;
多對一:多個用戶可以是某個唯一組的成員,不歸屬其它用戶組;比如beinan和linuxsir兩個用戶只歸屬於beinan用戶組;
一對多:某個用戶可以是多個用戶組的成員;比如beinan可以是root組成員,也可以是linuxsir用戶組成員,還可以是adm用戶組成員;
多對多:多個用戶對應多個用戶組,並且幾個用戶可以是歸屬相同的組;其實多對多的關系是前面三條的擴展;理解了上面的三條,這條也能理解;
id
id renyahong
finger
finger renyahong
groups 查看當前用戶所屬組的其它成員
groups renyahong 查看此用戶所在的組
主組與輔組
groupadd sambauser
useradd -G sambauser lizongbin
這時lizongbin用戶 主組為yanfazhongxin 附屬組為sambauser
-bash-3.2$ id
uid=500(lizongbin) gid=502(yanfazhongxin) groups=502(yanfazhongxin),508(sambauser)
-bash-3.2$ newgrp sambauser newgrp - log in to a new group 切換屬組的,如果加-,則環境變量一塊變過來,與su -一樣
bash-3.2$ id
uid=500(lizongbin) gid=508(sambauser) groups=502(yanfazhongxin),508(sambauser)
切換前后,分別創建文件,組名是不一樣的
本文總結了Linux添加或者刪除用戶和用戶組時常用的一些命令和參數,還有文件與目錄
1、建用戶:
adduser phpq //新建phpq用戶
passwd phpq //給phpq用戶設置密碼
2、建工作組
groupadd test //新建test工作組
3、新建用戶同時增加工作組
useradd –D不加任何參數時,顯示/etc/default/useradd文件的當前設置
useradd -g test phpq //新建phpq用戶並增加到test工作組
注::-g 所屬組 -d 家目錄 -s 所用的SHELL
4、給已有的用戶增加工作組
usermod -G groupname username
或者:gpasswd -a user group
添加一個用戶mylinux,指定所屬的主用戶組為fanslinux,附加用戶組為linuxfans,同時指定用戶的默認主目錄為/opt/mylinux
[root@localhost ~]# useradd -g fanslinux -G linuxfans -d /opt/mylinux mylinux
添加一個用戶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 ~]# chmod u=rwx,g+r,o+r install.log
5、從組中刪除用戶
編輯/etc/group 找到GROUP1那一行,刪除 A
或者用命令
gpasswd -d A GROUP
6、臨時關閉:在/etc/shadow文件中屬於該用戶的行的第二個字段(密碼)前面加上*就可以了。想恢復該用戶,去掉*即可。
或者使用如下命令關閉用戶賬號:
passwd peter –l
重新釋放:
passwd peter –u
7、永久性刪除用戶賬號
userdel peter
groupdel peter
usermod –G peter peter (強制刪除該用戶的主目錄和主目錄下的所有文件和子目錄)
8、顯示用戶信息
finger user 注:查看用戶信息工具
id user
cat /etc/passwd
9
su
sudo
visudo
/etc/skel目錄一般是存放用戶啟動文件的目錄,這個目錄是由root權限控制,當我們添加用戶時,這個目錄下的文件自動復制到新添加的用戶的家目錄下;/etc/skel 目錄下的文件都是隱藏文件,也就是類似.file格式的;我們可通過修改、添加、刪除/etc/skel目錄下的文件,來為用戶提供一個統一、標准的、默認的用戶環境;
[root@CentOS5 file_user]# ls -la /etc/skel/
/etc/skel目錄下的文件,一般是我們用useradd 和adduser 命令添加用戶(user)時,系統自動復制到新添加用戶(user)的家目錄下;如果我們通過修改 /etc/passwd 來添加用戶時,我們可以自己創建用戶的家目錄,然后把/etc/skel 下的文件復制到用戶的家目錄下,然后要用chown 來改變新用戶家目錄的屬主;
/etc/login.defs 文件是當創建用戶時的一些規划,比如創建用戶時,是否需要家目錄,UID和GID的范圍;用戶的期限等等,這個文件是可以通過root來定義的;
/etc/default/useradd 文件是通過useradd 添加用戶時的規則文件;
下面是/etc/shadow文件內容的格式:
用戶名:加密口令:最后一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:保留字段
下面是每個字段的詳細含義:
用戶名:與/etc/passwd文件中的用戶名有相同的含義。
加密口令:存放的是加密后的用戶口令字串,如果此字段是“*”、“!”、“x”等字符,則對應的用戶不能登錄系統。
最后一次修改時間:表示從某個時間起,到用戶最近一次修改口令的間隔天數。可以通過passwd 來修改用戶的密碼,然后查看/etc/shadow中此字段的變化。
最小時間間隔:表示兩次修改密碼之間的最小時間間隔。
最大時間間隔:表示兩次修改密碼之間的最大時間間隔,這個設置能增強管理員管理用戶的時效性。
警告時間:表示從系統開始警告用戶到密碼正式失效之間的天數。
不活動時間:此字段表示用戶口令作廢多少天后,系統會禁用此用戶,也就是說系統不再讓此用戶登錄,也不會提示用戶過期,是完全禁用。
失效時間:表示該用戶的帳號生存期,超過這個設定時間,帳號失效,用戶就無法登錄系統了。如果這個字段的值為空,帳號永久可用。
保留字段:linux的保留字段,目前為空,以備linux日后發展之用。
下面是/etc/group每個字段的含義:
組名:是用戶組的名稱,由字母或數字構成。與/etc/passwd中的用戶名一樣,組名不能重復。
口令:存放的是用戶組加密后的口令字串,密碼默認設置在/etc/gshadow文件中,而在這里用“x”代替,linux系統下默認的用戶組都沒有口令,可以通過gpasswd來給用戶組添加密碼。
組標識號:就是GID,與/etc/passwd中的組標識號對應。
組內用戶列表: 顯示屬於這個組的所有用戶,多個用戶之間用逗號分隔。
由於用戶(user)和用戶組(group)是和文件及目錄權限聯系在一起的,所以文件及目錄權限的操作也會來給大家介紹;
所謂的文件權限,是指對文件的訪問權限,包括對文件的讀、寫、刪除、執行等,在linux下,每個用戶都具有不同的權限,普通用戶只能在自己的主目錄下進行寫操作,而在主目錄之外,普通用戶只能進行查找、讀取操作,如何處理好文件權限和用戶之間的關系。
文件權限的機制是Linux系統中的一大特色,有六大權限
除了我們現在所熟知的rwx權限外,還有三個比較特殊的權限,分別為:setuid、setgid和stick bit(粘滯位),文件系統權限,chattr,acl,sudo
基本的rwx權限
一 三個特殊權限
對目錄設置粘滯位限定用戶只能對自己的文件進行處理
對文件設置setuid可以讓執行該命令的用戶以該命令擁有者的權限去執行,setuid使用不是無限制的。只能應用在Linux ELF格式二進制文件上,而不能用於腳本文件。
1 setuid及setgid
[root@CentOS5 ~]# ll /etc/passwd /usr/bin/passwd
-rw-r--r-- 1 root root 1927 Jul 30 2013 /etc/passwd
-rwsr-xr-x 1 root root 22984 Jan 7 2007 /usr/bin/passwd
root用戶和普通用戶均可以用/usr/bin/passwd這個命令來修改這個/etc/passwd這個文件,root用戶本身擁有對/etc/passwd的寫權限,無可厚非;root可以修改任何人的密碼,普通用戶只能修改自己,普通用戶之所以可以修改自己的密碼是因為setuid,setuid的作用是“讓執行該命令的用戶以該命令擁有者的權限去執行”,就是普通用戶執行passwd時會擁有root的權限,這樣就可以修改/etc/passwd這個文件了。它的標志為:s,會出現在x的地方,例:-rwsr-xr-x 。而setgid的意思和它是一樣的,即讓執行文件的用戶以該文件所屬組的權限去執行。
chmod u+s xxx # 設置setuid權限
chmod g+s xxx # 設置setgid權限
chmod o+t xxx # 設置stick bit權限,針對目錄
chmod 4775 xxx # 設置setuid權限
chmod 2775 xxx # 設置setgid權限
chmod 1775 xxx # 設置stick bit權限,針對目錄
注意:但是事實證明S或T與x沒關有時你設置了s或t 權限,你會發現它變成了S或T,這是因為在那個位置上你沒有給它x(可執行)的權限,這樣的話這樣的設置是不會有效的,你可以先給它賦上x的權限,然后再給s或t的權限。
[root@CentOS5 bin]# ll|grep "^-rws"
-rws--x--x 1 root root 1890660 Mar 31 2010 Xorg
-rwsr-xr-x 1 root root 43492 Jan 27 2010 at
-rwsr-xr-x 1 root root 46972 Mar 31 2010 chage
-rws--x--x 1 root root 17900 Jan 20 2010 chfn
-rws--x--x 1 root root 19096 Jan 20 2010 chsh
-rwsr-sr-x 1 root root 315416 Jan 6 2010 crontab
-rwsr-xr-x 1 root root 51512 Mar 31 2010 gpasswd
-rwsr-xr-x 1 root root 24588 Mar 31 2010 newgrp
-rwsr-xr-x 1 root root 22984 Jan 7 2007 passwd
-rwsr-xr-x 1 root root 18608 Sep 22 2009 rcp
-rwsr-xr-x 1 root root 13108 Sep 22 2009 rlogin
-rwsr-xr-x 1 root root 8908 Sep 22 2009 rsh
[root@CentOS5 bin]# pwd
/usr/bin
-rwsr-xr-x 1 root root 58324 Jan 20 2010 mount
-rwsr-xr-x 1 root root 35832 Sep 27 2009 ping
-rwsr-xr-x 1 root root 31244 Sep 27 2009 ping6
-rwsr-xr-x 1 root root 23960 Mar 1 2010 su
-rwsr-xr-x 1 root root 38936 Jan 20 2010 umount
[root@CentOS5 file_user]# ll /etc/passwd
-rw-r--r-- 1 root root 1927 Jul 30 2013 /etc/passwd
第二列顯示的是文檔的連結數,這個連結數就是硬鏈接的概念,即多少個文件指向同一個索引節點,舉例如下:
ln install.log install.log2
第五列顯示文檔最后一次的修改日期
id - print real and effective user and group IDs
linux系統中每個進程都有2個ID,分別為用戶ID(uid)和有效用戶ID(euid),UID一般表示進程的創建者(屬於哪個用戶創建),而EUID表示進程對於文件和資源的訪問權限(具備等同於哪個用戶的權限)。C語言中,可以通過函數getuid()和geteuid()來獲得進程的兩個ID值。
當一個用戶登陸系統時,系統會將UID和EUID都賦值為/etc/passwd文件中的UID,一般情況下2個ID是相同的,但是某些情況下會出現2個ID不同的情況。
gid和egid同理。
下面一段C代碼將解釋區別:"printid.c" #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main(void) { printf(" UID\t= %d\n", getuid()); printf(" EUID\t= %d\n", geteuid()); printf(" GID\t= %d\n", getgid()); printf(" EGID\t= %d\n", getegid()); return EXIT_SUCCESS; } 編譯之: aguo@linux-x9rc:~> gcc -o printid printid.c 執行: aguo@linux-x9rc:~> ./printid Real UID = 1000 Effective UID = 1000 Real GID = 100 Effective GID = 100 看看/etc/passwd里uid和gid: aguo@linux-x9rc:~> cat /etc/passwd | grep aguo | awk -F":" '{print "uid:"$3 "\tgid:"$4}' uid:1000 gid:100 以上是相同的例子。 下面演示uid和euid不同的例子。 首先,修改一下文件屬性,setuid或setgid aguo@linux-x9rc:~> chmod u+s printid #這樣一來,文件在執行階段具有文件所有者的權限。 還可以再補充一個: aguo@linux-x9rc:~> chmod g+s printid #這樣一來,文件在執行階段具有文件所屬組的權限。 其次,變成其他用戶,再來試驗一下,比如變成root; linux-x9rc:/home/aguo # ./printid Real UID = 0 Effective UID = 1000 Real GID = 0 Effective GID = 100
2 粘着位
Linux中有一個存放臨時文件的目錄/tmp(類似於Windows中的temp目錄),每個用戶產生的臨時文件都存放在此目錄下,也就是說每個用戶對/tmp目錄都應該有寫權限(否則無法拷貝生成文件),這樣造成一個問題,比如,高洛峰在/tmp目錄下創建了一個文件,張沫看着不爽就可以刪掉,這如何控制?
其實,這種情況永遠都不會發生,因為/tmp目錄有一個特殊的權限標記:
ls -ld /tmp
drwxrwxrwt 5 root root 4096 May 24 13:55 /tmp
瞧見那個rwx權限最后的“t”了沒,那個神奇的“t”就是粘着位t(有的資料中文也稱為粘滯位),是Linux特殊權限中的第三個(另外兩個是SetUID和SetGID),定義為:權限為777的目錄設置粘着位t以后,具有寫權限每個用戶都可以在目錄下創建文件,不同的是每個用戶只能刪除自己是所有者的文件,也就是說只能刪除自己創建的文件。
案例一操作(給目錄/test授予777權限用一個普通用戶登錄刪除另一個普通用戶創建的文件),不過這次創建的目錄/test多授予它一個粘着位權限:
chmod o+t /test # 或 chmod 1777 /test
此時普通用戶嘗試刪除其他用戶的文件時,會給出提示“Operation not permitted”。 當root設置粘滯位后,即時生效
二 文件系統權限
每個操作系統都要有一種組織管理數據的方式,我們可以理解為就是文件系統,比如Windows的NTFS、FAT ,Linux的EXT ,而在Linux加載分區時可以針對文件系統進行權限設定。
配置文件/etc/fstab保存了Linux啟動時自動加載的分區信息,/etc/fstab文件中第四項定義了加載時的設置,默認為defaults ,包括rw、suid、dev、exec、auto、nouser、async ,如果想改變整個分區的限定,可以利用這些選項。本文舉兩例說明,證明基於文件系統的權限那是相當霸道。
案例一:只讀分區
默認加載分區是可讀寫rw的,但是如果特殊應用希望分區加載后是只讀的,可以做一下設置:
默認這個文件不可修改
[root@CentOS5 /]# lsattr /etc/fstab
----i-------- /etc/fstab
[root@CentOS5 /]# chattr -i /etc/fstab
[root@CentOS5 /]# vim /etc/fstab
[root@CentOS5 /]# chattr +i /etc/fstab
vi /etc/fstab # 編輯/etc/fstab文件在defaults后加入ro選項(逗號分隔)
LABEL=/soft /soft ext3 defaults,ro 1 2
mount -o remount /soft # 重新加載/soft分區,使設置生效
如果你不嫌麻煩也可以重啟系統,設置同樣會生效。
此時整個/soft分區都是只讀的,用root登錄后執行:
touch /soft/testfile
touch: cannot touch `testfile': Read-only file system
會提示/soft分區是只讀的,即便牛X到是root也不可以創建文件,這是凌駕於rwx權限之上的文件系統權限,相當的牛A與牛C之間。像本例是筆者公司的軟件共享目錄,一般半個月才更新一次軟件,平時不想任何人增加或刪除(包括不希望root用戶誤刪除),所以設置為ro ,更新軟件時,可以臨時更改為rw來設置:
mount -o remount,rw /soft
在命令行上也可以設置分區權限,但是只是當前會話有效,而寫入/etc/fstab文件后則會一直有效。
案例二:安全分區
數據存儲的分區,如用做備份的分區,我們可以增加下安全設置選項:
vi /etc/fstab # 編輯/etc/fstab文件在defaults后加入noexec選項
LABEL=/backup /backup ext3 defaults,noexec 1 2
mount -o remount /backup # 重新加載/backup分區,使設置生效
此時做個試驗,我們使用普通用戶拷貝一個命令文件pwd在/backup目錄下
cp /bin/pwd /backup
/backup/pwd
-bash: pwd: Permission denied
ls -l pwd
-rwxr-xr-x 1 liming liming 93560 Sep 25 10:13 pwd
命令拷貝到/backup下雖然具有可執行權限,但是也無法執行,在/backup分區下,任何可執行文件都將不能執行,這么做的意義在哪里?如果攻擊程序、木馬、病毒不能夠執行,那么就相當於沒有意義。
其他選項不做更多演示,這里只拋磚引玉,其他選項設置讀者可man mount查看,查看-o選項中的詳細介紹,更多設置讀者可自行嘗試,所謂授之以魚不如授之以漁讀萬卷書不如行萬里路萬惡淫為首窗前明月光啊。
三 權限之chattr
chatrr只有root用戶可以使用,用來修改文件的權限屬性,建立凌駕於rwx基礎權限之上的授權。
在此介紹兩個常用選項:
a 只允許在文件后追加數據,如果目錄具有此屬性,系統將只允許在目錄下建立和修改文件,而不允許刪除任何文件。
i 不允許對文件進行任何修改,如果目錄具有此屬性,那么只能修改目錄下的文件,不允許建立和刪除文件。
案例一:無法刪除和更改的文件
如果要建立一個公共訪問的目錄,大家都可以刪除和創建、拷貝文件,但是有一個基本的使用此目錄的規則,要建立一個說明文件README ,這個文件不允許大家刪除和修改,則可以如下設置:
chattr +i README
這時,README文件所在目錄所有用戶都有讀寫權限,但是任何用戶都無法刪除README文件(包括root),嘗試刪除會提示:
rm README
rm: remove write-protected regular empty file `README'? y
rm: cannot remove `README': Operation not permitted
同樣也不可以改變文件的內容,可以查看到README文件被增加了一個不可更改的屬性:
lsattr README
----i-------- README
此時,README變成了一個非常牛XX的文件,即便你是SuperUser也無法刪除和修改它,想對它干嘛都不成。
若要更改或刪除文件也必須先去掉i屬性才可以:
chattr -i README
案例二:備份目錄應用
假設有這樣一種應用,我們每天自動化實現把上海服務器的日志通過scp和rsync遠程備份到北京的備份服務器上,備份服務器的存儲目錄可設置為只可創建文件而不可刪除。
chattr +a /backup/log
設置后,可在本機測試:
cp /var/log/messages /backup/log # 可以拷貝文件
rm /backup/log/messages # 刪除文件則被禁止
rm: remove regular file `messages'? y
rm: cannot remove `messages': Operation not permitted
chattr命令不宜對目錄/、/dev、/tmp、/var等設置,嚴重者甚至容易導致系統無法啟動,比如根目錄如果設置了i屬性,謹慎設置。
四 權限之ACL
Linux中默認的權限管理比較簡單,難以實現復雜的權限控制,如針對一個文件設置幾個用戶或用戶組具有不同權限,這就需要依靠ACL(Access Control List)訪問控制列表實現,可以針對任意指定的用戶/用戶組分配權限。在一個文件系統上使用ACL需要在掛載文件系統的時候打開ACL功能。而根分區(ROOT)默認掛載的時候支持ACL
開啟分區的ACL功能 ,需要在/etc/fstab文件中加入acl選項,如:
LABEL=/backup /backup ext3 defaults,acl 1 2
然后重新加載分區即可生效:
mount -o remount /backup
如果想臨時生效可不修改/etc/fstab文件,直接執行命令“mount -o remount,acl /backup”即可。
[root@coreserv ~]# setfacl -v 查看版本
setfacl 2.2.49
[root@coreserv ~]# tune2fs -l /dev/sda3 | grep option 查看文件系統是否支持acl權限控制:
Default mount options: user_xattr acl
開啟acl支持有兩種方法:
1)修改mount選項:
mount -o remount,acl /dev/sda3 /mnt/acltest
開機自動掛載:
vim /etc/fstab
/dev/sda3 /mnt/acltest ext4 defaults,acl 0 0
2)使用tune2fs修改文件系統信息:
tune2fs開啟acl后已是永久有效,無需再改fstab的mount選項:
tune2fs -o acl /dev/sda3 修改文件系統自身信息來設置acl選項
tune2fs -o ^acl /dev/sda3 取消acl選項
setfacl -m g:aclgp1:rx bobdir/
對於組權限,setfacl設置的權限只對主組(即useradd -g或usermod -g的組)有效,對附加組(即useradd -G或usermod -aG的組)無效,即使文件的所有組已改為附加組。
setfacl和chmod設置的權限可以相互覆蓋,當二者設置的權限不一致時,以使用getfacl看到的“#effective:”后的權限為准。
useradd http -h /var/www/html 設置宿主目錄
passwd http
setfacl -R -m u:http:rwx /var/www/html/ 這樣http用戶就可以操作html目錄
setfacl -d --set u:http:rwx /var/www/html/cache -d是讓子目錄繼承父目錄權限
setfacl -x u:http /var/www/html/ 去掉單個用戶的權限
setfacl -b /var/www/html/ 刪除目錄的所有acl權限
getfacl /var/www/html
案例:設定復雜權限控制目錄
設定目錄/backup/log用戶zhangsan有讀寫執行權限,用戶lisi有讀權限,用戶wangwu有讀寫權限,而用戶組bakgroup有讀和執行權限,則可做如下設置:
setfacl -m u:zhangsan:rwx,u:lisi:r,u:wangwu:rw,g:bakgroup:rx /backup/log
setfacl -m可以設置文件/目錄的訪問權限,至於權限設定的寫法包括三個組成部分,第一部分列出設定對象是用戶u或用戶組g ;第二部分指定用戶名或用戶組名;第三部分指定訪問權限rwx ,設定多組權限中間用逗號分隔。如“u:lisi:r”表示設定用戶lisi為只讀權限。
查看目錄屬性:
ls -ld /backup/log
drwxrwxr-x+ 2 root root 4096 May 25 07:16 /backup/log
會發現文件權限位后增加了一個加號,這說明/backup/log設置了ACL ,同時可以查看其詳細的權限設置:
getfacl /backup/log
# file: backup/log
# owner: root
# group: root
user::rwx
user:zhangsan:rwx
user:lisi:r--
user:wangwu:rw-
group::r-x
group:bakgroup:r-x
mask::rwx
other::r-x
這樣即可實現Linux中文件/目錄的復雜權限控制,要注意的是ACL優先於基本權限設置,也就是說如果默認所屬組為rx權限,但是ACL若指定了所屬組中某個成員為rwx權限,則此成員擁有rwx權限。
五 權限之管理員授權
Sudo使用簡單,管理員root使用visudo命令即可編輯其配置文件/etc/sudoers進行授權,具體格式為:
用戶名/用戶組名 主機地址=授權命令(絕對路徑)
如,授權用戶zhaoliu可以關機和重啟,則添加如下行:
zhaoliu Helen=/sbin/shutdown,/sbin/reboot
指定組名用百分號標記,如%admgroup ,多個授權命令之間用逗號分隔。
用戶zhaoliu可以使用sudo查看授權的命令列表:
sudo -l
Password:
User zhaoliu may run the following commands on this host:
(root) /sbin/shutdown
(root) /sbin/reboot
提示輸入密碼為zhaoliu的密碼,驗證其是否為管理員通過sudo授權的用戶,執行命令:
sudo /sbin/shutdown -h now
zhaoliu即可關機,注意命令寫絕對路徑,或者把/sbin路徑導入到用戶缺省路徑中,否則無法執行。
案例:授權用戶管理Apache
首先要分析授權用戶管理Apache至少要實現哪些基本授權:
1、可以使用Apache管理腳本
2、可以修改Apache配置文件
3、可以更新網頁內容
假設Aapche管理腳本為/etc/rc.d/init.d/httpd ,滿足條件一,用visudo進行授權:
zhaoliu Helen=/etc/rc.d/init.d/httpd reload,/etc/rc.d/init.d/httpd configtest
授權用戶zhaoliu可以通過Apache管理腳本重新讀取配置文件讓更改的設置生效(reload)和可以檢測Apache配置文件語法錯誤(configtest),但不允許其執行關閉(stop)、重啟(restart)等操作。
滿足條件二,同樣使用visudo授權:
zhaoliu Helen=/bin/vi /etc/httpd/conf/httpd.conf
授權用戶可以root身份使用vi編輯Apache配置文件。
以上兩種sudo的設置,要特別注意,很多朋友使用sudo會犯兩個錯誤:第一,授權命令沒有細化到選項和參數;第二,認為只能授權管理員執行的命令。
條件三則比較簡單,假設網頁存放目錄為/var/www/html ,則只需要授權zhaoliu對此目錄具有寫權限或者索性更改目錄所有者為zhaoliu即可,如果需要還可以設置zhaoliu可以通過FTP等文件共享服務更新網頁。
最后請切記系統安全的基本原則:授權用戶最小的權限。
蜘蛛俠說“能力越大責任越大”,Linux管理員說“能力越大出錯幾率越大”,阿門。