暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux | Linux 权限详解

testDemo 2018-11-02
466

背景:前几天遇到一个Linux权限的问题,Java代码实现在服务器指定目录上生成个shell,最后另启动一个线程赋予此文件755权限后执行。部署后验证时,发现与预期不符,最后找到日志提示 "Permission denied",最后定位到是指定目录是root属组,没有可写入的权限。此类错误非常低级。

在工作时,经常会遇到 用户权限、所属组问题。用户权限、所属组问题可参看:Linux 用户、用户组管理、权限分配

下面就简单介绍一下Linux权限相关

Linux 权限详解

  • Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x

  • Linux下权限的属组有 拥有者 、群组 、其它组 三种。每个文件都可以针对这三个属组(粒度),设置不同的rwx(读写执行)权限

  • 通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组

可以简单看一下 下面是我某台服务器上的文件目录:

 1[elk@localhost /]$ ll
2total 110
3dr-xr-xr-x.   2 root   root  4096 Jul 16 03:10 bin
4dr-xr-xr-x.   5 root   root  1024 Jul 13 07:20 boot
5drwxr-xr-x.  18 root   root  3820 Oct 30 07:31 dev
6drwxr-xr-x.   6 elk    elk   4096 Nov  1 01:22 elk
7drwxr-xr-x. 106 root   root 12288 Oct 31 18:23 etc
8drwxr-xr-x.   9 root   root  4096 Oct 30 07:03 home
9dr-xr-xr-x.  11 root   root  4096 Jul 16 02:21 lib
10dr-xr-xr-x.   9 root   root 12288 Jul 16 03:10 lib64
11drwx------.   2 root   root 16384 Jul 13 07:13 lost+found
12drwxr-xr-x.   2 root   root  4096 Sep 23  2011 media
13drwxr-xr-x.   3 root   root  4096 Jul 13 07:21 mnt
14drwxr-xr-x.   3 root   root  4096 Jul 12 23:22 opt
15dr-xr-xr-x. 203 root   root     0 Oct 30 06:59 proc
16drwxr-xr-x.   4 test1  test  4096 Oct 10 07:22 Projects
17dr-xr-x---.   4 root   root  4096 Nov  1 02:37 root
18dr-xr-xr-x.   2 root   root 12288 Jul 16 03:10 sbin
19drwxr-xr-x.   7 ylyao4 test  4096 Aug 23 19:10 scai
20drwxr-xr-x.   7 root   root     0 Oct 30 06:59 selinux
21drwxr-xr-x.   2 root   root  4096 Sep 23  2011 srv
22drwxr-xr-x.  13 root   root     0 Oct 30 06:59 sys
23drwxrwxrwt.  30 root   root  4096 Nov  1 01:32 tmp
24drwxr-xr-x.  13 root   root  4096 Jul 13 07:14 usr
25drwxr-xr-x.  21 root   root  4096 Jul 13 07:17 var

文件的所有权限详情,有两种方式

  1. 第一种是十位二进制表示法,(三个属组每个使用二进制位,再加一个最高位共十位),可简化为三位八进制形式

  2. 第二种十二位二进制表示法(十二个二进制位),可简化为四位八进制形式

十位权限表示

权限第一位:代表文件类型
  • d代表的是目录(directroy)

  • -代表的是文件(regular file)

  • s代表的是套字文件(socket)

  • p代表的管道文件(pipe)或命名管道文件(named pipe)

  • l代表的是符号链接文件(symbolic link)

  • b代表的是该文件是面向块的设备文件(block-oriented device file)

  • c代表的是该文件是面向字符的设备文件(charcter-oriented device file)

1[elk@localhost /]$ ll /bin/
2total 7804
3-rwxr-xr-x. 1 root root    123 Feb 21  2013 alsaunmute
4lrwxrwxrwx. 1 root root      4 Jul 13 07:14 awk -> gawk
5
6[ylyao4@localhost /]$ ll selinux/
7total 0
8-r--r--r--.  1 root root    0 Oct 30 06:59 mls
9crw-rw-rw-.  1 root root 13 Oct 30 06:59 null

权限后九位:代表属组权限

我们知道Linux权限总共有三个属组,这里我们给每个属组使用三个位置来定义三种操作(读、写、执行)权限,合起来则是权限的后九位

1权限   二进制  八进制
2rwx = 111 = 7
3rw- = 110 = 6
4r-x = 101 = 5
5r-- = 100 = 4
6-wx = 011 = 3
7-w- = 010 = 2
8--x = 001 = 1
9--- = 000 = 0

  d       rwx      r-x      r-x.
文件    4+2+1 4+0+1 4+0+1 = 755

常见的权限表示形式有:
-rw------- (600)      只有拥有者有读写权限。
-rw-r--r-- (644)      只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700)     只有拥有者有读、写、执行权限。
-rwxr-xr-x (755)    拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711)    拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666)   所有用户都有文件读、写权限。
-rwxrwxrwx (777)  所有用户都有读、写、执行权限。





文章转载自testDemo,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论