• id      –显示用户身份号
• chmod    –更改文件模式
• umask    –设置默认的文件权限
• su      –以另一个用户的身份来运行 shell
• sudo     –以另一个用户的身份来执行命令
• chown      –更改文件所有者
• chgrp      –更改文件组所有权
• passwd   –更改用户密码

当我们试图查看一个像/etc/shadow 那样的文件的时候,我们会遇到一个问题。

The Linux Command Line——10. 权限

产生这种错误信息的原因是,作为一个普通用户,我们没有权限来读取这个文件。

在 Unix 安全模型中,一个用户可能拥有文件和目录。当一个用户拥有一个文件或目录时, 用户对这个文件或目录的访问权限拥有控制权。用户反过来又属于一个由一个或多个用户组成的用户组,用户组成员由文件和目录的所有者授予对文件和目录的访问权限。除了对一个用户组授予权限之外,文件所有者可能会给每个人一些权限,在 Unix 术语中,每个人是指整个世界

 

可以用 id 命令,来找到关于你自己身份的信息:

The Linux Command Line——10. 权限

当用户创建帐户之后,系统会给用户分配一个号码,叫做用户 ID或者 uid,然后,为了符合人类的习惯,这个 ID 映射到一个用户名。系统又会给这个用户分配一个原始的组 ID 或者是 gid,这个 gid 可能属于另外的组。

那么这些信息来源于哪里呢?像 Linux 系统中的许多东西一样,来自一系列的文本文件。用户帐户定义在/etc/passwd 文件里面,用户组定义在/etc/group 文件里面。当用户帐户和用户组创建以后,这些文件随着文件/etc/shadow 的变动而修改,文件/etc/shadow 包含了关于用户密码的信息。对于每个用户帐号,文件/etc/passwd 定义了用户(登录)名、uid、gid、帐号的真实姓名、家目录和登录 shell。如果你查看一下文件/etc/passwd 和文件/etc/group 的内容,你会注意到除了普通用户帐号之外,还有超级用户(uid 0)帐号,和各种各样的系统用户

 

读取、写入和执行:

The Linux Command Line——10. 权限

列表的前十个字符是文件的属性。这十个字符的第一个字符表明文件类型。下表是你可能经常看到的文件类型。

The Linux Command Line——10. 权限

剩下的九个字符叫做文件模式,代表着文件所有者、文件组所有者和其他人的读、写和执行权限。

The Linux Command Line——10. 权限

The Linux Command Line——10. 权限

The Linux Command Line——10. 权限

The Linux Command Line——10. 权限

 

chmod -更改文件模式:

更改文件或目录的模式(权限),可以利用 chmod 命令。注意只有文件的所有者或者超级用户才能更改文件或目录的模式。chmod 命令支持两种不同的方法来改变文件模式:八进制数字表示法符号表示法

The Linux Command Line——10. 权限

The Linux Command Line——10. 权限

The Linux Command Line——10. 权限

如果没有指定字符,则假定使用 “all”。执行的操作可能是一个“+”字符,表示加上一个权限,一个“-”,表示删掉一个权限,或者是一个“=”,表示只有指定的权限可用,其它所有的权限被删除。

The Linux Command Line——10. 权限

 

umask -设置默认权限:

当创建一个文件时,umask 命令控制着文件的默认权限。umask 命令使用八进制表示法来表达从文件模式属性中删除一个位掩码。

The Linux Command Line——10. 权限

The Linux Command Line——10. 权限

The Linux Command Line——10. 权限

此刻先忽略掉开头的三个零(我们一会儿再讨论),注意掩码中若出现一个数字 1,则删除文件模式中和这个 1 在相同位置的属性,在这是指其他人的写权限。这就是掩码要完成的任务。掩码的二进制形式中,出现数字 1 的位置,相应地关掉一个文件模式属性。

看一下掩码0022 的作用:

The Linux Command Line——10. 权限

 当你实验完成之后,要记得清理现场:

The Linux Command Line——10. 权限

大多数情况下,你不必修改掩码值,系统提供的默认掩码值就很好了。

 

