***Linux 系统文件除了9位基本权限,还有额外3位特殊权限,分别是SUID(setuid),SGID(setgid),SBIT(sticky bit)linux
1、Linux 系统文件3位特殊权限位说明安全
标注:这3位特殊权限不建议使用(除系统默认的特殊权限可使用之外),除非有特殊需求bash
特殊权限app |
特殊权限位小写优化 |
特殊权限位大写ui |
权限值this |
s (suid)spa |
小写s (有suid执行权限)ci |
大写S (无suid执行权限)rem |
4 |
s (sgid) |
小写s (有sgid执行权限) |
大写S (无sgid执行权限) |
2 |
t(sticky bit) |
小写t (有sticky bit执行权限) |
大写T (无sticky bit执行权限) |
1 |
0恢复文件原来权限,chmod 0755 file |
SUID
标注:见下面范例1
一、SUID是对二进制命令或二进制程序有效,对目录无效
二、普通用户具备该文件其它用户x执行权限并分配了s权限将具备文件全部者的权限
三、用户属主对应的前三位权限的x位上若是有s就表示suid权限,当x位上没有小写x执行权限时候,suid的权限显示就是大S
四、suid权限仅在程序命令执行过程当中有效
五、suid功能是一把双刃剑,是一个比较危险的功能,对系统安全有必定威胁系统,suid的无用的功能取消suid权限(安全优化)
SGID
标注:见下面范例2
一、SGID和SUID不一样之处在于,SGID能够用于目录
二、SGID的权限s是出如今文件用户组的x权限位上
SGID针对文件
一、sgid仅对二进制命令程序有效
二、普通用户具备该文件其它用户x执行权限并分配了s权限将具备文件所属用户组的权限
三、执行命令任意用户能够获取该命令程序执行期间所属用户组的权限
SGID针对目录
一、linux 默认状况全部用户建立文件,默认用户和组都是自身
二、sgid可让用户再此目录下建立的文件和目录,具备和此目录相同的用户组设置
sgid位主要用在目录中,当为某个目录设置sgid位之后,在改目录中
新建立的文件具备改目录的所属组权限,而不是建立改文件的用户的默认
全部者,这样,使得在多个用户之间共享一个目录中的文件变得简单
SBIT (粘滞位)
标注:见下面范例3
一、SBIT与SUID,SGID不一样的是,SBIT只能用于目录
二、普通用户在该目录下,仅目录属主与root才有权力删除\移动\重命名目录
三、若是目录权限是777并添加粘滞位t,普通用户能够在此目录下建立文件和目录
2、特殊权限位设置方法
范例1:SUID设置方法
[root@oldboy ~]# mkdir /oldboy
[root@oldboy ~]# touch /oldboy/test.sh
[root@oldboy ~]# ls -ld /oldboy/
drwxr-xr-x 2 root root 4096 Dec 5 19:16 /oldboy/
[root@oldboy ~]# ls -l /oldboy/test.sh
-rw-r--r-- 1 root root 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 root 57440 Oct 15 2014 /bin/rm
[root@oldboy ~]# su - oldboy
[oldboy@oldboy ~]$ rm /oldboy/test.sh
rm: remove write-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 root root 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 root root 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 root root 4096 Dec 5 19:28 /oldboy/
[root@oldboy ~]# chown oldboy.incahome /oldboy/
[root@oldboy ~]# ls -ld /oldboy/
drwxr-xr-x 2 oldboy incahome 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 root root 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 root incahome 0 Dec 5 19:29 file.txt
-rw-r--r-- 1 root root 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 root root 4096 Dec 6 10:23 /oldboy/
[root@oldboy ~]# ls -l /oldboy/
total 4
drwxrwxrwx 2 root root 4096 Dec 6 10:24 share
-rwxrwxrwx 1 root root 0 Dec 6 10:23 test.sh
[root@oldboy ~]# chmod 1777 /oldboy/ ##等同命令chmod o+s /oldboy
[root@oldboy ~]# ls -ld /oldboy/
drwxrwxrwt 3 root root 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 create regular 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 oldboy root 0 Dec 6 10:30 file.txt
drwxrwxrwx 2 root root 4096 Dec 6 10:28 share
-rwxrwxrwx 1 root root 0 Dec 6 10:28 test.sh
drwxr-xr-x 2 oldboy root 4096 Dec 6 10:31 user
[oldboy@oldboy ~]$ su - root
Password:
[root@oldboy ~]# rm -rf /oldboy/test.sh
[root@oldboy ~]# rm -rf /oldboy/share/
3、chattr改变文件属性(特殊功能)
参数 |
参数原版描述 |
备注 |
实例 |
+i |
A file with the “i” attribute cannot be modified: it cannot be deleted or renamed, no link can be created to this file and no data can be written to the file. |
让任何用户(包括root管理员)没法删除\重命名\移动目录,但能够复制目录。若是针对文件添加i权限是没法修改\删除\添加文件的内容而且没法删除\重命名\移动文件,但能够复制文件 |
范例1 |
-i |
|
取消i功能 |
范例1 |
-a |
A file with the ‘a’ attribute set can only be open in append mode for writing. |
功能相似“i”,只是多了一个能够追加的功能 |
范例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 root root 0 Dec 6 11:21 file.txt
-rwxrwxrwx 1 root root 0 Dec 6 11:21 test.sh
[root@oldboy ~]# chattr +i /oldboy/
[root@oldboy ~]# ls -ld /oldboy/
drwxrwxrwx 2 root root 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 root root 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