htctouch 2012-6-30 22:54
linux新的權限設定指令 - setfacl 與 getfacl 的用法
ACL 是傳統的 Unix-like 作業系統權限的額外支援項目,因此要使用 ACL 必須要有檔案系統的支援才行。目前絕大部分的檔案系統都有支援 ACL 的功能,包括 ReiserFS, EXT2/EXT3, JFS, XFS 等等。<br><br>在 CentOS 5.x 當中,預設使用 Ext3 是啟動 ACL 支援的!至於察看你的檔案系統是否支援 ACL 可以這樣看:<br>[quote]<br>[root@www ~]# <font face="細明體, Fixedsys, serif"><font style="font-size: 10pt">mount</font></font> <font face="細明體, Fixedsys, serif"><font style="font-size: 10pt"><==直接查閱掛載參數的功能</font></font>/dev/hda2 on / type ext3 <font face="細明體, Fixedsys, serif"><font style="font-size: 10pt">(rw)</font></font><br>/dev/hda3 on /home type ext3 (rw)<br><font face="細明體, Fixedsys, serif"><font style="font-size: 10pt">#假設我們只要看這兩個裝置。但沒有看到 acl !</font></font><br>[/quote]<br><br><p align="left"><font face="新細明體,">由 mount 單純去查閱不見得可以看到實際的項目,由於目前新的 distributions 常常會主動加入某些預設功能, 如上所示,其實 CentOS 5.x 在預設的情況下 (Default mount options)就幫你加入 acl 的支援了! 那如果你的系統預設不會幫你加上 acl 的支援呢?那你可以這樣做:</font></p><br>[quote]<br>[root@www ~]# <font face="細明體, Fixedsys, serif"><font style="font-size: 10pt" color="#ff0000">mount -o remount,acl /</font></font><div>[root@www ~]# <font face="細明體, Fixedsys, serif"><font style="font-size: 10pt">mount</font></font></div><div>/dev/hda2 on / type ext3 <font face="細明體, Fixedsys, serif"><font style="font-size: 10pt">(rw,<font color="#ff0000">acl</font>)</font></font></div><div><font face="細明體, Fixedsys, serif"><font style="font-size: 10pt"># 這樣就加入了!但是如果想要每次開機都生效,那就這樣做:</font></font></div><div><br></div><div>[root@www ~]# <font face="細明體, Fixedsys, serif"><font style="font-size: 10pt">vi /etc/fstab</font></font></div><div>LABEL=/1 / ext3 defaults<font face="細明體, Fixedsys, serif"><font style="font-size: 10pt">,<font color="#ff0000">acl</font></font></font> 1 1<br>[/quote]<br><br>用法:</div><div><ul style="font-family: 新細明體, 'Times New Roman', serif; font-size: 15px; background-color: rgb(211, 211, 211); "><li>getfacl:取得某個檔案/目錄的 ACL 設定項目;</li><li>setfacl:設定某個目錄/檔案的 ACL 規範。</li></ul><div><br></div><div><span style="color: rgb(0, 0, 136); font-family: 新細明體, serif; font-size: 15px; font-weight: bold; background-color: rgb(211, 211, 211); ">setfacl 指令用法</span></div><div><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 0); ">[root@www ~]# <span class="term_command" style="font-size: 10pt; font-family: 細明體, Fixedsys, serif; color: yellow; ">setfacl [-bkRd] [{-m|-x} acl參數] 目標檔名</span>
<span class="term_say" style="font-size: 10pt; font-family: 細明體, Fixedsys, serif; color: rgb(255, 102, 102); ">選項與參數:
-m :設定後續的 acl 參數給檔案使用,不可與 -x 合用;
-x :刪除後續的 acl 參數,不可與 -m 合用;
-b :移除所有的 ACL 設定參數;
-k :移除預設的 ACL 參數,關於所謂的『預設』參數於後續範例中介紹;
-R :遞迴設定 acl ,亦即包括次目錄都會被設定起來;
-d :設定『預設 acl 參數』的意思!只對目錄有效,在該目錄新建的資料會引用此預設值</span></pre></div><div>如果我現在有個uploads 的目錄...想要設定遞迴且後續新增的目錄都能夠延續目前的設定...那麼可以這樣做</div><div>我想要讓原有的 uploads 的目錄不但FTP帳號可以使用...apache 也能同時共用 uploads的資料匣..<br>要達個這個目地需要執行兩次<br></div><br>(1) 讓目前的檔案目錄權限可以變更<br><p align="left"><font color="Blue" size="3">#setfacl -R -m u:apache:rwx uploads/</font></p><p align="left"><br></p><p align="left">(2) 讓未來新建的目錄可以引用此設定值<br><font color="Blue" size="3">#setfacl -R -d -m u:apache:rwx uploads/</font></p><div><br><font color="Red" size="3">實務經驗: </font>這個必須設定兩次...因為 -d 參數的關係.要不然會產生之後新建的目錄沒有引用.如果只設定第2步.則會產生檔案沒有延用設定.所以分兩次設定.<br>才能夠讓目前的設定立刻生效,而且未來新增的目錄也會引用<br><br></div><div>檢查看看有沒有成功</div><div><br></div>#getfacl uploads<br><br>[quote]<br>user::rwx<br>group::r-x<br>other::r-x<br>default:user::rwx<br><font color="#ff0000">default:user:apache:rw-</font><br>default:group::r-x<br>default:mask::rwx<br>default:other::r-x<br>[/quote]<br><br>如果日後不需要了...要移除權限...<br>#setfacl -b -R uploads/<br><br>這樣就可以囉...<br>詳細使用可以 參考鳥哥文章:http://linux.vbird.org/linux_basic/0410accountmanager.php#setfacl</div>