一般文件或者目录的权限是读、写、执行,例如777 -rwxrwxrwx或者666 lrw-rw-rw-,但是留心观察,会发现有-r-srwsr-t,或者-rwSr-SrwT,即本文将要描述的文件特殊属性,上文的描述的属性分别为suid、sgid、sticky。
suid属性只能运用在可执行文件上,含义是开放文件所有者的权限给其他用户,即当用户执行该执行文件时,会拥有该执行文件所有者的权限。如果给一个非二进制文件文件附加suid权限,则会显示大写S,属于无效。
sgid属性可运用于文件或者目录,运用在文件的含义是开放文件所属组的权限给其他用户,即当用户执行该执行文件时,会拥有该执行文件所属组用户的权限。如果给一个非二进制文件文件附加sgid权限,则会显示大写S,属于无效。运用在目录上的含义是,在该目录下所有用户创建的文件或者目录的所属组都和其一样。即如果/home/work目录具有sgid权限,且所属组是staff,则任何用户在/home/work下创建的子目录或者文件的所属组都是staff。
示例:
test@ubuntu:/home/dyp930$ ls -lrt|grep work
drwxrwsrwx 4 dyp930 dyp930 4096 Jun 28 03:57 work
test@ubuntu:/home/dyp930/work$ cd ..
test@ubuntu:/home/dyp930$ ls -lrt work
total 12
drwxr--r-- 2 dyp930 dyp930 4096 Jun 27 06:58 temp
-rwSrwxrwx 1 dyp930 dyp930 23 Jun 28 03:37 example.sh
drwxrwsr-x 2 test dyp930 4096 Jun 28 03:57 test
-rw-rw-r-- 1 test dyp930 0 Jun 28 03:57 test.txt
sticky权限只能运用于目录上,含义是该目录下所有的文件和子目录只能由所属者删除,即使其的权限是777或者其他。一个公共目录,每个人都可以创建文件,删除自己的文件,但不能删除别人的文件(仅对目录有效)
示例:
dyp930@ubuntu:~$ ls -lrt|grep work
drwxrwxrwt 2 dyp930 dyp930 4096 Jun 28 05:13 work //work目录是具有sticky属性的。
dyp930@ubuntu:~$ cd work
dyp930@ubuntu:~/work$ ls -lrt
total 0
-rwxrwxrwx 1 test test 0 Jun 28 05:11 test.txt //test.txt文件是test用户,其权限是777,按道理是任何用户都可以删除
dyp930@ubuntu:~/work$ sudo su test1
test1@ubuntu:/home/dyp930/work$ rm test.txt //切换到test1用户,发现其无法删除用户,就是work用户的sticky属性起作用。
rm: cannot remove ‘test.txt’: Operation not permitted
test1@ubuntu:/home/dyp930/work$ exit
exit
dyp930@ubuntu:~/work$ rm test.txt //切回dyp930用户是发现可以的,因为work目录是dyp930创建的,可以增删改。
dyp930@ubuntu:~/work$
test1@ubuntu:/home/dyp930$ ls -lrt|grep work
drwxrwxrwx 2 dyp930 dyp930 4096 Jun 28 05:22 work //去除work目录的sticky属性
test1@ubuntu:/home/dyp930/work$ ls -lrt
total 0
-rwxrwxrwx 1 test test 0 Jun 28 05:19 test.txt
test1@ubuntu:/home/dyp930/work$ rm test.txt //此时用用户test1删除test的文件,是可以删除的。
--完结。