`
56553655
  • 浏览: 204300 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux 权限分配

阅读更多

一个用户一个组
我们来看一看 Linux 权限和所有权模型我们已经看到每个文件属于一个用户和一个组这正是 Linux 中权限模型的核心您可以在 ls -l 清单中查看用户和组:

$ ls -l /bin/bash     

-rwxr-xr-x 1 root     wheel    430540 Dec 23 18:27 /bin/bash
在这个特殊的示例中,/bin/bash 可执行文件属于 root 用户,并且在 wheel 组中Linux 权限模型通过允许给每个文件系统对象设置三种独立的权限级别来工作 它们为文件的所有者文件的组以及所有其他用户

理解ls -l

我们来看一看我们的 ls -l 输出,检查一下这个清单的第一栏:

$ ls -l /bin/bash
-rwxr-xr-x 1 root     wheel    430540 Dec 23 18:27 /bin/bash
第一个字段 -rwxr-xr-x 包含该特殊文件的权限的符号表示该字段中的首字符(-)指定该文件的类型,本例中它是一个常规文件其它可能的首字符还有:
d目录
l符号链接
c字符专门设备文件
b块专门设备文件
p先进先出
s套接字
三个三元组
$ ls -l /bin/bash
-rwxr-xr-x 1 root     wheel    430540 Dec 23 18:27 /bin/bash
该字段的其余部分由三个三元组字符组成第一个三元字符组代表文件所有者的权限,第二个代表文件的组的权限,第三个代表所有其他用户的权限:
"rwx"
"r-x"
"r-x"
上 面,r 表示允许读(查看文件中的数据),w 表示允许写(修改文件以及删除),x 表示允许执行(运行程序)将所有这些信息放在一起,我们可以发现每个人都能够读该文件的内容和执行该文件,但是只允许文件所有者(root 用户)可以以任何方式修改该文件因此,虽然一般用户可以复制该文件,但是只允许 root 用户更新或删除它
我是谁?
在我们看怎样改 变文件的用户所有权和组所有权之前,我们首先来看一看怎样得知您当前的用户标识和组成员资格除非最近您使用过 su 命令,否则您当前的用户标识是您用来登录系统的用户标识但是,如果您经常使用 su,您可能不记得您当前有效的用户标识要查看用户标识,输入 whoami:
# whoami
root
# su drobbins
$ whoami
drobbins
我在哪一组?
要看看您属于哪一组,使用 group 命令:
$ groups
drobbins wheel audio
在上面的示例中,我是 drobbinswheel 和 audio 组的成员如果您想看看其他用户在什么组,指定他们的用户名作为参数:
$ groups root daemon
root : root bin daemon sys adm disk wheel floppy dialout tape video
daemon : daemon bin adm
改变用户和组所有权
为了改变文件或其它文件系统对象的所有者或组,分别使用 chown 或 chgrp这两个命令都要一个用户名或组名作参数,后面跟上一个或多个文件名

# chown root /etc/passwd
# chgrp wheel /etc/passwd
您还可以用 chown 命令的另一种形式同时设置所有者和组:
# chown root.wheel /etc/passwd
除非您是超级用户,否则您不可以使用 chown,然而任何人都可以使用 chgrp 来将文件的组所有权改为他们所属的组
递归的所有权改变
chown 和 chgrp 都有一个 -R 选项,该选项可以用来告诉它们递归地将所属权和组改变应用到整个目录树中例如:
# chown -R drobbins /home/drobbins
介绍 chmod
chown 和 chgrp 可以用来改变文件系统对象的所有者和组,而另一个程序 叫做 chmod 用来改变我们可以在 ls -l 清单中看到的 rwx 权限chmod 带有两个或多个参数:mode,描述怎样改变权限,后面跟将会受到影响的文件或文件列表:
$ chmod +x scriptfile.sh
在上面的示例中,我们的mode是 +x您可能会猜到,+x 模式告诉 chmod,使该特殊文件对于用户组以及其它任何人都是可执行的如果我们想要除去一个文件的所有执行权限,我们应该这样做:
$ chmod -x scriptfile.sh
用户/组/其他粒度
到 此,我们的 chmod 示例已经影响到了所有三个三元组 用户组和所有其他用户通常,一次只修改一个或两个三元组很方便要这样做,只需要在 + 或 - 符号之前,给您想要修改的特定的三元组指定符号字符对于用户三元组使用 u,对于组三元组使用 g,对于其他/每个人使用 o:
$ chmod go-w scriptfile.sh
我们刚除去了组和所有其他用户的写权限,而保留所有者权限不动
重新设置权限
除了交替打开和关闭权限位以外,我们还可以一起重新设置它们通过使用 = 操作符,我们可以告诉 chmod 我们要指定权限和取消别的权限:
$ chmod =rx scriptfile.sh
上面,我们只设置了所有的read和execute位,没有设置所有的write位如果您仅仅想重新设置特定的三元组,您可以像下面这样,在 = 之前指定该三元组的符号名:
$ chmod u=rx scriptfile.sh
数字模式
直到现在为止,我们使用了叫做符号的模式来用 chmod 指定权限的改变然而,指定权限还有
一种普遍使用的方法 使用 4 位八进制数使用叫做数字权限语法的语法,每一位代表一个权限
三元组例如,在 1777 中,777 设置本章我们所讨论的ownergroup和other
标志1 用来设置专门的权限位,我们将在本章的结束部分讲到这个图表说明了怎样解释第二到
四位(777):
模式 数字
rwx 7
rw- 6
r-x 5
r-- 4
-wx 3
-w- 2
--x 1
--- 0

数字权限语法
当您需要给一个文件指定所有权限时,数字权限语法特别有用,比如在下面的示例中:
$ chmod 0755 scriptfile.sh
$ ls -l scriptfile.sh

-rwxr-xr-x 1 drobbins drobbins        0 Jan   9 17:44 scriptfile.sh
在该示例中,我们使用了 0755 模式,它展开为一个完整的权限设置-rwxr-xr-x


Umask
                    
当 进程创建了新文件时,它指定新文件应该具有的权限通常,所请求的模式是 0666(每个人可读和可写),它比我们希望的具有更多的权限幸运的是,不管什么时候创建了新文件,Linux 将参考叫做umask的东西系统用 umask 值来将初始指定的权限降低为更合理更安全的权限您可以通过在命令行中输入 umask 来查看您当前的 umask 设置:
$ umask
0022
Linux 系统上,umask 的缺省值一般为 0022,它允许其他人读您的新文件(如果他们可以得到它们),但是不能进行修改为了在缺省的情况下使新文件更安全,您可以改变 umask 设置: $ umask 0077umask 将确保组和其他用户对于新创建的文件绝对没有任何权限那么,umask 怎样工作呢?与文件的常规权限不同,umask 指定应该关闭哪一个权限我们来参阅一下我们的模式到数字映射表,从而使我们可以理解 0077 的 umask 的意思是什么: 模式 数字 rwx 7 rw- 6 r-x 5 r-- 4 -wx 3 -w- 2 --x 1 --- 0 使用该表,0077 的最后三位扩展为 ---rwxrwx现在,请记住 umask 告诉系统禁用哪个权限根据推断,我们可以看到将关闭所有组和其他权限,而用户权限将保留不动
介绍 suid 和 sgid
当您最初登录时,将启动一个新的 shell 进程您已经知道,但是您可能还不知道这个新的 shell
进程(通常是 bash)使用您的用户标识运行照这样,bash 程序可以访问所有属于您的文件和
目录事实上,作为用户,我们完全依靠其它程序来代表我们执行操作因为您启动的程序继承了
您的用户标识,因此它们不能访问任何不允许您访问的文件系统对象
例如,一般用户不能直接修改 passwd 文件,因为write标志已经对除root 用户以外的每个用户关闭:
$ ls -l /etc/passwd
-rw-r--r-- 1 root     wheel        1355 Nov   1 21:16 /etc/passwd
但是,一般用户确实需要在他们需要改变其密码的任何时候,能够修改 /etc/passwd(至少间接地)但是,如果用户不能修改该文件,究竟怎样完成这个工作呢?
Suid
幸好,Linux 权限模型有两个专门的位,叫做suid和sgid当设置了一个可执行程序的suid这一位时,它将代表可执行文件的所有者运行,而不是代表启动程序的人运 行现在,回到 /etc/passwd 问题如果看一看 passwd 可执行文件,我们可以看到它属于 root 用户:
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root     wheel    17588 Sep 24 00:53 /usr/bin/passwd
您还将注意到,这里有一个 s 取替了用户权限三元组中的一个 x这表明,对于这个特殊程序,设置了 suid 和可执行位由于这个原因,当 passwd 运行时,它将代表 root 用户执行(具有完全超级用户访问权),而不是代表运行它的用户运行又因为 passwd 以 root 用户访问权运行,所以能够修改 /etc/passwd 文件,而没有什么问题
suid/sgid 告诫说明
我们看到了 suid 怎样工作,sgid 以同样的方式工作它允许程序继承程序的组所有权,而不是当前用户的程序所有权这里有一些关于 suid 和 sgid 的其它的但是很重要的信息首先,suid 和 sgid 占据与 ls -l 清单中 x 位相同的空间如果还设置了 x 位,则相应的位表示为 s(小写)但是,如果没有设置 x 位,它将表示为 S(大写)另一个很重要的提示:在许多环境中,suid 和 suid 很管用,但是不恰当地使用这些位可能使系统的安全遭到破坏最好尽可能地少用suid程序passwd 命令是为数不多的必须使用suid的命令之一
改变 suid 和 sgid
设置和除去 suid 与 sgid 位相当简单这里,我们设置 suid 位:
# chmod u+s /usr/bin/myapp
此处,我们从一个目录除去 sgid 位我们将看到 sgid 位怎样影响下面几屏中的目录:
# chmod g-s /home/drobbins
权限和目到此为止,我们从常规文件的角度来看权限当从目录的角度看权限时,情况有一点不同目录使用同样的权限标志,但是它们被解释为表示略微不同的含义 对于一个目录,如果设置了read标志,您可以列出目录的内容;write表示您可以在目录中创建文件,execute表示您可以进入该目录并访问内部的 任何子目录没有execute标志,目录内的文件系统对象是不可访问的没有read标志,目录内的文件系统对象是不可查看的,但是只要有人知道磁盘上对象 的完整路径,就仍然可以访问目录内的对象目录和 sgid如果启用了目录的sgid标志,在目录内创建的任何文件系统对象将继承目录的组当您需要创建一个属于同一组的一组人使用的目录树时,这种特殊的功 能很管用只需要这样做:
# mkdir /home/groupspace
# chgrp mygroup /home/groupspace
# chmod g+s /home/groupspace

现在,mygroup 组中的所有用户都可以在 /home/groupspace 内创建文件或目录,同样,他
们也将自动地分配到 mygroup 的组所有权根据用户的 umask 设置,新文件系统对象对于
mygroup 组的其他成员来说,可以或不可以是可读可写或可执行的
目录和删除
缺省情况下,Linux 目录以一种不是在所有情况下都很理想的方式表现一般来说,只要对一个
目录有写访问权,任何人都可以重命名或删除该目录中的文件对于个别用户使用的目录,这种行
为是很合理的
但是,对于很多用户使用的目录来说,尤其是 /tmp 和 /var/tmp,这种行为可能会产生麻烦
因为任何人都可以写这些目录,任何人都可以删除或重命名任何其他人的文件 即使是不属于
他们的!显然,当任何其他用户在任何时候都可以输入rm -rf /tmp/*并损坏每个人的文
件时,很难把 /tmp 用于任何有意义的文件
所幸,Linux 有叫做粘滞位(sticky bit)的东西当给 /tmp 设置了粘滞位(用
chmod +t),唯一能够删除或重命名 /tmp 中文件的是该目录的所有者(通常是 root 用户)
文件的所有者或 root 用户事实上,所有 Linux 分发包都缺省地启用了 /tmp 的粘滞位,
而您还可以发现粘滞位在其它情况下也很管用
难以理解的第一位
总结本章,我们最后来看一看数字模式的难以理解的第一位数您可以看到,这个第一位数
用来设置 stickysuid 和 sgid 位:
suid sgid sticky 模式数字 on on on 7 on on off 6 on off on 5 on off off 4 off on on 3 off on off 2 off off on 1 off off off 0
这里有一个怎样用 4 位数字模式来设置一个目录的权限的示例,该目录将由一个工作组使用:
# chmod 1775 /home/groupfiles
请想一想 1755 数字模式权限设置的含义

分享到:
评论

相关推荐

    共享Linux系统资源的管理与权限分配设计实现.pdf

    【Linux系统资源管理与权限分配】 Linux操作系统以其开源、稳定和高效的特点,在教育信息化进程中扮演着重要角色。本文主要探讨了如何在Linux系统中实现多用户、多任务环境下的文件资源共享,通过深入理解Linux系统...

    jdk、tomcat在Linux下安装部署总结

    Linux下JDK和Tomcat的安装与部署 一、Linux 创建用户命令 在 Linux 系统中,创建用户命令可以使用 `useradd` 命令,...同时,也提到了 Linux 权限分配的重要性,如何正确地分配权限对系统的安全性和稳定性至关重要。

    linux操作用户及权限分配

    Linux 操作用户及权限分配 本资源将详细介绍 Linux 操作系统中的用户及权限分配,包括查看用户、用户管理、权限分配等内容。 一、查看用户 Linux 系统中有多种方式来查看当前用户的信息,常用的命令包括 whoami...

    linux系统权限总结

    在Linux中,这些权限被分配给三种类型的用户: 1. **用户(User)**:文件所有者的权限。 2. **组(Group)**:属于文件所属组的用户的权限。 3. **其他用户(Others)**:不属于文件所有者或所属组的任何用户的权限...

    linux中特殊权限问题

    在Linux操作系统中,权限管理是核心安全机制之一。本文将深入探讨Linux中的特殊权限SUID、SGID和SBIT,以及与进程相关的ID。 首先,我们来看Linux中的用户和权限。用户分为两种类型:超级用户(root)和普通用户。...

    LINUX 权限机制实例

    在Linux系统中,权限机制是其安全模型的核心组成部分。它允许系统管理员精细控制用户和组对文件和目录的访问权限,以确保数据的安全性和隐私。本实例将介绍如何利用Linux...这充分体现了Linux权限机制的强大和灵活性。

    Linux和Unix Shell权限管理

    2. **用户类别**:权限分配给三个主要用户类别:文件所有者(owner)、同组用户(group)和所有其他用户(others)。每个类别都有对应的读、写和执行权限。 3. **符号权限设置**:使用`chmod`命令可以修改权限。...

    Linux文件权限管理实验.pdf

    权限的分配可以以数字形式表示,例如: - 读(r)= 4 - 写(w)= 2 - 执行(x)= 1 无权限对应数字0。例如,权限“rw-”对于所有者(owner)表示读(4)+写(2)= 6。 ### 权限管理命令 - `ls -l`:列出目录内容...

    Linux用户及权限管理.pdf

    在Linux中,用户和权限的管理对于确保系统安全和资源的有效分配至关重要。 首先,Linux用户分为三类:root用户、系统用户和普通用户。root用户拥有最高的系统权限,通常用于系统的管理和维护;系统用户(ID 1-499)...

    如何设置Linux系统下的文件权限

    ACL允许为特定的用户或用户组分配额外的权限,而不影响其他用户的权限。例如,即使文件所有者设定了仅对自己有读写权限,ACL仍能允许其他用户具有读取或写入权限。 设置Linux文件权限通常涉及以下步骤: 1. **检查...

    Linux怎么给一个普通用户关机权限.pdf

    最后,使用chown foot:halt /sbin/halt命令将权限分配给用户zhizunbao。这种方法可以确保只有指定的用户才可以关闭系统,提高了系统的安全性。 情况四:使用sudo命令来关闭系统 使用sudo命令可以让普通用户拥有root...

    linux下添加用户并赋予root权限

    Linux下添加用户并赋予root权限 Linux操作系统中,添加用户并赋予root权限是系统管理员常用的操作之一。本文将详细介绍如何在Linux系统中添加用户并赋予root权限。 一、添加用户 在Linux系统中,添加用户可以使用...

    Linux内核源码(linux-0.11.rar)

    文件系统通过i节点来跟踪文件的元数据,如大小、权限和修改时间。当时的文件系统可能仅支持单一的本地文件系统,如EXT或VFAT。 4. **设备驱动**:设备驱动程序允许操作系统与硬件设备进行通信。在Linux 0.11中,...

    linux权限介绍

    linux权限介绍,权限分配,权限归属,在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念 - 所有者 - 所在组 - 其它组 - 改变用户所在的组

    企业微信for Linux

    12. **日程与任务管理**:用户可以在Linux版企业微信中创建个人和共享的日程,分配任务,提高工作效率。 总的来说,企业微信 for Linux 的推出,极大地满足了Linux用户在企业协作和沟通中的需求,提升了工作效率,...

    Linux内核设计与实现(第三版中文高清带目录)_linux_linux内核_

    10. **安全性与稳定性**:Linux内核强调安全性和稳定性,通过访问控制、权限管理、审计等机制确保系统安全,并通过调试工具和测试框架不断提升内核的稳定性和可靠性。 以上这些内容都是《Linux内核设计与实现》第三...

    Linux内核完全注释:基于0.11内核(V5.0)_0.11内核_linux_linux内核完全注释_Linux内核注释_

    8. 安全与权限:Linux内核的安全模型基于用户ID和组ID,以及文件权限和访问控制列表(ACL)。注释会讨论这些机制以及如何保护系统免受恶意攻击。 9. 调试工具:书中还会介绍一些内核调试工具,如kgdb、sysfs、...

    Linux下informix数据库权限配置说明

    通过创建角色,将一组权限分配给角色,然后将角色分配给用户,可以简化权限管理。例如,可以创建一个"admin_role",包含所有管理员需要的权限,然后将这个角色赋予需要管理权限的用户。 六、系统权限(System ...

    linux 的英文论文

    fairness in networked Linux systems):此论文可能会讨论Linux内核在网络服务中的资源分配策略,如何平衡用户交互性和网络带宽的公平分配,可能涵盖了调度算法和队列管理技术。 3. **Linux网络性能分析——数据包...

    Linux教程-linux权限管理.docx

    了解了这些基础知识后,你可以有效地管理和保护Linux系统中的文件和目录,确保系统安全并按需分配访问权限。通过熟练运用`chown`和`chgrp`命令,你可以根据需要调整文件和目录的所有者和属组,从而更好地控制系统的...

Global site tag (gtag.js) - Google Analytics