文章目录
- 3、更改身份
- 3.1、su--以其他用户和组ID的身份来运行shell
- 3.2、sudo--以另一个用户的身份执行命令
- 3.3、chown--更改文件所有者和所属群组
- 3.4、chgrp--更改文件所属群组
传统的UNIX操作系统与那些MS-DOS操作系统不同,区别在于它们不仅是多重任务处理(multitasking)系统,而且还是多用户(multiuser)系统。这意味着同一时间内可以有多个用户使用同一台计算机,例如,如果计算机连接到一个网络或者互联网中,远程用户可以通过ssh(安全shell)登录并且操作这台计算机。
1、所有者、组成员和其他所有用户
在UNIX安全模型中,一个用户可以拥有文件和目录。当一个用户拥有一个文件或目录时,它将对该文件或目录的访问权限拥有控制权。反过来,用户又归属于一个群组(group),该群组有一个或者多个用户组成,组中用户对文件和目录的访问权限由其所有者授予。除了可以授予群组访问权限之外,文件所有者也可以授予所有用户一些访问权限,在UNIX术语中,所有用户是指整个世界。使用id
命令可以获得用户身份标识的相关信息。
在创建用户账号的时候,用户将分配一个称为用户ID(user ID)或者uid的号码。为了符合人们的使用习惯,用户ID与用户名一一映射。同时用户将分配一个有效组ID(primary group ID)或者称为gid,而且该用户可以归属于其他的群组。
用户账户定义在文件/etc/passwd中,用户组定义在文件/etc/group文件中。在创建用户账号和群组时,这些文件随着文件/etc/shadow的变动而修改,文件/etc/shadow中保存了用户的密码信息。对于每一个用户账户,文件/etc/passwd中都定义了对应用户的用户(登录)名、uid、gid、账户的的真实姓名、主目录以及登录shell信息。
2、读取、写入和执行
对文件和目录的访问权限是按照读访问、写访问以及执行访问来定义的。我们可以通过ls -l
查看文件属性(file attribute),文件属性一般由10个字符组成,其中第一个为文件类型(file type),后九个为文件模式(file mode)
文件类型 | 所有者权限 | 群组权限 | 其他用户权限 |
- | rw- | r– | r– |
文件类型
属性 | 文件类型 |
- | 普通文件 |
d | 目录文件 |
l | 符号链接。注意对于符号链接文件,剩下的文件属性始终是rwxrwxrwx,它是个伪属性值。符号链接指向的文件的属性才是真正的文件属性 |
c | 字符设备文件。该文件类型表示已字节流形式处理数据的设备,如终端或调制解调器 |
b | 快设备文件。该文件类型表示以数据块方式处理数据的设备,如硬盘驱动或者光盘驱动 |
文件模式分别表示文件所有者、文件所属群组以及其他所有用户对该文件的读取、写入和执行权限。分别设置r、w和x的模式属性将会读文件和目录带来不同的影响。
属性 | 文件 | 目录 |
r | 允许打开和读取文件 | 如果设置了执行权限,那么允许列出目录下的内容 |
w | 允许写入或者截短文件;如果也设置了执行权限,那么目录中的文件允许被创建、被删除以及被命名 | 但是该权限不允许重命名或者删除文件。是否能重命名和删除文件由目录权限决定 |
x | 允许把文件当做程序一样来执行。用脚本语言写的程序文件必须被设置为可读,以便能被执行 | 允许进入目录下,例如cd directory |
权限属性实例
文件属性 | 含义 |
-rwx------ | 普通文件,文件所有者具有读取、写入和执行权限。群组成员和其他所有用户都没有任何访问权限 |
-rw------- | 普通文件,文件所有者具有读取和写入权限。群组成员和其他所有用户都没有任何访问权限 |
-rw-r–r-- | 普通文件,文件所有者具有读取和写入权限。文件所有者所在群组的成员可以读取该文件。该文件对于所有用户来说都是可读的 |
-rwxr-xr-x | 普通文件,文件所有者具有读取、写入和执行权限,其他所有用户也可以读取和执行改文件 |
-rw-rw---- | 普通文件,之后文件所有者和所有者所在群组的成员具有读取和执行权限 |
Lrwxrwxrwx | 符号链接,所有的符号链接文件显示的都是“伪”权限属性,真正的权限属性有符号链接指向的实际文件决定 |
drwxrwx— | 目录文件,文件所有者和所有者所在群组的成员都可以进入该目录,而且可以创建、重命名和删除该目录下的文件 |
drwxr-x— | 目录文件,文件所有者可以进入该目录,而且可以创建、重命名和删除该目录下的文件。所有者所在群组的成员可以进入该目录,但是不能创建、重命名和删除该目录下的文件 |
2.1、chmod–更改文件模式
我们可以使用chmod
命令来更改文件或者目录的模式(权限)。需要注意的是只有文件所有者和超级用户才可以更改文件或者目录的模式。chmod
命令支持两种不同的改变文件模式的方式–八进制数字表示法和符号表示法。
2.1.1、八进制数字表示法
八进制表示法指的是使用八进制数字来设置所期望的权限模式。因为每个八进制数字对应着3个二进制数字,所以这种对应关系正好可以用来存储文件模式的结构方式一一映射。
八进制 | 二进制 | 文件模式 |
0 | 000 | — |
1 | 001 | –x |
2 | 010 | -w- |
3 | 011 | -wx |
4 | 100 | r– |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
通过传递参数600,我们可以设置文件所有者具有读写权限,而取消群组用户和其他所有用户的所有权限。
2.1.2、符号表示法
chmod
命令支持一种符号表示法来指定文件模式。该符号表示法分为三部分:更改会影响谁、要执行哪个操作以及要设置哪种权限。可以通过字符u、g、o和a的组合来指定要影响的对象。
chmod命令符号表示法
符号 | 含义 |
u | user的简写,表示文件或者目录的所有者 |
g | group的简写,文件所属群组 |
o | others的简写,表示其他所有用户 |
a | all的简写,是‘u’,‘g’和‘o’三者的组合 |
如果没有指定字符,则假定使用all。操作符+
表示添加一种权限,-
表示删除一种权限,=
表示只有指定的权限可用,其他用户的权限都被删除。权限由字符‘r’、‘w’和‘x’来指定。
chmod命令符号表示法实例
符号 | 含义 |
u+x | 为文件所有者添加可执行权限 |
u-x | 删除文件所有者的可执行权限 |
+x | 为文件所有者、所属群组和其他所有用户添加可执行权限,等价于a+x |
o-rw | 除了文件所有者和所属群组外,删除其他所有用户的读写权限 |
go=rw | 除了文件所有者之外,设置所属群组和其他所有用户具有读写权限。如果所属群组或者其他所有用户之前已经具有可执行权限,那么删除他们的可执行权限 |
u+x,go=rx | 为文件所有者添加可执行权限,同时设置所属群组和其他所有用户具有读权限和可执行权限。指定多种权限时,需用逗号分隔 |
2.2、umask–设置默认权限
umask
命令控制着创建文件时指定给文件的默认权限。它使用八进制表示法来表示从文件模式属性中删除一个位掩码。
例如:
umask 0037
掩码:umask 000 000 011 111
掩码中出现1的地方,将会发现1的位置对应的属性被删除
所有设置的权限为:rw-r-----
原始文件模式 | — | rw- | rw- | rw- |
掩码 | 000 | 000 | 011 | 111 |
结果 | rw- | rw- | r– | — |
3、更改身份
在很多时候,我们会发现可以拥有另一个用户的身份是很有必要的。我们经常会需要获得超级用户的权限来执行一些管理任务,但是也可以“变成”另一个普通用户来执行这些任务,就好像是在测试一个账户。有三种方法用来转换身份,具体如下:
- 注销系统并以其他用户的身份重新登录系统
- 使用su命令
- 使用sudo命令
在shell会话状态下,使用su
命令将允许你假定为另一个用户的身份,既可以以这个用户的ID来启动一个新的shell会话,也可以以这个用户的身份来发布一个命令。使用sudo
命令将允许管理者创建一个称为/etc/sudoer的配置文件,并且定义一些特定的命令,这些命令只有被赋予为假定身份的特定用户才允许执行。
3.1、su–以其他用户和组ID的身份来运行shell
su
命令用来以另一个用户的身份来启动shell,该命令的一般形式如下:
su [-[l]] [user]
如果包含-l
选项,那么得到的shell会话界面将是用于指定用户的登录shell界面。这就意味着,该指定用户的运行环境将被加载,而且其工作目录也将更改为指定用户的主目录。如果没有指定用户,那么默认假定为超级用户。需要注意的是,-l
可以缩写为-
,而且这一形式经常被使用。
我们也可以使用su
命令执行单个命令,而不需要开启一个新的交互式命令界面,操作方式如下:
su -c 'command'
例如:su -c 'ls -l /usr/bin'
3.2、sudo–以另一个用户的身份执行命令
sudo
命令在很多方面都类似于su
命令,但是它另外还有一些重要的功能。管理者可以通过配置sudo
命令,使系统已一种可控的方式,允许一个普通用户以一个不同的用户身份(通常是超级用户)执行命令。在特定情况下,用户可能被限制为只能执行一条或者几条特定命令,而对其他命令没有执行权限。另一个重要的区别在于,使用sudo
命令并不需要输入超级用户的密码。使用sudo
命令时,用户只需要输入自己的面来进行认证。比如说,配置sudo
命令来允许普通用户运行一个虚构的备份程序(称为backup_script),这个程序需要超级用户的权限。
在输入sudo
命令后,系统将提示输入用户自己的密码(而不是超级用户的密码),而且一点认证通过,指定的命令就将被执行。su
命令和sudo
命令之间的一个重要区别在于sudo
命令并不需要启动一个新的shell环境,而且也不需要加载另一个用户的运行环境。这意味着,使用sudo
命令的时候并不需要使用单引号把命令行引起来。需要注意的是,我们可以通过指定不同的选项来改变命令执行的效果
3.3、chown–更改文件所有者和所属群组
chown
命令用来更改文件或者目录的所有者和所属群组。使用这个命令需要超级用户的权限。chown
命令的语法格式如下:
chown
命令更改的是文件所有者还是文件所属群组,或者对两者都更改,取决于该命令的第一个参数。
chown
命令参数实例
参数 | 结果 |
bob | 把文件所有者从当前所有者更改为用户bob |
bob:users | 把文件所有者从当前所有者更改为用户bob,并把文件所属群组更改为users |
:admins | 把文件所属群组更改为admins,文件所有者不变 |
bob: | 把文件所有者从当前所有者更改为用户bob,并把文件所属群组更改为用户bob登录系统时所属的组 |
假设有两个用户–拥有超级用户权限的张三和没有该权限的李四。用户张三想要从他的主目录复制一个文件到用户李四的主目录中。因为用户张三希望李四能够编辑改文件,所以张三把文件的所有者从张三更改为李四。
3.4、chgrp–更改文件所属群组
在更早的UNIX版本中,chown
命令只能更改文件的所有者,而不能改变文件所属群组。为了达到这个目的,我们可以使用一个独立的命令chgrp
来实现。该命令除了限制多一点之外,和chown
命令的使用方式几乎相同。
4、更改用户密码
如果用户超级用户权限,那么也可以为其他的用户设置密码。使用passwd
命令,可以设置或者更改密码。该命令的语法格式如下:
如果要更改的是用户自己的密码,那么只需要输入passwd
命令。接下来将会提示用户输入旧密码和新密码:
passwd
命令会试着强迫用户使用“强”密码。也就是说,它会拒绝接受太短的密码、与之前的密码相似的密码、字典中的单词作为密码或者是太容易猜到的密码。
如果你具有超级用户的权限,那么可以通过一个用户名作为passwd
命令的参数来为另一个用户设置密码。对于超级用户,还可以使用该命令的其它选项来设置账户锁定、密码失效等功能,可以通过查看passwd
命令的帮组页面获取更多的细节内容。