背景:前几天遇到一个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
文件的所有权限详情,有两种方式
第一种是十位二进制表示法,(三个属组每个使用二进制位,再加一个最高位共十位),可简化为三位八进制形式
第二种十二位二进制表示法(十二个二进制位),可简化为四位八进制形式
十位权限表示
权限第一位:代表文件类型
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 1, 3 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) 所有用户都有读、写、执行权限。






