Linux 笔记分享八:文件权限的设定

一、文件权限的设定

-rw-r--r--
  • 第一个-是文件类型(-代表文件,d代表目录,|代表软链接文件)
  • 关于后9位
rw- r-- r--
u所有者 g所属组 o其他人

r是读权限,w是写权限,x是执行权限

1、chmod

修改文件的权限

chmod [选项] 模式 文件名
  • 选项

-R: 递归操作(赋予目录权限时,目录下所有文件都进行赋予权限)

  • 模式
[ugoa][+-=][mode=421]

[ugo]和[+-]的方式不方便,需要知道文件的权限是什么,才能操作

a是all的意思,指所有人

  • 文件所有者加上执行权限
chmod u+x cangls.av
  • 文件所属组和其他人加上写权限
chmod g+w,o+w cangls.av
  • 把上面给予的权限去掉
chmod u-x,g-w,o-w cangls.av
  • 等于方式赋予权限
chmod u=rwx,g=rw cangls.av
  • 以all和等于的方式赋予权限,即所有人一样的权限,不现实,不常用
chmod a=rw cangls.av
  • 最方便的权限赋予方式
权限的数字表示

r ---- 4
w ---- 2
x ---- 1

例如:

rwx r-x r-x
7 5 5

原因:

数字权限其实是用3位二进制表示的,其转换为十进制数对应的就是4,2,1

  • 赋予文件最高权限
chmod 777 cangls.av
  • 常用数字权限
777 --- 代表所有人都有最高权限
755 --- 执行文件的常用权限
644 --- 普通文件的常用权限

二、文件权限的作用

1、权限对文件的作用

  • r: 读取文件内容(cat more head tail)
  • w: 编辑、新增、修改文件内容(vi echo)

但不包括删除文件

  • x: 可执行

2、关于为什么有文件的写权限,却不能删除文件的问题解释

对于某个目录或文件拥有的权限,针对的是里面的内容,而不是文件本身

由此,对文件的删除是对文件所在目录的写,故必须有目录的写权限才可以

3、权限对目录的作用

  • r: 可以查询目录下文件名(ls)
  • w: 具有修改目录结构的权限。如新建文件和目录,删除此目录下文件和目录,重命名此目录下文件和目录,剪切(touch rm mv cp)
  • x: 可以进入目录(cd)

4、总结

对文件来讲: 最高权限是 x(执行)
对目录来讲: 最高权限是 w(写)

对文件要少赋执行权限,对目录要少赋写权限

  • 对于目录的权限

对目录仅赋予读权限没有意义

对目录仅赋予执行权限没有意义

有意义的三种权限: 0(没有任何权限)、5(读和执行,基本权限)、7(读、写和执行,最高权限)

5、举个栗子哈(一步一步来看)

  • root下创建一个用户,并赋予密码
[root@localhost ~]# useradd user1
[root@localhost ~]# passwd user1
  • 另外再登录一个shell,用户是user1
  • root下进入user1的家目录,并创建测试目录和文件
[root@localhost ~]# cd /home/user1
[root@localhost user1]# mkdir 123
[root@localhost user1]# touch 123/abc

此时目录123的权限是: drwxr-xr-x(755)

  • root下修改123目录的权限和abc文件的权限,使其他人的权限为0
[root@localhost user1]# chmod 750 123
[root@localhost user1]# chmod 640 123/abc
  • 此时user1下不能进入123目录和查看123目录
  • root下修改123目录的权限,使其他人的权限为仅读
[root@localhost user1]# chmod 754 123
  • 此时user1下不能进入123目录,但查看123目录乱码,不能用
  • root下修改123目录的权限,使其他人拥有基本权限
[root@localhost user1]# chmod 755 123
  • 此时user1下能查能进入123目录,但是不能在里面创建、删除文件或目录,并且对abc文件没有读写执行权限
  • root下修改abc文件,使其他人拥有只读权限
[root@localhost user1]# chmod 644 123/abc
  • 此时user1下可以读abc内容,但不能执行和修改
  • root下修改abc文件,使其他人拥有读写权限
[root@localhost user1]# chmod 646 123/abc
  • 此时user1下可以读和修改abc内容,但不能执行,且不能删除此文件,因为123目录对于user1没开放写权限
  • root下修改123目录的权限,使其他人拥有最高权限
[root@localhost user1]# chmod 757 123
  • 此时user1下可以在123目录下,创建和删除文件

6、我的总结

  • 针对目录

755是最常用的权限设定方式,(目录所有者可以删除和创建目录下文件,其他人只能进入看看)

稍微严谨一点是750,其他人进都进不来

极端严谨一点是700,就我自己能进能看能改,其他所有拒之门外

  • 针对普通文件

644是最常用的权限设定方式,(文件所有者能看能改,其他人只能看)

640是其他人不能看不能改

600是其他所有人不能看不能改

  • 针对可执行文件

754是最常用的权限设定方式,(文件所有者可以看改执行,组内可以执行,其他人只能看)

750、740、700都是可以的

  • 还有一点

文件所有者必须为7或者是6,要不就是傻逼

三、其它权限命令

1、chown

修改文件的所有者

chown 用户名 文件名

例如:

chown ds fengj.av
  • 同时改变所属组
chown root:root fengj.av

2、chgrp

修改文件的所属组

chgrp 组名 文件名

例如:

chgrp group1 fengj.av

完全可以用chown改变所属组,因此这个命令作用就不是那么重要了

3、让用户对文件及目录拥有一定的权限

  • 要求

拥有一个av目录

让加藤老师拥有所有的权限(7)

让本课程学员有查看的权限(5)

其他所有人不许查看这个目录(0)

4、总结

  • 分配文件基本权限时,核心原则:

在最小权限情况下能够实现要求即可!

严谨不负责任的赋777这样的二逼权限!

四、文件默认权限

Windows在目录中创建文件是继承的目录权限,Linux则不是

1、umask

查看默认权限

umask

返回:

0022

第一位0: 文件特殊权限

022: 文件默认权限

  • 文件默认权限

文件默认不能建立为执行文件,必须手工赋予执行权限

所以文件默认权限最大为666

默认权限需要换算成字母再相减

建立文件之后的默认权限,为666减去umask值

例如:

文件默认最大权限666,umask值022
-rw-rw-rw- 减去 -----w--w- 等于 -rw-r--r--

再例如:

文件默认最大权限666,umask值033
-rw-rw-rw- 减去 -----wx-wx 等于 -rw-r--r--
  • 目录的默认权限

目录默认权限最大为777

默认权限需要换算成字母再相减

建立文件之后的默认权限,为777减去umask值

例如:

目录默认最大权限为777,umask值022
-rwxrwxrwx 减去 -----w--w- 等于 -rwxr-xr-x
  • 修改默认权限
umask 0033

命令修改只是临时生效,想要永久生效需要修改/etc/profile文件

我们是一群被时空压迫的孩子。 ---- 爱因斯坦

本帖由系统于 1周前 自动加精
讨论数量: 2

755是最常用的权限设定方式,777-022=775 学习了

7个月前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!