文件的权限

一、文件权限概述

当通过 ls -il 命令查看文件属性时,第二列的2-10个字符表示的就是文件的权限信息:

[root@localhost project]# ls -il
total 4
25593861 -rw-r--r-- 1 root root 64 Nov  7 18:31 test.txt

  9个字符3个1组,分别表示属主、属组、其他人的权限信息,所以文件或者目录的权限是针对于用户和用户组来讲的,那么如何针对于文件和目录对用户和用户组进行权限分配呢?

二、文件权限操作

(一) chmod(改变文件权限属性)

 chmod是改变文件或者目录的权限,一般是属主和root超级用户才有这种权限。通过chmod改变文件或者目录的权限有两种方法:

  • 数字权限
  • 字母权限

两种方式过程操作不同,但都能达到同样的权限操作的目的。

1、数字权限

 语法:chmod + 数字组合 + 文件或者目录名

其中的数字组合是:属主+属组+其他,比如:

[root@localhost project]# ll
total 4
-rw-r--r-- 1 root root 64 Nov  7 18:31 test.txt

下面文件的权限是644,其中的6表示的就是属主的权限,两个4分别表示的就是属组和其他人的权限。6表示的是属主具有读、写的权限。

权限字母 数字
r 4
w 2
x 1
- 0

所以,属主的权限就是 4+2+0 = 6,其余的两个与之一样的计算方式。加入现在修改该文件的权限为:

属主(root):可读、可写、可执行
属组(root):可读、可执行
其他:可读、可执行

可这样修改:

[root@localhost project]# chmod 755 test.txt 
[root@localhost project]# ll
total 4
-rwxr-xr-x 1 root root 64 Nov  7 18:31 test.txt

对于目录的权限,如果只是单纯的修改打开目录的权限,不用加参数;但是如果向修改目录下的文件或者子目录需要加-R参数:

# 创建一个父目录dir1,权限为755
[root@localhost project]# mkdir dir1
[root@localhost project]# ll
total 0
drwxr-xr-x 2 root root 6 Nov  8 10:53 dir1

# 创建内部的文件它t1.txt,权限为644以及子目录subdir1,权限为755
[root@localhost dir1]# touch t1.txt
[root@localhost dir1]# mkdir subdir1
[root@localhost dir1]# ll
total 0
drwxr-xr-x 2 root root 6 Nov  8 10:54 subdir1
-rw-r--r-- 1 root root 0 Nov  8 10:54 t1.txt

此时尝试修改父目录的权限:

# 父目录权限变成655
[root@localhost project]# chmod 655 dir1
[root@localhost project]# ll
total 0
drw-r-xr-x 3 root root 35 Nov  8 10:54 dir1
[root@localhost project]# cd dir1/
[root@localhost dir1]# ls
subdir1  t1.txt
# 子目录以及文件还是之前的权限755、644
[root@localhost dir1]# ll
total 0
drwxr-xr-x 2 root root 6 Nov  8 10:54 subdir1
-rw-r--r-- 1 root root 0 Nov  8 10:54 t1.txt

# 改变父目录以及子目录以及文件的权限,可以看到父目录和其下的所有文件和子目录全变成533的权限 [root@localhost project]# chmod -R 533 dir1 [root@localhost project]# ll total 0 dr-x-wx-wx 3 root root 35 Nov 8 10:54 dir1 [root@localhost project]# cd dir1/ [root@localhost dir1]# ll total 0 dr-x-wx-wx 2 root root 6 Nov 8 10:54 subdir1 -r-x-wx-wx 1 root root 0 Nov 8 10:54 t1.txt

注意的是如果加上-R参数指向改变其下的目录和文件而不想改变父目录的权限使用下面的通配符进行设置:

[root@localhost project]# chmod -R 644 dir1/[a-z]*
# 父目录权限755
[root@localhost project]# ll
total 0
drwxr-xr-x 3 root root 35 Nov  8 10:54 dir1

# 子目录和文件变成644
[root@localhost project]# cd dir1/
[root@localhost dir1]# ll
total 0
drw-r--r-- 2 root root 6 Nov  8 10:54 subdir1
-rw-r--r-- 1 root root 0 Nov  8 10:54 t1.txt

2、字母权限

 语法:chmod + 用户类型 + "+/-/="  权限字母  

命令 用户类型 操作字符 权限字母 文件类型
chmod u(user) +/-/= r 文件/目录
g(group) w
o(other) x
a(all) -

 其中操作符中:

  • +  在已有的权限上加上权限
  • -   在已有的权限的减去权限
  • =  覆盖之前的权限,重新设置

比如:

# 将属主、属组、其他人权限取消执行权限
[root@localhost project]# ll
total 0
drwxr-xr-x 3 root root 35 Nov  8 10:54 dir1
[root@localhost project]# chmod ugo-x dir1
[root@localhost project]# ll
total 0
drw-r--r-- 3 root root 35 Nov  8 10:54 dir1

# 属主权限加上执行权限
[root@localhost project]# ll
total 0
drw-r--r-- 3 root root 35 Nov  8 10:54 dir1
[root@localhost project]# chmod u+x dir1
[root@localhost project]# ll
total 0
drwxr--r-- 3 root root 35 Nov  8 10:54 dir1

# 将所有的用户类型加入可执行权限
[root@localhost project]# chmod +x dir1 #相当于chmod a+x dir1
[root@localhost project]# ll
total 0
drwxr-xr-x 3 root root 35 Nov  8 10:54 dir1

