免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: wingger
打印 上一主题 下一主题

类UNIX系统基础:文件安全与权限 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
31 [报告]
发表于 2004-11-08 22:28 |只看该作者

类UNIX系统基础:文件安全与权限

如何计算umask值


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

  1. umask nnn
复制代码


其中n n n为u m a s k置0 0 0 - 7 7 7。

计算u m a s k值:

可以有几种计算u m a s k值的方法,通过设置u m a s k值,可以为新创建的文件和目录设置缺省权限。

与权限位相对应的u m a s k值。

  1. umask                文件                目录
  2. 0                6                7
  3. 1                 6                6                           
  4. 2                4                5
  5. 3                4                4
  6. 4                2                3
  7. 5                2                2
  8. 6                0                1
  9. 7                0                0
复制代码


在计算u m a s k值时,可以针对各类用户分别按上面那张表中按照所需要的文件/目录创建缺省权限查找对应的u m a s k值。
例如,u m a s k值
  1. 0       6    7
  2. 0       6    7
  3. 2       4    5
复制代码

所以002所对应的文件和目录创建缺省权限分别为6 6 4和7 7 5。

还有另外一种计算u m a s k值的方法。我们只要记住u m a s k是从权限中“拿走”相应的位即可。


  1. umask                文件                目录
  2. 0                6                7
  3. 1                 6                6                           
  4. 2                4                5
  5. 3                4                4
  6. 4                2                3
  7. 5                2                2
  8. 6                0                1
  9. 7                0                0
复制代码


例如,对于u m a s k值0 0 2,相应的文件和目录缺省创建权限是什么呢?

第一步,我们首先写下具有全部权限的模式,即7 7 7 (所有用户都具有读、写和执行权限)。
第二步,在下面一行按照u m a s k值写下相应的位,在本例中是0 0 2。
第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。
稍加练习就能够记住这种方法。
第四步,对于文件来说,在创建时不能具有文件权限,只要拿掉相应的执行权限比特即可。


这就是上面的例子,其中u m a s k值为0 0 2:

1) 文件的最大权限rwx rwx rwx (777)
2) umask值为0 0 2 - - - - - - -w-
3) 目录权限rwx rwx r-x (775) 这就是目录创建缺省权限
4) 文件权限rw- rw- r-- (664) 这就是文件创建缺省权限


下面是另外一个例子,假设这次u m a s k值为0 2 2:

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 值,可以使用u m a s k命令:

  1. #su sam    /*切换到sam用户玩境下
  2. #umask    /*查看sam的umask
  3. 0022
  4. 前面多了个0,是suid/guid的
复制代码


  1. $ touch file1
  2. $ mkdir file2
  3. $ ls -l
  4. 总用量 8
  5. -rw-r--r--    1 sam      adm             0 10月 30 19:27 file1
  6. drwxr-xr-x    2 sam      adm          4096 10月 30 19:28 file2
复制代码

新建文件file1和目录file2,查看新建文件和目录的默认权限,umask为022时
目录权限rwx r-x r-x (755)
文件权限rw- r-- r-- (644)


更改umask默认值由022至002


  1. $ umask 002
  2. $ touch file3
  3. $ ls -l
  4. 总用量 12
  5. -rw-r--r--    1 sam      adm             0 10月 30 19:27 file1
  6. drwxr-xr-x    2 sam      adm          4096 10月 30 19:28 file2
  7. -rw-rw-r--    1 sam      adm             0 10月 30 19:34 file3
  8. drwxrwxr-x    2 sam      adm          4096 10月 30 19:34 file4
复制代码

可以看到,新建文件和目录的默认权限改变了,umask为002时
目录权限rwx rwx r-x (775)
文件权限rw- rw- r-- (664)


可以看见,$ umask 002已生效

论坛徽章:
0
32 [报告]
发表于 2004-11-09 09:30 |只看该作者

类UNIX系统基础:文件安全与权限

原帖由 "netocool" 发表:
一个目录可以属于多个用户吗?

因为现在是要求某个目录可以使属主同组的部分用户可以读写,但是同组的部分用户不能写

这个要求怎么实现呢?

可以做到,使用ACL文件许可权扩展设置

论坛徽章:
0
33 [报告]
发表于 2004-11-09 09:44 |只看该作者

类UNIX系统基础:文件安全与权限

