Linux下文件/目录权限管理之一般权限、特殊权限、隐藏权限

Linux下的文件/目录有三类权限:一般权限、特殊权限、隐藏权限

1).访问权限/一般权限:r w x

2).特殊权限:SUID、SGID、SBTI

1.SUID/SGID

2.SBTI(Sticky Bit)粘滞位权限(又叫安全位)

3).隐藏权限:attrt

Linux下的文件/目录有三类权限:一般权限、特殊权限、隐藏权限

关于权限与归属的认识(三张图)

Linux下文件/目录权限管理之一般权限、特殊权限、隐藏权限
Linux下文件/目录权限管理之一般权限、特殊权限、隐藏权限
Linux下文件/目录权限管理之一般权限、特殊权限、隐藏权限

访问权限/一般权限:r w x

1.对目录而言rwx的意义是?

r:意味着具有读取目录结构列表的权限。即能够使用ls命令


 $ ll
 dr--------. 2 benderfly benderfly 4096 7月 7 09:59 test1
$ cd test1/ ------>#只有r权限是没有办法cd进入目录的
 bash: cd: test1/: 权限不够
$ ls test1/
 ls: 无法访问test1/2.txt: 权限不够
 ls: 无法访问test1/1.txt: 权限不够
 1.txt 2.txt ------>#有r权限我们可以看到目录下的内容

w:意味这具有更改目录结构列表的权限。即可以:

新建(touch/vim)文件与目录;

删除(rm)文件与目录(且不论该文件与目录权限是什么);

重命名(mv)文件与目录;

移动(cp)文件与目录;

 $ ll
 drwx------. 2 benderfly benderfly 4096 7月 7 10:03 test1
$ cd test1/
$ ls
 1.txt 2.txt
$ rm 1.txt ------>#可以删除
$ touch 3.txt ------>#可以新建
$ mv 3.txt 1.txt ------>#可以重命名
$ cp 1.txt /test/ ------>#可以移动

 $ cd test1
$ ll
 dr--------. 2 benderfly benderfly 4096 7月 7 10:24 test2
 -r--------. 1 benderfly benderfly 0 7月 7 10:24 test3
 ------>#虽然这个目录中的文件(test3)和目录(test2)只有r权限
$ rm test2 -r
 rm:是否删除有写保护的目录 "test2"?y
$ rm test3 -r
 rm:是否删除有写保护的普通空文件 "test3"?y
 ------>#但是无论test1目录下的"文件/目录权限如何",因为父目录test1有w权限,其下的文件/目录就可以执行相应操作

 ------>#我们得知道这意味着什么?
 $ pwd
 /home/benderfly
$ ll -d /home/benderfly
 drwx------. 3 benderfly benderfly 1024 7月 7 09:54 /home/benderfly
 ------>#对一个用户的家目录来说,这个家目录的属主属组都是属于这个用户的
$ touch 1.txt
$ sudo chown root:root 1.txt
$ sudo chmod 700 1.txt ------>#我们尝试着在这个家目录下创建一个属主属组为root且权限为700的文件
$ ll
 -rwx------. 1 root root 0 7月 7 10:33 1.txt ------>#照这个权限设置来说,用户benderfly 属于others,并没有对这个文件的任何权限
$ rm 1.txt -f ------>但是我们可以删除它,为什么?想想这个家目录的权限是怎样?
 ------>#所以说用户在它用户家目录里面具有如同"root"般的地位


 ------>#另外必须强调的一点是,如果目录没有x权限来让你具有切换到该目录下的权限,那么w权限是没有意义的
 $ ll
 drw-------. 2 benderfly benderfly 4096 7月 7 10:10 test1
$ cd test1/
 bash: cd: test1/: 权限不够
$ touch test1/3.txt
 touch: 无法创建"test1/3.txt": 权限不够

x:意味着具有能够进入该目录成为工作目录的权限。即可以使用cd命令


 $ ll
 dr-x------. 2 benderfly benderfly 4096 7月 7 10:03 test1
$ cd test1/ ; ls ------>#能够cd进入目录
 1.txt 2.txt
$ rm 1.txt
 rm: 无法删除"1.txt": 权限不够 ------>#但是因为没有w权限,所以进入目录以后也不能做什么
$ touch 3.txt
 touch: 无法创建"3.txt": 权限不够

2.对文件而言rwx的意义是?

r:意味着具有读取该文件内容的权限

 $ ll
 -r--------. 1 benderfly benderfly 13 7月 7 10:39 1.txt
