二周第三次课

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

二周第三次课(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

转载于:https://my.oschina.net/u/3744518/blog/1588870

你可能感兴趣的:(二周第三次课)