[quote]原帖由 "xdrxsp492"]如果我想对LINUX做审核,例如说要记录某个文件在什么时候被什么人访问了,等等,该如何设置呢?[/quote 发表:

用find可以查找什么时候被访问过,至于被谁访问过,是不是要结合last、fuser或审计日志了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
34 [报告]
发表于 2004-11-09 10:33 |只看该作者

类UNIX系统基础:文件安全与权限

原帖由 "明月清风" 发表:

用find可以查找什么时候被访问过,至于被谁访问过,是不是要结合last、fuser或审计日志了


在这里看到你,呵呵

  1. 补充umask的另一种用法,书上没有的,我觉得这个比较方便
复制代码


先说一下umask在不同玩境下的不同

  1. 1、bash
  2. umask [-p] [-S] [mode]

  3. 2、tcsh
  4. umask [value]
复制代码



说明

    当新增文件或目录时,预设的使用权限,由 umask 这个内设值所规定的。
    一般情况下,umask 会被设定在 shell 的启始档案中。

    对 bash 的使用者来说,个人的启始档案是 $HOME/.bashrc,使用者可以将 umask 设定在其中。像 RedHat 9 是放 /etc 之下,档名为 bashrc。
    当使用者没有自行设定,umask 设定值便来自于此系统的默认设定。

    tcsh 的个人启始档案为 ~/.tcshrc,系统设定文件在 /etc/csh.cshrc。

  1. linux 操作系统的角度,完整的权限设定值是四位数字。
  2. 第一位数,代表档案或目录的特殊属性。 4 代表 "suid"﹔2 代表 "sgid"﹔1 代表 "粘滞位 - save text image"。
  3. 后三位数,依序代表 "user-档案拥有者","group-群组","other-其它"。
  4. 每一位数,代表三种权限的叠加,4-读(r),2-写(w),1-执行(x)。
  5. 被禁止的权限则以 0 带入。
复制代码

    对 umask 来说,有效的设定值只有后三位数。在 bash 中,虽然可带入四位数字,但第一个数字,必须为 0。这点请注意。

  1. 指令 umask 的设定值以三个八进位的数字“nnn”代表。
  2. 第一个设定数字给使用者自己(owner user),
  3. 第二个则是设定给用使用者所属的群体(group),
  4. 第三个给不属于同群体的其它使用者(other)。
  5. 每一位数字的设定值都是三项不同权限的数值加总,read 权限数值为 4;write 权限数值为 2;execute 权限数值为 1。
  6. 结合了前三者的权限数值,单一的数字可设定的范围是 0 ~ 7;整体的可设定范围是 000 ~ 777。
复制代码


umask 的设定值,对目录,与对档案的实质作用是有差别的。


  1. 注意:

  2. 当我们设定为 000 时,会得到完全开放的目录权限 777,以及文件权限 666。为何文件只得到 666 呢?因为文件权限中的 execute 权限已被程序移除,因此,不管你设定什么 umask 数值,文件都不会出现 execute 权限。
复制代码



umask 语法如下:

  1. umask who operator permissions
复制代码


其中,参数的含义如下:

  1. who:表示下列字符中的一个、两个或全部:

  2. u(表示用户权限)
  3. g(表示组用户权限)
  4. o(表示其他用户权限)
  5. a (ugo 的缩写形式)
复制代码


如果忽略了字符 who,operator 和 permissions 将适用于所有类(等同于 a 或 ugo)。

  1. operator:字符 +、- 或 = 之一:

  2. + 增加权限。
  3. - 取消权限。
  4. = 设定权限。
复制代码

  1. permissions:字符或字符组合 r、w、x、rx、wx、rw 或 rwx 之一,用于为相应的 who 和 operator 指定读、写和(或)执行(搜索)权限。

  2. 如果未指定 permissions,则相应的 who 中的现有文件创建模式掩码不会发生更改。
复制代码



如果在 shell 提示符下设置 umask,它将只适用于当前登录会话中的 shell 和 subshell。但不适用于以后登录的会话。要在登录时自动应用 umask 设置,请将 umask 命令添加到 .profile 文件(对于 POSIX 和 Bourne Shell 用户)或 .login 文件中(对于 C Shell 用户)。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
35 [报告]
发表于 2004-11-09 10:45 |只看该作者

类UNIX系统基础:文件安全与权限

选项说明

  1. bash

  2.           -S

  3. 以 "u=rwx,g=rx,o=rx" 这种较人性的格式取代数字显示。
复制代码


  1. -p

  2. 当使用 -p 选项,但 mode 省略,输出格式为 umask mode (可以做为下 umask 指令使用)。当模式改变成功,或 mode 参数被省略,执行的状态值为 0。否则状态值为 1。
复制代码



实例说明

bash

首先,让我们先显示目前环境的 umask 设定情况

  1. # umask
  2. 0022
  3. #
复制代码


得到的数值为 "0022"。所以,建立新档案的预设权限是 644,目录则是755。如果不习惯看数字,我们可以使用 -S 选项来显示设定值

  1. # umask -S
  2. u=rwx,g=rx,o=rx
  3. #
复制代码


实际建个档案与目录看看

  1. # ls >; fileA
  2. # mkdir dirB
  3. # ls -l
  4. 总计 8
  5. drwxr-xr-x    2 root     root         4096 12月 21 16:42 dirB
  6. -rw-r--r--    1 root     root            6 12月 21 16:42 fileA
  7. #
复制代码


可以看到文件和目录的不同

  1. tcsh

  2. $ umask
  3. 22
  4. $
  5. $ umask 000
  6. $ umask
  7. 0
  8. $  
复制代码


从以上,我们可以知道,tcsh 简单到连 0 都懒的显示...

要设置 umask 值,使文件所有者具有读写执行权限,属组的其他用户具有只读权限,除此之外的其他用户没有访问权限 (-rw-r-------),请输入以下内容:


  1. $ umask u=rwx,g=r,o=r
  2. $ touch file5
  3. $ mkdir file6
  4. $ ls -l
  5. 总用量 16
  6. -rw-r--r--    1 sam      adm             0 10月 30 19:48 file5
  7. drwxr--r--    2 sam      adm          4096 10月 30 19:48 file6
复制代码



要确定当前的 umask 设置,请键入:


  1. $ umask -S
  2. u=rwx,g=r,o=r
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
36 [报告]
发表于 2004-11-09 15:57 |只看该作者

类UNIX系统基础:文件安全与权限

符号链接

存在两种不同类型的链接,软链接和硬链接。修改其中一个,硬连接指向的是节点(inode),而软连接指向的是路径(path)



软链接文件

  软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和win下的快捷方式差不多。链接文件甚至可以链接不存在的文件,这就产生一般称之为"断链"的问题(或曰“现象",链接文件甚至可以循环链接自己。类似于编程语言中的递归。

命令格式:
  1. ln [-s] source_path target_path
复制代码


硬链接文件

  info ln 命令告诉您,硬链接是已存在文件的另一个名字,硬连接的命令是

  1. ln -d existfile newfile
复制代码

硬链接文件有两个限制

  1、不允许给目录创建硬链接;
  2、只有在同一文件系统中的文件之间才能创建链接。


  对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。修改其中一个,与其连接的文件同时被修改

举例 说明:

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
37 [报告]
发表于 2004-11-09 16:29 |只看该作者

类UNIX系统基础:文件安全与权限

  1. $umask 022
  2. $ cp /etc/httpd/conf/httpd.conf /usr/sam
复制代码

原来前面做的试验,改变了系统默认的umask值,现在改回来为022,
举个httpd.conf文件做例 子

  1. $ ln httpd.conf httpd1.conf
  2. $ ln -s httpd.conf httpd2.conf
复制代码


第一条为硬链接,第二条为软链接

  1. $ ls -li
复制代码
  1. 总用量 80
  2. 1077669   -rw-r--r--    2 sam      adm         34890 10月 31 00:57 httpd1.conf
  3. 1077668  lrwxrwxrwx    1 sam      adm            10 10月 31 00:58 httpd2.conf ->; httpd.conf
  4. 1077669  -rw-r--r--    2 sam      adm         34890 10月 31 00:57 httpd.conf
复制代码


可以看到,使用ls -li,软连接只产生了10字节的快捷而已,硬连接却实实在在的的拷贝。最前面的inode硬链接和源文件是一样的,而软链接不一样,具体看一下回复这话有误,但先这么理解,具体请看下面的回复

对http1.conf进行编辑,可以发现httpd.conf也发生了一样的变化

  1. $ rm httpd.conf
复制代码


现在删除链接的源文件,来比较不同之处

  1. $ ls -l
  2. 总用量 44
  3. drw-r--r--    2 sam      adm          4096 10月 30 20:14 file6
  4. -rw-r--r--    1 sam      adm         34890 10月 31 00:57 httpd1.conf
  5. lrwxrwxrwx    1 sam      adm            10 10月 31 00:58 httpd2.conf ->; httpd.conf
复制代码


发现,httpd2.conf实际已经不存在了,是断链,而httpd1.conf变也了普通文件

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
38 [报告]
发表于 2004-11-09 16:51 |只看该作者

类UNIX系统基础:文件安全与权限

终于看完以上内容了,第三页的和书上大有出入哦,

主要有以上内容:
  1. 文件权限位
  2. 基本命令
  3. chmod
  4. suid/guid
  5. chown
  6. chgrp
  7. umask算法和用法
  8. 符号链接
复制代码


同时谢谢各位的帮助,呵呵,建议补学都看看,大有益处!!!
                  

论坛徽章:
0
39 [报告]
发表于 2004-11-09 16:52 |只看该作者

类UNIX系统基础:文件安全与权限

可以说具体点吗?看不懂啊

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
40 [报告]
发表于 2004-11-09 16:56 |只看该作者

类UNIX系统基础:文件安全与权限

[quote]原帖由 "明月千里寄相思"]可以说具体点吗?看不懂啊[/quote 发表:


这这这,俺学得已经说得好简单了耶!!!!!

最好装一个系统,边看边练,就容易多了,我也是这么过来的,都看明白了我
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP