浅析linux权限

权限

  • 权限是操作系统用来限制资源访问的机制,权限一般分为读、写、执行。

  • 系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户、哪些组可以对特定的文件进行什么样的操作。

  • 每个进程都是以某个用户的身份运行,所以进程的权限与该用户的权限一样,用户的权限越大,该进程所拥有的权限也就越大。

文件权限

权限 对文件的影响 对目录的影响 mode
r(读取) 可读取文件内容 可列出目录内容 4
w(写入) 可以修改文件内容 可在目录创建、删除文件 2
x(执行) 可以作为命令执行 可访问目录内容 1

所以,目录必须拥有 "x" 权限才可查看其内容。很多时候,执行权限 "x" 对于目录而言也叫浏览权限。仅有 "r" 权限是无法查看目录内容的(因为连访问都做不到)

根据model推算权限

  • 777: 421421421 rwxrwxrwx
  • 755: 421401401 rwxr-xr-x

UGO模型

Linux 权限基于 UGO 模型进行控制:

  • U 代表 User,是文件或文件夹所属用户的权限;
  • G 代表 Group,是文件或文件夹所属组的权限;
  • O 代表 Other,是其他用户对文件或文件夹的权限

每一个文件的权限基于 UGO 模型进行设置 权限三个一组(rwx),对应 UGO 分别设置(总共有 3 个组 9 个权限) 每一个文件拥有一个所属用户和所属组,对应 U、G模型;不属于该文件所属用户和所属组的使用 O(Other)模型对应的权限

drwxr-xr-x 2 root root 4096 2月   7 13:00 build
drwxr-xr-x 2 root root 4096 2月   7 13:00 config
drwxr-xr-x 3 root root 4096 2月   7 13:00 dist
-rw-r--r-- 1 root root  418 2月   7 13:00 index.html
-rw-r--r-- 1 root root 2391 2月   7 13:00 package.json
-rw-r--r-- 1 root root  568 2月   7 13:00 README.md
drwxr-xr-x 6 root root 4096 2月   7 13:01 src
drwxr-xr-x 3 root root 4096 2月   7 13:01 static
drwxr-xr-x 4 root root 4096 2月   7 13:01 test
drwxr-xr-x 2 root root 4096 2月 7 13:00 build
UGO模型的权限 第1位是文件类型描述符,"d"表示目录,"-"表示文件第2-4位"rwx"是U模型权限,可读可写可执行,第5-7位"r-x"是G模型权限,可读可执行,不可写,第8-10位"r-x"是O模型权限 链接数量 所属用户U 所属组G 大小 日期时间 文件或目录名

权限写入问题(实际项目)

junjia用户是在他自己的目录下跑了一个项目,但是遇到上传的时候,laravel的日志写入不进去,同时自己也不能移动创建文件

file

原来postman真的是可以模拟上传文件的,,我 居 然 不 知 道

基于以上,我们要满足两点权限

  • 保证以www用户跑的php-fpm有权限写日志
  • 保证junjia这个用户能对他的家下面的文件做操作

修改前的权限

总用量 44688
-rwxr-xr-x 1 www    www       31684 3月  19 17:03 1.gif
-rwxr-xr-x 1 www    www       24072 3月  19 17:03 2.gif
-rwxr-xr-x 1 www    www       24975 3月  19 17:03 3.gif
-rwxr-xr-x 1 www    www      991948 3月  19 17:04 4.gif
-rwxr-xr-x 1 www    www        2175 3月  19 14:18 4.png
-rwxr-xr-x 1 junjia junjia     1824 3月  22 17:38 894dgwg.lrc
-rwxr-xr-x 1 junjia junjia  3429399 3月  23 20:30 8c32af065e1c2f127726b7c51ce01ba8.mp3
-rwxr-xr-x 1 www    www        9957 3月  22 13:04 9527.jpg
-rwxr-xr-x 1 www    www        5995 3月  22 13:04 9528.jpg
-rwxr-xr-x 1 www    www        6055 3月  22 13:04 9529.jpg
-rwxr-xr-x 1 www    www    12127085 3月  19 14:19 958495454.mp3
-rwxr-xr-x 1 junjia junjia  5904002 3月  23 20:30 a623cee4dea5bdc8571a17af3341542f.mp3
-rwxr-xr-x 1 junjia junjia  3429399 3月  23 20:30 b44970b3e1bf2b6ce3cf893c7ab1a4eb.mp3
-rwxr-xr-x 1 junjia junjia  4952313 3月  23 20:31 b4b64447cb0e03f81728ece1be727b93.mp3
-rwxr-xr-x 1 junjia junjia  3429399 3月  23 20:31 c25098482ebe7f57c5cc09841ba4d9de.mp3
-rwxr-xr-x 1 junjia junjia  5854409 3月  23 20:31 d2aa70309cf8515ff8acb4f6978ecf8f.mp3
-rwxr-xr-x 1 junjia junjia  4952313 3月  23 20:31 d5bd6f8687482c4ff340c62699948aba.mp3
-rwxr-xr-x 1 www    www      538228 3月  19 14:18 timg.gif
[junjia@izm5e5n9efbv0mqjokcoesz songs]$ cp d5bd6f8687482c4ff340c62699948aba.mp3 bak.bak
cp: 无法创建普通文件"bak.bak": 权限不够

因为考虑到我的web服务是www用户跑的,所以这里打算给775权限

chmod -R 775 leqv wanpi wanpi-back
chown junjia:www lequ-back -R

ok~~ 这样,上传和移动都没问题

参考文献

Linux 权限机制