$ cat 1.txt
 hello world!

w:意味着具有编辑、新增、修改文件的权限

x:如果是脚本文件意味这可以被系统执行

注意:对于文件而言,其r、w、x权限都针对的是该“文件的内容”而言的,而对于“文件名”本身的操作(例如删除、重命名等)权限是没有意义的。这个结合上面权限对于目录而言的意义就很好理解了

特殊权限:SUID、SGID、SBTI

1.SUID/SGID

 #看一下这三个文件的权限
 # ls -l /usr/bin/passwd /etc/shadow /etc/passwd
 -rw-r--r-- 1 root root 1470 Jun 22 19:33 /etc/passwd
 ---------- 1 root root 902 Jun 22 19:33 /etc/shadow
 -rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd

我们知道,/etc/passwd和/etc/shadow存放着用户的账户和密码信息。从它们俩的权限上看,普通用户(others)并不具有对它们修改的权限。

但实际上,普通用户登录的状态下,它是可以通过/usr/bin/passwd这个命令来修改自己的密码的。这是为什么呢?

我们可以看到/usr/bin/passwd文件的root权限设置为rws,即具有SUID权限。普通用户就可以通过执行passwd命令,临时的拥有root权限,去修改/etc/passwd文件了

所以总结来说:

若普通用户对于该文件有执行权限(x)的前提下;

SUID就是:让普通用户拥有可以执行“只有root权限才能执行”的特殊权限,SGID同理指”组“;

SUID仅能用在二进制程序(binary program)上,对目录无效。

查询整个系统的SUID/SGID文件?

 # find / -perm +6000

2.SBTI(Sticky Bit)粘滞位权限

 # mkdir /test
# chmod 1777 /test/ ------>#使该目录对所有用户可读写,并增加SBTI权限
# ll -d /test/
 drwxrwxrwt 2 root root 4096 Jul 11 23:49 /test/

假设该/test目录是对所有用户开放共有的目录,且所有用户都拥有读写权限,

若A用户在/test中创建了一个文件,B用户哪天不爽它还有权限去删掉这个文件,这肯定是不好的。

但是设置了sticky bit权限以后是不会出现这样的问题的

 # su benderfly1 ------>#切换普通用户benderfly1
$ touch benderfly1.txt ------>#创建一个文件
$ ll benderfly1.txt
 -rw-rw-r-- 1 benderfly benderfly 0 Jul 11 23:52 benderfly1.txt
# su benderfly2 ------>#切换普通用户benderfly2
$ ls
 benderfly1.txt
$ rm benderfly1.txt -f ------>#benderfly2有权删掉这个benderfly创建的文件吗?
 rm: cannot remove `benderfly1.txt': Operation not permitted #显然不能
$ touch benderfly2.txt
$ rm benderfly2.txt -f ------>#它只能删除自己创建的

所以总结来说:

若普通用户对于该目录有w、x权限的前提下;

SBTI意味着,当该普通用户在该目录下创建了文件/目录,那么只有它自己和root用户可以删除/重命名/移动它,其他用户没有权力这么做;

SBTI只针对目录有效

隐藏权限:attrt

i:可以让文件不能被删除、重命名;不能写入、添加数据;不能创建硬链接;注意只有root用户有权设置此权限


 # touch attrtest
# chattr +i attrtest ------>#给文件添加隐藏权限i
# lsattr attrtest ------>#查看文件的隐藏权限
 ----i--------e- attrtest
# whoami
 root
# rm attrtest -f
 rm: 无法删除"attrtest": 不允许的操作 ------>#哪怕root用户都不能删除
# echo "hello" > attrtest ------>#不能写入/修改
 -bash: attrtest: 权限不够
# mv attrtest attrtest2 ------>#不能重命名
 mv: 无法将"attrtest" 移动至"attrtest2": 不允许的操作
# ln attrtest 2 ------>#不能创建硬链接
 ln: 创建硬链接"2" => "attrtest": 不允许的操作
# ln -s attrtest 1.txt
# cat attrtest ------>查看和创建软链接倒是可以

a:让这个文件只能增加数据,不能删除、修改数据;注意只有root用户有权设置此权限

 # chattr +a attrtest
# lsattr attrtest
 -----a-------e- attrtest
# echo "hello" > attrtest
 -bash: attrtest: 不允许的操作
# echo "hello" >>attrtest ------>#注意体会 > 和 >> 的不同
# cat attrtest
 hello
# rm attrtest -f
 rm: 无法删除"attrtest": 不允许的操作
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
1 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论