Linux与Unix shell编程指南.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Linux与Unix shell编程指南.pdf》由会员分享,可在线阅读,更多相关《Linux与Unix shell编程指南.pdf(356页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载第1章 文件安全与权限为了防止未授权用户访问你的文件,可以在文件和目录上设置权限位。还可以设定文件在创建时所具有的缺省权限:这些只是整个系统安全问题中的一小部分。在这里我们并不想对系统安全问题的方方面面进行全面的探讨,只是介绍一下有关文件和目录的安全问题。本章包含以下内容:文件和目录的权限。setuid。chown和c h g r p。umask。符号链接。创建文件的用户和他(她)所属于的组拥有该文件。文件的属主可以设定谁具有读、写、执行该文件的权限。当然,根用户或系统管理员可以改变任何普通用户的设置。一个文件一经创建,就具有三种访问方式:1)读,可以显示该文件的内容。2)写,可以编辑或删
2、除它。3)执行,如果该文件是一个s h e l l脚本或程序。按照所针对的用户,文件的权限可分为三类:1)文件属主,创建该文件的用户。2)同组用户,拥有该文件的用户组中的任何用户。3)其他用户,即不属于拥有该文件的用户组的某一用户。1.1 文件当你创建一个文件的时候,系统保存了有关该文件的全部信息,包括:文件的位置。文件类型。文件长度。哪位用户拥有该文件,哪些用户可以访问该文件。i节点。文件的修改时间。文件的权限位。让我们使用ls-l命令,来看一个典型的文件:第一部分s h e l l下面让我们来分析一下该命令所得结果的前面两行,看看都包含了哪些信息:total 4232:这一行告诉我们该目录
3、中所有文件所占的空间。-r w x r-x r-x:这是该文件的权限位。如果除去最前面的横杠,这里一共是 9个字符,他们分别对应9个权限位。通过这些权限位,可以设定用户对文件的访问权限。这 9个字符可以分为三组:r w x:文件属主权限这是前面三位r-x:同组用户权限这是中间三位r-x:其他用户权限这是最后三位后面我们还将对这些权限位作更详细的介绍。出现在 r、w、x位置上的横杠表示相应的访问权限被禁止。1 该文件硬链接的数目。root 文件的属主。root 文件的属主r o o t所在的缺省组(也叫做r o o t)。3578 用字节来表示的文件长度,记住,不是 K字节!Oct 14 04:
4、44 文件的更新时间。dmesg 文件名。1.2 文件类型还记得前面一节所提到的文件权限位前面的那个字符吗?我们现在就解释一下这个横杠所代表的意思,文件类型有七种,它可以从 ls-l命令所列出的结果的第一位看出,这七种类型是:d 目录。l 符号链接(指向另一个文件)。s 套接字文件。b 块设备文件。c 字符设备文件。p 命名管道文件。-普通文件,或者更准确地说,不属于以上几种类型的文件。1.3 权限让我们用t o u c h命令创建一个文件:$touch myfile现在对该目录使用ls-l命令:2第一部分 shell下载我们已经创建了一个空文件,正如我们所希望的那样,第一个横杠告诉我们该文件
5、是一个普通文件。你将会发现所创建的文件绝大多数都是普通文件或符号链接文件(后面将会出现更多的符号链接文件)。文件属主权限组用户权限其他用户权限r w-r-r接下来的三个权限位是文件属主所具有的权限;再接下来的三位是与你同组用户所具有的权限,这里是a d m i n组;最后三位是其他用户所具有的权限。在该命令的结果中,我所属于的缺省组也显示了出来。下面是对该文件权限的精确描述:表1-1 ls-l命令输出的含义(第一个字符)-普通文件(接下来的三个字符)r w-文件属主的权限(再接下来的三个字符)r-同组用户的权限(最后三个字符)r-其他用户的权限因此,这三组字符(除了第一个字符)分别定义了:1)
6、文件属主所拥有的权限。2)文件属主缺省组(一个用户可以属于很多的组)所拥有的权限。3)系统中其他用户的权限。在每一组字符中含有三个权限位:r 读权限w 写/更改权限x 执行该脚本或程序的权限这里我们采用另外一种方式来表示刚才所列出 m y f i l e的文件权限:-r w-r-r-文件类型为普通文件文件属主可以读、写同组用户可以读其他用户可以读你可能已经注意到了,m y f i l e在创建的时候并未给属主赋予执行权限,在用户创建文件时,系统不会自动地设置执行权限位。这是出于加强系统安全的考虑。必须手工修改这一权限位:后面讲到u m a s k命令时,你就会明白为什么没有获得执行权限。然而,
7、你可以针对目录设置执行权限位,但这与文件执行权限位的意义有所不同,这一点我们将在后面讨论。上面这段关于权限位的内容可能不太好理解,让我们来看几个例子(见表1-2)。更令人迷惑的是,对于文件属主来说,在只有读权限位被置位的情况下,仍然可以通过文件重定向的方法向该文件写入。过一会儿我们就会看到,能否删除一个文件还依赖于该文件所在目录权限位的设置。表1-2 文件权限及含义权限所代表的含义r-文文件属主可读,但不能写或执行r-r-文文件属主和同组用户(一般来说,是文件属主所在的缺省组)可读r-r-r-文任何用户都可读,但不能写或执行rwx r-r-文文件属主可读、写、执行,同组用户和其他用户只可读rw
8、x r-x-文文件属主可读、写、执行,同组用户可读、执行第1章 文件安全与权限3下载(续)权限所代表的含义rwx r-x r-x文文件属主可读、写、执行,同组用户和其他用户可读、执行rw-rw-文文件属主和同组用户可读、写rw-rw-r-文文件属主和同组用户可读、写,其他用户可读rw-rw-文文件属主和同组用户及其他用户读可以读、写,慎用这种权限设置,因为任何用户都可以写入该文件1.4 改变权限位对于属于你的文件,可以按照自己的需要改变其权限位的设置。在改变文件权限位设置之前,要仔细地想一想有哪些用户需要访问你的文件(包括你的目录)。可以使用c h m o d命令来改变文件权限位的设置。这一命
9、令有比较短的绝对模式和长一些的符号模式。我们先来看一看符号模式。1.4.1 符号模式c h m o d命令的一般格式为:chmod who operator permission filenamew h o的含义是:u 文件属主权限。g 同组用户权限。o 其他用户权限。a 所有用户(文件属主、同组用户及其他用户)。o p e r a t o r的含义:+增加权限。-取消权限。=设定权限。p e r m i s s i o n的含义:r 读权限。w 写权限。x 执行权限。s 文件属主和组s e t-I D。t 粘性位*。l 给文件加锁,使其他用户无法访问。u,g,o 针对文件属主、同组用户及其他
10、用户的操作。*在列文件或目录时,有时会遇到“t”位。“t”代表了粘性位。如果在一个目录上出现“t”位,这就意味着该目录中的文件只有其属主才可以删除,即使某个同组用户具有和属主同等的权限。不过有的系统在这一规则上并不十分严格。如果在文件列表时看到“t”,那么这就意味着该脚本或程序在执行时会被放在交换区(虚存)。不过由于当今的内存价格如此之低,大可不必理会文件的“t”的使用。4第一部分 shell下载1.4.2 chmod命令举例现在让我们来看一些使用 c h m o d命令的例子。假定 m y f i l e文件最初具有这样的权限:r w xrwx rwx:命令结果含义chmod a-x myf
11、ilerw-rw-rw-收回所有用户的执行权限chmod og-w myfilerw-r-r-收回同组用户和其他用户的写权限chmod g+w myfilerw-rw-r-赋予同组用户写权限chmod u+x myfilerwx rw-r-赋予文件属主执行权限chmod go+x myfilerwx rwx r-x赋予同组用户和其他用户执行权限当创建m y f i l e文件时,它具有这样的权限:如果这是我写的一个脚本,我希望能够具有执行权限,并取消其他用户(所有其他用户)的写权限,可以用:$chmod u+x o-w myfile这样,该文件的权限变为:现在已经使文件属主对 m y f i
12、l e文件具有读、写执行的权限,而 a d m i n组的用户对该文件具有读权限。如果希望某个脚本文件对你自己来说可执行,而且你对该文件的缺省权限很放心,那么只要使它对你来说具有执行权限即可。$chmod u+x dt1.4.3 绝对模式c h m o d命令绝对模式的一般形式为:chmod mode file其中m o d e是一个八进制数。在绝对模式中,权限部分有着不同的含义。每一个权限位用一个八进制数来代表,如表1-3所示。表1-3 八进制目录/文件权限表示八 进 制 数含义八 进 制 数含义0 4 0 0文件属主可读0 0 1 0同组用户可执行0 2 0 0文件属主可写0 0 0 4其
13、他用户可读0 1 0 0文件属主可执行0 0 0 2其他用户可写0 0 4 0同组用户可读0 0 0 1其他用户可执行0 0 2 0同组用户可写在设定权限的时候,只需按照表 1-3查出与文件属主、同组用户和其他用户所具有的权限相对应的数字,并把它们加起来,就是相应的权限表示。从表1-3中可以看出,文件属主、同组用户和其他用户分别所能够具有的最大权限值就是7。第1章 文件安全与权限5下载再来看看前面举的例子:相应的权限表示应为6 4 4,它的意思就是:0 4 0 0+0 2 0 0(文件属主可读、写)=0 6 0 00 0 4 0(同组用户可读)=0 0 4 00 0 0 4(其他用户可读)=0
14、 0 0 40 6 4 4有一个计算八进制权限表示的更好办法,如表 1-4所示:表1-4 计算权限值文 件 属 主同 组 用 户其 他 用 户r w xr w xr w x4+2+14+2+14+2+1使用表1-4,可以更容易地计算出相应的权限值,只要分别针对文件属主、同组用户和其他用户把相应权限下面的数字加在一起就可以了。m y f i l e文件具有这样的权限:r w -r -r -4+244把相应权限位所对应的值加在一起,就是 6 4 4。1.4.4 chmod命令的其他例子以下是一些c h m o d命令绝对模式的例子:命令结果含义chmod 666rw-rw-rw-赋予所有用户读和写
15、的权限chmod 644rw-r-r-赋予所有文件属主读和写的权限,所有其他用户读权限chmod 744rwx r-r-赋予文件属主读、写和执行的权限,所有其他用户读的权限chmod 664rw-rw-r-赋予文件属主和同组用户读和写的权限,其他用户读权限chmod 700rwx-赋予文件属主读、写和执行的权限chmod 444r-r-r-赋予所有用户读权限下面举一个例子,假定有一个名为 y o a的文件,具有如下权限:我现在希望使自己对该文件可读、写和执行,a d m i n组用户对该文件只读,可以键入:如果希望自己对该文件可读、写和执行,对其他所有用户只读,我可以用:如果希望一次设置目录下
16、所有文件的权限,可以用:chmod 644*这将使文件属主和同组用户都具有读和写的权限,其他用户只具有读权限。6第一部分 shell下载还可以通过使用-R选项连同子目录下的文件一起设置:chmod-R 664/usr/local/home/dave/*这样就可以一次将/u s r/l o c a l/h o m e/d a v e目录下的所有文件连同各个子目录下的文件的权限全部设置为文件属主和同组用户可读和写,其他用户只读。使用-R选项一定要谨慎,只有在需要改变目录树下全部文件权限时才可以使用。1.4.5 可以选择使用符号模式或绝对模式上面的例子中既有绝对模式的,也有符号模式的,我们可以从中看
17、出,如果使用该命令的符号模式,可以设置或取消个别权限位,而在绝对模式中则不然。我个人倾向于使用符号模式,因为它比绝对模式方便快捷。1.5 目录还记得在前面介绍c h m o d命令时讲过,目录的权限位和文件有所不同。现在我们来看看其中的区别。目录的读权限位意味着可以列出其中的内容。写权限位意味着可以在该目录中创建文件,如果不希望其他用户在你的目录中创建文件,可以取消相应的写权限位。执行权限位则意味着搜索和访问该目录(见表 1-5、表1-6)。表1-5 目录权限rwx可以列出该目录中的文件可以在该目录中创建或删除文件可以搜索或进入该目录表1-6 目录权限举例权限文 件 属 主同 组 用 户其 他
18、 用 户drwx rwx r-x(7 7 5)读、写、执行读、写、执行读、执行drwx r-x r-(7 5 4)读、写、执行读、执行读drwx r-x r-x(7 5 5)读、写、执行读、执行读、执行如果把同组用户或其他用户针对某一目录的权限设置为-x,那么他们将无法列出该目录中的文件。如果该目录中有一个执行位置位的脚本或程序,只要用户知道它的路径和文件名,仍然可以执行它。用户不能够进入该目录并不妨碍他的执行。目录的权限将会覆盖该目录中文件的权限。例如,如果目录 d o c s具有如下的权限:而其中的文件p a y的权限为:那么a d m i n组的用户将无法编辑该文件,因为它所属的目录不具
19、有这样的权限。该文件对任何用户都可读,但由于它所在的目录并未给 a d m i n组的用户赋予执行权限,所以该组的用户都将无法访问该目录,他们将会得到“访问受限”的错误消息。1.6 suid/guid我们在前面曾经提到过s u i d和g u i d。这种权限位近年来成为一个棘手的问题。很多系统供第1章 文件安全与权限7下载应商不允许实现这一位,或者即使它被置位,也完全忽略它的存在,因为它会带来安全性风险。那么人们为何如此大惊小怪呢?s u i d意味着如果某个用户对属于自己的 s h e l l脚本设置了这种权限,那么其他用户在执行这一脚本时也会具有其属主的相应权限。于是,如果根用户的某一个
20、脚本设置了这样的权限,那么其他普通用户在执行它的期间也同样具有根用户的权限。同样的原则也适用于g u i d,执行相应脚本的用户将具有该文件所属用户组中用户的权限。1.6.1 为什么要使用suid/guid为什么要使用这种类型的脚本?这里有一个很好的例子。我管理着几个大型的数据库系统,而对它们进行备份需要有系统管理权限。我写了几个脚本,并设置了它们的g u i d,这样我指定的一些用户只要执行这些脚本就能够完成相应的工作,而无须以数据库管理员的身份登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其他管理任务,但是在这些脚本运行结束之后,他们就又回复到他们作为普通用
21、户的权限。有相当一些U N I X命令也设置了s u i d和g u i d。如果想找出这些命令,可以进入/b i n或/s b i n目录,执行下面的命令:$ls-l|grep.s上面的命令是用来查找s u i d文件的;$ls-l|grep.s.s上面的命令是用来查找s u i d和g u i d的。现在我们明白了什么是s u i d,可是如何设置它呢?下面就来介绍这个问题。如果希望设置s u i d,那么就将相应的权限位之前的那一位设置为4;如果希望设置g u i d,那么就将相应的权限位之前的那一位设置为2;如果希望两者都置位,那么将相应的权限位之前的那一位设置为4+2。一旦设置了这一
22、位,一个 s将出现在x的位置上。记住:在设置 s u i d或g u i d的同时,相应的执行权限位必须要被设置。例如,如果希望设置 g u i d,那么必须要让该用户组具有执行权限。如果想要对文件 l o g i n设置s u i d,它当前所具有的权限为 rwx rw-r-(741),需要在使用c h m o d命令时在该权限数字的前面加上一个 4,即chmod 4741,这将使该文件的权限变为 r w srw-r-。$chmod 4741 logit 1.6.2 设置suid/guid的例子下面给出几个例子:表1-7 设置s u i d/g u i d命令结果含义chmod 4755rw
23、s r-x r-x文文件被设置了s u i d,文件属主具有读、写和执行的权限,所有其他用户具有读和执行的权限chmod 6711rws-s-s文文件被设置了 s u i d和g u i d,文件属主具有读、写和执行的权限,所有其他用户具有执行的权限chmod 4764rws rw-r-文文件被设置了s u i d,文件属主具有读、写和执行的权限,同组用户具有读和执行的权限,其他用户具有读权限8第一部分 shell下载还可以使用符号方式来设置 s u i d/g u i d。如果某个文件具有这样的权限:rwx r-x r-x,那么可以这样设置其s u i d:chmod u+s 于是该文件的权
24、限将变为:rws r-x r-x 在查找设置了s u i d的文件时,没准会看到具有这样权限的文件:rwS r-x r-x,其中S为大写。它表示相应的执行权限位并未被设置,这是一种没有什么用处的s u i d设置,可以忽略它的存在。注意,c h m o d命令不进行必要的完整性检查,可以给某一个没用的文件赋予任何权限,但chmod 命令并不会对所设置的权限组合做什么检查。因此,不要看到一个文件具有执行权限,就认为它一定是一个程序或脚本。1.7 chown和chgrp当你创建一个文件时,你就是该文件的属主。一旦你拥有某个文件,就可以改变它的所有权,把它的所有权交给另外一个/e t c/p a s
25、 s w d文件中存在的合法用户。可以使用用户名或用户I D号来完成这一操作。在改变一个文件的所有权时,相应的 s u i d也将被清除,这是出于安全性的考虑。只有文件的属主和系统管理员可以改变文件的所有权。一旦将文件的所有权交给另外一个用户,就无法再重新收回它的所有权。如果真的需要这样做,那么就只有求助于系统管理员了。c h o w n命令的一般形式为:chmod-R-h owner file-R选项意味着对所有子目录下的文件也都进行同样的操作。-h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。1.7.1 chown举例这里给出几个例子:文件p r o j e c t的所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux与Unix shell编程指南 Linux Unix shell 编程 指南
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内