一个用户、一个组
我们来看一看 Linux 权限和所有权模型。我们已经看到每个文件属于一个用户和一个组。这正是 Linux 中权限模型的核心。您可以在 ls -l 清单中查看用户和组:
$ ls -l /bin/bash
-rwxr-xr-x1 root wheel 430540 Dec 23 18:27 /bin/bash
|
在这个特殊的示例中,/bin/bash 可执行文件属于 root 用户,并且在 wheel 组中。Linux 权限模型通过允许给每个文件系统对象设置三种独立的权限级别来工作 — 它们为文件的所有者、文件的组以及所有其他用户。
理解“ls -l”我们来看一看我们的 ls -l 输出,检查一下这个清单的第一栏:
$ ls -l /bin/bash-rwxr-xr-x1 root wheel 430540 Dec 23 18:27 /bin/bash第一个字段 -rwxr-xr-x 包含该特殊文件的权限的符号表示。该字段中的首字符(-)指定该文件的类型,本例中它是一个常规文件。其它可能的首字符还有:
“d”目录“l”符号链接“c”字符专门设备文件“b”块专门设备文件“p”先进先出“s”套接字三个三元组$ ls -l /bin/bash-rwxr-xr-x1 root wheel 430540 Dec 23 18:27 /bin/bash该字段的其余部分由三个三元组字符组成。第一个三元字符组代表文件所有者的权限,第二个代表文件的组的权限,第三个代表所有其他用户的权限:
"rwx""r-x""r-x"上面,r 表示允许读(查看文件中的数据),w 表示允许写(修改文件以及删除),x 表示允许“执行”(运行程序)。将所有这些信息放在一起,我们可以发现每个人都能够读该文件的内容和执行该文件,但是只允许文件所有者(root 用户)可以以任何方式修改该文件。因此,虽然一般用户可以复制该文件,但是只允许 root 用户更新或删除它。
我是谁?在我们看怎样改变文件的用户所有权和组所有权之前,我们首先来看一看怎样得知您当前的用户标识和组成员资格。除非最近您使用过 su 命令,否则您当前的用户标识是您用来登录系统的用户标识。但是,如果您经常使用 su,您可能不记得您当前有效的用户标识。要查看用户标识,输入 whoami:# whoamiroot# su drobbins$ whoamidrobbins我在哪一组?要看看您属于哪一组,使用 group 命令:$ groupsdrobbins wheel audio在上面的示例中,我是 drobbins、wheel 和 audio 组的成员。如果您想看看其他用户在什么组,指定他们的用户名作为参数:
$ groups root daemonroot : root bin daemon sys adm disk wheel floppy dialout tape videodaemon : 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介绍 chmodchown 和 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
|