文件所有权和文件存取权

2024-02-14 16:48
文章标签 存取 所有权

本文主要是介绍文件所有权和文件存取权,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文件所有权和文件存取权

分类: linux

对于普通文件和目录而言,名字和存取权限是一样的,所以下面的内容不仅适用于文件,它也同时适用于目录。
  
  文件
  
  任何文件都有所有者和所有者组,这可以用“ls -l”显示出来(“-l”选项表示以长格式显示)。例如,执行如下命令:
  
  $ ls -l junk 
  
  -rwx------ 1 yogin inca 27 Apr 24 14:12 junk 
  
  将显示文件junk的所有者为yogin,所有者所在组为inca,所有者一般是文件的创建者或拷贝此文件的人,一般说来,只有文件的所有者和root能删除该文件(其他用户只有被授于了相应权限后才行)。
  
  文件的所有者可以通过命令chown(改变所有者)和chgrp(改变所处的组)来改变,但是这些命令通常是root使用的。例如执行以下两条命令:
  
  # chown peter junk 
  
  # chgrp peter junk 
  
  显示改变为:
  
  $ ls -l junk
  
  -rwx------ 1 peter peter 27 Apr 25 20:27 junk 
  
  在root为其他用户拷贝/移动文件后,改变文件所有者是十分有用的。在您以root身份做完了工作后,您应该记住将文件的所有者改为恰当的用户。
  
  文件存取权限
  
  现在,任何用户可以把自己所有的文件的三种权限读(r)、写(w)和执行(x)赋于其它三类用户,这些用户分别为文件所有者(u),同组用户(g)和系统内的任何用户(o)。
  
  您可以使用以下命令来检查文件的存取权限。
  
  $ ls –l 文件名
  
  如果该文件对所有用户(所有者,同组,其他人)都具备所有的权限(读、写、执行),则会显示如下消息:
  
  -rwxrwxrwx 
  
  跳过第一个“-”(如果为“d”则代表其为一目录),其中前三个字母代表文件所有者的权限,第二组三个字母代表与所有者同组人的权限,第三组为其他用户的权限。如果没授予相应权限,则以“-”替代。
  
  在下面的示例中,文件的所有者为root,他对文件具有读、写和执行权限,但同组用户和其他用户对该文件只具备读和执行权限。
  
  drwxr-xr-x 2 root root 21504 Apr 24 19:27 dev
  
  第一个字母“d”,表示该文件为一个目录。
  
  您可以修改您所有的文件的权限(使用命令chmod),例如,下面的命令将为所有用户赋予读文件junk权限。
  
  $ chmod a+r junk 
  
  在上例中,除了“a”以外,还可以用“u”、“g”或“o”(分别代表所有者、同组用户和其他用户)。除了“+”(代表增加)外,还可以用“-”、“=”分别禁止或者设置某个权限,除了“r”,还可以设置“w”和“x”权限。
  
  例如,下面的命令将禁止其他用户对文件junk的执行权限。
  
  $ chmod o-x junk
  
  除了使用字母“r”、“w”和“x”设置权限,您也可以使用数字代替,其中,读(read)的权限值为4,写(write)的权限值为2,执行(execute)的权限值为1。所以,4代表“只读”,5代表“读和执行”,6代表“读和写”,7代表“读、写和执行”。
  
  例如,下面的命令将会对文件所有者和同组用户赋予全部权限,而对其他用户没有任何权限。
  
  $ chmod 770 junlc 
  
  而命令
  
  $ chmod 666 junk
  
  将会给所有用户读和写的权限。
  
  $ chmod 411 junk
  
  上述命令赋予文件所有者读权限,对同组用户和其他用户赋予执行权限。
  
  默认的文件 配置 权限
  
  在一个新文件被创建后,它有一个默认的权限配置,该配置一般为“-rw-r--r—”。就是说,文件所有者可以读、写该文件,同组用户和其他用户只能读文件。同样,在默认配置中,用户不能读其他用户目录中的内容,因为每一个用户主目录的权限都被设定为“drwx------”。
  
  您可以使用下面的命令检查新建文件的默认存取权限。
  
  $ umask –S
  
  选项-S表示用字符的形式显示结果。同样,您也可以修改新建文件的默认文件权限,命令如下:
  
  $ umask u=rwx,g=,o=
  
  它会在创建新文件时给文件所有者以全部权限,而同组用户及其他用户没有任何权限。
  
  在umask中的数字设置方式与chmod命令相反,它代表的是要禁用的权限。因此,umask 000会给全部用户赋予新创建文件的全部权限,而命令umask 077会给文件所有者全部权限而其他人什么权限也没有。
  
  如何设置SUID位
  
  如果MP3播放器在工作时总被打断,那可能是因为它没有被分配足够多的运行时间。可能您同时运行了太多CPU重负荷的程序,也可能是MP3播放器的运行优先级不够高(优先级可以用nice命令来调整,关于nice的详细说明请用命令man nice获取)。
  
  由于root身份运行的程序比其他用户程序具有比较高的优先级,所以如果以root身份来运行MP3播放器,可能播放就正常了。解决MP3播放器的问题是为其设置SUID位,使其他用户在使用播放器时的“有效用户ID”也为root。
  
  例如下面的命令对x11amp设置其SUID位。
  
  $ chmod a+s x11amp 
  
  要检查结果,输入如下:
  
  $ ls -l x11amp
  
  -rwsr-sr-x 1 root root 319172 Mar 13 1998 x11amp
  
  其中第一个“s”表示设置了用户的SUID位,第二个“s”表示设置了组SUID位。因此,任何人在执行x11amp时,其有效用户ID为该程序的所有者,而有效组ID为该程序所有组的ID,在本例中,两者都为 root。
  
  设置SUID可能会给系统带来安全漏洞。上一个示例是在一个封闭的局域网环境中进行的,而且程序来源也很清楚,才设置了SUID位。

 

 

suid意味着如果A用户对属于他自己的shell脚本文件设置了这种权限,那么其他用户在执行这个脚本的时候就拥有了A用户的权限。所以,如果root用户对某一脚本设置了这一权限的话则其他用户执行该脚本的时候则拥有了root用户权限。同理,guid意味着执行相应脚本的用户则拥有了该文件所属用户组中用户的权限。

 

如果希望设置suid,那么就将相应的权限位之前的那一位设置为4;如果希望设置guid,那么就将相应的权限位之前的那一位设置为2;如果希望两者都置位,那么将相应的权限位之前的那一位设置为4+2。

 

 

这篇关于文件所有权和文件存取权的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/709067

相关文章

Rust的常数、作用域与所有权

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust到底值不值得学,之一  -CSDN博客 Rust到底值不值得学,之二-CSDN博客 Rust的数据类型-CSDN博客 3.7  常数的数据类型 在Rust语言中,变量有类型,常量也有类型。我们知道,在定义const常量的时候,就要

理解Rust中的所有权与Slice类型

一、Rust的所有权模型 所有权是Rust的核心概念,它决定了程序如何管理内存。在Rust中,所有权规则如下: 每一个值都拥有一个所有者。每个值在任一时刻只能有一个所有者。当所有者超出作用域时,值将被自动释放。 通过这些规则,Rust确保了程序在不需要垃圾回收器的情况下,能够在编译时保证内存安全。 举例:所有权的基本使用 fn main() {let s1 = String::from(

思考(六十六):无状态服务的数据存取与事务处理

痛点一 每次存取数据量太大,影响性能 比如,背包数据,每次请求操作都存取背包数据,会影响机房内流量与数据库性能 痛点二 一次请求,通常会涉及多次数据存取,程序 panic 会导致只提交部分数据到数据库 这涉及到无状态服务如何让便利的逻辑编写同时兼具事务 内置 LRUCache 解决大数量量存取 无状态服务,主要是解绑数据与服务进程间的一一对应关系 即请求到达任何一个服务进程,都能正

localStorage存值取值以及存取JSON,以及基于html5 localStorage的购物车

localStorage.setItem("key","value");//存储变量名为key,值为value的变量       localStorage.key = "value"//存储变量名为key,值为value的变量       localStorage.getItem("key");//获取存储的变量key的值www.it165.net       localStorage.key

golang基础-goroutine初识、chan存取、goroutine和chan相结合、关闭chan、range取、单元测试

goroute初识channel存取开启goroute实现chan之间的同步存取channel关闭range 单元测试 goroute初识 package mainimport ("fmt"// "os""time")func test(){var i int for {fmt.Println(i)time.Sleep(time.Second)i++}}func

Modern C++——无所有权指针的安全性保障

大纲 C++98中的实现Modern C++的实现总结 C++98中的实现 在C++98标准中,当涉及到多线程环境时,对共享资源的访问需要特别小心以避免数据竞争(data race)问题。数据竞争是指两个或多个线程同时访问同一内存位置,且至少有一个线程正在修改该内存位置,同时又没有适当的同步机制(如互斥锁、信号量等)来协调这些访问的情况。 在C++98中,标准库本身并不直接支持

Android解决activity、service间使用sharePreference进行值存取不同步

问题:今天在代码中使用sharePreference在activity对值进行存,在service中对值进行取的过程中发现,不能在service正确地取出保存在sharePreference中的值。 在参考网上诸多关于这个问题的解决方案为:将sharePreference中getSharedPreferences(String name,int mode)中的mode从MODE_APPEND修改

H5脱单盲盒交友解密授权版/分销提现/存取小纸条盲盒匹配管理平台/免签支付/可封装APP/带教程

源码介绍: 本套源码为独立版,前端是h5的,有三套模板可切换,后台是thinkphp的框架。有文档搭建教程。有代理商模式 可付费购买代理商 有分销功能 成为代理商后,可获取下级分成。本系统免公gz号支持第三方免签约支付支持打包安卓+IOS双端 支付接口:wx官方接口+易支付+虎皮椒+XORPAY主要盈利点:开启收费开启盲盒 投放付费 条件筛选付费!可设置付费购买代理(代理就是摊主红娘)只是去除

【Python Opencv 官方教程 】1.图片的存取显示

本系列论文翻译自opencv官方文档 opencv_python tutorial introduction部分略过,install过程略,由于本人的python环境采用的anaconda集成环境,opencv的安装也是采用的pip安装,这里不再赘述。 本节从图像的读取,显示开始学习,目标: 学会读取、显示以及存储图像将会学到以下几个函数:cv2.imread()、cv2.imsho

STM32学习记录-07-DMA直接存储器存取

1 DMA简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源 12个独立可配置的通道: DMA1(7个通道), DMA2(5个通道) 每个通道都支持软件触发和特定的硬件触发 STM32F103C8T6 DMA资源:DMA1(7个通道) 2 存储器映像 ROM只读