“一切皆是文件”是 Unix/Linux 的基本哲学之一,目录、字符设备、块设备、套接字等在 Unix/Linux 都是以文件的形式存在。面对众多的文件,如何理解和管理他们的读、写、执行权限呢?


Windows 下,可以通过鼠标右击文件,在属性栏查看文件的权限。Linux 下的文件“哲学”是否与 Windows 相同呢?我们从以下几点分析。

 

1 . 文件权限设定的作用

文件权限的设定是为了保护系统及用户数据的安全性。对于用户来说,最重要的事情就是数据、文件的私密性及安全性。从系统管理员到普通用户,从文件属性到文件特殊加密,无不围绕着一个主题:权限管理。若一个关键文件被意外写入,轻则数据丢失,重则系统崩溃。

 

以根目录下的 /proc 目录文件为例,该文件是 linux 内核提供的一种虚拟文件系统,可访问内核内部数据结构、改变内核设置的机制。其中 swaps 为交换空间的使用情况,tty 保存 tty 设备信息,version Linux 内核版本和 gcc 版本。我们可以发现,这些与系统紧密关联的文件全部为只读,即使对于 root 用户。

 

图 1 /proc 下的部分文件

  

2 . 文件权限的划分

Linux 下的权限管理从访问者方面来看大致可分为三块,分别是用户、用户组、管理员。如图 2,打开当前用户目录下的文件列表细节。大部分时候我们使用此命令仅仅是关注右半部分的信息,比如文件名、日期、大小等。左半部分展现的就是对应文件的权限信息了。

 

图 2 文件属性细节

  

Linux 系统对用户的权限有着严格的管理。如图 3,可将一个文件的权限分为三部分:对文件所有者权限、对所有者所在用户组权限、对其他用户权限。其中,用户组(group)就是具有相同特征的用户的集合体。

 

图 3 文件权限

  

用户和用户组的信息分别在 /etc 目录下的 passwd、group 文件内,可以使用 cat 命令直接读取。

 

图 4 用户 / 用户组信息

  

3 . 文件权限更改方法

Linux 提供 chmod 命令用于改变或者设置文件的权限。命令格式如图 5,将 hello 文件的其它用户权限可执行属性去掉:vmuser@Linux-host: hello$ chmod o-x hello。如果同时设置 u/g/o,可用 a 表示,例如为 hello 增加全部用户可执行权限:vmuser@Linux-host: ~$ chmoda+x hello。

 

图 5 文件权限更改(一)

  

前面我们说到,linux 的文件权限管理是一种“哲学美”,chmod 命令还提供更间接的使用方式。如图 6,分别将 r、w、x 对应为数字 4、2、1,用数字之和代表该组权限值,比如 rwx 可用 7 表示, r-x 可用 5 表示。若想将 hello 文件设置为最宽松的权限,可直接使用命令 chmod 777 hello。

 

图 6 文件权限更改(二)

  

那么除了先创建文件再修改权限,是否可直接创建特定权限的文件呢?答案是肯定的,我们可以通过修改 umask 的值管理对应用户默认权限。可以直接输入 umask 获取当前用户的权限默认值,当然也可以使用 umask=xxx 去修改它。此外,若想永久设置 umask 的值,可以修改~/.bashrc 或者 ./bash_profile。Umask 的值与文件的权限并不是一一对应的,感兴趣到的读者可以查阅相关资料。

 

图 7 用户默认权限更改

  

4 . 如何保护重要文件

文件的保护可以从量方面入手:文件的权限管理、文件及时备份。

 

权限管理方面,在更改文件权限时不可随意,比如直接 chmod 777 filename。以系统或 APP 的工作日志文件为例,它对绝大部分可登录用户仅可读,若对其覆盖写入将永久丢失日志信息。在复杂的多用户协同系统中,要严格管理单用户权限、组用户权限,慎用 root 用户权限。

 

图 8 只读日志文件

  

对于标准的 rootfs,不建议普通用户直接去更改它,在 uboot 挂载该文件系统时直接赋予它只读权限。将 bootargs 的最后一项赋值为“ro”即为 read only。若需临时修改为读写模式,可使用 mount -o remount,rw /,用于临时修改为可读写模式,尽量避免修改 uboot 代码。

 

图 9 文件系统权限更改

  

文件备份时保护重要文件的另一种手段,在严格的权限管理机制也不能保证万无一失。重要文件可使用脚本自动化、定时备份,必要时还可以将文件保存到其他物理存储介质或云盘中。在涉及到扣费、计费时,数据及文件的安全性显得尤为重要。ZLG 致远电子“公共交通的移动支付—公交 POS”方案中使用的 ARM9 核心板采用双备份文件系统及 UPS 掉电保护设计来保证扣费数据的可靠。

 

图 10 文件系统双备份