时间:2009年5月14日 星期四
内容:Linux中的文件安全与权限
大纲:文件和目录的权限、setuid、chown和chgrp、umask、符号链接
一、使用ls -l命令查看文件详细信息
#ls -l
总计 24 #这一行告诉我们该目录中所有文件所占的空间
- rwxr-xr-x:1 root root 3756 Oct 14 04:44 1.c
# -rwxr-xr-x:表示
# -表示普通文件
# rwx:文件属主权限
# r-x:同组用户权限
# r-x:其他用户权限
# 1:该文件硬链接的数目
# root 文件的属主
# root 文件的属主root所在的缺省组(也叫做root )。
# 3756 文件字节数
# Oct 14 04:44 文件的更新时间
#1.c 文件名
二、文件类型
d 目录。
l 符号链接(指向另一个文件)。
s 套接字文件。
b 块设备文件。
c 字符设备文件。
p 命名管道文件。
- 普通文件,或者更准确地说,不属于以上几种类型的文件。
三、使用chmod命令来改变文件权限位的设置
1、符号模式:chmod [who] operator [permission] filename
who的含义是:u 文件属主权限。g 同组用户权限。o 其他用户权限。a 所有用户(文件属主、同组用户及其他用户)。
operator的含义:+ 增加权限。- 取消权限。= 设定权限。
permission的含义:r 读权限。w 写权限。x 执行权限。s 文件属主和组s e t - I D。t 粘性位*。l 给文件加锁,使其他用户无法访问。
举例:chmod go+x myfile rwx rwx r- x ##赋予同组用户和其他用户执行权限
2、绝对模式:chmod [mode] file #其中mode是一个八进制数
表1-3 八进制目录/文件权限表示
八进制数含义八进制数含义
0 4 0 0 文件属主可读 0 0 1 0 同组用户可执行 0 0 2 0 同组用户可写
0 2 0 0 文件属主可写 0 0 0 4 其他用户可读
0 1 0 0 文件属主可执行 0 0 0 2 其他用户可写
0 0 4 0 同组用户可读 0 0 0 1 其他用户可执行
在设定权限的时候,只需按照表1 - 3查出与文件属主、同组用户和其他用户所具有的权限相对应的数字,并把它们加起来,就是相应的权限表示。
四、为什么要使用suid/guid
为什么要使用这种类型的脚本?这里有一个很好的例子。我管理着几个大型的数据库系统,而对它们进行备份需要有系统管理权限。我写了几个脚本,并设置了它们的g u i d,这样我指定的一些用户只要执行这些脚本就能够完成相应的工作,而无须以数据库管理员的身份登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其他管理任务,但是在这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限。
如果想要对文件login设置sui ,它当前所具有的权限为rwx rw- r-- (741),需要在使用
chmod命令时在该权限数字的前面加上一个4,即chmod 4741,这将使该文件的权限变为rwx rw-r--。
$ chmod 4741 logit
五、chown和chgrp
1、chown命令用于修改文件的所有权,如chown rocket project即表示将project文件的所有权交给了rocket
2、chgrp的格式与chown差不多,如chgrp rocket project表示将project文件的使用权交给rocket组
六、umask
当最初登录到系统中时, umask命令确定了你创建文件的缺省模式。这一命令实际上和chomod命令正好相反。你的系统管理员必须要为你设置一个合理的umask值,以确保你创建的文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。
1、如何计算umask值?
例如,对于umask值0 0 2,相应的文件和目录缺省创建权限是什么呢?
第一步,我们首先写下具有全部权限的模式,即7 7 7 (所有用户都具有读、写和执行权限)。
第二步,在下面一行按照umask值写下相应的位,在本例中是002。
第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。
稍加练习就能够记住这种方法。
第四步,对于文件来说,在创建时不能具有文件权限,只要拿掉相应的执行权限比特即
可。
这就是上面的例子,其中umask值为002:
1) 文件的最大权限rwx rwx rwx (777)
2) umask值为0 0 2 - - - - - - -w-
3) 目录权限rwx rwx r-x (775) 这就是目录创建缺省权限
4) 文件权限rw- rw- r-- (664) 这就是文件创建缺省权限
七、符号链接
存在两种不同类型的链接,软链接和硬链接,这里我们只讨论软链接。软链接实际上就是一个指向文件的指针。
下面我们就解释一下符号链接是怎么回事。比方说在/usr/local/ admin/sales目录下有一个含有销售信息的文件,销售部门的每一个人都想看这份文件。你可以在每一位用户的$HOME目录下建立一个指向该文件的链接,而不是在每个目录下拷贝一份。这样当需要更改这一文件时,只需改变一个源文件即可。每个销售$HOME目录中的链接可以起任何名字,不必和源文件一致。如果有很多子目录,而进入这些目录很费时间,在这种情况下链接也非常有用。可以针对$HOME目录下的一个很深的子目录创建一个链接。还有,比如在安装一个应用程序时,它的日志被保存到/usr/opt/app/log目录下,如果想把它保存在另外一个你认为更方便目录下,可以建立一个指向该目录的链接。
该命令的一般形式为:
ln [-s] source_path target_path
#rm .link 如果存在的话,先删除.link文件
#ln -s /usr/local .link
#ls .link 即可类似于ls /usr/local操作
本章介绍了一些有关文件安全的基本概念。如果这些命令能够使用得当而且使用得比较谨慎,应该不会有什么问题。手指轻轻一敲就有可能输入chmod -R这样的命令,它将改变整个文件系统的权限,如果没有做备份的话,没有几年的时间恐怕是无法恢复了,所以在输入这些命令时,千万不要在手指上贴膏药!是否使用设置了suid的脚本完全取决于你自己。如果使用的话,一定要确保能够监控它的使用,而且不要以根用户身份设置suid。