多任务系统是同一时间进行多个任务;多用户系统是指多个用户可以在同一时间使用同一台计算机。然而一个典型的计算机可能只有一个键盘和一个监视器,但是它仍然可以被多个用户使用,例如,在工作中,如果一台计算机连接到一个网络或者因特网,那么远程用户通过 ssh(安全 shell) 可以登录并操纵这台电脑,并且远程用户也能运行图形界面应用程序,并且图形化的输出结果会出现在远端的显示器上。
为了使多用户特性付诸实践,那么必须发明一种方法来阻止用户彼此之间受到影响。毕竟, 一个用户的行为不能导致计算机崩溃,也不能乱动属于另一个用户的文件,于是便有了我们说的权限管理。常见的一些命令如下:
id
:显示用户身份信息。chmod
:更改用户权限。su
:以另一个用户身份运行 shell。sudo
:以另一个用户身份执行命令。chown
:更改文件所有者。chgrp
:更改文件组所有权。passwd
:更改用户密码。使用id
命令,可以查看身份信息:
从结果可以看到,当用户创建帐户之后,系统会给用户分配一个号码,叫做用户 ID 或者 uid,然后,为了符合人类的习惯,这个 ID 映射到一个用户名。系统又会给这个用户分 配一个原始的组 ID 或者是 gid,这个 gid 可能属于另外的组当用户创建帐户之后,系统会给用户分配一个号码,叫做用户 ID 或者 uid,然后,为了符合人类的习惯,这个 ID 映射到一个用户名。系统又会给这个用户分 配一个原始的组 ID 或者是 gid,这个 gid 可能属于另外的组。
权限:对于文件和目录的权限是根据读取、写入和执行来定义的。
ls -l foo.txt
# 输出
-rw-rw-r-- 1 me me 0 2008-03-06 14:52 foo.txt
-rw-rw-r--
这十个字符代表文件的属性,第一个字符-
表示文件类型属性,第一个字符常见属性对应的文件类型如下:
-
:一个普通文件。d
:一个目录。l
:一个符号链接。c
:一个字符设备文件,这种文件类型是指按照字节流来处理 数据的设备。比如说终端机或者调制解调器。b
:一个块设备文件,这种文件类型是指按照数据块来处理数 据的设备,例如一个硬盘或者 CD-ROM 盘。剩下九个字符rw-rw-r--
代表文件模式,有三个部分分别代表着文件所有者、文件组所有者和其他人的读、写和执行权限。
常见的权限模式有:
r
:允许列出目录中的内容,前提是目录必须设置了可执行属性(x)。允许打开并读取文件内w
:允许在目录下新建、删除或重命名文件,前提是目录必须设置了可执行属性(x)。允许写入文 件内容或截断文件。但是不允许对文件进行重命名或删除,重命名或删除是由目录的属性决定的。x
:允许进入目录。允许将文件作为程序来执行,使用 脚本语言编 写的程序必须设置为可读才能被执行。权限属性的一些示例:
-rw-r--r--
:一个普通文件,对文件所有者来说可读可写,文件所有者的组成员可以读该文件,其他所有人都可以读该文件。-rwxr-xr-x
:一个普通文件,对文件所有者来说可读、可写、可执行。也可以被其他的所有人读取和执行。-rwx-––-
:一个普通文件,对文件所有者来说可读、可写、可执行。其他人无法访问。drwxrwx-–
:一个目录,文件所有者以及文件所有者的组成员可以访问该目录,并且可以在该目录下新建、重命名、删除文件drwxr-x-–
:一个目录,文件所有者可以访问该目录,并且可以在该目录下新建、重命名、删除文件,文件所有者的组成员可以访问该目录,但是不能新建、重命名、删除文件。使用chmod
命令,可以更改文件或目录的权限,但是要注意只有文件的所有者或者超级用户才能更改文件或目录的。chmod
命令支持两种不同的方法来改变文件模式:八进制数字表示法或符号表示法。
每个八进制数字代表3个二进制数字,对应的文件模式或权限如下:
Octal | Binary | File Mode |
---|---|---|
0 | 000 | -– |
1 | 001 | –x |
2 | 010 | -w- |
3 | 011 | -wx |
4 | 100 | r– |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
# 查看权限
ls -l foo.txt
-rw-rw-r-- 1 me me 0 2008-03-06 14:52 foo.txt
# 更改权限
chmod 600 foo.txt
# 再次查看权限
ls -l foo.txt
-rw------- 1 me me 0 2008-03-06 14:52 foo.txt
通过传递参数“600”,我们能够设置文件所有者的权限为读写权限,而删除用户组和其他人 的所有权限。虽然八进制到二进制的映射看起来不方便,但通常只会用到一些常见的映射关系: 7 (rwx),6 (rw-),5 (r-x),4 (r–),和 0 (-–)。
八进制常用示例有:
chmod
命令支持一种符号表示法,来指定文件模式。符号表示法分为三部分:更改会影响 谁,要执行哪个操作,要设置哪种权限。通过字符“u”、“g”、“o”和“a”的组合来指定要影 响的对象,如下所示:
u
:”user” 的简写,意思是文件或目录的所有者。g
:用户组。o
:”others” 的简写,意思是其他所有的人。a
:”all” 的简写,是”u”, ”g” 和“o”三者的联合。如果没有指定字符,则默认使用 “all”。执行的操作可能是一个“+”字符,表示加上一个 权限,一个“-”,表示删掉一个权限,或者是一个“=”,表示只有指定的权限可用,其它所有 的权限被删除。
u+x
:为文件所有者添加可执行权限。u-x
:删除文件所有者的可执行权限。+x
:为文件所有者,用户组,和其他所有人添加可执行权限。等价于 a+x。o-rw
:除了文件所有者和用户组,删除其他人的读权限和写权限。go=rw
:给文件所属的组和文件所属者/组以外的人读写权限。如果 文件所属组或其他人已经拥有执行的权限,执行权限将被移除。u+x,go=rw
:给文件拥有者执行权限并给组和其他人读和执行的权限。 多种设定可以用逗号分开。一些人喜欢使用八进制表示法,而另一些人则非常喜欢符号表示法。符号表示法的优点是, 允许你设置文件模式的某个属性,而不影响其他的属性。
使用su
命令用来以另一个用户的身份来启动 shell,通常会让你输入该用户的密码。
su [-[l]] [user]
# 使用超级用户
su -
# 不启动新的可交互shell,直接执行单个命令
su -c 'ls -l /root/*'
使用sudo
命令以另一个用户身份执行命令,相对于su
命令不用输入超级用户的密码,使用 sudo
命令时,用户 使用他/她自己的密码来认证。su
和sudo
之间的一个重要区别是sudo
不会重新启动一个 shell,也不会加载另一个用户的 shell 运行环境。因此执行命令不用单号引用起来。
# ls
sudo ls -l /root/*
chown
命令被用来更改文件或目录的所有者和用户组。使用这个命令需要超级用户权限。
chown user1 file.txt
chgrp
命令可以实现,chown
命令只能更改文件所有权,而不是用户组所有权。
chgrp group1 file.txt
使用passwd
命令,来设置或更改用户密码,只要输入passwd
命令,就能更改你的密码。shell 会提示你输入你的旧密码和你的新密码。
通过本文中常见的权限控制命令介绍,可以更合理的设置文件和目录的权限,管理员也可以确保系统安全,并根据需要控制用户对不同资源的访问权限。