小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Computer & DL
  4. Linux
  5. 正文

《鸟哥的Linux私房菜》(基础篇)笔记整理(第6章)Part.2

2018年12月23日 933点热度 0人点赞 0条评论

四、文件与目录的默认权限和隐藏权限

1.文件默认权限:umask

当建立一个新的文件或目录的时候,它的默认权限跟umask有关,umask就是指定“目前用户在监理文件或目录时候的权限默认值”,那么如何得知或者设定umask呢?

[root@study ~]# umask

0022             <==与一般权限有关的是后面三个数字

[root@study ~]# umask -S

u=rwx,g=rx,o=rx

查询的方式有两种,如上所示。一是直接输入umask,然后显示出数字形态的权限设定。一种是加入-S,就会以符号类型的方式显示出权限。

预设情况如下:

(1)若用户建立为“文件”,则预设没有可执行权限,亦只有rw两个权限,所以最大为666,即-rw-rw-rw-。

(2)若用户建立为“目录”,由于x与是否可以进入该目录有关,所以所有权限均开放,即为777,预设权限如下:drwxrwxrwx。

要注意的是,umask指的是该默认值需要减掉的权限。我们举例umask值为022,那么用户建立文件和目录时权限如下:

预设权限 实际权限
建立文件 -rw-rw-rw-(666) -rw-r--r--
建立目录 drwxrwxrwx(777) drwxr-xr-x

如果想要修改umask的值,只需要执行下面的语句即可:

umask xxx

例如我想要给新建的文件同用户组用户都可以编辑的时候,那么我们就不能拿掉group里面的w权限,所以我们需要设计umask为002(包括但不限于这个,只需要拿掉group中的w即可)。

umask 002

2.文件隐藏属性chattr, lsattr

(1)chattr

注意:chattr指令只能在Ext2/Ext3/Ext4的 Linux 传统文件系统上面完整生效,其他的文件系统可能就无法完整的支持这个指令。

[root@study ~]# chattr [+-=][ASacdistu] 文件或目录名称

选项与参数:

+:增加某一个特殊参数,其他原本存在参数则不动。

-:移除某一个特殊参数,其他原本存在参数则不动。

=:设定一定,且仅有后面接的参数。

A:当设定了A这个属性时,若你有存取此文件(或目录)时,他的访问时间atime将不会被修改,可避免I/O较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)

S:一般文件是异步写入磁盘的(原理请参考前一章sync的说明),如果加上S这个属性时,当你进行任何文件的修改,该更动会『同步』写入磁盘中。

a:当设定a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设定这属性。

c:这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)

d:当dump程序被执行的时候,设定d属性将可使该文件(或目录)不会被dump备份。

i:这个i可就很厉害了!他可以让一个文件『不能被删除、改名、设置连接也无法写入或新增数据!』对于系统安全性有相当大的帮助!只有 root 能设定此属性。

s:当文件设定了s属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔!

u:与s相反的,当使用u来配置文件案时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔!

注意:

(1)属性设定常见的是a与i的设定值,而且很多设定值必须要身为root才能设定。

(2)xfs文件系统仅支援 AadiS而已。

这个指令非常重要,特别是在系统的数据安全上面。由于这些属性都是隐藏的属性,所以需要使用下面的lsattr才能看到这个属性。

另外,如果是log file这种登录文件,就更需要+a这个属性,它可以增加,但不能修改或者删除旧的数据,非常适合log file。

(2)lsattr

[root@study ~]# lsattr [-adR] 文件或目录

选项与参数:

-a :将隐藏文件的属性也展示出来;

-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;

-R :连同子目录的数据也一并列出来!

 

如图4.1所示,第一行新建了一个名为attrtest的文件,第二行展示其隐藏属性(使用lsattr),看到其并没有设置chattr能够设置的属性,然后给其设置一个i属性(无法新增、修改、删除),然后执行一下删除操作,发现就连root用户都无法删除,这个时候使用lsattr查看下其隐藏属性,发现确实为i。最后删除其i属性,然后再次利用lsattr查看其属性,发现已经没有了i属性,并且可以被成功删除。

使用这两个指令要特别小心,否则可能会出现很大的困扰。

图4.4 chattr和lsattr演示

(3)文件特殊权限:SUID, SGID, SBIT

我们在terminal中执行ls -l /会发现有两个文件夹会有下面的结果:

drwxrwxrwt. 14 root root 4096 Jun 16 01:27 /tmp

-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

这个s和t就是SUID/SGID的东西。

Set UID简称SUID,它有这样的功能:

①SUID 权限仅对二进制程序(binary program)有效;

②用户对于该程序需要具有x的可执行权限;

③本权限仅在执行该程序的过程中有效 (run-time);

④用户将具有该程序拥有者(owner)的权限。

Set GID简称SGID。与SUID不同,SGID是针对文件或目录来设置的。SGID有如下功能:

①SGID对二进制程序有用;

②程序用户对于该程序来说,需具备x的权限;

③用户在执行的过程中将会获得该程序用户组的支持。

SGID用在目录上的时候,它具有以下功能:

①用户若对于此目录具有r与x的权限时,该用户能够进入此目录;

②用户在此目录下的有效群组(effective group)将会变成该目录的群组;

③用途:若用户在此目录下具有 w 的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同。

Sticky Bit,简称SBIT,目前只针对目录有效。它对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件。

(4)SUID/SGID/SBIT权限设定

SUID为4,SGID为2,SBIT为1。设定的时候,数字在RWX数字之前。

特别要说一个例子,如下所示:

[root@study tmp]# chmod 7666 test; ls -l test <==空的SUID/SGID权限-rwSrwSrwT 1 root root 0 Jun 16 02:53 test

原因:

因为s与t都是取代x这个权限的,但是我们下达的是7666。也就是说,user/group/others都没有x这个可执行的标志。所以,这个S和T代表的就是“空”。

除了数字表示法,也可以用符号法来处理。SUID是u+s,SGID是g+s,SBIT是o+t。

(5)查看文件类型:file

如果想知道某个文件的基本数据,例如它是ASCII、data,还是binary文件,且其中有没有使用到动态函数库等信息,就可以利用file命令来查看。例如图4.5所示。

图4.5 file查看举例

五、命令与文件的查询

我们常常需要知道那个文件放在哪里,才能够对该文件进行一些修改或维护等动作。有些时候某些软件配置文件的文件名是不变的,但是各分发版本放置的目录则不同。此时我们就需要利用一些搜索命令将该配置文件的完整文件名找到,这样才能进行修改。

1.脚本文件的文件名查询

我们知道在终端模式当中,连续输入两次[tab]按键就能够知道用户有多少命令可以下达。但是我们不知道这些命令的完整文件名放在哪里。这个时候,我们就可以通过which或type来寻找。

(1)which(寻找“执行文件”)

[root@study ~]# which [-a] command

选项或参数:

-a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称。

如图5.1所示的举例。

图5.1 which举例

注意,这个命令是根据“PATH”这个环境变领所规范的路径去搜索“执行文件”的文件名。

(2)type

type将在后续来讲,在此就不说了。

2.文件名的查找

通常来说,find命令不常用,因为速度很慢。一般常用的是whereis和locate,前者是只找系统中某些目录底下的文件,而后者是利用数据库来搜索文件名。

(1)whereis

[root@study ~]# whereis [-bmsu] 文件或目录名

选项与参数:

参数 功能 参数 功能
-l 列出whereis会去查询的几个主要目录 -b 只找二进制格式的文件
-m 只找在说明文件manual路径下的文件 -s 只找source来源文件
-u 搜索不在上述项目当中的其他特殊文件

如图5.2所示,第一个例子是找出ifconfig这个文件名,第二个例子是找出跟passwd的文件名,第三个例子是在man page中找到passwd的文件名。

 

图5.2 whereis演示

whereis只是查询/bin/sbin、/usr/share/man下的man page文件等几个比较特定的目录。具体想知道whereis查了多少目录,可以使用whereis -l来确认。

(2)locate/updatedb

[root@study ~]# locate [-ir] keyword

选项与参数:

-i:忽略大小写的差异;

-c:不输出文件名,仅计算找到的文件数量

-l:仅输出几行的意思,例如输出五行则是 -l 5

-S:输出locate所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等

-r:后面可接正规表示法的显示方式

我们要记住无论是whereis还是locate都是有局限性的。whereis只能在所能够检索的目录下检索文件,所以目录之外的文件搜索不到;而locate只能在建立的数据库中查找(数据库在/var/lib/mlocate),而这个数据库并不是实时更新,是定期更新,所以有可能刚建立的文件并不能搜索到。

解决locate的方法就是使用updatedb命令来手动更新数据库。使用方法非常简单,直接输入“updatedb”,然后回车即可。然后updatedb就会去读取/etc/updated.conf这个配置文件的设置,去搜索文件名,然后更新数据库。

如图5.3所示,是locate的演示。

图5.3 locate演示

(3)find

[root@study ~]# find [PATH] [option] [action]

选项与参数:

1.与时间有关的选项:共有-atime, -ctime与-mtime。我们以-mtime说明:

-mtime n :n为数字,意义为在n天之前的“一天之内”被更动过内容的文件;

-mtime +n :列出在n天之前(不含n天本身)被更动过内容的文件文件名;

-mtime -n :列出在n天之内(含n天本身)被更动过内容的文件文件名。

-newer file :file 为一个存在的文件,列出比file还要新的文件文件名

2. 与用户或组名有关的参数:

-uid n:n为数字,这个数字是用户的账号ID,亦即UID,这个UID是记录在/etc/passwd 里面与账号名称对应的数字。

-gid n:n为数字,这个数字是组名的ID,亦即GID,这个GID记录在/etc/group。

-user name:name为用户账号名称。

-group name:name 为组名。

-nouser:寻找文件的拥有者不存在于/etc/passwd的人。

-nogroup :寻找文件的用户组不存在于/etc/group的文件。

3. 与文件权限及名称有关的参数:

-name filename:搜寻文件名为filename的文件。

-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。(这个SIZE的规格有:c代表byte,k代表 1024bytes。所以,要找比50KB 还要大的文件,就是“-size +50k”。)

-type TYPE:搜寻文件的类型为TYPE的。(类型主要有:一般正规文件(f),设备文件(b, c),目录(d),连接文件(l),socket (s),及 FIFO(p)等属性。)

-perm mode:搜寻文件权限等于mode的文件,这个mode为类似 chmod的属性值。

-perm -mode:搜寻文件权限必须要全部包括mode的权限的文件。例如,我们要搜索0744的文件,使用“-perm -0744”。但是当一个文件的权限为4755时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。

-perm /mode:搜寻文件权限包含任一mode的权限的文件。例如,我们搜索-rwxr-xr-x,即-perm /755时,但一个文件属性为-rw-------也会被列出来,因为他有 -rw....的属性。

4. 额外可进行的动作:

-exec com:com为其他指令,-exec后面可再接额外的指令来处理搜索到的结果。

-print:将结果打印到屏幕上,这个操作是预设操作。

find的特殊功能就是能够进行额外的动作。我们将下面的例子以图解来说明。

find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;

图5.4 解释说明

该例子中特殊的地方有{}以及\;还有-exec这个关键词,这些东西的意义为:

①{}代表的是由find找到的内容,如上图所示,find的结果会被放置到{}位置中;

②-exec一直到\;是关键词,代表find额外动作的开始(-exec)到结束(\;),在这中间的就是find指令内的额外动作。在本例中就是ls-l{}。

③因为;在bash环境下是有特殊意义的,因此利用反斜杠来转义。

六、权限与命令间的关系(非常重要)

1.让用户能进入某目录成为“可工作目录”的基本权限为:

(1)可使用的命令:例如cd等变换工作目录的命令;

(2)目录所需权限:用户对这个目录至少需要具有 x 的权限;

(3)额外需求:如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录还需要r的权限。

2.用户在某个目录内读取一个文件的基本权限是:

(1)可使用的命令:例如本章谈到的 cat, more, less等等

(2)目录所需权限:用户对这个目录至少需要具有x权限;

(3)文件所需权限:用户对文件至少需要具有 r 的权限才行。

3.让用户可以修改一个文件的基本权限为何?

(1)可使用的命令:例如nano或未来要介绍的vi编辑器等;

(2)目录所需权限:用户在该文件所在的目录至少要有 x 权限;

(3)文件所需权限:用户对该文件至少要有r,w权限。

4.让一个用户可以建立一个文件的基本权限为何?

目录所需权限:用户在该目录要具有w,x的权限,重点在w。

5.让用户进入某目录并执行该目录下的某个命令之基本权限为何?

(1)目录所需权限:用户在该目录至少要有x的权限;

(2)文件所需权限:用户在该文件至少需要有x的权限。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: linux 鸟哥的linux私房菜
最后更新:2018年12月23日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程小奥看房之鸿荣源珈誉府论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
2019 CFA CUP QUARTER FINAL: SHANDONG LUNENG TAISHAN F.C VS BEIJING SINOBO GUOAN F.C 算法笔记之分支限界法(2) 解析动态规划问题(1) Java语言程序设计【学堂在线】编程作业(第一章) 已修:英语写作指导Ⅰ【UC Berkeley】[2015-06-25] 基于python绘制世界人口地图
标签聚合
linux Python 高中 生活 leetcode 学习 python学习 Java 算法 鸟哥的linux私房菜
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 8 个月前(10月20日) :wink:
niming 发布于 9 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号