文件安全与权限

文件

对创建的文件,系统会保存文件的全部信息,包括

  • 文件的位置
  • 文件类型
  • 文件长度
  • 文件的拥有用户与可访问的用户
  • i节点
  • 文件的修改位置
  • 文件的权限位

使用 ls -l 去查看文件的属性:

total 60
lrwxrwxrwx.  1 root root     7 Apr 26 15:48 bin -> usr/bin
dr-xr-xr-x.  5 root root  4096 Apr 26 16:01 boot
drwxr-xr-x  19 root root  2960 Oct  9 10:52 dev
drwxr-xr-x. 76 root root  4096 Oct  9 10:52 etc
drwxr-xr-x.  2 root root  4096 Apr 11  2018 home
lrwxrwxrwx.  1 root root     7 Apr 26 15:48 lib -> usr/lib
lrwxrwxrwx.  1 root root     9 Apr 26 15:48 lib64 -> usr/lib64
drwx------.  2 root root 16384 Apr 26 15:48 lost+found
drwxr-xr-x.  2 root root  4096 Apr 11  2018 media
drwxr-xr-x.  2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x.  2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x  82 root root     0 Oct  9 10:52 proc
dr-xr-x---.  4 root root  4096 Apr 26 16:02 root
drwxr-xr-x  24 root root   640 Oct  9 10:52 run
lrwxrwxrwx.  1 root root     8 Apr 26 15:48 sbin -> usr/sbin
drwxr-xr-x.  2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x  13 root root     0 Oct  9  2020 sys
drwxrwxrwt.  9 root root  4096 Oct  9 10:53 tmp
drwxr-xr-x. 13 root root  4096 Apr 26 15:48 usr
drwxr-xr-x. 19 root root  4096 Apr 26 07:54 var
  • total :代表所有文件占的空间

  • 第一列(例如dr-xr-xr-x) : 文件类型(参照下一节)及__文件的权限位__,除去第一位的字符,后面的9位是9个权限位,设定用户对文件的访问权限,后面9位分为三组:

    1. 前三位:文件属主权限
    2. 中间三位:同组用户权限
    3. 后三位:其他用户权限

    代表相应的权限被禁止

  • 第二列:代表文件___硬链接___的数目

  • 第三列:文件的__属主__

  • 第四列:文件的属主所在的缺省组

  • 第五列:用字节表示的文件长度

  • 第六列:文件的更新时间

  • 第七列:文件名

文件类型

ls -l列出的第一列第一位代表文件类型:

  • d:目录
  • l:符号连接
  • s:套接字文件
  • b:块设备文件
  • c:字符设备文件
  • p:命名管道文件
  • – :普通文件,即不属于以上文件的文件

权限

创建一个文件 :touch <filename>

这里键入命令 touch myfile,然后键入命令 ls -l

total 0
-rw-r--r-- 1 root root 0 Oct  9 11:19 myfile

根据之前说的,那么 -rw-r--r--则定义了:

  1. 这是一个普通文件
  2. rw-代表了文件属主拥有的权限
  3. r--代表了文件属主缺省组的权限
  4. r--代表了其他用户的权限

每一个组的三个权限位:

  • r:读权限
  • w:写权限
  • x:执行该脚本或程序的权限

改变权限位(使用chmod命令)

chmod命令分为两种格式:

符号模式

格式为:chmod [who] operator [permission] filename

who的含义

u 文件属主权限

g 同组用户权限

o 其他用户权限

a 所有用户(文件属主、同组用户及其他用户)。

operator的含义:

+ 增加权限

– 减少权限

= 设定权限

permission的含义

r 读权限

w 写权限

x 执行权限

s 文件属主和组 set-ID

t 粘性位(通常对目录来说,这个目录下的文件只有属主才能删除,即使同组用户有相等权限。对文件来说,会被放在虚拟存储进行执行)

l 给文件加锁,使其他用户无法访问

u,g,o 针对文件属主、同组用户及其他用户的操作

使用举例

myfile初始权限

-rw-r--r-- 1 root root 0 Oct  9 11:19 myfile

执行 chmod u+x myfile chmod o-w myfile

权限变为

-rwxr--r-- 1 root root 0 Oct  9 11:19 myfile

绝对模式

命令形式为

chmod [mode] file

mode是一个八进制数

在绝对模式中,每一个权限位用一个八进制数代表,如下表

八进制数 含义
0400 文件属主可读
0200 文件属主可写
0100 文件属主可执行
0040 同组用户可读
0020 同组用户可写
0010 同组用户可执行
0004 其他用户可读
0002 其他用户可写
0001 其他用户可执行

设定权限时,根据表中各个要设定的权限加起来就可以得到相应的权限表示

比如 777 就是所有权限

可以通过 chmod -R 去递归的设置目录树的权限

目录权限

目录的权限值和文件有所不同

r:可以列出该目录中的文件

w:可以在目录下创建或者删除文件

x:可以搜索或进入该目录

如果我对目录用户设置--x,那么我无法列出目录中的文件,但是我只要知道路径和文件名,仍然可以执行里面的文件。

suid/guid

这个权限比较特殊,系统提供商可能会不允许实现这一位或忽略这一位。

这个权限会导致euid/egid 被 suid/guid覆盖,从而使任何进程都将拥有程序属主的权限

这个权限可以通过符号方式设置,或者设置权限数字的前面加上一个4设置suid,加上2设置guid,6设置两个

chown && chgrp

把文件的所有权交给另一个/etc/passwd文件中存在的合法用户

chown

chown命令的一般形式为:

chown -R -h owner file

-h指不改变该链接指向的目标文件

-R意味着对子目录下的文件执行同样的操作

例子:myfile的权限从bin转给了root

[root@iZ2ze5p0lt0ld1jussmap7Z ~]# ls -l
total 0
-rwxr--r-- 1 bin root 0 Oct  9 11:19 myfile
[root@iZ2ze5p0lt0ld1jussmap7Z ~]# chown root myfile
[root@iZ2ze5p0lt0ld1jussmap7Z ~]# ls -l
total 0
-rwxr--r-- 1 root root 0 Oct  9 11:19 myfile

chrgp

同理,是转移用户组,命令只是把chown换为chrgp,不再测试

找出组的命令

  1. groups 找出当前用户的属于组
  2. id 查询uid,gid,groups
  3. groups 找出这个username 用户所在组

缺省值

umask:每个用户的unmask确定了创建文件的缺省权限,防止非同组用户对你有不希望的权限

符号链接(软链接)

ln [-s] source_path target_path

例子:创建myfile的符号链接

[root@iZ2ze5p0lt0ld1jussmap7Z ~]# ls
myfile
[root@iZ2ze5p0lt0ld1jussmap7Z ~]# ln -s myfile temp
[root@iZ2ze5p0lt0ld1jussmap7Z ~]# ls -l
total 0
-rwxr--r-- 1 root root 0 Oct  9 11:19 myfile
lrwxrwxrwx 1 root root 6 Oct 12 17:37 temp -> myfile

其实他就是一种指向文件的指针

还有一种连接是硬链接,暂时不表

链接目录权限会是777 但是实际权限并未改变

版权声明:本文为JethroYu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/JethroYu/p/13804232.html