Linux 系统用户及文件权限

编辑于2018年01月17日

在实际场景中,时不时就会遇到文件权限相关的问题,如:文件没有执行权限、Input/Output Error 等。如果能对相关的知识有一个比较全面的了解,那么再遇到此类问题就可以自己尝试分析解决,而不是上来就 Google,最终在“知识的海洋”里迷失了方向。

用户及用户组

Linux 是一个多用户的操作系统,其中每一个用户必须属于一个组。不同的用户具有不同的资源访问权限,我们在 Linux 服务器上部署应用时通常都会创建一个相应的用户,这样如果应用有漏洞,能做的事情也仅限于该用户所在的权限内。相比之下,如果什么都用 root 账户跑,系统的安全性则要低得多。

基本操作

  • 添加用户或用户组:分别使用 adduseraddgroup
  • 删除用户或用户组:分别使用 userdelgroupdel
  • 查看用户及用户组:Linux 中的用户信息保存在 /etc/passwd 文件中,查看该文件(cat /etc/passwd)即可,而用户组信息则保存在 /etc/group 文件中。文件内容的说明可以参考此链接
  • 当前用户:使用 whoami 命令。
  • 当前用户所在组:使用 groups 命令查看。
  • 切换登录用户:su - <user>

关于各个命令具体如何使用这里则不做说明,可以通过 man <command> 查看相关说明。

新用户添加 sudo 权限

新添加的用户具有普通用户权限,但是有时候我们需要使用管理员权限去执行一些任务。在执行命令时,在命令的最前面添加 sudo ,然后输入管理员密码即可。

然而,在使用 sudo 时会遇到 XXX is not in the sudoers file. This incident will be reported. 的错误。这是因为用户执行 sudo 时,系统会主动寻找 /etc/sudoers 文件,判断该用户是否有执行 sudo 的权限,如果没有则会出现上述错误。

在网上搜索此类问题的解决办法基本都是说修改 /etc/sudoers 文件,这个方法应该可行(我没有试过)。我使用的是 usermod 命令将用户加入到 sudo 用户组:usermod -aG sudo <user>

文件权限

Linux 系统中文件权限包括可读、可写和可执行三种,这三种权限又可以分配给三种用户:拥有者、拥有者同组其他成员、拥有者不同组的成员。

查看文件权限

我们可以使用 ls -l 命令查看当前目录下的目录及文件权限,执行该命令后的结果如下图所示。

文件权限

其中像:-rw-rw-r-- 1 hezhou hezhou 723 Dec 22 18:55 config.production.json 这样的一行就是文件或目录的信息,具体的含义说明如下:

  • -rw-rw-r--:这一段有 10 个字符,其中第一个字符代表文件类型:文件(-)、目录(d)和链接(l)。剩下的 9 个字符每三个一组,代表上文提到的三种用户的三类权限。rw-rw-r-- 表示拥护者可读、可写、不可执行;拥有者同组其他成员可读、可写、不可执行;拥护者不同组成员可读、不可写、不可执行。
  • 1-rw-rw-r-- 后面的数字表示文件数,如果是目录则代表了目录下的文件数。
  • hezhou:文件的拥有者。
  • hezhou:文件拥有者所在组。
  • 723:表示文件的字节数。
  • Dec 22 18:55:表示文件的最后修改时间。
  • config.production.json:文件名。

修改文件拥有者和用户组

修改文件的拥有者或用户组分别使用 chownchgrp 命令,添加 -R 参数可以递归的修改目录下所有文件的拥护者或用户组。

使用 chown <user>:<group> <file> 可以同时修改拥有者和用户组。

关于命令更具体如何使用可通过 man chownman chgrp 查看。

修改权限

修改文件或目录的权限使用 chmod 命令,权限的分配匹配此正则表达式:[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+

  • ugoa 代表的用户类型:拥有者(u)、拥有者同组(g)、拥有者不同组(o)、所有(a)。
  • -+= 分表代表:移除、添加、设置。
  • rwxXst 代表要添加、删除、设置的具体权限。
  • 0-7 权限也可以通过数字表示,后面再做说明。

假如在用户根目录下有一个 test.txt 文件,它的权限如下图所示。

test.txt 原权限

现在我们要设置 test.txt 的权限为 -rwxr-xrw-,可以使用此命令:chmod u=rwx,g=rx,o=rw test.txt。执行完该命令后的权限如下图所示。

test.txt 新权限

如果现在又要设置回原来的状态,可以使用此命令:chmod u-x,g+w-x,o-w test.txt。执行完该命令后再次查看权限,可以看到已经是以前的状态了(截图就不贴了)。

权限的数字表示

上文中提到权限也可以使用数字表示,权限和数字的对应关系为:r=4w=2x=1。如果包含多种权限则可以使用对应数字的和,例如:rw=6。可以看出这三个数字设计得非常巧妙,各种可能的权限集合分别对应 0~7 这 8 个数字。

如果使用此种方式,设置 test.txt 的权限为 -rwxr-xrw-,可以使用此命令:chmod 756 test.txt,执行的结果如下图所示。

权限的数字表示

总结

以上就是关于 Linux 系统用户及文件权限的介绍。以后,如果再遇到读写错误的问题,可以先考虑一下是不是没有读写权限导致的,尝试修改相应文件的权限去解决问题。千万别一遇到问题就无脑地去 Google 了,先试着根据现象和日志去分析一下吧,否则很可能会迷失在“知识的海洋”里。

希望对您能有帮助,打赏随意