始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

管理Linux文件权限和所有权 (1)

发布时间:  2012/8/7 17:47:50

  为了最有效地利用本系列中的文章,您应该具有基本的 Linux 知识,并需要准备一个 Linux 系统,用于练习本文介绍的命令。有时候不同版本的程序输出格式不同,因此您所得到的结果未必总是与这里所示的清单和图相同。
  用户和组
  现在,您了解了 Linux 是一个多用户的系统,每个用户属于一个主要 组,也可能是附加组。也可以作为一个用户登录,然后使用 su 或者 sudo -s 命令变为另一个用户。Linux 的文件所有权和访问授权是与用户 id 和组密切相关的,所以我们要复习一下基本的用户和组信息。
  我是谁?
  如果没有切换到其他用户,您的 id 就是登录时的。如果切换到其他用户,在本文的大多数例子中,您的提示中就会包括您的用户 id。如果您的提示没有包括用户 id,可以使用 whoami 命令来检查您当前有效的 id。清单 1 显示了一些例子,说明了提示字符串(来自 PS1 环境变量)与本文中的其他例子不同。在提示字符串中包含您的 id 是一个有用的功能。
  清单 1. 决定有效的用户 id
  /home/ian$ whoami
  tom
  /home/ian$ exit
  exit
  $ whoami
  ian
  我在什么组中?
  类似的,您可以使用 groups 命令找出您在什么组中。使用 id 命令,您可以找出用户和组信息。添加一个用户 id 参数到 groups 或者 id 来查看该用户 id 的信息,而并非当前用户 id。查看 清单 2 中的示例。请注意,没有用户 id,id 命令也会显示 SELinux 上下文和基本 id 信息。
  清单 2. 决策组成员
  [ian@echidna ~]$ id
  uid=1000(ian) gid=1000(ian) groups=1000(ian),505(development),8093(editor)
  context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
  [ian@echidna ~]$ id ian
  uid=1000(ian) gid=1000(ian) groups=1000(ian),8093(editor),505(development)
  [ian@echidna ~]$ groups
  ian development editor
  [ian@echidna ~]$ id tom
  uid=1012(tom) gid=1012(tom) groups=1012(tom),505(development)
  [ian@echidna ~]$ groups tom
  tom : tom development
  [ian@echidna ~]$ su tom
  Password:
  [tom@echidna ian]$ groups
  tom development
  [tom@echidna ian]$ groups ian
  ian : ian editor development
  文件的所有权和权限
  如果每个用户都有 id 并且是主要组的成员,那么 Linux 系统上的每个文件都有一个所有者和与其相关的组。
  普通文件
  使用 ls -l 命令显示所有者和组。
  清单 3. 决定文件所有权
  [ian@echidna ~]$ ls -l /bin/bash .bashrc helloworld.C
  -rw-r--r--. 1 ian  ian            124 Mar 31  2010 .bashrc
  -rwxr-xr-x. 1 root root        943360 May 21  2010 /bin/bash
  -rw-rw-r--. 1 ian  development    116 Nov 30 10:21 helloworld.C
  在这个特殊的例子中,用户 ian 的 .bashrc 文件由他自己所有,并且属于 ian 的主要组。类似的,/bin/bash 由用户 root 所有,并且位于组 root。但是,helloworld.C 由用户 ian 所有,但是属于组 development。用户名和组名来自不同的名称空间,所以给定的名称可能同时是用户名和组名。事实上,很多版本默认为每个新用户创建一个匹配的组。
  Linux 权限模型每个文件系统对象有 3 种类型。这些权限就是读(r),写(w)和执行(x)。写权限包括修改和删除对象的能力。此外,这些权限被分别指定给文件所有者、文件组成员和其他人。
  回到清单 3 第一列,注意,它包括一个 11 个字符的字符串。这第 11 个字符是最近才添加的。我们稍后再讨论。第一个字母描述了对象的类型(- 在这个例子中表示普通文件),剩下的 9 个字母每三个字母为一组。第一组表示文件所有者的读、写和执行权限。- 表示相应的权限没有被授予。因此,用户 ian 就可以读和写 .bashrc 文件,但是不能执行它;而 root 可以读、写 和 执行 /bin/bash 文件。第二组表示文件组的读、写和执行权限。development 组的成员能够读或者写 ian 的 helloworld.C 文件,而其他人只能读。类似的,root 组中的成员和其他人能够读或者执行 /bin/bash 文件。
  目录
  目录和常规文件一样使用相同的权限标识,但是它们的翻译不同。目录的读权限允许用户使用该权限列出目录内容。写权限意味着用户使用该权限能够在目录中创建或者删除文件。执行权限允许用户输入目录并访问任意子目录。没有执行权限,目录下的文件系统对象就是不可访问的。没有读权限,目录下的文件系统对象在目录清单下就是不可见的,但是如果知道磁盘上对象的完整路径,这些对象仍是可访问的。清单 4 是说明这些问题的非常人工的例子。
  清单 4. 权限和目录
  [ian@echidna ~]$ ls -l /home
  total 32
  drwxr-x---. 38 editor   editor      12288 Nov 30 10:49 editor
  drwxr-x---.  4 greg     development  4096 Nov 30 12:44 greg
  drwx------. 21 gretchen gretchen     4096 Nov 30 11:26 gretchen
  drwxr-xr-x. 41 ian      ian          4096 Nov 30 10:51 ian
  drwx------. 21 ianadmin ianadmin     4096 May 28  2010 ianadmin
  d-wx--x--x. 21 tom      tom          4096 Nov 30 11:30 tom
  [ian@echidna ~]$ ls -a ~greg/.ba*
  /home/greg/.bash_history  /home/greg/.bash_profile
  /home/greg/.bash_logout   /home/greg/.bashrc
  [ian@echidna ~]$ ls -a ~gretchen
  ls: cannot open directory /home/gretchen: Permission denied
  [ian@echidna ~]$ ls -a ~tom
  ls: cannot open directory /home/tom: Permission denied
  [ian@echidna ~]$ head -n 3 ~tom/.bashrc
  # .bashrc
  # Source global definitions
  长清单的第一个字母表示对象的类型(d 表示目录)。用户 greg 的主目录有 development 组成员的读和写权限,因此用户 tom 和 ian 能够列出目录。用户 gretchen 的主目录没有 gretchen 组或者其他用户的读和执行权限,所以用户 ian 不能访问它。用户 tom 的主目录有执行权限,但是没有读权限,所以用户 ian 不能列出内容,但是如果知道对象存在,就可以访问目录下的对象。
  其他文件系统对象
  ls -l 的输出可能包含文件系统对象,而不是文件和目录,如清单中第一个字母所示。在后面的文章中我们还会见到更多,但是现在,只是说明可能的对象类型。
  表 1. 文件系统对象类型
  代码 对象类型
  - 常规文件
  d 目录
  l 符号链接
  c 字符特殊设备
  b 模块特殊设备
  p FIFO
  s 套接字
  第 11 个字符
  来自 ls 命令中长清单的第 11 个字符是最近才出现的,所以部分版本仍只显示头 10 个字符。在其他情况下,第 11 个字符是一个空格,所以您可能没有注意到。这个字符表示是否有替换的访问方法应用到文件。当跟随文件模式位的字符是空格时,就表示没有替换访问方法。当是一个可打印字符时,就有替换方法。这个方法可能是例子的访问控制清单。GNU ls 使用一个 ‘.’(点)来表示文件只有一个 SELinux 安全上下文。有其他替换访问方法的文件用 ‘+’(加号)表示。
  变更权限
  添加权限
  假设您创建一个 “Hello world” 的 shell 脚本。当您第一次创建脚本时,它通常是不可执行的。使用 chmod 命令和 +x 选项添加执行权限,如清单 5 所示。
  清单 5. 创建可执行的 shell 脚本
  [ian@echidna ~]$ echo 'echo "Hello world!"'>hello.sh
  [ian@echidna ~]$ ls -l hello.sh
  -rw-rw-r--. 1 ian ian 20 Nov 30 13:05 hello.sh
  [ian@echidna ~]$ ./hello.sh
  bash: ./hello.sh: Permission denied
  [ian@echidna ~]$ chmod +x hello.sh
  [ian@echidna ~]$ ./hello.sh
  Hello world!
  [ian@echidna ~]$ ls -l hello.sh
  -rwxrwxr-x. 1 ian ian 20 Nov 30 13:05 hello.sh
  您可以按类似的方法使用 +r 来设置读权限,使用 +w 设置写权限。事实上,您可以联合使用 r、w 和 x。例如,使用 chmod +rwx 将会设置文件的所有读、写和执行权限。chmod 会添加尚未设置的权限。
  可选性
  您在上面的例子中可能已经注意到,执行权限被设置给所有者、组 和 其他。为了更具可选性,您可以给模式描述加前缀 u 来设置用户权限,g 来设置组权限,还有 o 为其他人设置。需要指出的是 a 设置所有用户的权限,这就相当于忽略它。清单 6 显示了如何添加用户和组写和执行权限到 shell 脚本的其他副本。
  清单 6. 有选择性地添加权限
  [ian@echidna ~]$ echo 'echo "Hello world!"'>hello2.sh
  [ian@echidna ~]$ chmod ug+xw hello2.sh
  [ian@echidna ~]$ ls -l hello2.sh
  -rwxrwxr--. 1 ian ian 20 Nov 30 13:08 hello2.sh
  删除权限
  有时您需要删除权限,而不单单是添加。简单地将 + 改变为 -,就能删除任何已设置的指定权限。清单 7 显示了如何删除两个 shell 脚本上的其他用户的所有权限。
  清单 7. 删除权限
  [ian@echidna ~]$ ls -l hello*.sh
  -rwxrwxr--. 1 ian ian 20 Nov 30 13:08 hello2.sh
  -rwxrwxr-x. 1 ian ian 20 Nov 30 13:05 hello.sh
  [ian@echidna ~]$ chmod o-xrw hello*.sh
  [ian@echidna ~]$ ls -l hello*.sh
  -rwxrwx---. 1 ian ian 20 Nov 30 13:08 hello2.sh
  -rwxrwx---. 1 ian ian 20 Nov 30 13:05 hello.sh
  请注意,您可以一次改变一个或者多个文件的权限。正如在 topic 103 的文章中看到其他命令一样,您甚至可以使用 -R(或者 --recursive)选项在目录和文件上进行递归操作。
  设置权限
  现在已经可以添加或者删除权限了,您可能会想,怎样才能只设置一些特殊权限。使用 = 替换 + 或者 - 来完成这个动作。要在上述脚本中设置权限,这样其他用户就没有访问权利,您可以使用 chmod o= hello* 替换我们用于删除权限的命令。
  如果您想对用户、组合或其他设置不同的权限,您可以通过逗号分隔不同的表达;例如,ug=rwx,o=rx,或者您可以使用稍后提到的数字权限。
  八进制权限
  目前为止,您都是使用符号(ugoa 和 rxw)来指定权限。每组中有三个可能的权限。您还可以使用八进制取代符号设置权限。按这种方法设置的权限使用高达 4 位八进制数字。讨论属性时,我们会查看第 1 个数字。第 2 个数字定义了用户权限,第 3 个是组权限,第 4 个是其他权限。这三个数字中的每一个都通过添加所需的权限设置来构建:读(4),写(2)和执行(1)。在 清单 5 中的 hello.sh 例子中,创建的脚本有权限 -rw-r--r--,相当于八进制 644。设置每个人的执行权限将模式改为 755。
  当您想要一次设置所有权限,而不给予每个组相同权限时,设置使用数字权限非常方便。使用 表 2 作为一个方便的八进制权限参考。
  表 2. 数字权限
  符号 八进制
  rwx 7
  rw- 6
  r-x 5
  r-- 4
  -wx 3
  -w- 2
  --x 1
  --- 0
  suid 和 sgid
  Linux 权限模型有两个特殊的访问模式,名为 suid(设置用户 id)和 sgid(设置组 id)。当可执行的程序设置为 suid 访问模式,它就会开始运行,好像是由文件所有者启动而不是由真正启动它的用户启动。类似的,设置为 sgid 访问模式,程序就会运行,好像启动用户属于文件组,而不属于他所有的组。可以单独或者同时设置两个访问模式。
  清单 8 显示了可执行的 passwd 由 root 所有:
  清单 8. /usr/bin/

亿恩科技地址(ADD):郑州市黄河路129号天一大厦608室 邮编(ZIP):450008 传真(FAX):0371-60123888
   联系:亿恩小凡
   QQ:89317007
   电话:0371-63322206


本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线