在 Linux 文件系统的安全模型中,系统中的文件(或目录)具有两个属性:访问权限和文件所有者,简称权限和归属。其中,访问权限包括读取、写入、可执行三种基本类型,归属包括属主(拥有该文件的用户账号)、属组(拥有该文件的组账号)。Linux 操作系统根文件或目录的访问权限、归属来对用户访问数据的过程进行控制。
下面讲解的内容中,查看或更改权限、归属的命令对目录和文件同样适用。需要注意的是,由于 root 用户是系统的超级用户,拥有完全的管理权限,因此在练习相关命令操作时建议不要以 root 用户作为限制对象,否则可能看不到效果。
1.查看目录和文件的属性
使用带“-l”选项的 ls 命令时,将以长格式显示文件或目录的详细信息,其中包括该文件的权限和归属等参数。
例如,执行以下操作可以列出/etc 目录和/etc/passwd 文件的详细属性。
[root@localhost ~]# ls -ld /etc /etc/passwd drwxr-xr-x. 138 root root 8192 10月 1 17:43 /etc -rw-r--r--. 1 root root 2286 10月 1 17:37 /etc/passwd在上述输出信息中,第 3、4 字段的数据分别表示该文件(或目录)的属主、属组,上例中/etc 目录和/etc/passwd 文件都属于 root 用户、root 组;而第 1 字段的数据表示该文件(或目录)的访问权限,如“drwxr-xr-x”和“-rw-r--r--”。权限字段由四部分
组成,各自的含义如下所述。
第 1 个字符:表示该文件的类型,可以是 d(目录)、b(块设备文件)、c(字符设备文件)、“-”(普通文件)、字母“l”(链接文件)等。
第 2~4 个字符:表示该文件的属主用户(User)对该文件的访问权限。
第 5~7 个字符:表示该文件的属组内各成员用户(Group)对该文件的访问权限。
第 8~10 个字符:表示其他任何用户(Other)对该文件的访问权限。
第 11 个字符:这里的“.”与 SELinux 有关,目前不必关注。
在表示属主、属组内用户或其他用户对该文件的访问权限时,主要使用了三种不同的权限字符:r、w、x,分别表示可读、可写、可执行。若需要去除对应的权限,则用“-”表示。
例如,root 用户对/etc 目录具有可读、可写、可执行的完全权限(rwx),其他任何用户对/etc 目录只具有可读可执行的权限(r-x);root 用户对/etc/passwd 文件具有可读、可写权限(rw-),root 组内的各用户对/etc/passwd 文件只具有可读权限(r--)。
权限字符 r、w、x 用于文件表示可读、可写、可执行,但是对于目录来说,它们的具体含义是存在一些差别的。
例如,用户只要对目录有写入权限,就可以删除该目录下任何文件或子目录,而不管这些文件或子目录是否属于该用户。权限字符在文件和目录中的含义
权限 文件 目录
r 查看文件内容 查看目录内容(显示子目录、文件列表)
w 修改文件内容 修改目录内容(在目录中新建、移动、删除文件或子目录)
x 执行该文件(程序或脚本) 执行 cd 命令进入或退出该目录
若用户在对要访问的文件或目录中不具备相应的权限,则操作将被拒绝。
例如,当普通用户 mike 尝试查看/etc/shadow 文件时,将会提示“Permission denied(因权限不足而被拒绝访问)”,具体操作如下:
[mike@localhost root]$ ls -ld /etc/shadow ----------. 1 root root 1409 10月 1 17:37 /etc/shadow [mike@localhost root]$ cat /etc/shadow cat: /etc/shadow: 权限不够2. 设置目录和文件的权限
需要设置文件或者目录的权限时,主要通过 chmod 命令进行。在设置针对每一类用户的访问权限时,可以采用两种形式的权限表示方法:字符形式和数字形式。r、w、x 权限字符可分别表示为八进制数字 4、2、1,表示一个权限组合时需要将数字进行累加。
例如,“rwx”采用累加数字形式表示成“7”,“r-x”采用累加数字形式表示成“5”;而“rwxr-xr-x”由三个权限段组成,因此可以表示成“755”,“rw-r--r--”可以表示成“644”
使用 chmod 命令设置文件或目录的权限时,基本的命令格式如下:
chmod [ugoa…][+-=][rwx] 文件或目录…
或者
chmod nnn 文件或目录…
上述格式中,字符组合“[ugoa…][+-=][rwx]”或数字组合“nnn”的形式表示要设置的权限模式。其中,“nnn”为需要设置的具体权限值,如“755”“644”等;而“[ugoa…][+-=][rwx]”的形式中,三个组成部分的含义及用法如下所述。
“ugoa”表示该权限设置所针对的用户类别。“u”代表文件属主,“g”代表文件属组内的用户,“o”代表其他任何用户,“a”代表所有用户(u、g、o 的总和)。
“+-=”表示设置权限的操作动作。“+”代表增加相应权限,“-”代表减少相应权限,“=”代表仅设置对应的权限。
“rwx”是权限的字符组合形式,也可以拆分使用,如“r”“rx”等。
下面的操作将 mkdir 命令程序复制为 mymkdir,并通过去除 mymkdir 文件的“x”权限来验证可执行权限的变化。
[root@localhost ~]# cp /bin/mkdir mymkdir [root@localhost ~]# ls -l mymkdir -rwxr-xr-x. 1 root root 79768 10月 1 22:42 mymkdir [root@localhost ~]# ./mymkdir dir01 //可以使用 mymkdir 程序新建文件夹 [root@localhost ~]# ls -ld dir01 drwxr-xr-x. 2 root root 6 10月 1 22:42 dir01 [root@localhost ~]# chmod ugo-x mymkdir //删除所有的"x"权限, 也可改用"a-x" [root@localhost ~]# ls -l mymkdir -rw-r--r--. 1 root root 79768 10月 1 22:42 mymkdir [root@localhost ~]# ./mymkdir dir01 //因缺少"x"权限, mymkdir 无法执行 -bash: ./mymkdir: 权限不够需要将不同类别的用户对文件或目录的权限设置为不同值时,可以用逗号进行分隔。
例如,执行以下操作可以调整 mymkdir 文件的权限,为属主用户添加执行权限,删除其他用户的读取权限。
[root@localhost ~]# chmod u+x,o-r mymkdir [root@localhost ~]# ls -l mymkdir -rwxr-----. 1 root root 79768 10月 1 22:42 mymkdir更简便易用的方法是采用数字形式表示的权限模式。例如,若要将 mymkdir 文件的访问权限设置为“rwxr-xr-x”,其对应的数字组合是 755。
[root@localhost ~]# chmod 755 mymkdir [root@localhost ~]# ls -l mymkdir -rwxr-xr-x. 1 root root 79768 10月 1 22:42 mymkdir在实际的目录权限管理工作中,有时会需要将某一个目录中的所有子目录及文件的权限都设置为相同的值,这时只要结合 chmod 命令的“-R”选项即可轻松实现。若不指定“-R选项,chmod 命令将只改变所指定目录本身的权限。例如,执行以下操作将以递归的方式将 /var/ftp/pub 目录中所有子目录、文件的权限都设置为“rw-r--r--”。
[root@localhost ~]# chmod -R 644 /var/ftp/pub/