Linux系统文件访问权限

系统文件访问权限

三种访问方式限制访问权限

  • 只允许用户自己访问;
  • 允许一个预先指定的用户组中的用户访问;
  • 允许系统中的任何用户访问。

三种不同的用户类型

  • 所有者(User简u)
  • 用户组(Group简g)
  • 其他用户(Others简o)

不同类型的用户被赋予9种权限组

用户共有9种的权限组,当不同类型的用户(即所有者、用户组和其他用户)被分别赋予以下三套权限的读、写及执行能力。
每一个用户都有它自身的读、写和执行权限
第一套权限控制访问自己的文件权限,即所有者权限。
第二套权限控制用户组访问其中一个用户的文件的权限。
第三套权限控制其他所有用户访问一个用户的文件的权限,

一般权限

我们使用以下命令可以看到

ls -lh

权限详解:

权限代表 详解
-rwx------ 文件所有者对文件具有读取、写入和执行的权限。
-rwxr―r– 文件所有者具有读、写与执行的权限,其他用户则具有读取的权限。
-rw-rw-r-x 文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
drwx–x--x 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。
drwx------ 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。

r w x 详解
r (Read,读取) 对于目录来说 可以查看目录下面的文件或者目录 对于文件来说 可以获取 文件内容
w (Write,写入) 对于目录来说 创建(删除)目录文件 都可以的 对于文件来说 不能修改文件内容
x (eXecute,执行) 对于 目录来说 是可以穿透的 但是对于文件只是 可用来执行的 执行程序 脚本

我们通常用的这条命令来进行文件提权

chmod ABC filename 
A位置 B位置 C位置分别代表
     A     B       C
   User  Group   Other

实际上ABC三个数字(例777)是二进制

常用规则如下:

如果可读、可写、可运行,就表示为二进制的111,转换成十进制就是7
如果可读、可写、不可运行,就表示为二进制的110,转换成十进制就是6
如果可读、不可写、可运行,就表示为二进制的101,转换成十进制就是5
如果可读,权限是二进制的100,十进制是4
如果可写,权限是二进制的010,十进制是2
如果可运行,权限是二进制的001,十进制是1
具备多个权限,就把相应的 4、2、1 相加就可以了:
若要 rwx 则 4+2+1=7
若要 rw- 则 4+2=6
若要 r-x 则 4+1=5
若要 r-- 则 =4
若要 -wx 则 2+1=3
若要 -w- 则 =2
若要 --x 则 =1
若要 --- 则 =0

为不同的角色分配不同的权限,放在一起,就出现 777、677这样的数字

rwt rwT rws rwS 特殊权限

如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置.

首先 了解三个概念

setuid: 该位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。

例:用普通用户运行passwd命令来更改自己的口令

我们都知道只有通过root权限才能更改
但还可以有另一种方法

ls -l usr/bin/passwd

可以看到
11

所以可以通过修改/etc/passwd,来劲儿修改自己口令,因为/usr/bin/passwd 文件已经设置了setuid 权限位(-rwsr-xr-x 中的s),这时普通用户能临时变成root

setgid  该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.
sticky bit  该位可以理解为防删除位

一个文件是否可以被某用户删除 主要取决于该文件所属的组是否对该用户具有写权限. 如果没有写权限 则这个目录下的所有文件都不能被删除 同时也不能添加新的文件 如果希望用户能够添加文件但同时不能删除文件 则可以对文件使用sticky bit位 设置该位后 就算用户对目录具有写权限 也不能删除该文件

标志常见用法

标志与文件权限的命令是一相似的, 都是 chmod. 有两种方法来实现
第一种

chmod u+s temp    为temp文件加上setuid标志. (setuid 只对文件有效)

chmod g+s tempdir 为tempdir目录加上setgid标志 (setgid 只对目录有效)

chmod o+t temp    为temp文件加上sticky标志 (sticky只对文件有效)

第二种

采用八进制方式   对一般文件通过三组八进制数字来置标志  如 666 777 644等 如果设置这些特殊标志 则在这组数字之外外加一组八进制数字 如 4666  2777等  这一组八进制数字三位的意义如下

ABC

A - setuid位, 如果该位为1, 则表示设置setuid 4---

B - setgid位, 如果该位为1, 则表示设置setgid 2---

C - sticky位, 如果该位为1, 则表示设置sticky 1---

设置完这些标志后, 可以用 ls -l 来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如

rwsrw-r-- 表示有setuid标志

rwxrwsrw- 表示有setgid标志

rwxrw-rwt 表示有sticky标志

那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)

切换路径时常见符号代表含义

”.”代表当前目录;
”..”代表上一层目录,当前目录的父目录;
”-“代表前一个目录,我刚才从哪个目录cd过来;
”~”代表当前用户的宿主目录;
”/”代表根目录;
”$”代表普通用户的命令行提示符;
”#”代表root用户的命令行提示符;
”*”代表万能匹配符。 
5 个赞

服务器资源由ZeptoVM赞助

Partners Wiki Discord