[权限管理]——一般权限、特殊权限、隐藏权限

时间:2022-05-01 16:25:50

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


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

[权限管理]——一般权限、特殊权限、隐藏权限

[权限管理]——一般权限、特殊权限、隐藏权限

 [权限管理]——一般权限、特殊权限、隐藏权限


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

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

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

$ ll
dr--------. 2 lyj01 lyj01 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 lyj01 lyj01 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 lyj01 lyj01 4096 7月 7 10:24 test2    
-r--------. 1 lyj01 lyj01 0 7月 7 10:24 test3  
------>#虽然这个目录中的文件(test3)和目录(test2)只有r权限
$
rm test2 -rrm:是否删除有写保护的目录 "test2"?y  

$
rm test3 -rrm:是否删除有写保护的普通空文件 "test3"?y              
------>#但是无论test1目录下的"文件/目录权限如何",因为父目录test1有w权限,其下的文件/目录就可以执行相应操作
------>#我们得知道这意味着什么?
$
pwd
/home/lyj01

$ ll
-d /home/lyj01drwx------. 3 lyj01 lyj01 1024 7月 7 09:54 /home/lyj01
------>#对一个用户的家目录来说,这个家目录的属主属组都是属于这个用户的,且属主权限为755

$
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 ------>#照这个权限设置来说,用户lyj01属于others,并没有对这个文件的任何权限

$
rm 1.txt -f ------>但是我们可以删除它,为什么?想想这个家目录的权限是怎样?------>#所以说用户在它用户家目录里面具有如同"root"般的地位
------>#另外必须强调的一点是,如果目录没有x权限来让你具有切换到该目录下的权限,那么w权限是没有意义的
$ ll
drw
-------. 2 lyj01 lyj01 4096 7月 7 10:10 test1

$ cd test1
/bash: cd: test1/: 权限不够

$
touch test1/3.txttouch: 无法创建"test1/3.txt": 权限不够

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

$ ll
dr
-x------. 2 lyj01 lyj01 4096 7月 7 10:03 test1

$ cd test1
/ ; ls ------>#能够cd进入目录1.txt 2.txt

$
rm 1.txtrm: 无法删除"1.txt": 权限不够 ------>#但是因为没有w权限,所以进入目录以后也不能做什么

$
touch 3.txttouch: 无法创建"3.txt": 权限不够

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

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

$ ll
-r--------. 1 lyj01 lyj01 13 7月 7 10:39 1.txt

$
cat 1.txthello world!

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

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

注意:对于文件而言,其r、m、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 lyj             ------>#切换普通用户lyj

$
touch lyj1.txt ------>#创建一个文件

$ ll lyj1.txt
-rw-rw-r-- 1 lyj lyj 0 Jul 11 23:52 lyj1.txt

#
su lyj2 ------>#切换普通用户lyj2

$
lslyj1.txt

$
rm lyj1.txt -f ------>#lyj2有权删掉这个lyj创建的文件吗?rm: cannot remove `lyj1.txt': Operation not permitted #显然不能

$ touch lyj2.txt
$
rm lyj2.txt -f ------>#它只能删除自己创建的

所以总结来说:

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

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

       SBTI只针对目录有效


隐藏权限:attrt

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

# touch attrtest

#
chattr +i attrtest ------>#给文件添加隐藏权限i
#
lsattr attrtest ------>#查看文件的隐藏权限----i--------e- attrtest

#
whoamiroot

#
rm attrtest -frm: 无法删除"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 -frm: 无法删除"attrtest": 不允许的操作