Linux 文件特殊权限

Linux 系统文件除了9位基本权限,还有额外3位特殊权限,分别是SUID(setuid),SGID(setgid),SBIT(sticky bit)



一、Linux 系统文件3位特殊权限位说明

标注:这3位特殊权限不建议使用(除系统默认的特殊权限可以使用以外),除非有特殊需求


Linux 文件特殊权限_第1张图片

SUID

标注:见下面范例1

1、SUID是对二进制命令或二进制程序有效,对目录无效

2、普通用户具有该文件其它用户x执行权限并分配了s权限将具有文件所有者的权限

3、用户属主对应的前三位权限的x位上如果有s就表示suid权限,当x位上没有小写x执行权限时候,suid的权限显示就是大S

4、suid权限仅在程序命令执行过程中有效

5、suid功能是一把双刃剑,是一个比较危险的功能,对系统安全有一定威胁系统,suid的无用的功能取消suid权限(安全优化)


SGID

标注:见下面范例2

1、SGID和SUID不同之处在于,SGID可以用于目录

2、SGID的权限s是出现在文件用户组的x权限位上


SGID针对文件

1、sgid仅对二进制命令程序有效

2、普通用户具有该文件其它用户x执行权限并分配了s权限将具有文件所属用户组的权限

3、执行命令任意用户可以获取该命令程序执行期间所属用户组的权限


SGID针对目录

1、linux 默认情况所有用户创建文件,默认用户和组都是自身

2、sgid可以让用户再此目录下创建的文件和目录,具有和此目录相同的用户组设置

sgid位主要用在目录中,当为某个目录设置sgid位以后,在改目录中

新创建的文件具有改目录的所属组权限,而不是创建改文件的用户的默认

所有者,这样,使得在多个用户之间共享一个目录中的文件变得简单


SBIT  (粘滞位)

标注:见下面范例3

1、SBIT与SUID,SGID不同的是,SBIT只能用于目录

2、普通用户在该目录下,仅目录属主与root才有权力删除\移动\重命名目录

3、如果目录权限是777并添加粘滞位t,普通用户可以在此目录下创建文件和目录


二、特殊权限位设置方法


范例1:SUID设置方法

[root@oldboy ~]# mkdir /oldboy

[root@oldboy ~]# touch /oldboy/test.sh

[root@oldboy ~]# ls -ld /oldboy/

drwxr-xr-x 2 rootroot 4096 Dec  5 19:16 /oldboy/

[root@oldboy ~]# ls -l /oldboy/test.sh

-rw-r--r-- 1 rootroot 0 Dec  5 19:16 /oldboy/test.sh

[root@oldboy ~]# which rm

alias rm='rm -i'

    /bin/rm

[root@oldboy ~]# ls -l /bin/rm

-rwxr-xr-x. 1 root root57440 Oct 15  2014 /bin/rm

[root@oldboy ~]# su - oldboy

[oldboy@oldboy ~]$ rm /oldboy/test.sh

rm: removewrite-protected regular empty file `/oldboy/test.sh'? y

rm: cannot remove`/oldboy/test.sh': Permission denied

[oldboy@oldboy ~]$ su - root

Password:

[root@oldboy ~]# ls -l /bin/rm

-rwxr-xr-x. 1 rootroot 57440 Oct 15  2014 /bin/rm

[root@oldboy ~]# chmod u+s /bin/rm   ##等同命令chmod 4755 /bin/rm,取消suid命令chmod u-s /bin/rm或chmod 0755 /bin/rm

[root@oldboy ~]# ls -l /bin/rm

-rwsr-xr-x. 1 rootroot 57440 Oct 15  2014 /bin/rm

[root@oldboy ~]# su - oldboy

[oldboy@oldboy ~]$ rm /oldboy/test.sh

[oldboy@oldboy ~]$ ls -l /oldboy/

total 0


范例2:GUID设置方法

 [root@oldboy ~]#mkdir /oldboy

[root@oldboy ~]# ls -ld /oldboy/

drwxr-xr-x 2 rootroot 4096 Dec  5 19:28 /oldboy/

[root@oldboy ~]# chown oldboy.incahome /oldboy/

[root@oldboy ~]# ls -ld /oldboy/

drwxr-xr-x 2 oldboyincahome 4096 Dec  5 19:28 /oldboy/

[root@oldboy ~]# touch /oldboy/test.sh

[root@oldboy ~]# ls -l /oldboy/test.sh

[root@oldboy ~]# ls -l /oldboy/

total 0

-rw-r--r-- 1 rootroot 0 Dec  5 19:29 test.sh

[root@oldboy ~]# chmod g+s /oldboy/   ##等同命令chmod 2755 /bin/rm,取消guid命令chmod g-s /bin/rm或chmod 0755 /bin/rm

[root@oldboy ~]# touch /oldboy/file.txt

[root@oldboy ~]# ls -l /oldboy/

total 0

-rw-r--r-- 1 rootincahome 0 Dec  5 19:29 file.txt

-rw-r--r-- 1 rootroot     0 Dec  5 19:29 test.sh


范例3:SBIT设置方法

[root@oldboy ~]# mkdir /oldboy

[root@oldboy ~]# touch /oldboy/test.sh

[root@oldboy ~]# mkdir /oldboy/share

[root@oldboy ~]# chmod 777 /oldboy/

[root@oldboy ~]# chmod 777 /oldboy/share/

[root@oldboy ~]# chmod 777 /oldboy/test.sh 

[root@oldboy ~]# ls -ld /oldboy/

drwxrwxrwx 2 rootroot 4096 Dec  6 10:23 /oldboy/

[root@oldboy ~]# ls -l /oldboy/

total 4

drwxrwxrwx 2 rootroot 4096 Dec  6 10:24 share

