Linux 系统用户及文件权限
在实际场景中,时不时就会遇到文件权限相关的问题,如:文件没有执行权限、Input/Output Error 等。如果能对相关的知识有一个比较全面的了解,那么再遇到此类问题就可以自己尝试分析解决,而不是上来就 Google,最终在“知识的海洋”里迷失了方向。
用户及用户组
Linux 是一个多用户的操作系统,其中每一个用户必须属于一个组。不同的用户具有不同的资源访问权限,我们在 Linux 服务器上部署应用时通常都会创建一个相应的用户,这样如果应用有漏洞,能做的事情也仅限于该用户所在的权限内。相比之下,如果什么都用 root 账户跑,系统的安全性则要低得多。
基本操作
- 添加用户或用户组:分别使用
adduser
或addgroup
。 - 删除用户或用户组:分别使用
userdel
或groupdel
。 - 查看用户及用户组: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
:文件名。
修改文件拥有者和用户组
修改文件的拥有者或用户组分别使用 chown
或 chgrp
命令,添加 -R
参数可以递归的修改目录下所有文件的拥护者或用户组。
使用 chown <user>:<group> <file>
可以同时修改拥有者和用户组。
关于命令更具体如何使用可通过 man chown
或 man chgrp
查看。
修改权限
修改文件或目录的权限使用 chmod
命令,权限的分配匹配此正则表达式:[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+
。
ugoa
代表的用户类型:拥有者(u)、拥有者同组(g)、拥有者不同组(o)、所有(a)。-+=
分表代表:移除、添加、设置。rwxXst
代表要添加、删除、设置的具体权限。0-7
权限也可以通过数字表示,后面再做说明。
假如在用户根目录下有一个 test.txt
文件,它的权限如下图所示。
现在我们要设置 test.txt
的权限为 -rwxr-xrw-
,可以使用此命令:chmod u=rwx,g=rx,o=rw test.txt
。执行完该命令后的权限如下图所示。
如果现在又要设置回原来的状态,可以使用此命令:chmod u-x,g+w-x,o-w test.txt
。执行完该命令后再次查看权限,可以看到已经是以前的状态了(截图就不贴了)。
权限的数字表示
上文中提到权限也可以使用数字表示,权限和数字的对应关系为:r=4
、w=2
、x=1
。如果包含多种权限则可以使用对应数字的和,例如:rw=6
。可以看出这三个数字设计得非常巧妙,各种可能的权限集合分别对应 0~7 这 8 个数字。
如果使用此种方式,设置 test.txt
的权限为 -rwxr-xrw-
,可以使用此命令:chmod 756 test.txt
,执行的结果如下图所示。
总结
以上就是关于 Linux 系统用户及文件权限的介绍。以后,如果再遇到读写错误的问题,可以先考虑一下是不是没有读写权限导致的,尝试修改相应文件的权限去解决问题。千万别一遇到问题就无脑地去 Google 了,先试着根据现象和日志去分析一下吧,否则很可能会迷失在“知识的海洋”里。