对于目录已经其子目录和文件需要使用-R参数:

[root@localhost project]# chmod -R a+rwx dir1/
[root@localhost project]# ll
total 0
drwxrwxrwx 3 root root 35 Nov  8 10:54 dir1
[root@localhost project]# cd dir1/
[root@localhost dir1]# ll
total 0
drwxrwxrwx 2 root root 6 Nov  8 10:54 subdir1
-rwxrwxrwx 1 root root 0 Nov  8 10:54 t1.txt

(二)chown(改变文件所属关系属性)

 改变文件所属关系,包括属组,只有如下的情况满足其一,才能改变文件属组:

  • 用户是属主,且是该属组成员
  • root超级用户

其语法如下:

chown + 属主/:属组/属主:属组 + 文件或者目录

例如:

# 仅授权属主
chown + 用户 + 文件或者目录

# 仅授权属组
chown + :属组 + 文件或者目录

# 授权属主、属组
chown + 用户:属组

 文件所属关系更改:

[root@localhost project]# ll -l
total 0
-rw-r--r-- 1 test root  0 Nov 10 20:00 t.txt
# 改变属主
[root@localhost project]# chown test t.txt 

#改变属组
[root@localhost project]# chown .test t.txt 
[root@localhost project]# ll -l
total 0
-rw-r--r-- 1 test test  0 Nov 10 20:00 t.txt

#改变属主、属组
[root@localhost project]# chown root:root t.txt 
[root@localhost project]# ll -l
total 0
-rw-r--r-- 1 root root  0 Nov 10 20:00 t.txt

目录所属关系更改需要使用参数-R:

# 更改目录的所属关系
[root@localhost project]# ll -l
total 0
drwxrwxrwx 3 root root 35 Nov  8 10:54 dir1
[root@localhost project]# chown -R test:test dir1
[root@localhost project]# ll -l
total 0
drwxrwxrwx 3 test test 35 Nov  8 10:54 dir1

# 递归修改目录下子目录和文件的所属关系
[root@localhost project]# chown -R test:test dir1/[a-z]*
[root@localhost project]# cd dir1/
[root@localhost dir1]# ll
total 0
drwxrwxrwx 2 test test 6 Nov  8 10:54 subdir1
-rwxrwxrwx 1 test test 0 Nov  8 10:54 t1.txt

(三)实例

# 测试文件它t1.txt
[root@localhost project]# ll -l
total 0
-rw-r--r-- 1 test test  0 Nov 10 21:21 t1.txt

上述测试文件t1.txt对于test用户拥有可读、可写的权限,用户组拥有可读权限,其他用户拥有可读权限。

# 用户test权限
[root@localhost project]# vim t1.txt 
[root@localhost project]# cat t1.txt 
hello

# 用户test2只可以读取
[test2@localhost project]$ cat t1.txt 
hello

总结:

  • r 对文件具有可读取权限,对目录可查看其下的文件和子目录(ls),无法进入(cd)
  • w 对文件具有添加、修改内容的权限(注意的是移动和删除与文件本身属性无关,看上级目录的权限,需要x配合),对目录具有添加、删除、移动目录中文件权限(需要x配合)
  • x 对文件执行的权限(普通用户还需要r权限,root超级用户不用r也能执行),对目录具有进行目录的权限 

三、文件/目录默认权限操作

(一)umask

[root@localhost project]# mkdir dir1
[root@localhost project]# touch t2.txt
[root@localhost project]# ll -l
total 0
drwxr-xr-x 2 root root 6 Nov 10 22:04 dir1
-rw-r--r-- 1 root root 0 Nov 10 22:04 t2.txt

  在创建默认的目录、文件后可以看到其默认的权限为755、644,那么这个默认的权限是怎么来的呢?Linux中通过umask来决定默认的权限,umask是通过八进制的数值创建文件、目录的默认权限,可以看到root超级用户和普通用户的umask值:

# 超级用户
[root@localhost project]# umask
0022

# 普通用户
[test2@localhost project]$ umask
0002

这个默认的umask在/etc/profile文件中进行了定义:

...
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi
...

那么加入你想修改文件或者目录的默认权限,应该如何做呢?

(二)修改默认权限

1、临时修改

  • 文件

文件修改分为两种情况:其一,umask都为偶数;其二umask含有奇数位。

对于偶数位使用文件最大权限 666-umask,这就是最后的权限结果,比如,我需要创建默认文件的权限为642。

[root@localhost project]# umask 024
[root@localhost project]# touch t3.txt
[root@localhost project]# ll -l
total 0
-rw-r---w- 1 root root 0 Nov 10 22:19 t3.txt #默认文件权限为642

对于含有奇数位的需要是用 666-umask,然后在对应奇数位的结果上加1,比如,创建默认文件的权限为642。

[root@localhost project]# umask 025
[root@localhost project]# touch t5.txt
[root@localhost project]# ll -l
total 0
-rw-r---w- 1 root root 0 Nov 10 22:23 t5.txt
  • 目录

目录根据umask计算为 777-umask即可,比如,创建默认目录的权限为752。

[root@localhost project]# umask
0025
[root@localhost project]# mkdir dir2
[root@localhost project]# ll -l
total 0
drwxr-x-w- 2 root root 6 Nov 10 22:32 dir2

2、永久修改

临时修改是只要机器重启就会失效,对于永久修改,只需要更改/etc/profile文件对应的配置即可。

原文地址:https://www.cnblogs.com/shenjianping/p/13942781.html