查看源代码
出自Linux Wiki
对
文件权限
的源代码
根据以下的原因,您无权限进行编辑这个页面操作:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
出于安全的考虑,多用户操作系统需要具备保障个人隐私和系统安全的机制。在[[Linux]]中,无论是文档还是硬件设备都以文件的形式存在,相应地,安全机制也主要表现为对文件访问权限的控制。<ref>[http://linux.chinaitlab.com/administer/38992.html Linux文件和目录访问权限设置]</ref><ref>[http://blog.chinaunix.net/space.php?uid=9408581&do=blog&id=2003865 Linux文件权限隐藏的细节深入分析]</ref><ref>[http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-104-5/index.html?ca=drs- IBM Developer Networks: 学习 Linux,101: 管理文件权限和所有权]</ref> {{Hint|除了本文所讨论的内容之外,[[SELinux]](Security-Enhanced Linux)是另一种著名的安全机制,它是美国国家安全局(NAS)对于强制访问控制的实现,是一种更为可靠,也明显更为复杂的安全机制。在[[Fedora]]和[[Red Hat Enterprise Linux]]上默认安装了这一机制。}} ==权限的定义== ===基础权限=== 要确定一个用户对某个文件或目录是否具有相应的权限,先要明确该用户与文件或目录之间的关系。在Linux系统中,定义了如下三种关系: ;文件所有者(owner):拥有文件的用户。创建文件时是创建文件的用户(可用<tt>whoami</tt>命令查看)。 ;组(group):文件所属的组。创建文件时用户的组(可用<tt>id</tt>命令查看)。 ;其他人(other):既不是文件所有者,也不是文件所属的组的成员的其他用户。 根据用户对文件或目录操作种类的不同,又定义了三种操作权限,并为每种权限赋予一个简写形式和数值(数值的用途[[#权限的表示|后面]]讨论): <center> {| class=wikitable |- !权限 !! 简 !! 值 !! 对普通文件的作用 !! 对文件夹的作用<ref>[http://www.slyar.com/blog/linux-folder-permission.html Linux文件夹权限 学习笔记]</ref> |- | 读取 || r || 4 || 查看文件内容 || 列出目录中的文件(ls) |- | 写入 || w || 2 || 修改文件内容 || 在目录中删除、添加或重命名文件(夹) |- | 执行 || x || 1 || 文件可以作为程序执行 || 访问子目录及文件及shell中cd到此目录 |} </center> 上面的三种关系与三种操作权限的组合,构成了一个含有9个二进制位的权限标识。 ===特殊权限=== 还有三种与用户身份无关的三个文件权限属性。即'''SUID'''、'''SGID'''和'''Sticky'''。 ;SUID(Set User ID, 4):该属性只对有执行权限的文件有效,对目录无效。执行具有SUID权限的程序时,引发的进程的所有者是程序文件的所有者,而不是启动程序的用户(除非二者是同一个人)。比如,如果一个程序的所有者是root且具有SUID属性,一个普通用户执行此程序时,如同root执行此程序一样。<ref>[http://heather.cs.ucdavis.edu/~matloff/UnixAndC/CLanguage/SetUserID.html Set-User-ID Permission for Executable Files]</ref>('''请注意该属性对Shell脚本程序无效。''')该属性为一些特殊程序(如lpr)的启动带来了方便。但有时也带来了安全隐患:比如一个具有SUID属性的程序如果在执行时运行了一个shell,那么用户可以籍此得到系统的最高权限。SUID可用'''s'''表示。 {{Hint|consolehelper是一个更高级的用于提供用户权限的解决方案,见[[使用consolehelper获得root权限]]。}} ;SGID(Set Group ID, 2):对于可执行文件,SGID与SUID类似,引发的进程的所有组是程序文件所属的组。对于目录,SGID属性会使目录中新建文件的所属组与该目录相同。SGID也可以用'''s'''表示。 ;Sticky, 1:仅对目录有效。带sticky属性的目录下的文件或目录可以被其拥有者删除或改名。常利用sticky属性创建这样的目录:组用户可以在此目录中创建新文件、修改文件内容,但只有文件所有者才能对自己的文件进行删除或改名。如系统中的''/tmp''文件夹。在属性字符串中,通常用'''t'''表示。 {{Hint|最初sticky属性只可执行文件有效。正如其字面意思,它让具有sticky属性的可执行文件在执行结束后将程序代码仍滞留于内存中,以加快需要反复执行的大程序的装载速度。由于虚拟内存技术的引入,该功能已经没有意义。}} ==权限的表示== ===符号表示=== 一个文件的权限可以用字符串直观的表示,使用''[[ls]] -l''命令可以看到表示权限的字符串。 下面来看几个例子: -<font color=blue>rw-r--r--</font> 1 gnixnehc gnixnehc 131 08-12 13:22 '''normal_text''' -<font color=blue>rwxr-xr-x</font> 1 gnixnehc gnixnehc 6809 08-12 13:22 '''normal_exe''' d<font color=blue>rwxr-xr-x</font> 2 gnixnehc gnixnehc 4096 07-03 01:13 '''normal_dir''' -<font color=blue>rwsr-sr-x</font> 1 gnixnehc gnixnehc 6809 08-12 13:22 '''suid_exe''' d<font color=blue>rwxrwxrwt</font> 12 root root 16384 08-12 21:07 '''tmp''' 蓝色的部分就是权限字符串,权限表示三个为一组,依次是所有者权限、组权限、其他人权限。每组的顺序均为<tt>rwx</tt>,如果有相应权限,则表示成相应字母,如果不具有相应权限,则用<tt>-</tt>表示。 上面的例子中,第一行是一个普通文本文件,第二行是个普通的可执行程序,第三行是个普通的文件夹。第四行是带SUID、SGID的程序,最后一行则是''/tmp''的权限。 ===数值表示=== 为了简化表述,也可使用八进制数来表示权限。即用一个四位八进制数来表示,其中最高位表示特殊权限,随后的三位依次是所有者权限、组权限和其他人权限。每一个八进制位的权限数值是文件具有的相应权限所对应的数值之后,如: '''0755'''=rwxr-xr-x 而 rw---x-w-=0(4+2)(1)(2)='''0612''' {{Note|组权限覆盖其它人权限,如上例中,一个权限为<tt>0604</tt>的文件无法被其所属组的用户读取。}} ==修改权限== 文件所有者或超级用户可以修改一个文件或目录的权限。修改权限可以使用chmod命令,也可以使用桌面环境的文件管理程序。 如,<tt>chmod 700 foo</tt> 命令会将 ''foo'' 的权限更改为 700(见[[#数值表示]])。 除了使用八进制数值权限,还可以用 <tt>[ugoa][[+-=][rwxst]</tt> 格式设置相应权限。<ref>[http://www.ibm.com/developerworks/cn/linux/l-lpic3-315-1/index.html?ca=drs- IBM Developer Networks: 学习 Linux,302(混合环境): Linux 文件系统和共享/服务权限]</ref>第一个字符是u、g、 o 或 a 中的一个(分别表示用户、组、其他人和所有人)。还可以选择添加(+)、删除(-)或设置(=)各种不同权限。如 chmod u+x foo 可设置 foo 的执行位,并保持其他位不变。 chmod g-rw something 则可以移除组的读和写权限。 另一种使用 chmod 的方法是使用 <tt>--reference</tt> 参数: chmod --reference file1 file2 可以让 file2 的权限与 file1 一样。 要更改文件的所有者,可使用 <tt>chown</tt> 命令。如 chown sean foo 命令可将 ''foo'' 的所有者更改为 sean。只有根用户可以修改文件的所有者。 <tt>chgrp</tt> 命令可以更改文件的组。普通用户必须属于新的组。 ==参考资料== <references />
在这个页面上使用的模板有:
Template:Hint
(
查看源码
)
Template:Note
(
查看源码
)
返回到
文件权限
。
导航
首页
社区入口
当前事件
最近更改
随机页面
帮助
查看
页面
讨论
查看源代码
历史
个人工具
登录/创建账户
搜索
简体繁体转换
不转换
简体
繁體
工具箱
链入页面
链出更改
特殊页面