【Linux】权限复习

[root@localhost /]# ls -al
总用量 696
dr-xr-xr-x.  18 root root    271 2月  11 11:34 .
dr-xr-xr-x.  18 root root    271 2月  11 11:34 ..
lrwxrwxrwx.   1 root root      7 10月 19 17:57 bin -> usr/bin
dr-xr-xr-x.   5 root root   4096 1月  17 15:46 boot
drwxr-xr-x.  20 root root   3220 3月  26 15:52 dev       <=范例说明处
---------------------------------------------------
-rw-r--r--.   1 root root 683170 2月  11 11:34 dump.rdb  <=范例说明处
--------------------------------------------------------

1、解释下七个字段的意思

-rw-r–r--. 1 root root 6 2月 11 11:34 dump.rdb
文件类型权限 链接数 文件所有者 文件所属用户组 文件容量 文件最后修改时间 文件名

1.1 第一栏:文件类型权限

在这里插入图片描述

1.1.1 第一个字符代表这个文件是【目录、文件或链接文件等】

字符 文件类型
d 目录
- 普通文件
I 软链接,即链接文档(link file)
b 块设备,装置文件中可供存储的接口设备(可随机存储装置)
c 字符设备,装置文件中串行端口设备(一次性读取装置)
s 网络套接字(socket
p 管道(piep)

1.1.2 接下来的字符中,以三个为一组,且均为【rwx】的三个参数的组合,其中【r】代表可读(read)、【w】代表可写(write)、【x】代表可执行(execute),这个三个权限的位置不会改变,如果没有权限就会出现减号【-】

  • 第一组为【文件拥有者可具备的权限】,以【dump.rdb】为例,该文件拥有者可以读写,但不可以执行;
  • 第二组为【加入此用户组的账号的权限】;
  • 第三组为【非本人且没有加入此用户组的其他账号的权限】

1.2 第二栏:表示有多少文件名连接到此节点

1.3 第三栏:表示该文件(或目录)的【拥有者账号】

1.4 第四栏:表示该文件的所属用户组

在Linux系统下,你的帐号会加入于一个或多个的群组中。举个例子,class1, class2, class3均属于
projecta这个群组,假设某个文件所属的群组为projecta,且该文件的权限如(-rwxrwx—), 则class1, class2,
class3三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。
但如果是不属于projecta的其他帐号,对于此文件就不具有任何权限了。

1.5 第五栏:表示该文件的容量大小,默认单位为Bytes

1.6 第六栏:表示该文件的创建日期或者是最近的修改日期

1.7 第七栏:表示该文件的文件名

比较特殊的是:如果文件名之前多一个“ . ”,则代表这个文件为“隐藏文件”。

1.8 举个栗子

1.8.1 权限为目录

drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/
  • 文件拥有者test1[rwx]可以在本目录中进行任何工作;
  • 而testgroup这个群组[r-x]的帐号,例如test2, test3亦可以进入本目录进行工作,但是不能在本目录下进行写入的动作;
  • 至于other的权限中[r–]虽然有r ,但是由于没有x的权限,因此others的使用者,并不能进入此目录!

1.8.2 权限为文件

-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai
  • test1 可以针对此文件具有可读可写可执行的权力;
  • 而同群组的test2, test3两个人与test1同样是testgroup的群组帐号,则仅可读可执行但不能写(亦即不能修改);
  • 至于没有加入testgroup这一个群组的其他人则仅可以读,不能写也不能执行

2、如何改变文件属性与权限

  • chgrp :改变文件所属群组

  • chown :改变文件拥有者

  • chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

2.1 改变所属群组:chgrp

chgrp即change group的缩写。请记得,要被改变的群组名称必须要在/etc/group文件内存在才行

命令:

chgrp [-R] dirname/filename

选项与参数:
-R: 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。

[root@localhost eye_v2]# chgrp java deploy/
[root@localhost eye_v2]# ls -al
总用量 0
drwxr-xr-x. 3 root root 20 3月  26 15:55 .
drwxr-xr-x. 4 root root 37 3月  26 15:55 ..
drwxr-xr-x. 5 root java 68 3月  27 10:18 deploy

2.2 改变文件拥有者:chown

chown即change owner的缩写。使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。

还可以顺便直接修改群组的名称

命令:

chown [-R] 帐号名称 文件或目录

chown [-R] 帐号名称:群组名称 文件或目录

选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更

范例:将 deploy 的拥有者改为guns这个帐号

[root@localhost eye_v2]# chown guns deploy/
[root@localhost eye_v2]# ls -l
总用量 0
drwxr-xr-x. 5 guns java 68 3月  27 10:18 deploy
范例:将 deploy 的拥有者与群组改回为root
[root@localhost eye_v2]# chown root:root deploy/
[root@localhost eye_v2]# ls -l
总用量 0
drwxr-xr-x. 5 root root 68 3月  27 10:18 deploy

2.3 改变权限:chmod

文件权限的改变使用的是chmod这个指令,但是,权限的设置方法有两种, 分别可以使用数字或者是符号来进行权限的变更。

2.3.1 数字类型改变文件权限

Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限, 先复习一下刚刚上面提到的数据:文件的权限字符为:“-rwxrwxrwx”, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
权限字符 分数
r 4
w 2
x 1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx—] 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= — = 0+0+0 = 0
所以该文件的权限数字就是770了
命令:
chmod [-R] xyz 文件或目录

选项与参数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

[root@localhost eye_wechat_v2]# ls -al nohup.out
-rw-------. 1 root root    14910 3月  27 10:20 nohup.out
[root@localhost eye_wechat_v2]# chmod 777 nohup.out 
[root@localhost eye_wechat_v2]# ls -al nohup.out 
-rwxrwxrwx. 1 root root 14910 3月  27 10:20 nohup.out

常常我们以vim编辑一个shell的文字批处理文件后,他的权限通常是 -rw-rw-r-- 也就是664, 如果要将该文件变成可执行文件,并且不要让其他人修改此一文件的话, 那么就需要-rwxrxr-x这样的权限,此时就得要下达:chmod 755 test.sh

如果有些文件你不希望被其他人看到,那么应该将文件的权限设置为例如:-rwxr-----,那就下达chmod 740 filename

再把刚刚nohup.out改回原来的-rw-------,那么就执行

[root@localhost eye_wechat_v2]# chmod 600 nohup.out 
[root@localhost eye_wechat_v2]# ls -al nohup.out 
-rw-------. 1 root root 14910 3月  27 10:20 nohup.out

2.3.2 符号类型改变文件权限

u, g, o来代表三种身份的权限。此外, a 则代表 all 亦即全部的身份,命令就可以如下图表示了【Linux】权限复习_第1张图片
假如我们要“设置”一个文件的权限成为“-rwxr-xr-x”时
  • user (u):具有可读、可写、可执行的权限;
  • group 与 others (g/o):具有可读与执行的权限。
[root@localhost eye_wechat_v2]# ls -al nohup.out 
-rw-------. 1 root root 14910 3月  27 10:20 nohup.out
注意, u=rwx,go=rx 是连在一起的,中间并没有任何空白字符
[root@localhost eye_wechat_v2]# chmod u=rwx,go=rx nohup.out 
[root@localhost eye_wechat_v2]# ls -al nohup.out 
-rwxr-xr-x. 1 root root 14910 3月  27 10:20 nohup.out
还原回去
[root@localhost eye_wechat_v2]# chmod u-x,go-rwx nohup.out 
[root@localhost eye_wechat_v2]# ls -al nohup.out 
-rw-------. 1 root root 14910 3月  27 10:20 nohup.out

如果不知道原先的文件属性,而我只想要增加该文件的每个人均可以写入的权限,那么只需要chmod a+w fileName
而如果是要将权限去掉而不更动其他已存在的权限呢?如要拿掉全部人的可执行权限,则chmod a-x fileName

3、目录与文件权限的意义

3.1 权限对文件的重要性

文件是实际含有数据的地方,包括一般文本文件、数据库内容档、二进制可可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的:

  • r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
  • w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
  • x (eXecute):该文件具有可以被系统执行的权限。

可执行(x)就必须要小心啦! 因为在Windows下面一个文件是否具有执行的能力是借由“ 扩展名 ”来判断的, 例如:.exe, .bat, .com 等等,但是在Linux下面,我们的文件是否能被执行,则是由是否具有“x”这个权限来决定的!跟文件名是没有绝对的关系的。

当你对一个文件具有w权限时,你可以具有写入/编辑/新增/修改文件的内容的权限, 但并不具备有删除该文件本身的权限。

总结:对于文件的rwx来说, 主要都是针对“文件的内容”而言,与文件文件名的存在与否没有关系

3.2 权限对目录的重要性

  • r (read contents in directory):表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
  • w (modify contents of directory):因为他表示你具有异动该目录结构清单的权限,也就是下面这些权限:
    • 创建新的文件与目录;
    • 删除已经存在的文件与目录(不论该文件的权限为何!)
    • 将已存在的文件或目录进行更名;
    • 搬移该目录内的文件、目录位置。
  • x (access directory):目录的x代表的是使用者能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录。举例来说,当你登陆Linux时, 你所在的主文件夹就是你当下的工作目录。而变换目录的指令是cd(change directory)

假设“文件是一堆文件数据夹”,所以你可能可以在上面写/改一些数据。而“目录是一堆抽屉”,因此你可以将数据夹分类放置到不同的抽屉去。 因此抽屉最大的目的是拿出/放入数据夹。

元件 内容 叠代物件 r w x
文件 详细资料data 文件文件夹 读到文件内容 修改文件内容 执行文件内容
目录 文件名 可分类抽屉 读到文件名 修改文件名 进入该目录的权限

3.2 .1 举个栗子

用root用户创建目录/文件并设置权限
[root@localhost deploy]# mkdir testing
[root@localhost deploy]# chmod 744 testing/
[root@localhost deploy]# touch testing/testing
[root@localhost deploy]# chmod 600 testing/testing 
[root@localhost deploy]# ls -ald testing testing/testing 
drwxr--r--. 2 root root 21 3月  27 17:48 testing
-rw-------. 1 root root  0 3月  27 17:48 testing/testing
然后用普通用户去读写
虽然有告知权限不足,但因为具有 r 的权限可以查询档名。由于权限不足(没有 x),所以会有一堆问号。
[root@localhost ~]# su zhaoyoung
[zhaoyoung@localhost root]$ cd /home/eye_v2/deploy/
[zhaoyoung@localhost deploy]$ ls -l testing/
ls: 无法访问testing/testing: 权限不够
总用量 0
-????????? ? ? ? ?            ? testing
因为不具有 x ,所以当然没有进入的权限
[zhaoyoung@localhost deploy]$ cd testing/
bash: cd: testing/: 权限不够
如果该目录属于用户本身,会有什么状况?

设置zhaoyoung用户对testing目录的权限

[root@localhost deploy]# chown zhaoyoung testing/
[root@localhost deploy]# ls -ld testing/
drwxr--r--. 2 zhaoyoung root 21 3月  27 17:48 testing/

再使用zhaoyoung去处理

[zhaoyoung@localhost deploy]$ cd testing/
[zhaoyoung@localhost testing]$ ls -l
总用量 0
-rw-------. 1 root root 0 3月  27 17:48 testing
[zhaoyoung@localhost testing]$ rm testing 
rm:是否删除有写保护的普通空文件 "testing"?
结论:透过上面这个简单的步骤,你就可以清楚的知道, x 在目录当中是与『能否进入该目录』有关, 至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建文件或目录, 是个很重要的参数。

3.3 用户操作功能与权限

假设两个目录如下:

  • /dir1/file1
  • /dir2

假设现在用zhaoyoung这个账号去处理。

操作动作 /dir1 /dir1/file1 /dir2 重点
读取 file1 内容 x r - 要能够进入 /dir1 才能读到里面的文件数据
修改 file1 内容 x rw - 能够进入 /dir1 且修改 file1 才行
执行 file1 内容 x rx - 能够进入 /dir1 且 file1 能运作才行
删除 file1 内容 wx - - 能够进入 /dir1 具有目录修改的权限即可
将 file1 复制到 /dir2 x r wx 要能够读 file1 且能够修改 /dir2 内的数据

你可能感兴趣的:(Linux)