当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 文件安全与权限 学习笔记
帖子发表于 : 2010-11-30 18:05 
头像

注册: 2009-05-11 9:38
帖子: 14
送出感谢: 1
接收感谢: 0 次
非本人原创,全部来自网络经过复制、粘帖而来,用于个人学习
参考CU论坛wingger版主的帖子
http://bbs.chinaunix.net/thread-434579-1-1.html
在UNIX-like的操作系统中,文件可分成几种:
    一般文件:纯文本文件、二进制文件。
    目录文件:包含文件的活页夹。
    设备文件:字符文件、磁盘文件。主要是和周边硬件连接,作为系统和硬件间的沟通接口。
    内部进程通信文件:有Socket文件、连接文件(Pipe/FIFO)两种。
    特殊文件:符合链接文件。
    隐藏文件:文件名的第一个字符是.(半角句号)
代码:
   1. d 目录。
   2. l 符号链接(指向另一个文件)。
   3. s 套接字文件。
   4. b 块设备文件。
   5. c 字符设备文件。
   6. p 连接文件(命名管道文件)。
   7. - 普通文件,或者更准确地说,不属于以上几种类型的文件。

创建了一个空文件,现在用ls -l命令查看该目录下文件的属性:
如下:
代码:
   1. [root@Linux_chenwy temp]# ls -l
   2. 总用量 36
   3. -rw-r--r--    1 root     root        34890 10月 19 20:17 httpd.conf
   4. -rw-r--r--    1 root     root            0 10月 19 20:16 temp

代码:
   1. 总用量 36:是ls所列出的入口占用空间的字节数(以K为单位)。
   2. 1该文件硬链接的数目。
   3. root:文件属主。
   4. root:文件属组(一般是文件属主所在的缺省组。)
   5. 34890:字节来表示的文件长度,记住,不是K字节!
   6. 10月 19 20:17:件的更新时间。
   7. temp or httd.conf :件名。

首先我们要先了解你所用的文件系统的IO BLOCK(中文叫作簇)为多少,在你所使用的这个文件系统的IO BLOCK大小是4096 Bytes。
他意义是文件系统最小的读写及分配单位,每次读写操作你都不能小于这个尺寸。即使你的文件是只有一个字节。而且文件在硬盘上的存储也是以这个为单位,就是说如果文件尺寸小于这个值,那么它在磁盘上占用的空间就是4096字节。
占用空间的具体算法是:(进一(文件尺寸/4096))×4096。根据这个你就可以计算出你所列举的例子中的文件的空间使用状况:34890除以 4096,大约等于8.5,进一法取得为9,就是说文件在磁盘上占用了9个BLOCk,每个BLOCK为4K,所以这两个文件占用的空间就是36K。
这个规则也适合于目录,不过不会出现为0的目录,即使是空目录


-rw-r--r-- :这是该文件的权限位。
第一个横杠:指定文件类型,表示该文件是一个普通文件。(所创建的文件绝大多数都是普通文件或符号链接文件)。
除去最前面的横杠,一共是9个字符,他们分别对应9个权限位。通过这些权限位,可以设定用户对文件的访问权限。对这两个文件的精确解释是:
代码:
   1. rw-:前三位,文件属主可读、写
   2. r--:中间三位,组用户可读
   3. r--:最后三位,其他用户只可读

在创建的时候并未给属主赋予执行权限,在用户创建文件时,系统不会自动地设置执行权限位。这是出于加强系统安全的考虑


_________________
情难自禁,我其实属于极度咸湿的男人~~


最后由 cafee 编辑于 2010-11-30 18:58,总共编辑了 3 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 文件安全与权限 学习笔记
帖子发表于 : 2010-11-30 18:07 
头像

注册: 2009-05-11 9:38
帖子: 14
送出感谢: 1
接收感谢: 0 次
文件的权限位中中每一组字符中含有三个权限位:
代码:
   1. r 读权限
   2. w 写/更改权限
   3. x 执行该脚本或程序的权限

代码:
   1. r-- --- --- 文文件属主可读,但不能写或执行
   2. r-- r-- --- 文文件属主和属组用户(一般来说,是文件属主所在的缺省组)可读
   3. r-- r-- r- - 文任何用户都可读,但不能写或执行
   4. rwx r-- r- - 文文件属主可读、写、执行,属组用户和其他用户只可读
   5. rwx r-x --- 文文件属主可读、写、执行,属组用户可读、执
   6. rwx r-x r- x 文文件属主可读、写、执行,属组用户和其他用户可读、执行
   7. rw- rw- --- 文文件属主和属组用户可读、写
   8. rw- rw- r- - 文文件属主和属组用户可读、写,其他用户可读
   9. rw- rw- --- 文文件属主和属组用户及其他用户读可以读、写,慎用这种权限
  10. 设置,因为任何用户都可以写入该文件


_________________
情难自禁,我其实属于极度咸湿的男人~~


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 文件安全与权限 学习笔记
帖子发表于 : 2010-11-30 18:21 
头像

注册: 2009-05-11 9:38
帖子: 14
送出感谢: 1
接收感谢: 0 次
使用chmod来改变权限位
这一命令有符号模式和绝对模式。

符号模式

chmod命令的一般格式为:

chmod [who] operator [permission] filename

w h o的含义是:
代码:
   1. u 文件属主权限。
   2. g 属组用户权限。
   3. o 其他用户权限。
   4. a 所有用户(文件属主、属组用户及其他用户)。

o p e r a t o r的含义:
代码:
   1. + 增加权限。
   2. - 取消权限。
   3. = 设定权限。

p e r m i s s i o n的含义:
代码:
   1. r 读权限。
   2. w 写权限。
   3. x 执行权限。
   4. s 文件属主和组set-ID。
   5. t 粘性位*。
   6. l 给文件加锁,使其他用户无法访问。
   7. u,g,o 针对文件属主、属组用户及其他用户的操作。
   8.
   9. *在列文件或目录时,有时会遇到“ t”位。“t”代表了粘性位。如果在一个目录上出现“t”位,这就意味着该目录中的文件只有其属主才可以删除,即使某个属组用户具有和属主同等的权限。不过有的系统在这一规则上并不十分严格。

创建一个文件后,会同时创建一个inode和一个block,inode存放的是文件的属性信息,但是不包括文件名,并存放所对应数据所在的 block块的地址的指针;block存放文件的数据,每个block最多存放一个文件,而当一个block存放不下的情况下,会占用下一个block。
linux里文件的文件名、文件属性、文件内容是分别存储的:文件名存放在目录项(即dentry)中,文件属性存放在inode中,一般情况下,每个inode占用1024 byte,即128字节的磁盘空间文件内容存放在数据块中。
inode 的內容在記錄檔案的屬性以及該檔案實際資料是放置在哪幾號 block 內! 基本上,inode 記錄的檔案資料至少有底下這些:

* 該檔案的存取模式(read/write/excute);
* 該檔案的擁有者與群組(owner/group);
* 該檔案的容量;
* 該檔案建立或狀態改變的時間(ctime);
* 最近一次的讀取時間(atime);
* 最近修改的時間(mtime);
* 定義檔案特性的旗標(flag),如 SetUID...;
* 該檔案真正內容的指向 (pointer);

inode 的數量與大小也是在格式化時就已經固定了
引用:
permission mode 是存在於 inode 裡的 12 個 bit.
當 bit 為 0 時表示關, 1 表示開, 如:
110111101101

若這 12 bit 分開4組的話, 分別為如下內容:
1) suid, sgid, sticky_bit
2) owner_read, owner_write, owner_exectue
3) group_read, group_write, group_exectue
4) others_read, others_write, others_exectue
按前例來算的, 被打開的 permission 有:
suid, sgid (110)
owner_read, owner_write, owner_exectue (111)
group_read, group_exectue (101)
others_read, others_exectue (101)

不過, 在操作上, 我們不不會用 2 進位啦, 一般(視程式而別)可使用 8 進位或 text mode :

110111101101換算為 8 進位就是 6755 了.
這個相對簡單多了, 我們可用 bc 來算算看:
echo "obase=8;ibase=2;110111101101" | bc
echo "obase=2;ibase=8;6755" | bc
如果手頭上沒有 bc 或其它工具可用, 那也可用如下的換算表來對照:
000|0
001|1
010|2
011|3
100|4
101|5
110|6
111|7
分別將 12 bit 拆四組來算就是了...(考筆試時最好用了!)

然而, 換算成 text mode 就沒那麼輕鬆了.
是因為 text mode 上只能用 9 個字母去表示 12 個 bit .
需花些心思還是可以的.
可先從最簡單的右邊 9 個 bit 來算起:
111101101
rwxr-xr-x
不難發現每組都是 rwx , 1 對著就寫相應的 text, 0 就寫 - 了.
再下來分別找到那三個 x 的位置, 因為:
suid 若為 1 會修改 owner_x: 以 s 代替 x, 以 S 代替 - .
sgid 若為 1 會修改 group_x: 以 s 代替 x, 以 S 代替 - .
sticky_bit 若為 1 會改 others_x: 以 t 代替 x, 以 T 代替 - .
簡單來說, 若原來的 x 為 1 , 就是小寫, 為 0 則是大寫.
以上例來說, 最後結果將是:
110111101101
rwsr-sr-x

至於 umask 運算, 也是可從 permission bit 來運算的.
先抓出 directory 的 default mode: 0777
及 file 的 default mode: 0666
然後將 umask bit 的 1 所對的位置設為 0 就是了.
以 umask 0123 為例吧, 換為 2 進為就是:
000001010011
對應 new file 的 0666:
000110110110
結果, 凡是 umask 1 的位置都設為 0, 得:
000110100100
再轉回 8 進位就是:
0644

若你簡單用減法來算的話, 是不對的:
0666
-0123
-------
0543 (000101100011)

真的公式可參考這個:
(bitwise_NOT umask) AND default_mode = new_permission
上例:
(bitwise_NOT 0123) AND 0666 = 0644

計算過程如下:
000001010011
bitwise_NOT 得:
111110101100
AND
000110110110
得:
000110100100
換算為 8 進位, 就是:
0644

用 2 進位來算是最接近電腦思維的方法, 也是最準確的.
只是人們一般不習慣 2 進位思維而已, 一旦熟悉之後就萬變不離其宗了!


_________________
情难自禁,我其实属于极度咸湿的男人~~


最后由 cafee 编辑于 2010-12-01 12:25,总共编辑了 3 次

页首
 用户资料  
 
4 楼 
 文章标题 : Re: 文件安全与权限 学习笔记
帖子发表于 : 2010-11-30 18:29 
头像

注册: 2009-05-11 9:38
帖子: 14
送出感谢: 1
接收感谢: 0 次
举例:
代码:
chan@chan-Think:~$ touch test                       //创建test文件   
chan@chan-Think:~$ ls -l test
-rw-r--r-- 1 chan chan 0 2010-11-30 18:23 test
chan@chan-Think:~$ chmod a+x test             //给所有用户添加执行的权限
chan@chan-Think:~$ ls -l test
-rwxr-xr-x 1 chan chan 0 2010-11-30 18:23 test
chan@chan-Think:~$ chmod go+w test         //给组用户和other用户添加写的权限
chan@chan-Think:~$ ls -l test
-rwxrwxrwx 1 chan chan 0 2010-11-30 18:23 test
chan@chan-Think:~$ chmod o-w test           //删除other用户写的权限
chan@chan-Think:~$ ls -l test
-rwxrwxr-x 1 chan chan 0 2010-11-30 18:23 test



_________________
情难自禁,我其实属于极度咸湿的男人~~


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 文件安全与权限 学习笔记
帖子发表于 : 2010-11-30 18:46 
头像

注册: 2009-05-11 9:38
帖子: 14
送出感谢: 1
接收感谢: 0 次
绝对模式

chmod命令绝对模式的一般形式为:

chmod [mode] file

其中m o d e是一个八进制数。
在绝对模式中,权限部分有着不同的含义。每一个权限位用一个八进制数来代表,如
代码:
   1. 0 4 0 0 文件属主可读
   2. 0 2 0 0 文件属主可写
   3. 0 1 0 0 文件属主可执行
   4.

   5. 0 0 4 0 属组用户可读
   6. 0 0 2 0 属组用户可写
   7. 0 0 1 0 属组用户可执行
   8.

   9. 0 0 0 4 其他用户可读
  10. 0 0 0 2 其他用户可写
  11. 0 0 0 1 其他用户可执行

有一个计算八进制权限表示的更好办法,如下:
代码:
   1. 文件属主:r w x:4 + 2 + 1
   2. 属组用户:r w x:4 + 2 + 1
   3. 其他用户:r w x:4 + 2 + 1

代码:
-rwx-rw- r-x 1 chan chan 0 2010-11-30 18:23 test
-421-42-4-1
user = 7   
group = 6
 other = 5

