2019独角兽企业重金招聘Python工程师标准>>>
二周第三次课(12月20日)
2.14 文件和目录权限chmod
2.15 更改所有者和所属组chown
2.16 umask
2.17 隐藏权限lsattr/chattr
2.14 文件和目录权限chmod
[root@centos7 ~]# ll
总用量 4
-rw-r--r--. 1 root root 0 12月 20 17:46 2.txt
-rw-------. 1 root root 1116 12月 15 17:05 anaconda-ks.cfg.1
[root@centos7 ~]#
第1位表示文件的类型,后面的九位,表示文件的权限,一个文件有3个权限位。
就拿2.txt为例,其实是9位分成了3段。
rw-表示第一段,表示文件所有者root的权限,可读可写不可执行
r--表示第二段,表示所属组root的权限 ,可读,不可写,不可执行
r--表示第三段,表示其他用户(除所有者、所属组以外用户)权限 ,可读,不可写,不可执行
为了表示方便,linux用数字代替rwx,具体规则如下:
r (read)表示可读权限用数字4表示,r=4
w (write)表示可写权限用数字2表示,w=2
x (excute)表示可执行权限用数字1表示,x=1
-表示0
总结:rwx=7 rw-=6 --x=1 rw-r--r--=644 rw-r-xr-x=655
数字1,则表示相同inode的文件数
0(数字),表示文件大小
20 17:46(时间),表示文件最后一次修改的时间
2.txt,表示文件 (这里可以是目录或文件)
chmod
chmod等于change mode (权限),用于改变用户对文件或目录的读写执行权限。
格式为:chmod [-R] xyz文件名(这里的xyz表示数字)。其中,-R表示级联更改。
在linux中,一个目录的默认权限是755,而一个文件的默认权限是644.
[root@centos7 ~]# chmod 700 2.txt
[root@centos7 ~]# ll 2.txt
-rwx------. 1 root root 0 12月 20 17:46 2.txt
[root@centos7 ~]#
[root@centos7 ~]# chmod 700 /root/.ssh^C
有的文件有点,有的没有,意味这个文件受制于selinux,如果selinux开启,创建的文件或目录在第一列最后一位就会有点 。如果把selinux关闭,就没有点了。
可以用命令setenforce 0暂时关闭selinux。
[root@centos7 ~]# setenforce 0
[root@centos7 ~]# getenforce
Permissive
[root@centos7 ~]#
如果认证的时候,selinux开启了就不让登陆了。如果改成Permissive模式,虽然也开启了,但是不会限制你了。
要想彻底关闭selinux,需要改一下配置文件,这里先不改。
[root@localhost ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing #默认是enforcing,它也开启着,仅仅是打印一个警告,disabled才是
# SELINUXTYPE= can take one of these two values: # 真正的关闭
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
chmod -R 会产生一种效果,表示可以批量更改目录本身以及目录下的子目录和文件的权限 。
[root@centos7 ~]# cd /tmp/
[root@centos7 tmp]# ll
总用量 4
drwxr-xr-x. 2 root root 6 12月 20 18:05 aming2
drwxr-xr-x. 2 root root 6 12月 20 18:05 aminglinux
-rwx------. 1 root root 827 12月 15 17:05 ks-script-77j_y6
-rw-------. 1 root root 0 12月 15 16:57 yum.log
[root@centos7 aming2]# ll
总用量 0
-rw-r--r--. 1 root root 0 12月 20 18:05 1.txt
[root@centos7 aming2]#
下面给目录aming2改权限为777
[root@centos7 tmp]# chmod 777 aming2
[root@centos7 tmp]# ls -ld aming2
drwxrwxrwx. 2 root root 18 12月 20 18:05 aming2
[root@centos7 tmp]#
再来看目录aming2下的文件1.txt,1.txt的权限并没有发生变化。
[root@centos7 tmp]# ls -l /tmp/1.txt
总用量 0
-rw-r--r--. 1 root root 0 12月 20 18:05 1.txt
[root@centos7 tmp]#
如果你创建了一个目录,但又不想让其他人看到该目录的内容,则只需要设置成:
rwxr-----(740)即可。
chmod不管是对文件还是对目录操作,生效的仅仅是目录本身,里面的文件权限并没有改变;如果要想全部批量的改变里面的文件的权限,就需要使用-R选项。
[root@centos7 tmp]# chmod -R 770 aming2
[root@centos7 tmp]# ll aming2
总用量 0
-rwxrwx---. 1 root root 0 12月 20 18:05 1.txt
[root@centos7 tmp]# ls -ld aming2
drwxrwx---. 2 root root 18 12月 20 18:05 aming2
[root@centos7 tmp]#
chmod支持使用rwx的方式来设置权限,使用u、g、o分别表示user、group、others的属性,a则表示全部。如:u+(-)rwx,g+(-)rwx,o+(-)rwx ,a+(-)rwx。如果更改多个属性,中间可用“,”隔开。
[root@centos7 tmp]# chmod u=rwx,g=r,o=r aming2
[root@centos7 tmp]#
这样写比较直观,但是比较繁琐,建议还是写成数字。
[root@centos7 tmp]# chmod u=rwx,g=r,o=r aming2
[root@centos7 tmp]# chmod a+x aming2
[root@centos7 tmp]# ls -ld aming2
drwxr-xr-x. 2 root root 18 12月 20 18:05 aming2
[root@centos7 tmp]# chmod a-x aming2
[root@centos7 tmp]# ls -ld aming2
drw-r--r--. 2 root root 18 12月 20 18:05 aming2
[root@centos7 tmp]#
在Linux系统中,目录的默认权限为755,文件的默认权限为644。
2.15 更改所有者和所属组chown
chown命令
chown等于change owner 更改文件的所有者和所属组。
格式为:chown [-R] 账户名 文件名
chown [-R] 账户名:组名 文件名
这里的-R选项只适用于目录,作用是级联更改,即不仅更改当前目录,连目录的子目录和子文件也全部更改。
cat /etc/passwd命令查看用户,前面的不用管,通过查看知道只创建了2个用户aming和user1
[root@centos7 tmp]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
aming:x:1000:1000::/home/aming:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
[root@centos7 tmp]#
给/tmp/yum.log改一下所有者
[root@centos7 tmp]# ls /tmp/
aming2 aminglinux ks-script-77j_y6 yum.log
[root@centos7 tmp]# ls -l /tmp/yum.log
-rw-------. 1 root root 0 12月 15 16:57 /tmp/yum.log
[root@centos7 tmp]# chown aming /tmp/yum.log
[root@centos7 tmp]# !ls
ls -l /tmp/yum.log
-rw-------. 1 aming root 0 12月 15 16:57 /tmp/yum.log
[root@centos7 tmp]#
chgrp命令
chgrp等于change group 用于更改文件或者目录的所属组。
格式为:chgrp 组名 文件名
把/tmp/yum.log的组改成user1
[root@centos7 tmp]# chgrp user1 !$
chgrp user1 /tmp/yum.log
[root@centos7 tmp]# !ls
ls -l /tmp/yum.log
-rw-------. 1 aming user1 0 12月 15 16:57 /tmp/yum.log
[root@centos7 tmp]#
chown不仅可以更改所有者,还可以更改所属组。
[root@centos7 tmp]# chown user1:aming /tmp/yum.log
[root@centos7 tmp]# !ls
ls -l /tmp/yum.log
-rw-------. 1 user1 aming 0 12月 15 16:57 /tmp/yum.log
[root@centos7 tmp]#
chown可以只更改组
[root@centos7 tmp]# chown :root /tmp/yum.log
[root@centos7 tmp]# !ls
ls -l /tmp/yum.log
-rw-------. 1 user1 root 0 12月 15 16:57 /tmp/yum.log
[root@centos7 tmp]#
chown-R选项作用是级联更改子目录以及子文件。
[root@centos7 tmp]# chown -R user1:aming /tmp/aming2
[root@centos7 tmp]# ll !$
ll /tmp/aming2
总用量 0
-rwxrwx---. 1 user1 aming 0 12月 20 18:05 1.txt
[root@centos7 tmp]#
总结:
chown username filename只更改所有者
chown username:groupname filename更改所有者和所属组
chown -R username:groupname filename级联更改子目录以及子文件
2.16umask
touch一个文件,默认权限是644(-rw-r--r--),创建一个目录,默认权限是755(rwxr-xr-x)。
[root@centos7 tmp]# touch 11.txt
[root@centos7 tmp]# ll 11.txt
-rw-r--r--. 1 root root 0 12月 20 18:59 11.txt
[root@centos7 tmp]# mkdir 123
[root@centos7 tmp]# ls -ld 123
drwxr-xr-x. 2 root root 6 12月 20 18:59 123
[root@centos7 tmp]#
[root@centos7 tmp]# umask
0022
[root@centos7 tmp]#
root的默认umask值是0022,通过这个值可以确定文件和目录的默认权限是什么。 默认情况下,目录的权限值为755(rwxr-xr-x),普通文件的默认权限为644(-rw-r--r--)
下面更改一下umask的值。
[root@centos7 tmp]# umask 002
[root@centos7 tmp]# umask
0002
[root@centos7 tmp]#
下面创建一个文件,看一下文件的权限是什么。
[root@centos7 tmp]# touch 2.txt
[root@centos7 tmp]# ll 2.txt
-rw-rw-r--. 1 root root 0 12月 20 19:02 2.txt
[root@centos7 tmp]#
再创建一个目录,看一下目录的权限是什么。
[root@centos7 tmp]# mkdir 234
[root@centos7 tmp]# ls -ld 234
drwxrwxr-x. 2 root root 6 12月 20 19:03 234
[root@centos7 tmp]#
[root@centos7 tmp]# touch 3.txt
[root@centos7 tmp]# ll 3.txt
-rw-rw-r--. 1 root root 0 12月 20 19:04 3.txt
[root@centos7 tmp]#
目录相当于windows下的一个文件夹,文件下有文件也有目录,如果想要查看目录里面的东西,需要先进入到目录里面去。进入目录其实就是执行这个目录,所以必须要有x权限。如果没有x权限,目录都不能浏览。这跟文件不一样,文件有了x权限才能执行。
所以在创建目录或者文件的时候,文件或目录的权限是通过: 创建的目录或者文件的权限=默认值(文件为666 rw-rw-rw,目录为777 rwxrwxrwx)-umask的值 得来的。umask数值代表文件或者目录的默认权限需要减掉的权限。
若用户创建普通文件,则预设没有可执行权限,只有rw两个权限,最大值为666(-rw-rw-rw) 。若用户建立目录,则预设开放所有权限,最大值777(rwxrwxrwx)
当umask=003。
[root@centos7 tmp]# umask
0003
[root@centos7 tmp]# ls
11.txt 234 3.txt aminglinux yum.log
123 2.txt aming2 ks-script-77j_y6
[root@centos7 tmp]# rm -rf *.txt
[root@centos7 tmp]# touch 1.txt
[root@centos7 tmp]# ll 1.txt
-rw-rw-r--. 1 root root 0 12月 20 19:11 1.txt
[root@centos7 tmp]#
目录的权限:777(rwxrwxrwx)-003(-------wx)=774(rwxrrxr--)
普通文件的权限:666(rw-rw-rw-)-003(-------wx)=664
(rw-rw-r--) --x减去--w依然是什么都没有
[root@centos7 tmp]# mkdir 111
[root@centos7 tmp]# ls -ld 111
drwxrwxr--. 2 root root 6 12月 20 19:15 111
[root@centos7 tmp]#
默认情况下,root的umask为022,而一般用户则为002。可写的权限非常重要,因此预设会去掉写权限。系统的umask有4位,最前面有一个0,这个0加不加都没有影响,它表示umask数值是八进制的。
2.17 隐藏权限lsattr/chattr
chattr等于change attribute,是用来设置隐藏权限(翻译成中文是附加权限)的。
格式:chattr [+-=] [Asaci] [文件或者目录名],其中+、-、=分别表示增加、减少和设定。各个选项的含义如下:
A:增加该属性后,表示文件或者目录的atime将不可修改。
s:增加该属性后,会将数据同步写入磁盘中。
a:增加该属性后,表示只能追加不能删除,非root用户不能设定改属性。
c:增加该属性后,表示自动压缩该文件,读取时会自动解压。
i:增加该属性后,表示文件不能删除、重命名、设定链接、写入以及新增数据。
以上选项中,常用的为a和i两个选项。
给目录增加i权限后,即使是root账户,也不能在目录下创建或者删除文件。
[root@tianqi-01 ~]# mkdir dir2
[root@tianqi-01 ~]# chattr +i dir2
[root@tianqi-01 ~]# touch dir2/test5
touch: 无法创建"dir2/test5": 权限不够
[root@tianqi-01 ~]# chattr -i dir2
[root@tianqi-01 ~]# touch dir2/test5
[root@tianqi-01 ~]# chattr +i dir2
[root@tianqi-01 ~]# rm -f dir2/test5
rm: 无法删除"dir2/test5": 权限不够
[root@tianqi-01 ~]#
给目录增加a权限后,只能在里面创建文件,而不能删除文件。
[root@tianqi-01 ~]# chattr -i dir2
[root@tianqi-01 ~]# touch dir2/test6
[root@tianqi-01 ~]# ls dir2
test2 test5 test6
[root@tianqi-01 ~]# chattr +a dir2
[root@tianqi-01 ~]# rm -f dir2/test6
rm: 无法删除"dir2/test6": 不允许的操作
[root@tianqi-01 ~]# touch dir2/test7
[root@tianqi-01 ~]# ls dir2
test2 test5 test6 test7
[root@tianqi-01 ~]#
文件同样适用以上权限。
[root@tianqi-01 ~]# chattr +a dir2/test7
[root@tianqi-01 ~]# echo '11111' > dir2/test7
-bash: dir2/test7: 不允许的操作
[root@tianqi-01 ~]# echo '11111' >> dir2/test7
[root@tianqi-01 ~]# cat !$
cat dir2/test7
11111
[root@tianqi-01 ~]# chattr +i dir2/test6
[root@tianqi-01 ~]# echo '11111' >> dir2/test6
-bash: dir2/test6: 权限不够
[root@tianqi-01 ~]# echo '11111' > dir2/test6
-bash: dir2/test6: 权限不够
[root@tianqi-01 ~]# rm -f !$
rm -f dir2/test6
rm: 无法删除"dir2/test6": 不允许的操作
[root@tianqi-01 ~]#
有了特殊权限以后,文件不能写入,即使写一些东西,也不是成功的。即使加!强制保存,也是不成功的。
lsattr(list attibute),该命令用于读取文件或者目录的特殊权限,格式为:
lsattr [-aR] [文件/目录名]
下面看它的两个选项:
-a:类似于ls的-a选项,即连同隐藏文件一同列出。
-R:连同子目录的数据一同列出。
这个命令和ls的用法类似。
[root@tianqi-01 ~]# lsattr dir2
---------------- dir2/test5
---------------- dir2/test2
----i----------- dir2/test6
-----a---------- dir2/test7
[root@tianqi-01 ~]# lsattr -aR dir2
---------------- dir2/.
---------------- dir2/..
---------------- dir2/test5
---------------- dir2/test2
----i----------- dir2/test6
-----a---------- dir2/test7
[root@tianqi-01 ~]#
[root@centos7 tmp]# lsattr 1.txt
----i----------- 1.txt
[root@centos7 tmp]#
此时看到1.txt多了一个i权限。
新建一个文件,里面什么权限都是没有的。
[root@centos7 tmp]# touch 2.txt
[root@centos7 tmp]# lsattr 2.txt
---------------- 2.txt
[root@centos7 tmp]#
i:增加该属性后,表示文件不能删除、重命名、设定链接、写入以及新增数据。
[root@centos7 tmp]# rm -f 1.txt
rm: 无法删除"1.txt": 不允许的操作
[root@centos7 tmp]# mv 1.txt 3.txt
mv: 无法将"1.txt" 移动至"3.txt": 不允许的操作
[root@centos7 tmp]#
[root@centos7 tmp]# rm -f 3.txt
[root@centos7 tmp]# ll
总用量 4
drwxrwxr--. 2 root root 6 12月 20 19:15 111
drwxr-xr-x. 2 root root 6 12月 20 18:59 123
-rw-rw-r--. 1 root root 0 12月 20 19:11 1.txt
drwxrwxr-x. 2 root root 6 12月 20 19:03 234
-rw-rw-r--. 1 root root 0 12月 20 19:25 2.txt
drw-r--r--. 2 user1 aming 18 12月 20 18:05 aming2
drwxr-xr-x. 2 root root 6 12月 20 18:05 aminglinux
-rwx------. 1 root root 827 12月 15 17:05 ks-script-77j_y6
-rw-------. 1 user1 root 0 12月 15 16:57 yum.log
[root@centos7 tmp]#
没有报错,是因为加了-f选项。
此时看一下,还有1.txt文件。
看一下1.txt的权限,是有i权限的,增加该属性后,表示文件不能删除、重命名、设定链接、写入以及新增数据。不能touch一个文件,因为touch一个文件会改变一个文件的创建时间。
[root@centos7 tmp]# lsattr 1.txt
----i----------- 1.txt
[root@centos7 tmp]# touch 1.txt
touch: 无法创建"1.txt": 权限不够
[root@centos7 tmp]#
再touch一个文件,会发现时间就会更改。
[root@centos7 tmp]# ll 2.txt
-rw-rw-r--. 1 root root 0 12月 20 19:32 2.txt
[root@centos7 tmp]#
那什么时候用这个权限呢?就是谁都不能改,固定在这儿,不能追加,不能更改,删除,编辑等等时,可以追加i权限。
chattr -i 可以减掉i权限
[root@centos7 tmp]# chattr -i 1.txt
[root@centos7 tmp]# mv 1.txt 3.txt
然后也可以编辑。
[root@centos7 tmp]# vi 3.txt
[root@centos7 tmp]# cat 3.txt
aaaaaa
[root@centos7 tmp]#
chattr +a选项,增加该属性后,表示只能追加不能删除,非root用户不能设定改属性。
不能更改,只能往后面在文件的末尾一点一点的追加,就像log日志一样。
[root@centos7 tmp]# chattr +a 1.txt
[root@centos7 tmp]# rm 1.txt
rm:是否删除普通空文件 "1.txt"?y
rm: 无法删除"1.txt": 不允许的操作
[root@centos7 tmp]#
如果写这个文件呢,改一下文件的内容,也是不可以的。
[root@centos7 tmp]# vim 1.txt
现在追加呢,在文件的末尾追加一些东西。覆盖是不行的,追加是可以的。
[root@centos7 tmp]# head -n2 /etc/passwd > 1.txt
-bash: 1.txt: 不允许的操作
[root@centos7 tmp]# head -n2 /etc/passwd >> 1.txt
[root@centos7 tmp]# cat 1.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@centos7 tmp]#
追加可以,不能更改,不能删除。
重命名也是不可以的。
[root@centos7 tmp]# mv 1.txt 3.txt
mv:是否覆盖"3.txt"? y
mv: 无法将"1.txt" 移动至"3.txt": 不允许的操作
[root@centos7 tmp]#
现在试一下touch,touch是可以的。
[root@centos7 tmp]# touch 1.txt
[root@centos7 tmp]# ll 1.txt
-rw-rw-r--. 1 root root 65 12月 20 19:44 1.txt
[root@centos7 tmp]# lsattr 1.txt
-----a---------- 1.txt
[root@centos7 tmp]#
如果是更改目录呢,是不是跟文件是一样的呢?
[root@centos7 tmp]# lsattr 111
[root@centos7 tmp]# mkdir 111/222
[root@centos7 tmp]# lsattr 111
---------------- 111/222
[root@centos7 tmp]#
lsattr查看的是目录下的子目录和子文件。
lsattr -d 查看目录的属性。
[root@centos7 tmp]# lsattr -d 111
---------------- 111
[root@centos7 tmp]#
加a权限以后,是可以更改目录里面的文件内容的。
加i权限以后,也是可以更改目录里面的文件内容的。
[root@centos7 tmp]# chattr -a 111
[root@centos7 tmp]# chattr +i 111
[root@centos7 tmp]# head -n2 /etc/passwd > 111/12.txt
[root@centos7 tmp]#
写一个文件跟父目录的权限关系不大,可以限制不能新建文件,但是不能限制写已经存在的文件。
[root@centos7 tmp]# touch 111/4.txt
touch: 无法创建"111/4.txt": 权限不够
[root@centos7 tmp]# head -n2 /etc/passwd > 111/12.txt
[root@centos7 tmp]# head -n2 /etc/passwd >> 111/12.txt
lsattr -R 111会显示目录111的子目录,及子目录下的文件(一层或多层目录文件),若是不加-R,则仅仅显示一层目录文件。
友情链接:阿铭Linux