基本权限
基本权限ACL
ACL权限是针对文件和目录的访问控制权限,ACL允许一个用户给任何用户和用户组设置任何文件和目录的访问权限。ACL可以看作UGO的扩展,但其却又有UGO做不到的。
- ACL可以针对用户设置权限;
- ACL可以对用户组设置权限;
- ACL可以使子目录或者文件继承父目录的权限。
基本权限ACL的设置
setfacl设置ACL权限;
setfacl -m配置ACL参数给文件或者目录;
setfacl -x删除ACL 权限;
setfacl -b移除所有ACL配置参数;
setfacl -k移除默认的ACL权限;
setfacl -R递归配置ACL 权限;
setfacl -d配置默认的ACL 参数,只对目录有效,在该目录下新建的数据会引用次默认值。
getfacl -d查看文件的ACL权限。
`给普通用户user1设置ACL权限,使得user1对文件有写权限`
[root@localhost tmp]# ls -l
total 0
-rw-r--r--. 1 root root 0 Mar 27 17:46 aclfile
[root@localhost tmp]# su user1
[user1@localhost tmp]$ echo "hello" >/tmp/aclfile
bash: /tmp/aclfile: Permission denied
[user1@localhost tmp]$ ll
total 0
-rw-r--r--. 1 root root 0 Mar 27 17:46 aclfile
[user1@localhost tmp]$ exit
[root@localhost tmp]# ll
total 0
-rw-r--r--. 1 root root 0 Mar 27 17:46 aclfile
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@localhost tmp]# setfacl -m u:user1:rw aclfile
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r--
mask::rw-
other::r--
[root@localhost tmp]# su user1
[user1@localhost tmp]$ ls -l `#查看权限 后缀有+`
total 0
-rw-rw-r--+ 1 root root 0 Mar 27 17:46 aclfile
[user1@localhost tmp]$ echo "hello" >/tmp/aclfile
[user1@localhost tmp]$ cat aclfile
hello
`设置ACL查看对目录的影响`
[root@localhost tmp]# su user1
[user1@localhost tmp]$ ls -l
total 0
drwxrwxrwx. 2 root root 6 Mar 27 18:14 acldir
[user1@localhost tmp]$ cd acldir
[user1@localhost acldir]$ touch file1
[user1@localhost acldir]$ mkdir dir1
[user1@localhost acldir]$ ls -l
total 0
drwxrwxr-x. 2 user1 user1 6 Mar 27 18:15 dir1
-rw-rw-r--. 1 user1 user1 0 Mar 27 18:15 file1
[user1@localhost acldir]$ getfacl dir1
# file: dir1
# owner: user1
# group: user1
user::rwx
group::rwx
other::r-x
[user1@localhost acldir]$ getfacl file1
# file: file1
# owner: user1
# group: user1
user::rw-
group::rw-
other::r--
[root@localhost tmp]# setfacl -m d:u:user2:rwx acldir
[root@localhost tmp]# su user1
[user1@localhost tmp]$ ls -l
total 0
drwxrwxrwx+ 4 root root 56 Mar 27 18:19 acldir
[user1@localhost tmp]$ cd acldir
[user1@localhost acldir]$ ls -l
total 4
drwxrwxr-x. 2 user1 user1 6 Mar 27 18:15 dir1
-rw-rw-r--. 1 user1 user1 0 Mar 27 18:15 file1
[user1@localhost acldir]$ mkdir dir3
[user1@localhost acldir]$ touch file3
[user1@localhost acldir]$ ls -l
total 4
drwxrwxr-x. 2 user1 user1 6 Mar 27 18:15 dir1
drwxrwxrwx+ 2 user1 user1 6 Mar 27 18:25 dir3
-rw-rw-r--. 1 user1 user1 0 Mar 27 18:15 file1
-rw-rw-rw-+ 1 user1 user1 0 Mar 27 18:25 file3
`文件继承了目录acldir的权限使得user2对在acldir下新建的文件都有读写执行权限`
[user1@localhost acldir]$ getfacl file3
# file: file3
# owner: user1
# group: user1
user::rw-
user:user2:rwx #effective:rw-
group::rwx #effective:rw-
mask::rw-
other::rw-
`目录继承了目录acldir的权限使得user2对在acldir下新建的目录都有读写执行权限`
[user1@localhost acldir]$ getfacl dir3
# file: dir3
# owner: user1
# group: user1
user::rwx
user:user2:rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx `#这次多出了一些以 default 开头的行,这些 default 权限信息只能在目录上设置,然后会被目录中创建的文件和目录`
default:user:user2:rwx
default:group::rwx
default:mask::rwx
default:other::rwx
基本权限ACL的修改
setfacl -m 如果用户没有ACL权限的时候,此操作为其设置ACL权限;
如果用户已存在ACL权限,此操作修改ACL权限。
setfacl -x仅删除指定的ACL权限;
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[root@localhost tmp]# setfacl -m u:user1:rwx aclfile
[root@localhost tmp]# setfacl -m g:user2:rwx aclfile
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
user:user1:rwx
group::r--
group:user2:rwx
mask::rwx
other::r--
[root@localhost tmp]# setfacl -x u:user1 aclfile
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
group::r--
group:user2:rwx
mask::rwx
other::r-
setfacl -b删除所有的ACL权限。
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[root@localhost tmp]# setfacl -m u:user1:rwx aclfile
[root@localhost tmp]# setfacl -m g:user2:rwx aclfile
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
user:user1:rwx
group::r--
group:user2:rwx
mask::rwx
other::r--
[root@localhost tmp]#
[root@localhost tmp]# setfacl -b aclfile
[root@localhost tmp]# getfacl aclfile
# file: aclfile
# owner: root
# group: root
user::rw-
group::r--
other::r--
备份和恢复ACL权限
- 将设置的ACL权限写入文件中,之后删除ACL权限,当需要ACL权限的时候,可以使用setfacl -restore 写入权限的文件名恢复ACL权限。
[root@localhost tmp]# getfacl acldir
# file: acldir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
`设置ACL权限`
[root@localhost tmp]# setfacl -m u:user1:rwx acldir
[root@localhost tmp]# setfacl -m g:user2:rwx acldir
[root@localhost tmp]# getfacl acldir
# file: acldir
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
group:user2:rwx
mask::rwx
other::r-x
`将ACL权限写入文件中保存`
[root@localhost tmp]# getfacl -R acldir/ >mydir.acl
[root@localhost tmp]# cat mydir.acl
# file: acldir/
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
group:user2:rwx
mask::rwx
other::r-x
`将ACL权限全部移除`
[root@localhost tmp]# setfacl -R -b acldir
[root@localhost tmp]# getfacl -R acldir
# file: acldir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
`恢复ACL权限`
[root@localhost tmp]# setfacl --restore mydir.acl
[root@localhost tmp]# getfacl -R acldir
# file: acldir
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
group:user2:rwx
mask::rwx
other::r-x
特殊权限
特殊权限SUID
- 对二进制程序有效;
- 执行者对该程序需要有执行权限才可以使用;
- suid仅在执行该程序的过程有效;
- suid主要使用在目录上;
- 执行者具有该程序属主的权限。
[root@localhost tmp]# ls -l /etc/shadow
----------. 1 root root 762 Mar 28 18:31 /etc/shadow
[root@localhost tmp]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
- 密码文件存在/etc/shadow中,可以看出所有的用户对该文件均无任何权限,但所有的用均可修改密码,将密码写入该文件中。这是由于在/usr/bin/passwd具有特殊权限suid,可以使得执行用户具有root的权限,因此可以对修改自己密码,将密码写入/etc/shadow中。
`复制/usr/bin/passwd的文件到当前目录,该文件只有root用户具有读、写、执行,可以将密码写入/etc/shadow,其他用户无此权限。`
[root@localhost tmp]# cp -r /usr/bin/passwd ./
[root@localhost tmp]# ls -l
total 28
-rwxr-xr-x. 1 root root 27832 Mar 28 18:27 passwd
[root@localhost tmp]# su user
su: user user does not exist
[root@localhost tmp]# su user1
[user1@localhost tmp]$ ./passwd
Changing password for user user1.
Changing password for user1.
(current) UNIX password:
New password:
Retype new password:
passwd: Authentication token manipulation error
[user1@localhost tmp]$ exit
[root@localhost tmp]# ls -l
total 28
-rwxr-xr-x. 1 root root 27832 Mar 28 18:27 passwd
`赋予特殊权限给用户,使得执行者拥有root权限`
[root@localhost tmp]# chmod u+s ./passwd
[root@localhost tmp]# ls -l
total 28
-rwsr-xr-x. 1 root root 27832 Mar 28 18:27 passwd
[root@localhost tmp]# su user1
[user1@localhost tmp]$ ls -l
total 28
-rwsr-xr-x. 1 root root 27832 Mar 28 18:27 passwd
[user1@localhost tmp]$ ./passwd
Changing password for user user1.
Changing password for user1.
(current) UNIX password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
特殊权限SGID
- SGID对二进制文件有效;
- 程序的执行者对于该程序来说,需要具备执行权限;
- 主要对于目录来说。
`新建文件和目录`
[root@localhost tmp]# touch file
[root@localhost tmp]# mkdir dir
[root@localhost tmp]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Mar 28 18:43 dir
-rw-r--r--. 1 root root 0 Mar 28 18:43 file
[root@localhost tmp]# chmod 777 dir
[root@localhost tmp]# su user1
[user1@localhost tmp]$ cd dir
[user1@localhost dir]$ touch file1
[user1@localhost dir]$ mkdir dir1
`谁建立,属主和属主时谁`
[user1@localhost dir]$ ls -l
total 0
drwxrwxr-x. 2 user1 user1 6 Mar 28 18:45 dir1
-rw-rw-r--. 1 user1 user1 0 Mar 28 18:45 file1
[user1@localhost dir]$ exit
`修改dir目录的属组,并添加sgid权限`
[root@localhost tmp]# chown :user2 dir
[root@localhost tmp]# chmod g+s dir
[root@localhost tmp]# ls -l
total 0
drwxrwsrwx. 3 root user2 31 Mar 28 18:45 dir
-rw-r--r--. 1 root root 0 Mar 28 18:43 file
[root@localhost tmp]# su user1
[user1@localhost tmp]$ cd dir
[user1@localhost dir]$ touch file2
[user1@localhost dir]$ mkdir dir2
`在dir目录下新建的文件和目录继承了父目录的属组user2`
[user1@localhost dir]$ ls -l
total 0
drwxrwxr-x. 2 user1 user1 6 Mar 28 18:45 dir1
drwxrwsr-x. 2 user1 user2 6 Mar 28 18:46 dir2
-rw-rw-r--. 1 user1 user1 0 Mar 28 18:45 file1
-rw-rw-r--. 1 user1 user2 0 Mar 28 18:46 file2
特殊权限SBIT
- 针对other设置,使得每个用户仅能删除自己所建的文件。
`新建目录,初始无SBIT权限`
[root@localhost tmp]# mkdir dir
[root@localhost tmp]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Mar 28 18:59 dir
[root@localhost tmp]# chmod 77 dir
[root@localhost tmp]# su user1
[user1@localhost tmp]$ cd dir
[user1@localhost dir]$ touch file
[user1@localhost dir]$ mkdir dir
[user1@localhost dir]$ ls -l
total 0
drwxrwxr-x. 2 user1 user1 6 Mar 28 19:00 dir
-rw-rw-r--. 1 user1 user1 0 Mar 28 19:00 file
[user1@localhost dir]$ su user2
Password:
[user2@localhost dir]$ ls -l
total 0
drwxrwxr-x. 2 user1 user1 6 Mar 28 19:00 dir
-rw-rw-r--. 1 user1 user1 0 Mar 28 19:00 file
[user2@localhost dir]$ rm -f file
[user2@localhost dir]$ rm -rf dir
[user2@localhost dir]$ ls -l
total 0
[user2@localhost dir]$ exit
[user1@localhost dir]$ exit
`添加SBIT权限`
[root@localhost tmp]# chmod o+t dir
[root@localhost tmp]# su user1
[user1@localhost tmp]$ ls -l
total 0
d---rwxrwt. 2 root root 6 Mar 28 19:00 dir
[user1@localhost tmp]$ cd dir
[user1@localhost dir]$ ls -l
total 0
[user1@localhost dir]$ touch file
[user1@localhost dir]$ mkdir dir
[user1@localhost dir]$ su user2
Password:
[user2@localhost dir]$ ls -l
total 0
drwxrwxr-x. 2 user1 user1 6 Mar 28 19:01 dir
-rw-rw-r--. 1 user1 user1 0 Mar 28 19:01 file
`无权限删除user1所建立的问价和目录`
[user2@localhost dir]$ rm -rf dir
rm: cannot remove ‘dir’: Operation not permitted
[user2@localhost dir]$ rm -rf file
rm: cannot remove ‘file’: Operation not permitted
- 具有SBIT后,每个用户仅能删除自己的文件,其他用户对该文件无删除操作,保证文件的安全性。
总结
- 基本权限ACL可以指定用户和用户组对某文件或者某目录的权限操作;
- 子目录或者子文件可以继承父目录的权限;
- 基本权限可以备份恢复;
- 特殊权限SUID可以使得运行程序的进程具有属组的权限,执行自己所不具有的权限;
- 特殊权限SUID使得在该目录下新建的文件和目录继承该目录的属组;
- 特殊权限SBIT使得每个用户仅能删除自己的文件,提高文件安全性。