把相应权限位所对应的值加在一起,就是765
代码:
   1. chmod 666 rw- rw- rw- 赋予所有用户读和写的权限
   2. chmod 644 rw- r-- r- - 赋予所有文件属主读和写的权限,所有其他用户读权限
   3. chmod 744 rwx r-- r- - 赋予文件属主读、写和执行的权限,所有其他用户读的权限
   4. chmod 664 rw- rw- r- - 赋予文件属主和属组用户读和写的权限,其他用户读权限
   5. chmod 700 rwx --- --- 赋予文件属主读、写和执行的权限
   6. chmod 444 r-- r-- r- - 赋予所有用户读权限


_________________
情难自禁,我其实属于极度咸湿的男人~~


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 文件安全与权限 学习笔记
帖子发表于 : 2010-12-01 10:48 
头像

注册: 2009-05-11 9:38
帖子: 14
送出感谢: 1
接收感谢: 0 次
chown和chgrp

当你创建一个文件时,你就是该文件的属主。一旦你拥有某个文件,就可以改变它的所有权,把它的所有权交给另外一个/ e t c / p a s s w d文件中存在的合法用户。可以使用用户名或用户I D号来完成这一操作。

在改变一个文件的所有权时,相应的s u i d也将被清除,这是出于安全性的考虑。只有文件的属主和系统管理员可以改变文件的所有权。一旦将文件的所有权交给另外一个用户,就无法再重新收回它的所有权。如果真的需要这样做,那么就只有求助于系统管理员了。
1、c h o w n命令的一般形式为:
代码:
chmod -R -h owner file

引用:
- R选项意味着对所有子目录下的文件也都进行同样的操作。
- h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。

2、chown举例
代码:
   1. 如:
   2. # ls -l
   3. drwxrwxr-x    2 sam      sam          4096 10月 26 19:48 sam
   4. # chown gem sam
   5. # ls -l
   6. drwxrwxr-x    2 gem      sam          4096 10月 26 19:48 sam

文件sam的所有权现在由用户sam交给了用户gem。

3、chgrp举例

c h g r p命令和c h o w n命令的格式差不多,下面给出一个例子。
代码:
   1. # ls -l
   2. drwxrwxr-x    2 gem      sam          4096 10月 26 19:48 sam
   3. # chgrp group sam
   4. # ls -l
   5. drwxrwxr-x    2 gem      group        4096 10月 26 19:48 sam

现在把该文件sam所属的组由sam变为group。
可以用#cat /etc/passwd和#cat /etc/group直接查看用户和组
代码:
chan@chan-Think:/tmp$ id
uid=1000(chan) gid=1000(chan) 组=1000(chan),4(adm),20(dialout),24(cdrom),46(plugdev),111(lpadmin),119(admin),122(sambashare)


_________________
情难自禁,我其实属于极度咸湿的男人~~


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 文件安全与权限 学习笔记
帖子发表于 : 2010-12-02 10:08 
头像

注册: 2009-05-11 9:38
帖子: 14
送出感谢: 1
接收感谢: 0 次
umask

当最初登录到系统中时, u m a s k命令确定了你创建文件的缺省模式。这一命令实际上和c h m o d命令正好相反。你的系统管理员必须要为你设置一个合理的u m a s k值,以确保你创建的文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。

在已经登录之后,可以按照个人的偏好使用u m a s k命令来改变文件创建的缺省权限。相应的改变直到退出该s h e l l或使用另外的u m a s k命令之前一直有效。

一般来说,u m a s k命令是在/ e t c / p r o f i l e文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的u m a s k,可以在该文件中加入相应的条目。如果希望永久性地设置自己的u m a s k值,那么就把它放在自己$ H O M E目录下的. p r o f i l e或. b a s h _ p r o f i l e文件中。
代码:
umask nnn
nnn=000~777

u m a s k命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、属组、其他用户)存在一个相应的u m a s k值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用c h m o d命令增加这一权限。目录则允许设置执行权限,这样针对目录来说, u m a s k中各个数字最大可以到7。
引用:
1) 文件的最大权限rwx rwx rwx (777)
2) umask值为0 0 2 - - - - - - -w-
3) 目录权限rwx rwx r-x (775) 这就是目录创建缺省权限
4) 文件权限rw- rw- r-- (664) 这就是文件创建缺省权限

引用:
1) 文件的最大权限rwx rwx rwx (777)
2 ) u m a s k值为0 2 2 - - - -w- -w-
3) 目录权限rwx r-x r-x (755) 这就是目录创建缺省权限
4) 文件权限rw- r-- r-- (644) 这就是文件创建缺省权限

可以看出来umask是一个取反的运算,跟IP的掩码相似


_________________
情难自禁,我其实属于极度咸湿的男人~~


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译