更改身份:

su 命令用来以另一个用户的身份来启动 shell。

The Linux Command Line——10. 权限

如果不指定用户,那么就假定是超级用户。注意(不可思议地),选项 “-l” 可以缩写为”-”,这是经常用到的形式。

The Linux Command Line——10. 权限

当工作完成后,输入 “exit”,则返回到原来的 shell:

The Linux Command Line——10. 权限

 

sudo -以另一个用户身份执行命令

sudo 命令在很多方面都相似于 su 命令,但是 sudo 还有一些非常重要的功能。管理员能够配置 sudo 命令,从而允许一个普通用户以不同的身份(通常是超级用户),通过一种非常可控的方式来执行命令。

The Linux Command Line——10. 权限

 

chown -更改文件所有者和用户组

chown 命令被用来更改文件或目录的所有者和用户组。使用这个命令需要超级用户权限。chown 命令的语法看起来像这样:

The Linux Command Line——10. 权限

The Linux Command Line——10. 权限

我们有两个用户,janet 拥有超级用户访问权限,而 tony 没有。用户 janet 想要从她的家目录复制一个文件到用户 tony 的家目录。因为用户 janet 想要 tony 能够编辑这个文件,janet 把这个文件的所有者更改为 tony:

The Linux Command Line——10. 权限

我们看到用户 janet 把文件从她的目录复制到 tony 的家目录。下一步,janet 把文件所有者从 root(使用 sudo 命令的原因)改到 tony。通过在第一个参数中使用末尾的 “:” 字符,janet 同时把文件用户组改为 tony 登录系统时,所属的用户组,碰巧是用户组 tony。

 

练习使用权限

假想我们有两个用户,他们分别是 “bill” 和 “karen”。他们都有音乐 CD 收藏品,也愿意设置一个共享目录,在这个共享目录中,他们分别以 Ogg Vorbis 或 MP3 的格式来存储他们的音乐文件。通过 sudo 命令,用户 bill 具有超级用户访问权限。

bill 创建了存储音乐文件的目录:

The Linux Command Line——10. 权限

 

因为 bill 正在他的家目录之外操作文件,所以需要超级用户权限。这个目录创建之后,它具有以下所有权和权限:

The Linux Command Line——10. 权限

 

正如我们所见到的,这个目录由 root 用户拥有,并且具有权限 755。为了使这个目录共享,允许(用户 karen)写入,bill 需要更改目录用户组所有权和权限:

The Linux Command Line——10. 权限

 

 那么这是什么意思呢?它的意思是,现在我们拥有一个目录,/usr/local/share/Music,这个目录由 root 用户拥有,并且允许用户组 music 读取和写入。用户组 music 有两个成员 bill 和karen,这样 bill 和 karen 能够在目录 /usr/local/share/Music 中创建文件。其他用户能够列出目录中的内容,但是不能在其中创建文件。

但是我们仍然会遇到问题。通过我们目前所拥有的权限,在 Music 目录中创建的文件,只 具有用户 bill 和 karen 的普通权限:

The Linux Command Line——10. 权限

 

实际上,存在两个问题。第一个,系统中默认的掩码值是 0022,这会禁止用户组成员编辑属于同组成员的文件。第二个问题是,用户组成员创建的文件和目录的用户组,将会设置为用户的主要组,而不是用户组 music。

通过设置此目录的 setgid 位来解决这个问题:

The Linux Command Line——10. 权限

 

 现在测试一下,看看是否新的权限解决了这个问题。bill 把他的掩码值设为 0002,删除先前的测试文件,并创建了一个新的测试文件和目录:

The Linux Command Line——10. 权限

 

现在,创建的文件和目录都具有正确的权限,允许用户组 music 的所有成员在目录 Music中创建文件和目录。

更改用户密码

使用 passwd 命令,来设置或更改用户密码。

The Linux Command Line——10. 权限

 

只要输入 passwd 命令,就能更改你的密码。shell 会提示你输入你的旧密码和你的新密码:

The Linux Command Line——10. 权限

相关文章: