全部博文(37)
分类: LINUX
2011-12-19 11:11:59
1. 文件安全与权限
一个文件一经创建,就具有三种访问方式:
读,可以显示该文件的内容。
写,可以编辑或删除它。
执行,如果该文件是一个shell脚本或程序。
按照所针对的用户,文件的权限可分为三类:
文件属主,创建该文件的用户。
同组用户,拥有该文件的用户组中的任何用户。
其他用户,即不属于拥有该文件的用户组的某一用户。
1.1. 文件和目录的权限
使用ls -al命令,来看一个典型的文件:
wuzhiguo@wuzhiguo-linux:~/program/shell$ ls -l 总用量 4 -rw-rw-r-- 1 wuzhiguo wuzhiguo 12 2011-12-18 15:58 temp |
包含信息:
总用量 4:这一行告诉我们该目录中所有文件所占的空间。
-rw-rw-r--:这是该文件的权限位。如果除去最前面的横杠,这里一共是9个字符,他们分别对应9个权限位。通过这些权限位,可以设定用户对文件的访问权限。这9个字符可以分为三组:
rw-:文件属主权限这是前面三位
rw-:同组用户权限这是中间三位
r--:其他用户权限这是最后三位
出现在r、w、x位置上的横杠表示相应的访问权限被禁止。
1 该文件硬链接的数目。
wuzhiguo 文件的属主。
wuzhiguo 文件的属主wuzhiguo所在的缺省组。
12 用字节来表示的文件长度,记住,不是K字节!
2011-12-18 15:58 文件的更新时间。
temp 文件名。
文件类型有七种,它可以从ls -l命令所列出的结果的第一位看出,这七种类型是:
d 目录。
l 符号链接(指向另一个文件)。
s 套接字文件。
b 块设备文件。
c 字符设备文件。
p 命名管道文件。
- 普通文件,或者更准确地说,不属于以上几种类型的文件。
改变权限位:
对于属于你的文件,可以按照自己的需要改变其权限位的设置。使用c h m o d命令来
改变文件权限位的设置。
符号模式:
chmod [who] operator [permission] filename
who的含义是: u 文件属主权限。 g 同组用户权限。 o 其他用户权限。 a 所有用户(文件属主、同组用户及其他用户)。 operator的含义: + 增加权限。 - 取消权限。 = 设定权限。 permission的含义: r 读权限。 w 写权限。 x 执行权限。 |
例如:
chmod a-x myfile 收回所有用户的执行权限 chmod og-w myfile 收回同组用户和其他用户的写权限 chmod g+w myfile 赋予同组用户写权限 chmod u+x myfile 赋予文件属主执行权限 chmod go+x myfile 赋予同组用户和其他用户执行权限 chmod u+x o-w myfile 赋予文件属主执行权限,收回其他用户的写权限 |
绝对模式:
chmod [mode] file
其中mode是一个八进制数。 在绝对模式中,权限部分有着不同的含义。每一个权限位用一个八进制数来代表。 计算权限值: rwx对应421,将赋予的权限对应的数字加起来就是一个权限值。 如: rw-rw-r— [4+2+0] [4+2+0] [4+0+0] = 664 chmod 664 file |
例如:
chmod 666 rw- rw- rw- 赋予所有用户读和写的权限 chmod 644 rw- r-- r-- 赋予所有文件属主读和写的权限,所有其他用户读权限 chmod 744 rwx r-- r-- 赋予文件属主读、写和执行的权限,所有其他用户读的权限 |
例如:
chmod 644 * |
设置目录下所有文件的权限,使文件属主和同组用户都具有读和写的权限,其他用户只具有读权限。
例如:
chmod -R 664 /usr/local/home/dave/* |
这样就可以一次将/usr/local/home/dave/*目录下的所有文件连同各个子目录下的文件的权限全部设置为文件属主和同组用户可读和写,其他用户只读。
使用-R选项一定要谨慎,只有在需要改变目录树下全部文件权限时才可以使用。
目录:
目录的权限位和文件有所不同。
读权限:可以列出该目录中的文件。
写权限:可以在该目录中创建或删除文件。
执行权限:可以搜索或进入该目录。
如果把同组用户或其他用户针对某一目录的权限设置为--x,那么他们将无法列出该目录中的文件。如果该目录中有一个执行位置位的脚本或程序,只要用户知道它的路径和文件名,仍然可以执行它。用户不能够进入该目录并不妨碍他的执行。
目录的权限将会覆盖该目录中文件的权限。即使有文件的写权限,如果没有其父目录的写权限,用户也不能编辑该文件。
1.2. chown和chgrp
当你创建一个文件时,你就是该文件的属主。一旦你拥有某个文件,就可以改变它的所有权,可以使用用户名或用户ID号来完成这一操作。只有文件的属主和系统管理员可以改变文件的所有权。一旦将文件的所有权交给另外一个用户,就无法再重新收回它的所有权。如果真的需要这样做,那么就只有求助于系统管理员了。
修改属主:
chown -R -h owner file 选项: -R选项意味着对所有子目录下的文件也都进行同样的操作。 -h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。 |
例如:
chown root temp |
设置temp文件的属主为用户root。
修改属组:
chgrp -R -h owner file 选项: -R选项意味着对所有子目录下的文件也都进行同样的操作。 -h选项意味着在改变符号链接文件的属组时不影响该链接所指向的目标文件。 |
例如:
chgrp root temp |
设置temp文件的属组为用户组root。
查看用户属组:
id [user] |
例如:
id |
查看当前用户。
例如:
id root |
查看root用户。
1.3. umask
当最初登录到系统中时, umask命令确定了你创建文件的缺省模式。
在已经登录之后,可以按照个人的偏好使用umask命令来改变文件创建的缺省权限。
相应的改变直到退出该shell或使用另外的umask命令之前一直有效。
一般来说,umask命令是在/etc/profile文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的umask,可以在该文件中加入相应的条目。
如果希望永久性地设置自己的umask值,那么就把它放在自己$HOME目录下的.profile或.bashprofile文件中。
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。
对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。
目录则允许设置执行权限,这样针对目录来说, umask中各个数字最大可以到7。
该命令的一般形式为:
umask nnn 其中nnn为umask置000 - 777。 |
计算出你的u m a s k值:
计算umask值的方法。我们只要记住umask是从权限中“拿走”相应的位即可。
|
属主权限 |
属组权限 |
其他用户权限 |
|
文件的最大权限 |
rwx |
rwx |
rwx |
|
umask值为002 |
--- |
--- |
-w- |
|
目录创建缺省权限 |
rwx |
rwx |
r-x |
拿走相应的位 |
文件创建缺省权限 |
rw- |
rw- |
r-- |
拿走相应的位和执行位 |
反过来,从目录创建缺省权限计算umask值:
|
属主权限 |
属组权限 |
其他用户权限 |
|
文件的最大权限 |
rwx |
rwx |
rwx |
|
目录创建缺省权限 |
rwx |
rwx |
r-x |
|
umask值为002 |
--- |
--- |
-w- |
拿走相应的位 |
文件创建缺省权限 |
rw- |
rw- |
r-- |
目录创建缺省权限去掉执行位 |
例如:
umask 002 |
设置umask值。
例如:
umask 0002 |
查看umask值。
1.4. 符号链接
两种不同类型的链接,软链接和硬链接。软链接实际上就一个指向文件的指针。
ln [-s] source_path target_path 其中的路径可以是目录也可以是文件。 |
例如:
ln -s dir/myfile lnmyfile |
创建文件符号链接lnmyfile。
例如:
ln -s dir lndir |
创建目录符号链接lndir。