文档章节

文件访问和共享的方法介绍

 老孟的Linux私房菜
发布于 10/16 00:39
字数 1293
阅读 13
收藏 0

在上一篇文章中,你了解到文件有三个不同的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最终一个集合适用于其他所有人。在长列表(ls -l)中这些权限使用符号模式显示在屏幕上。

每个集合都有 r、w 和 x 条目,表示特定用户(所有者、组成员或其他)是否可以读取、写入或执行该文件。但是还有另一种表达这些权限的方法:八进制模式。

你已经习惯了十进制编号系统,它有十个不同的值(0 到 9)。另一方面,八进制系统有八个不同的值(0 到 7)。在表示权限时,八进制用作速记来显示 r、w 和 x 字段的值。将每个字段视为具有如下值:

r = 4
w = 2
x = 1

现在,你可以使用单个八进制值表达任何组合。例如,读取和写入权限(但没有执行权限)的值为 6。读取和执行权限的值仅为 5。文件的 rwxr-xr-x 符号权限的八进制值为 755。

与符号值类似,你可以使用八进制值使用 chmod 命令设置文件权限。以下两个命令对文件设置相同的权限:

chmod u=rw,g=r,o=r myfile1
chmod 644 myfile1

特殊权限位

文件上还有几个特殊权限位。这些被称为 setuid(或 suid)、setgid(或 sgid),以及粘滞位sticky bit(或阻止删除位delete inhibit)。 将此视为另一组八进制值:

setuid = 4
setgid = 2
sticky = 1
除非该文件是可执行的,否则 setuid 位是被忽略的。如果是可执行的这种情况,则该文件(可能是应用程序或脚本)的运行就像拥有该文件的用户启动的一样。setuid 的一个很好的例子是 /bin/passwd 实用程序,它允许用户设置或更改密码。此实用程序必须能够写入到不允许普通用户更改的文件中(LCTT 译注:此处是指 /etc/passwd 和 /etc/shadow)。因此它需要精心编写,由 root 用户拥有,并具有 setuid 位,以便它可以更改密码相关文件。

setgid 位对于可执行文件的工作方式类似。该文件将使用拥有它的组的权限运行。但是,setgid 对于目录还有一个额外的用途。如果在具有 setgid 权限的目录中创建文件,则该文件的组所有者将设置为该目录的组所有者。

最后,虽然文件粘滞位没有意义会被忽略,但它对目录很有用。在目录上设置的粘滞位将阻止用户删除其他用户拥有的该目录中的文件。

在八进制模式下使用 chmod 设置这些位的方法是添加一个值前缀,例如 4755,可以将 setuid 添加到可执行文件中。在符号模式下,u 和 g 也可用于设置或删除 setuid 和 setgid,例如 u+s,g+s。粘滞位使用 o+t 设置。(其他的组合,如 o+s 或 u+t,是没有意义的,会被忽略。)

http://www.51cto.com/it/news/2019/1014/15367.html
https://article.pchome.net/content-2101735.html
http://www.pcpop.com/article/6067769.shtml

共享与特殊权限

回想一下前一篇文章中关于需要共享文件的财务团队的示例。可以想象,特殊权限位有助于更有效地解决问题。原来的解决方案只是创建了一个整个组可以写入的目录:

drwxrwx---. 2 root finance 4096 Jul 6 15:35 finance
此目录的一个问题是,finance 组成员的用户 dwayne 和 jill 可以删除彼此的文件。这对于共享空间来说不是最佳选择。它在某些情况下可能有用,但在处理财务记录时可能不会!

另一个问题是此目录中的文件可能无法真正共享,因为它们将由 dwayne 和 jill 的默认组拥有 - 很可能用户私有组也命名为 dwayne 和 jill,而不是 finance。

解决此问题的更好方法是在文件夹上设置 setgid 和粘滞位。这将做两件事:使文件夹中创建的文件自动归 finance 组所有,并防止 dwayne 和 jill 删除彼此的文件。下面这些命令中的任何一个都可以工作:

sudo chmod 3770 finance
sudo chmod u+rwx,g+rwxs,o+t finance
该文件的长列表现在显示了所应用的新特殊权限。粘滞位显示为 T 而不是 t,因为 finance 组之外的用户无法搜索该文件夹。
drwxrws--T. 2 root finance 4096 Jul 6 15:35 finance

© 著作权归作者所有

粉丝 5
博文 73
码字总数 103678
作品 0
东城
技术主管
私信 提问
[翻译]Android教程-保存数据-保存键值对

来源: http://developer.android.com/training/basics/data-storage/index.html http://developer.android.com/training/basics/data-storage/databases.html 学习本教程的前置条件: Andr......

LeoXu
2014/05/16
2.3K
0
System.IO之内存映射文件共享内存

内存映射文件是利用虚拟内存把文件映射到进程的地址空间中去,在此之后进程操作文件,就像操作进程空间里的地址一样了,比如使用c语言的memcpy等内存操作的函数。这种方法能够很好的应用在需...

长平狐
2012/06/08
200
0
centos如何挂载Windows共享文件

最为linux的初学者,自我感觉都会使用Windows中的文件。在Windows与linux之间互传文件是一个问题。本方法介绍的是在linux下挂载Windows共享文件夹的方法来实现的 首先安装VMware Tools(如果...

卜谷鸟
2016/10/28
0
0
iOS开发中权限再度梳理

疯狂 前言 上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求。但是,这些方法并不全面,不能涵...

Jack_lin
2017/04/12
0
0
[续]iOS开发中的这些权限,你搞懂了吗?

疯狂 前言 上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求。但是,这些方法并不全面,不能涵...

Jack_lin
2017/04/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Vue.js学习笔记2 - better-scroll滚动条

better-scroll滚动条 使用作者自制的better-scroll库,实现内容的滚动。 先在package.json加上依赖: "better-scroll": "^0.1.7" 接着再npm install安装依赖。 import BScroll from 'better-......

swanf
55分钟前
7
0
设计模式之适配器模式

定义 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工 作。 UML类图 适配器分为两种,类适配器与对象适配器。 类适配器的UML图...

陈年之后是青葱
今天
8
0
教你玩转Linux—磁盘管理

导读 Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了...

问题终结者
今天
11
0
KMP

字符串匹配算法 针对被匹配字段生产一个部分匹配表 A B C D A B D 0 0 0 0 1 2 0 部分匹配表 熟悉前缀与后缀的概念 ,“部分匹配表” 的生产就是根据前缀、后缀的最苍的共有元素的长度 前缀:...

鬼才王
昨天
6
0
快速搭建Jenkins集群

关于Jenkins集群 在Jenkins上同时执行多个任务时,单机性能可能达到瓶颈,使用Jenkins集群可以有效的解决此问题,让多台机器同时处理这些任务可以将压力分散,对单机版Jenkins的单点故障的隐...

程序员欣宸
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部