(赵小明RHCE笔记)linux基础之四 权限详解
一、special permissions for executables
1.special permissions for executables:
-suid:command run with permissions of the owner of the command,not executor of the command
-sgid:command runs with group affiliation of the group of the command
eg:
file:
user group other
suid sgid
二、special permissions for direct
1.sgid is used to create a collaborative directory
-when a file is created in a directory with the SGID bit set,it belongs to the same group as the directory,rather than the creator‘s primary gropu
-#chmod g+s directory (让该文件夹带上SGID权限,可以转换为组身份)
-#chmod u+s directory (让该文件夹带上SUID权限,可以转换为用户身份)
2.sticky allows only the owner of a file to delete it
-normally user with write permission to a directory can delete any file in that directotry regardless of that file‘s permission or ownership
-#chmod o+t directory (例如 /tmp/目录)
eg:
[root@instructor ~]# ll -d /tmp
drwxrwxrwt. 18 root root 12288 Jan 2 19:51 /tmp
[root@instructor ~]#
dir:
user group other
sticky
实验一:新建一个CORP文件夹,分配给IT组,组内有三个成员frodo,sam,pippin。三个用户都可以创建自己的文件,并且其他组内成员都可以看,可以修改。
[root@instructor ~]# mkdir /corp
[root@instructor ~]# chmod 770 /corp (权限为rwxrwx---)
[root@instructor ~]# groupadd IT
[root@instructor ~]# chgrp IT /corp (将/corp分配给IT组)
[root@instructor ~]# ll -d /corp
drwxrwx---. 2 root IT 4096 Jan 2 21:37 /corp
[root@instructor ~]# chmod 777 /corp
[root@instructor ~]# ll -d /corp
drwxrwxrwx. 2 root IT 4096 Jan 2 21:37 /corp
[root@instructor ~]# vi /etc/group (进入/etc/group将frodo,sam,pippin三个用户添加进IT组)
IT:x:502:sam,pippin,frodo
"/etc/group" 72L, 1012C written
[root@instructor ~]# ll -d /corp
drwxrwxrwx. 2 root IT 4096 Jan 2 21:37 /corp
[root@instructor ~]# chmod 770 /corp
[root@instructor ~]# ll -d /corp
drwxrwx---. 2 root IT 4096 Jan 2 21:37 /corp
[root@instructor ~]# su - frodo
[frodo@instructor ~]$ id
uid=506(frodo) gid=507(frodo) groups=507(frodo),502(IT) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[frodo@instructor ~]$ cd /corp
[frodo@instructor corp]$ ll -d
drwxrwx---. 2 root IT 4096 Jan 2 21:37 .
[frodo@instructor corp]$ touch frodofile (创建一个名为frodofile的文件)
[frodo@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo frodo 0 Jan 2 21:46 frodofile (文件权限为rw-rw-r,664)
[frodo@instructor corp]$ su -
Password:
[root@instructor ~]# su - sam
[sam@instructor ~]$ cd /corp
[sam@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo frodo 0 Jan 2 21:46 frodofile
[sam@instructor corp]$ touch samfile (创建一个名为samfile的文件)
[sam@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo frodo 0 Jan 2 21:46 frodofile
-rw-rw-r--. 1 sam sam 0 Jan 2 21:47 samfile
[sam@instructor corp]$ su -
Password:
[root@instructor ~]# su - pippin
[pippin@instructor ~]$ cd /corp
[pippin@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo frodo 0 Jan 2 21:46 frodofile
-rw-rw-r--. 1 sam sam 0 Jan 2 21:47 samfile
[pippin@instructor corp]$ touch pippinfile (创建一个名为pippinfile的文件)
[pippin@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo frodo 0 Jan 2 21:46 frodofile
-rw-rw-r--. 1 pippin pippin 0 Jan 2 21:48 pippinfile
-rw-rw-r--. 1 sam sam 0 Jan 2 21:47 samfile
[pippin@instructor corp]$ su - frodo
Password:
[frodo@instructor ~]$ ll
total 0
[frodo@instructor ~]$ ll -d /corp
drwxrwx---. 2 root IT 4096 Jan 2 21:48 /corp
[frodo@instructor ~]$ cd /corp
[frodo@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo frodo 0 Jan 2 21:46 frodofile (注意这里的组别为frodo)
-rw-rw-r--. 1 pippin pippin 0 Jan 2 21:48 pippinfile (注意这里的组别为pippin)
-rw-rw-r--. 1 sam sam 0 Jan 2 21:47 samfile (注意这里的组别为sam)
[frodo@instructor corp]$ vim samfile
~
~
(frodo既不是sam用户,又不是sam组成员,只是others,而others只有可读权限,所以frodo无法修改sam的文件,我们需要用户自己创建的文件属于自己,但是组别统一属于IT组,这里明显不符合要求,删除文件,重来)
[frodo@instructor corp]$
[frodo@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo frodo 0 Jan 2 21:46 frodofile
-rw-rw-r--. 1 pippin pippin 0 Jan 2 21:48 pippinfile
-rw-rw-r--. 1 sam sam 0 Jan 2 21:47 samfile
[frodo@instructor corp]$ su -
Password:
[root@instructor ~]#
[root@instructor ~]# cd /corp
[root@instructor corp]# ll
total 0
-rw-rw-r--. 1 frodo frodo 0 Jan 2 21:46 frodofile
-rw-rw-r--. 1 pippin pippin 0 Jan 2 21:48 pippinfile
-rw-rw-r--. 1 sam sam 0 Jan 2 21:47 samfile
[root@instructor corp]# rm * -f
[root@instructor corp]# ll
total 0
[root@instructor corp]# cd ..
[root@instructor /]# ll -d /corp
drwxrwx---. 2 root IT 4096 Jan 2 21:57 /corp
[root@instructor /]# chmod g+s corp/ (注意这里给文件夹的组属性添加SGID属性)
[root@instructor /]# ll -d corp/
drwxrws---. 2 root IT 4096 Jan 2 21:57 corp/
[root@instructor /]# su - frodo
[frodo@instructor ~]$ cd /corp/
[frodo@instructor corp]$ ll
total 0
[frodo@instructor corp]$ touch frodofile
[frodo@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo IT 0 Jan 2 22:00 frodofile (注意这里frodo创建的文件组别属于IT组了)
[frodo@instructor corp]$ su - sam
Password:
[sam@instructor ~]$ cd /corp
[sam@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo IT 0 Jan 2 22:00 frodofile
[sam@instructor corp]$ touch samfile
[sam@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo IT 0 Jan 2 22:00 frodofile
-rw-rw-r--. 1 sam IT 0 Jan 2 22:01 samfile (注意这里sam创建的文件组别属于IT组了)
[sam@instructor corp]$ su - pippin
Password:
[pippin@instructor ~]$ cd /corp
[pippin@instructor corp]$ touch pippinfile
[pippin@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo IT 0 Jan 2 22:00 frodofile
-rw-rw-r--. 1 pippin IT 0 Jan 2 22:01 pippinfile (注意这里pippin创建的文件组别属于IT组了)
-rw-rw-r--. 1 sam IT 0 Jan 2 22:01 samfile
[pippin@instructor corp]$ su - frodo
Password:
[frodo@instructor ~]$ cd /corp
[frodo@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo IT 0 Jan 2 22:00 frodofile (都属于IT组)
-rw-rw-r--. 1 pippin IT 0 Jan 2 22:01 pippinfile (都属于IT组)
-rw-rw-r--. 1 sam IT 0 Jan 2 22:01 samfile (都属于IT组)
[frodo@instructor corp]$ vim samfile
~
~
[frodo@instructor corp]$
[frodo@instructor corp]$
[frodo@instructor corp]$ ll
total 0
-rw-rw-r--. 1 frodo IT 0 Jan 2 22:00 frodofile
-rw-rw-r--. 1 pippin IT 0 Jan 2 22:01 pippinfile
-rw-rw-r--. 1 sam IT 0 Jan 2 22:01 samfile
[frodo@instructor corp]$ vim samfile
edit by frodo
~
~
"samfile" 1L, 14C written (这里不再是readonly)
[frodo@instructor corp]$ su - sam
Password:
[sam@instructor ~]$ cd /corp
[sam@instructor corp]$ ll
total 4
-rw-rw-r--. 1 frodo IT 0 Jan 2 22:00 frodofile
-rw-rw-r--. 1 pippin IT 0 Jan 2 22:01 pippinfile
-rw-rw-r--. 1 sam IT 14 Jan 2 22:06 samfile
[sam@instructor corp]$ cat samfile
edit by frodo
三、access control lists (ACLs)
1.grant or deny additional access to multiple users or group
2.implemented as a mount option(acl)
-embedded in filesystem superblock at install time
用chmod更改大权限,用ACL进行微调。
四、managing ACLs
1.viewing:
-$getfacl filename
2.modifying (adding or changing)
-$setfacl -m u:gandalf:rw filename (追加权限)
3.removing(expunging):
-$setfacl -x u:gandalf filename (删减权限)
实验二、root用户新建/file文件,权限为640,分配给IT组,frodo,sam和pippin仍为IT成员
1.frodo可以编辑/file文件
2.pippin不可以查看/file
users: group:
frodo IT
sam IT
pippin IT
/file root IT
rw- r-- ---
(这样的权限组成员是无法修改该文件,只能查看该文件)
eg:
[root@instructor /]# touch /file
[root@instructor /]# chmod 640 /file
[root@instructor /]# ll /file
-rw-r-----. 1 root root 0 Jan 2 22:45 /file
[root@instructor /]# chgrp IT /file
[root@instructor /]# ll /file
-rw-r-----. 1 root IT 0 Jan 2 22:45 /file
[root@instructor /]# vi /file
secret
~
~
"/file" 2L, 8C written (root修改了/file文件)
[root@instructor /]# su - frodo
[frodo@instructor ~]$ cat /file (frodo可以查看该文件内容)
secret
[frodo@instructor ~]$ vim /file (frodo无法修改该文件内容)
secret
~
~
[frodo@instructor ~]$ cat /file
secret
[frodo@instructor ~]$ su -
Password:
[root@instructor ~]# setfacl -m u:frodo:rw- /file
[root@instructor ~]# su - frodo
[frodo@instructor ~]$ cd ..
[frodo@instructor home]$ cd ..
[frodo@instructor /]$ vim /file
secret
modified by frodo
~
~
"/file" 3L, 26C written (frodo增加了/file内容:modified by frodo)
[frodo@instructor /]$ su - sam
Password:
[sam@instructor ~]$ cat /file (sam可以看到文件被frodo修改了)
secret
modified by frodo
[sam@instructor ~]$ vim /file (sam也想修改,但是readonly)
secret
modified by frodo
~
[sam@instructor ~]$
[sam@instructor ~]$
[sam@instructor ~]$ su - pippin
Password:
[pippin@instructor ~]$ cat /file
secret
modified by frodo
[pippin@instructor ~]$ su -
Password:
[root@instructor ~]# setfacl -m u:pippin:--- /file
[root@instructor ~]# su - pippin
[pippin@instructor ~]$ cat /file
cat: /file: Permission denied
[pippin@instructor ~]$ su -
Password:
[root@instructor ~]# ll
total 31796
-rw-------. 1 root root 965 Aug 24 16:11 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Aug 31 16:26 Desktop
drwxr-xr-x. 2 root root 4096 Aug 24 08:20 Documents
drwxr-xr-x. 2 root root 4096 Aug 24 08:20 Downloads
drwxr-xr-x. 127 root root 12288 Aug 30 11:09 etc
-rw-r--r--. 1 root root 15057753 Aug 30 11:53 etc.tar.bz2
-rw-r--r--. 1 root root 17429237 Aug 30 11:55 etc.tar.gz
drwxr-xr-x. 2 root root 4096 Aug 24 08:20 Music
drwxr-xr-x. 2 root root 4096 Aug 24 08:20 Pictures
-rw-r--r--. 1 root root 11955 Jul 7 2012 post-install
-rw-r--r--. 1 root root 550 Jul 7 2012 post-install.log
drwxr-xr-x. 2 root root 4096 Aug 24 08:20 Public
drwxr-xr-x. 2 root root 4096 Aug 24 08:20 Templates
drwxr-xr-x. 2 root root 4096 Aug 24 08:20 Videos
[root@instructor ~]# cd ..
[root@instructor /]# ll
total 118
dr-xr-xr-x. 2 root root 4096 Aug 27 11:33 bin
dr-xr-xr-x. 5 root root 1024 Aug 24 16:11 boot
drwxrws---. 2 root IT 4096 Jan 2 22:06 corp
drwxr-xr-x. 19 root root 3920 Jan 2 19:49 dev
drwxr-xr-x. 127 root root 12288 Jan 2 21:43 etc
-rw-rw----+ 1 root IT 26 Jan 2 22:58 file
drwxr-xr-x. 9 root root 4096 Jan 2 21:36 home
dr-xr-xr-x. 19 root root 12288 Sep 4 21:24 lib
drwx------. 2 root root 16384 Jul 7 2012 lost+found
drwxr-xr-x. 3 root root 4096 Jan 2 19:51 media
drwxr-xr-x. 2 root root 0 Jan 2 19:49 misc
drwxr-xr-x. 5 root root 4096 Aug 30 15:03 mnt
drwxr-xr-x. 2 root root 0 Jan 2 19:49 net
drwxr-xr-x. 3 root root 4096 Jul 7 2012 opt
dr-xr-xr-x. 198 root root 0 Jan 2 19:48 proc
dr-xr-x---. 30 root root 4096 Jan 2 19:50 root
dr-xr-xr-x. 2 root root 12288 Sep 2 10:15 sbin
drwxr-xr-x. 7 root root 0 Jan 2 19:48 selinux
drwx------. 2 tommy root 4096 Sep 4 22:22 smbshare
drwxr-xr-x. 2 root root 4096 Sep 23 2011 srv
drwxr-xr-x. 13 root root 0 Jan 2 19:48 sys
drwxrwxrwt. 19 root root 12288 Jan 2 22:56 tmp
drwxr-xr-x. 12 root root 4096 Jul 7 2012 usr
drwxr-xr-x. 23 root root 4096 Aug 28 21:22 var
[root@instructor /]# getfacl /file
getfacl: Removing leading ‘/‘ from absolute path names
# file: file
# owner: root
# group: IT
user::rw-
user:pippin:---
user:frodo:rw-
group::r--
mask::rw-
other::---
[root@instructor /]# setfacl -x u:pippin /file
[root@instructor /]# su - pippin
[pippin@instructor ~]$ cat /file
secret
modified by frodo
[pippin@instructor ~]$ su -
Password:
[root@instructor ~]# getfacl /file
getfacl: Removing leading ‘/‘ from absolute path names
# file: file
# owner: root
# group: IT
user::rw-
user:frodo:rw-
group::r--
mask::rw-
other::---
五、permission precedence with ACLs
1.compare process UID to
-UID of file => user permissions apply
-ACL UID of file => ACL‘s permissions apply
2.otherwise,compare list of process GIDs to
-GID of file =>group permissions apply
-ACL GID of file => ACL‘s permissions apply
-since there can be multiple matchers at this level,it is additive within this level
3.if neither match,other permissions aply