-rwxrwxrwx 1 rootroot    0 Dec  6 10:23 test.sh

[root@oldboy ~]# chmod 1777 /oldboy/    ##等同命令chmod o+s /oldboy

[root@oldboy ~]# ls -ld /oldboy/

drwxrwxrwt 3 rootroot 4096 Dec  6 10:24 /oldboy/

[root@oldboy ~]# su - oldboy

[oldboy@oldboy ~]$ rm /oldboy/test.sh

rm: cannot remove`/oldboy/test.sh': Operation not permitted

[oldboy@oldboy ~]$ rm -rf /oldboy/share/

rm: cannot remove`/oldboy/share': Operation not permitted

[oldboy@oldboy ~]$ mv /oldboy/test.sh /tmp/

mv: try to overwrite`/tmp/test.sh', overriding mode 0755 (rwxr-xr-x)? y

mv: cannot move`/oldboy/test.sh' to `/tmp/test.sh': Operation not permitted

[oldboy@oldboy ~]$ mv /oldboy/test.sh /oldboy/file.sh

mv: cannot move`/oldboy/test.sh' to `/oldboy/file.sh': Operation not permitted

[oldboy@oldboy ~]$ cp /oldboy/test.sh /tmp/

cp: cannot createregular file `/tmp/test.sh': Permission denied

[oldboy@oldboy ~]$ touch /oldboy/file.txt

[oldboy@oldboy ~]$ mkdir /oldboy/user

[oldboy@oldboy ~]$ ls -l /oldboy/

total 8

-rw-r--r-- 1 oldboyroot    0 Dec  6 10:30 file.txt

drwxrwxrwx 2root   root 4096 Dec  6 10:28 share

-rwxrwxrwx 1root   root    0 Dec 6 10:28 test.sh

drwxr-xr-x 2 oldboyroot 4096 Dec  6 10:31 user

[oldboy@oldboy ~]$ su - root

Password:

[root@oldboy ~]# rm -rf /oldboy/test.sh

[root@oldboy ~]# rm -rf /oldboy/share/



三、chattr改变文件属性(特殊功能)


Linux 文件特殊权限_第2张图片

范例1:

1、针对oldboy目录添加i权限

[root@oldboy ~]# mkdir /oldboy

[root@oldboy ~]# chmod 777 /oldboy/

[root@oldboy ~]# touch /oldboy/test.sh

[root@oldboy ~]# touch /oldboy/file.txt

[root@oldboy ~]# chmod 777 /oldboy/*

oot@oldboy ~]# ls -l /oldboy/

total 0

-rwxrwxrwx 1 rootroot 0 Dec  6 11:21 file.txt

-rwxrwxrwx 1 rootroot 0 Dec  6 11:21 test.sh

[root@oldboy ~]# chattr +i /oldboy/

[root@oldboy ~]# ls -ld /oldboy/

drwxrwxrwx 2 rootroot 4096 Dec  6 11:21 /oldboy/

[root@oldboy ~]# lsattr -d /oldboy/

----i--------e-/oldboy/

[root@oldboy ~]# lsattr /oldboy/

-------------e-/oldboy/file.txt

-------------e-/oldboy/test.sh

[root@oldboy ~]# rm -rf /oldboy/

rm: cannot remove`/oldboy/file.txt': Permission denied

rm: cannot remove`/oldboy/test.sh': Permission denied

[root@oldboy ~]# mv /oldboy/* /tmp/

mv: cannot move`/oldboy/file.txt' to `/tmp/file.txt': Permission denied

mv: overwrite`/tmp/test.sh'? y

mv: cannot move`/oldboy/test.sh' to `/tmp/test.sh': Permission denied

[root@oldboy ~]# mv /oldboy/test.sh /oldboy/test.sh.bak

mv: cannot move `/oldboy/test.sh'to `/oldboy/test.sh.bak': Permission denied

[root@oldboy ~]# echo "test" >/oldboy/test.sh ##这个文件内容不属于/oldboy/ block范围内

[root@oldboy ~]# cat /oldboy/test.sh

test

[root@oldboy ~]# lsattr -d /oldboy/

----i--------e-/oldboy/

[root@oldboy ~]# chattr -i /oldboy/

[root@oldboy ~]# lsattr -d /oldboy/

-------------e-/oldboy/


2、针对test.sh文件添加i权限

[root@oldboy ~]# touch test.sh

[root@oldboy ~]# chmod 777 test.sh

[root@oldboy ~]# ls -l test.sh

-rwxrwxrwx 1 rootroot 30 Dec  1 09:14 test.sh

[root@oldboy ~]# chattr +i test.sh

[root@oldboy ~]# lsattr test.sh

----i--------e-test.sh

[root@oldboy ~]# rm -rf test.sh

rm: cannot remove`test.sh': Operation not permitted

[root@oldboy ~]# mv test.sh /tmp/

mv: overwrite`/tmp/test.sh'? y

mv: cannot move`test.sh' to `/tmp/test.sh': Operation not permitted

[root@oldboy ~]# echo "abc" > test.sh

-bash: test.sh:Permission denied

[root@oldboy ~]# echo "abc" >> test.sh

-bash: test.sh:Permission denied


范例2:

[root@oldboy ~]# touch test.sh

[root@oldboy ~]# lsattr test.sh

-------------e-test.sh

[root@oldboy ~]# chattr +a test.sh

[root@oldboy ~]# lsattr test.sh

-----a-------e-test.sh

[root@oldboy ~]# rm -rf test.sh

rm: cannot remove`test.sh': Operation not permitted

[root@oldboy ~]# > test.sh

-bash: test.sh:Operation not permitted

[root@oldboy ~]# echo 123 >> test.sh

[root@oldboy ~]# cat test.sh

123

你可能感兴趣的:(Linux 文件特殊权限)