2.14 文件和目录权限chmod

2.15 更改所有者和所属组chown

2.16 umask

2.17 隐藏权限lsattr/chattr



2.14 文件或目录权限chmod


#ls-l 查看文件的详细属性

~#ls-l 
-rw-r--r-- root root        2.txt

此处分为十个字符,

第一个字符代表文件的类型,

r 可读 w 可写 x 可执行

rw-文件所有者权限

可读可写不可执行

r--文件所属组权限

可读不可写不可执行

r--其他用户权限

第二位到第十位 是权限分界,这9个字符分为3段,每3段分一个权限界别 第一段是所有者权限,第二段是所属组权限,第三段是其他用户权限。


权限可以用数字显示,例如

r=4,w=2,x=1,那么rwx=4+2+1=7

rw-=4+2=6 --x=1

rw-r--r--=644

#chmod  更改文件权限

chmod=change mode(mode权限意解) 缩写

将2.txt的文件属性改成rwx------

用法

#chmod 700 2.txt
#ls -l 2.txt
-rwx------ 2.txt


举例

-rwx------.中的“.”是什么意思?

“.”的意思是 这个文件受制于selinux

如果开启了selinux,第一列创建的文件都会有“.”。如果想取消“.”,需要关闭防火墙,创建文件,才会被取消。(修改防火墙禁用,需要#vi /etc/selinux/config,此处只做了解,不用太详细)


#chmod -R 对目录本身及其子文件的权限产生改变。(批量更改权限)
#cd /tmp/ 
#ls -l 
drwxr-xr-x /aming2

目录aming2变成了777权限,发现/aming2的子文件没被更改权限。

#chmod 777 aming2 
#ls -lh 
#drwxrwxrwx/aming2
#cd /aming2
#ls - lh
-rw-r--r-- 1.txt

更改/aming2目录本身以及文件权限,

#chmod -R 777 aming2
#ls -lh

两者均为777权限。


其他用法

#chmod u=rwx,g=r,o=r aming2

各种用户都取消各种权限用法

ugo解释:

  • u=user

  • g=group

  • o=others

#chmod a-x aming2 a=all,所有权限,-代表减去、撤走权限。此用法是,所有权限(所有者,所属组,其他用户),撤去x权限。
#chmod u-x aming2  撤销所有者的x权限
#chmod o+x aming2  撤销其他用户的x权限




2.15 更改所有者和所属组chown


chown =change owner 改变所有者,所属组,其他人

#cat /etc/passwd 进去 查看用户(root,bin....用户,系统自带创建)

可以看到最后2个是自创的用户,aming及user1用户

#ls /tmp/
aming2/yum.log
#ls -l /tmp/yum.log
-rw---yum.log

用法

#chown aming /tmp/yum.log    
#!ls 
ls -l /tmp/yum.log
-rw------. 1 aming root/tmp/yum.log

修改成功


chgrp= change group

用法

修改所属组为user1,修改成功


#chgrp user1 /tmp/yum.log
#!ls



此命令也可以修改组名

#chown user1:aming /tmp/yum.log

同样,只修改所属组名用法

#chown :root /tmp/yum.log



#chown -R
#chown -R user1:aming /tmp/aming2
#ls -l /tmp/aming2/


#ls -ld /tmp/aming2

drw-r--r-- user1 aming/tmp/aming2

总结,

#chown -R username:group filename

更改所有者与所属组

#chown -R username filename

更改所有者


2.16 umask


umask决定默认的文件和目录的权限。


(umask值技巧记法,首先要了解rwx对应的数值,r=4,w=2,x=1。还有umask=002分析,002代表所属主(0),所属组(0),其他用户(2)的组合。

例如:umask=003 那么3=2+1,那就是umask为003的值等于wx权限,

    umask=002 那么2=2+0,那就是w权限)


为什么创建文件就是644,创建目录就是755?

#touch 11.txt 
#ls-l 
-rw-r--r-- (644权限)
#mkdir123
#ls -ld 123
drwxr-xr-x (755)


#umask
0022

因为linux系统root用户的umask值,所以创建文件就是644,创建目录就是755


#umask 002 (002等于=0002,此处一共四位,第一位0一般忽略)
#mkdir 234
#ls -ld 234
drwxrwxr-x    234(775)
#touch 3.txt
#ls -l 3.txt
-rw-rw-r--     3.txt (664)

默认值022 644 755

修改后002 664 775

那我们可以按照这样算,

默认Umask算法

777-022=755

666-022=644

所以修改002后的算法是,

777-002=775

666-002=664

目录必须要有x权限,否则没办法浏览,没办法进入。


为了证明以上说法,举例测试

#umask 003
#rm -rf 11.txt 2.txt 3.txt
#touch 1.txt
#ls -l 1.txt

-rw-rw-r-- 权限变成664了,

[如果#666-003=663,可表示成666=(rw-rw-rw-)-(--------wx)=rw-rw-r--=664]

[777-003=(rwxrwxrwx)- (-------wx) = rwxrwxr--=774]

创建目录,看看到底目录权限是不是774

#mkdir 111
#ls -ld 111 
drwxrwxr-- 111

此处证明创建目录默认权限是774,


归纳,

其实umask的值等于多少,就是减去什么权限。

例如umask等于022,022分三段组(所有者,所属组,其他用户),

那么,0是所有者的值,2是所属组的值,2是其他用户的值。



通过umask怎么能够判断默认权限是多少?

用减法,用9位权限位对应相减。


*归纳

原始权限

但umask=022

目录权限最大值为777,777=drwxrwxrwx,那么使用umask值后的初始权限,

应该是(drwxrwxrwx)-(----w--w-)=drwxr-xr-x,对应数字应该是777-022=755,而755是drwxr-xr-x

则目录被创建初的始权限是drwxr-xr-x

而文件权限的最大值是666,666=rw-rw-rw-,666-022=644,

所以文件被创建的初始权限是644=rw-r--r--




2.17 隐藏权限lsattr/chattr


#chattr 隐藏权限


设置隐藏权限i

#chattr +i 1.txt
#vi 1.txt
#head -n2 /etc/passwd>1.txt
-bash:1.txt:权限不够
#ls -l 1.txt  发现查不出权限
#lsattr 1.txt 查看隐藏权限,有“i”权限。
----i------

新建文件,查看权限,

#touch 2.txt
#lsattr 2.txt 没有任何权限
---------- 2.txt


~的解说

#ls -l 
1.txt
1.txt~

在做vi 1.txt的操作时候,会自动创建缓存文件,这个缓冲文件,当保存退出的时候会把写入的东西覆盖原来的文件,然后~文件才会被删除,如果加了特殊权限(隐藏权限i也是),这个文件就删除不到,保存不到,所以~一直会存在。


lsattr 1.txt 是有i权限的。

不能mv,rm,touch.

i是一个非常严谨的权限,什么都不能改。


减掉i权限。

#chattr -i 1.txt

减掉后vi,mv,rm,touch都可以


#chattr +a 只能追加,不能删除,只能在文件的末尾一点点追加。


#chattr +a 1.txt
#rm 1.txt 失败
#vi 1.txt 失败

尝试追加

#head -n2 /etc/passwd > 1.txt

追加失败,尝试末尾追加。

#head -n2 /etc/passwd >> 1.txt
#cat 1.txt

有数据显示,追加成功,此处证明可以在末尾追加。

尝试touch

#touch 1.txt 可以touch.
#chattr -a 1.txt 把a权限去掉。

a权限,可以追加信息,可以touch,可以更改时间信息,但


是不能够vi,mv,rm。

#chattr -a 1.txt 把a权限去掉。

更改目录信息

#mkdir 111/222
#chattr +i 111
#lattr -d 111 
----i------------111
#rm -r 111
rm:是否进入目录“111”? y
rm:是否删除目录“111/222”? y
rm:无法删除“111/222”:权限不够
#mv 111 1212 移动,不允许操作
#touch 111/12.txt  无法创建,权限不够

发现给目录添加隐藏权限跟给文件添加隐藏权限一样。

#chattr -i 111

#chattr +a 111
#touch 111/12.txt
#vi 111/12.txt
#cat 111/12.txt
slfdjkew
#head -n2 /etc/passwd > 111/12.txt
#cat !$ 结果追加成功。

此处证明给目录添加a权限,可以根据目录下的文件内容。

#chattr -a 111 
#chattr +i 111
#head -n2 /etc/passwd > 111/12.txt

同样 i也可以。

#lasttr -R 111

可以查看 111下面的子目录,及子目录的文件的权限。

#lasttr 111

只可以查看111的一层目录及文件。


总结

#chattr +i +a -i -a 
#lasttr -R -a(被隐藏都可以查出) -d(目录本身)