檔案系統存取控制 (ACL)
ext3 檔案系統支援存取控制 (Access Control List, ACL) 的設定,要啟用 ACL 功能,在 mount 的時候要加入 ACL 選項,例如要將 /home 載掛點改掛成支援 ACL 的方式:
#mount -o remount,acl /home
在 Red Hat Enterprise 5 的安裝過程中,已將 ACL 屬性設定到 ext3 的 superblock 之中,所以在 /etc/fstab 中不用設定成 ACL,要看所有的 superblock 內容可用 dumpe2fs 或 tune2fs -l 命令來顯示:
# dumpe2fs /dev/sda1
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name: /boot
Last mounted on: <not available>
Filesystem UUID: 8b95de47-0cb4-4972-a3d5-0c4bf607d986
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
…… 略 ……
# tune2fs -l /dev/sda1 | grep options
Default mount options: user_xattr acl
如果是安裝完畢後才建立的分割區,要啟用 ACL 功能就要使用 ACL 選項,因為它的 superblock 並沒有預設選項:
# dumpe2fs /dev/myVG/myLV | grep options
dumpe2fs 1.39 (29-May-2006)
Default mount options: (none)
如果不要用 mount 的功能,而要將 ACL 寫入 superblock,可以用 tune2fs -o 指令來完成:
# tune2fs -l /dev/myVG/myLV | grep options
Default mount options: (none)
# tune2fs /dev/myVG/myLV -o acl
tune2fs 1.39 (29-May-2006)
# tune2fs -l /dev/myVG/myLV | grep options
Default mount options: acl
==============================
設定 ACLs
要設定 ACLs (Access Control Lists, ACLs),可使用 setfacl 指令,要查閱 ACLs 可使用 getfacl 指令:
#getfacl file|directory (列出檔案或資料夾的 ACL)
#setfacl -m u:USER_NAME:rwx file|directory (設定檔案或資料夾給 USER_NAME 使用者是 rwx 權限)
#setfacl -m g:GROUP_NAME:rwx file|directory (設定檔案或資料夾給 GROUP_NAME 群組是 rwx 權限)
#setfacl -m u:USER_NAME:wx file|directory (移除 USER_NAME 在檔案或資料夾中 wx 的權限)
#setfacl -m d:u:USER_NAME:rwx directory (設定該資料夾及其內所有新增檔案和資料夾給 USER_NAME 使用者是 rwx 權限)
#setfacl -x d:u:USER_NAME:x directory (移除 USER_NAME 在該資料夾及其內所有新增檔案和資料夾的 x 權限)
例:
# getfacl /home/kevin (看一下還沒有設定之前的 ACL)
getfacl: Removing leading ‘/’ from absolute path names
# file: home/kevin
# owner: kevin
# group: kevin
user::rwx
group::—
other::—
# setfacl -m u:john:rwx /home/kevin (設定 john 在 /home/kevin 目錄有 rwx 的權限)
# getfacl /home/kevin
getfacl: Removing leading ‘/’ from absolute path names
# file: home/kevin
# owner: kevin
# group: kevin
user::rwx
user:john:rwx
group::—
mask::rwx
other::—
# setfacl -m d:u:john:rwx /home/kevin (設定 john 在 /home/kevin 資料夾及其內所有新增檔案的權限為 rwx)
# getfacl /home/kevin
getfacl: Removing leading ‘/’ from absolute path names
# file: home/kevin
# owner: kevin
# group: kevin
user::rwx
user:john:rwx
group::—
mask::rwx
other::—
default:user::rwx
default:user:john:rwx
default:group::—
default:mask::rwx
default:other::—
# setfacl -m g:adm:rwx /home/kevin (設定 adm 這個群組在 /home/kevin 目錄中有 rwx 的權限)
# getfacl /home/kevin
getfacl: Removing leading ‘/’ from absolute path names
# file: home/kevin
# owner: kevin
# group: kevin
user::rwx
user:john:rwx
group::—
group:adm:rwx
mask::rwx
other::—
default:user::rwx
default:user:john:rwx
default:group::—
default:mask::rwx
default:other::—
# setfacl -x u:john /home/kevin (移除 john 在 /home/kevin 目錄中的權限)
# getfacl /home/kevin
getfacl: Removing leading ‘/’ from absolute path names
# file: home/kevin
# owner: kevin
# group: kevin
user::rwx
group::—
group:adm:rwx
mask::rwx
other::—
default:user::rwx
default:user:john:rwx
default:group::—
default:mask::rwx
default:other::—
# setfacl -x d:u:john /home/kevin (移除 john 在 /home/kevin 目錄中的繼承權限)
# getfacl /home/kevin
getfacl: Removing leading ‘/’ from absolute path names
# file: home/kevin
# owner: kevin
# group: kevin
user::rwx
group::—
group:adm:rwx
mask::rwx
other::—
default:user::rwx
default:group::—
default:mask::—
default:other::—
# setfacl -b /home/kevin (移除 /home/kevin 中所有的 ACLs)
在檔案複製時,cp 指令要帶 -p 的參數才能將權限保留,但 mv 則可以保留原有的權限。