基本权限和特殊权限

本文介绍如何使用ACL设置文件和目录的访问控制权限,包括针对用户的权限设置、子目录继承父目录权限的方式,以及如何备份和恢复ACL权限。此外,还详细讲解了SUID、SGID和SBIT三种特殊权限的作用及应用场景。
摘要由CSDN通过智能技术生成

基本权限

基本权限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使得每个用户仅能删除自己的文件,提高文件安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值