热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux文件系统的管理所有权和权限(2)

文章标题:Linux文件系统的管理所有权和权限(2)。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
    变更权限
    添加权限
    假设您创建一个 “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.shbash: ./hello.sh: Permission denied[ian@echidna ~]$ chmod +x hello.sh[ian@echidna ~]$ ./hello.shHello 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/passwd 上的 suid 访问模式
    [ian@echidna ~]$ ls -l /usr/bin/passwd
    -rwsr-xr-x. 1 root root 34368 Apr 6 2010 /usr/bin/passwd
    请注意,在用户的权限三件套中 x 的位置上有一个 s。这就表示,对这个特定的程序来说,suid 和可执行位已经被设置。所以,当 passwd 运行时,它就会像 root 用户使用完全的 superuser 访问一样加载它运行,而不是作为想运行该程序的用户。因为 passwd 和 root 访问一起运行,所以它可以修改 /etc/passwd。
    suid 和 sgid 位与长目录清单中用户和组的 x 占据相同的空间。如果文件是可执行的,suid 或 sgid 位如果已设置,将会显示为小写的 s,否则就显示为大写的 S。
    虽然 suid 和 sgid 很便利,甚至在很多环境下是必需的,但是这些访问模式不适当的使用会造成系统安全上的漏洞。您要尽量少地使用 suid 程序。passwd 命令是少数 必须 为 suid 的命令之一。
    设置 suid 和 sgid
    suid 和 sgid 位使用字母 s 在符号上进行设置和重设;例如,u+s 设置 suid 访问模式,g-s 删除 sgid 模式。在八进制格式中,suid 在第一位(高阶)为值 4,而 sgid 是值 2。
    目录和 sgid
    当一个目录使用 sgid 模式时,在这个目录中创建的任何文件和目录将会继承目录的组 id。这个对那些被从事同一项目的一组人使用的目录树极为有用。 清单 9 显示了用户 greg 任何设置一个 development 组所有用户都能使用的目录,以及一个示例,用户 gretchen 如何在目录上创建一个文件。正如所创建的,文件 gretchen.txt 允许组成员编辑文件,因此 gretchen 使用 chmod g-w 来取消组的写功能。
    清单 9. sgid 访问模式和目录
    [greg@echidna ~]$ mkdir lpi101
    [greg@echidna ~]$ chmod g+ws lpi101
    [greg@echidna ~]$ ls -ld lpi101
    drwxrwsr-x. 2 greg development 4096 Nov 30 13:30 lpi101/
    [greg@echidna ~]$ su - gretchen
    Password:
    [gretchen@echidna ~]$ touch ~greg/lpi101/gretchen.txt
    [gretchen@echidna ~]$ ls -l ~greg/lpi101/gretchen.txt
    -rw-rw-r--. 1 gretchen development 0 Nov 30 14:12 home/greg/lpi101/gretchen.txt
    [gretchen@echidna ~]$ chmod g-w ~greg/lpi101/gretchen.txt
    [gretchen@echidna ~]$ ls -l ~greg/lpi101/gretchen.txt
    -rw-r--r--. 1 gretchen development 0 Nov 30 14:12 /home/greg/lpi101/gretchen.txtdevelopment 组的任何成员现在都能够在用户 greg 的 lpi101 目录上创建文件了。正如 清单 10 所示,组的其他用户不能升级文件 gretchen.txt。但是,他们有对目录的写权限,因此可以删除文件。
    清单 10. sgid 访问模式和文件所有权
    [gretchen@echidna ~]$ su - tom
    Password:[tom@echidna ~]$ echo "something" 》 ~greg/lpi101/gretchen.txt-bash: /home/greg/lpi101/gretchen.txt: Permission denied[tom@echidna ~]$ rm ~greg/lpi101/gretchen.txtrm: remove write-protected regular empty file `/home/greg/lpi101/gretchen.txt'? y[tom@echidna ~]$ ls -l ~greg/lpi101/total 0粘贴位
    您刚看到了任何有目录写权限的人如何删除目录中的文件。这对一个工作组项目是可接受的,但是对全球共享的文件空间,例如 /tmp 目录,是不希望的。幸运的是,有解决方案。
    剩下的访问模式为就称为粘贴 位。用符号表示就是 t,用数字表示就是八进制位的高阶为 1。它显示在其他用户的可执行标识中(最后的字符)的长目录清单,而且 suid 和 sgid 的大小写意义相同。如果设置一个目录,它只允许有所有权的用户或者 superuser(root)删除或者解除文件链接。清单 11 显示了用户 greg 如何在他的 lpi101 目录上设置粘贴位,还显示了这个位设置用于 /tmp。
    清单 11. 粘贴目录
    [greg@echidna ~]$ chmod +t lpi101
    [greg@echidna ~]$ ls -ld lpi101 /tmp
    drwxrwsr-t. 2 greg development 4096 Nov 30 14:16 lpi101
    drwxrwxrwt. 24 root root 12288 Nov 30 14:22 /tmp在以前,UNIX? 系统曾在文件上使用粘贴位在交换空间囤积可执行文件,避免重新加载。现代 Linux 内核忽略了粘贴位,如果它是设置给文件的。
    访问模式的总结
    表 3 总结了这里讨论的 3 种访问模式的符号和八进制表示。
    表 3. 访问模式
    访问模式 符号 八进制
    suids with  u  4000
    sgids with  g 2000
    sticky t 1000
    将这些和早先的权限信息结合在一起,您可以看到对应 greg 的 lpi101 权限和 drwxrwsr-t 访问模式的完整的八进制表示是 3775。虽然 ls 命令不显示八进制权限,您可以使用 find 命令进行显示,如清单 12清单 12 所示。
    清单 12. 可打印的符号和八进制权限
    [greg@echidna ~]$ find . -name lpi101 -printf "%M %m %f\n"drwxrwsr-t 3775 lpi101

[1] [2] 下一页


推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
author-avatar
楠楠2502858265
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有