Shell编程学习---第一篇:文件安全与权限

来源:互联网 发布:怎么查淘宝账号权重 编辑:程序博客网 时间:2024/05/14 05:20

一 文件安全和权限

1 文件
当你创建一个文件的时候,系统保存了有关该文件的全部信息,包括:
? 文件的位置。
?  文件类型。
?  文件长度。
?  哪位用户拥有该文件,哪些用户可以访问该文件。
? i 节点。
?  文件的修改时间。
?  文件的权限位。
2文件类型
还记得前面一节所提到的文件权限位前面的那个字符吗?我们现在就解释一下这个横杠
所代表的意思,文件类型有七种,它可以从 ls -l 命令所列出的结果的第一位看出,这七种类型
是:
d  目录。
l  符号链接(指向另一个文件)。
s  套接字文件。
b  块设备文件。
c  字符设备文件。
p  命名管道文件。
-  普通文件,或者更准确地说,不属于以上几种类型的文件。

3 suid/guid
我们在前面曾经提到过suid和guid。这种权限位近年来成为一个棘手的问题.
很多系统供应商不允许实现这一位,或者即使它被置位,也完全忽略它的存在,因为它会带来安全性风
险。那么人们为何如此大惊小怪呢?
suid意味着如果某个用户对属于自己的shell脚本设置了这种权限,那么其他用户在执行这
一脚本时也会具有其属主的相应权限。于是,如果根用户的某一个脚本设置了这样的权限,
那么其他普通用户在执行它的期间也同样具有根用户的权限。同样的原则也适用于guid,执
行相应脚本的用户将具有该文件所属用户组中用户的权限。

4 为什么要使用suid/guid
为什么要使用这种类型的脚本?这里有一个很好的例子。我管理着几个大型的数据库系
统,而对它们进行备份需要有系统管理权限。我写了几个脚本,并设置了它们的guid,这样
我指定的一些用户只要执行这些脚本就能够完成相应的工作,而无须以数据库管理员的身份
登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其
他管理任务,但是在这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限。
有相当一些unix命令也设置了 suid和guid。如果想找出这些命令,可以进入/bin或/sbin目
录,执行下面的命令:
$ ls -l | grep '^...s'
上面的命令是用来查找suid文件的;
$ ls -l | grep '^...s..s'
上面的命令是用来查找suid和guid的。
现在我们明白了什么是suid,可是如何设置它呢?下面就来介绍这个问题。如果希望设置
suid,那么就将相应的权限位之前的那一位设置为4;如果希望设置guid,那么就将相应的权限
位之前的那一位设置为2;如果希望两者都置位,那么将相应的权限位之前的那一位设置为4+2。
一旦设置了这一位,一个 s 将出现在 x的位置上。记住:在设置suid或guid的同时,相应的
执行权限位必须要被设置。例如,如果希望设置guid,那么必须要让该用户组具有执行权限。

如果想要对文件login设置suid,它当前所具有的权限为 rwx rw- r-- (741) ,需要在使用
c h m o d 命令时在该权限数字的前面加上一个 4,即chmod 4741 ,
这将使该文件的权限变为 rws rw- r - -。
$ chmod 4741 logit

5 符号链接
存在两种不同类型的链接,软链接和硬链接,这里我们只讨论软链接。软链接实际上就
是一个指向文件的指针。你将会发现这种软链接使用起来非常方便。

6使用软链接来保存文件的多个映像
下面我们就解释一下符号链接是怎么回事。比方说在 /usr/local/admin/sales目录下有一个
含有销售信息的文件,销售部门的每一个人都想看这份文件。你可以在每一位用户的 $ HOME
目录下建立一个指向该文件的链接,而不是在每个目录下拷贝一份。这样当需要更改这一文
件时,只需改变一个源文件即可。每个销售 $HOME目录中的链接可以起任何名字,不必和源
文件一致。
如果有很多子目录,而进入这些目录很费时间,在这种情况下链接也非常有用。可以针
对$ Home目录下的一个很深的子目录创建一个链接。还有,比如在安装一个应用程序时,它
的日志被保存到 /user/opt/app/log目录下,如果想把它保存在另外一个你认为更方便目录下,可
以建立一个指向该目录的链接。
该命令的一般形式为:
ln [-s] source_path target_path