且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

文件和目录权限、更改所有者和所属组、umask、隐藏权限

更新时间:2022-04-18 01:07:16

一、文件或目录权限chmod

一个Linux目录或者文件,都会有一个所有者和所属组。所有者是指文件的拥有者,而所属组指的是这个文件属于哪一个用户组。


通过ls -l 可以查看文件的所有者、所属组、权限等信息。

[root@centos-01 ~]# ls -l /etc/passwd

-rw-r--r--. 1 root root 1008 10月 17 06:04 /etc/passwd


权限前2-4位是所有者权限,中间5-7位是所属组权限,最后8-10位是其他用户权限。r=-读权限,w=写权限,x=执行权限。

权限可以用数字表示

r=4 w=2 x=1  rwx=7  r--=4  ---=0

-rw-r--r-- = 644

-rwwrwxrwx = 777


[root@centos-01 ~]# chmod 700 /root/.ssh/  #给目录分配700权限,drwx------

[root@centos-01 ~]# ls -ld /root/.ssh/

drwx------. 2 root root 80 10月 19 22:00 /root/.ssh/

权限第十一位是个点,意味着这个文件受selinux控制。


[root@centos-01 ~]# getenforce  #查看selinux 状态

Enforcing #开启

[root@centos-01 ~]# setenforce 0  #临时关闭selinux

[root@centos-01 ~]# getenforce

Permissive #也是开启状态,只不过是打印一个警告

修改配置文件才可以永久修改

/etc/selinux/config

将SELINUX=enforcing 改成seling = disabled


chmod -R将目录下的子目录子文件一次性的批量更改文件权限


目录和目录下文件的原始权限:755,644

[root@centos-01 tmp]# ls -ld test2

drwxr-xr-x. 2 root root 19 10月 23 23:17 test2

[root@centos-01 tmp]# ls -l test2/1.txt

-rw-r--r--. 1 root root 0 10月 23 23:17 test2/1.txt


将目录文件改为777。之后可以发现,目录权限已改为777,但文件权限还是644。

[root@centos-01 tmp]# chmod 777 test2

[root@centos-01 tmp]# ls -ld test2

drwxrwxrwx. 2 root root 19 10月 23 23:17 test2

[root@centos-01 tmp]# ls -l test2

-rw-r--r--. 1 root root 0 10月 23 23:17 1.txt


加上-R 参数,并将目录权限改为700。之后可以发现目录权限和文件权限都被改成了700。

[root@centos-01 tmp]# chmod -R 700 test2

[root@centos-01 tmp]# ls -ld test2

drwx------. 2 root root 19 10月 23 23:17 test2

[root@centos-01 tmp]# ls -l test2

-rwx------. 1 root root 0 10月 23 23:17 1.txt


u=user  g=group  o=other  a=all

chmod u=rwx,g=r,o=r  a.txt #此时a.txt具有-rwxr--r--权限

chmod a=rwx a.txt  #此时a.txt具有-rwxrwxrwx权限

chmod u-x a.txt  #此时a.txt具有 -rw-rwxrwx权限

加号,等号同上。



权限对目录的重要性:

r:表示具有读取目录结构列表的权限,有r权限可以通过ls显示目录内容列表。

w:表示具有更改该目录结构列表的权限,如下:

  新建新的文件与目录

  删除已经存在的文件与目录(不论该我呢见的权限为何)

  将已存在的文件或目录重命名

  转移该目录内的文件、目录位置

总之,目录的w权限就与该目录下的文件名变动有关。

x:代表的是用户能否进入该目录成为工作目录的用途,所谓的工作目录就是你目前所在的目录。目录不具有x权限则不能切换(cd)到此目录内,

注意:要开放目录给任何人浏览时,至少要给r及x权限。



三、更改所有者和所属组chown

chown 更改文件(目录)所有者,也可以更改所属组


[root@localhost /]# ls -l /tmp/1.txt  #查看文件属性

-rw-r--r--. 1 root root 15 10月 24 14:12 /tmp/1.txt

#文件的所有者和所属组均为 root 。

[root@localhost /]# chown huang /tmp/1.txt  

#将文件的所有者改为 huang。

[root@localhost /]# ls -l /tmp/1.txt

-rw-r--r--. 1 huang root 15 10月 24 14:12 /tmp/1.txt

#文件的所有者由root变成了huang,而用户组依然是root 。


chown user1:group1 目录(文件) 

#可以将目录(文件)的所有者改为user1,所属组改为group1。

chown :group2 目录(文件)  

#可以将目录(文件)的所属组改为group2,而所有者没有改变。


chgrp 更改文件(目录)的所属组

[root@localhost /]# ls -l /tmp/test2.txt  #查看文件属性

-rw-r--r--. 1 root root 4 10月 24 14:16 /tmp/test2.txt

#文件的所有者和所属组均为 root 。

[root@localhost /]# chgrp huang /tmp/test2.txt

#将文件的所有组改成huang。

[root@localhost /]# ls -l /tmp/test2.txt

-rw-r--r--. 1 root huang 4 10月 24 14:16 /tmp/test2.txt

#文件的所有者没有改变,还是root。所属组变成了huang。


shown -R 可以批量修改目录及目录下文件的所有者和所属组。

shown -R user:group /tmp/test/

#可以将/tmp/test 目录及目录下文件的所有者改为user所属组改为group。


查看系统中有哪些用户可用命令cat /etc/passwd 查看。




四、umask

通过umask,可以确定文件和目录的默认权限。


默认情况下,目录最大权限为:777

默认情况下,文件最大权限为:666

我们新建文件和目录的权限都为文件最大权限-umask值。


查看umask值,直接输如 umask就可以查看

[root@localhost ~]# umask

0022


修改umask(临时)

[root@localhost ~]# umask 002

[root@localhost ~]# umask

0002


[root@localhost /]# mkdir /tmp/test

#在tmp目录下创建test目录

[root@localhost /]# touch /tmp/test/1.txt

#在test目录下创建1.txt文件

[root@localhost /]# ls -l /tmp/test/1.txt

-rw-r--r--. 1 root root 0 10月 24 15:45 /tmp/test/1.txt

#新建文件权限为644(rw-rw-rw- - ----w--w- = rw-r--r--)

[root@localhost /]# ls -ld /tmp/test

drwxr-xr-x. 2 root root 19 10月 24 15:45 /tmp/test

#新建目录权限为755(rwxrwxrwx - ----w--w- = rwxr-xr-x)

#默认情况下root的umask为022,普通用户为002


[root@localhost /]# umask 002

#将umask改成002

[root@localhost /]# mkdir /tmp/test2

#在tmp目录下创建test2目录

[root@localhost /]# touch /tmp/test/2.txt

#在/tmp/test/目录下创建2.txt

[root@localhost /]# ls -l /tmp/test/2.txt

-rw-rw-r--. 1 root root 0 10月 24 16:04 /tmp/test/2.txt

#新建文件权限为664(rw-rw-rw- - -------w- = rw-r-wr--)

[root@localhost /]# ls -ld /tmp/test2

drwxrwxr-x. 2 root root 6 10月 24 16:03 /tmp/test2

#新建目录权限为775(rwxrwxrwx - -------w- = rwxrwxr-x)


如果把umask改成003,如果用umask相减。理论上新建的文件权限为663(rw-rw--wx)。实际情况目录权限为664。

rw-rw-rw- - -------wx = rw-rw-r--

0权限减去任意权限都为0.

[root@localhost /]# umask

0003   #umask为003

[root@localhost /]# touch test.txt #新建文件test.txt

[root@localhost /]# ls -l test.txt

-rw-rw-r--. 1 root root 0 10月 24 16:15 test.txt

#文件权限为664


永久修改权限需要修改配置文件:

vi /etc/profile   71行为普通用户权限,73行为超级用户权限

vi /etc/bashrc    60行为普通用户权限,62行为超级用户权限

配置修改好需要刷新配置:

source /etc/profile

source /etc/bashrc



四、隐藏权限lsattr、chattr

隐藏权限用ls -l是查询不到的。


创建一个1.txt文件,用chattr给它加上i权限。

chattr +i 1.txt

vi编辑这个文件,进入后按i进入编辑模式,下方提示该文件为只读文件。

文件和目录权限、更改所有者和所属组、umask、隐藏权限


虽然可以输入内容,但是保存的时候还是不能保存,即便是用wq!也不行。

文件和目录权限、更改所有者和所属组、umask、隐藏权限


i权限可以让文件不能被删除、改名、追加、移动等。只有root用户能设置该属性。

文件和目录权限、更改所有者和所属组、umask、隐藏权限

chattr -i 1.txt 可以将文件的i权限去掉。


chattr +a 5.txt a权限只能追加,不能修改、删除、重命名、重定向、编辑等。(可以touch,更改mtime)

文件和目录权限、更改所有者和所属组、umask、隐藏权限

chattr -a 5.txt 可以将文件的a权限去掉


给目录加上i权限后,目录不能删除文件,不能移动、不能创建文件。目录下文件内容可以更改,但是文件不能删除,不能重命名。

文件和目录权限、更改所有者和所属组、umask、隐藏权限


给目录加上a权限,可以创建文件,但是不能删除、移动目录。

文件和目录权限、更改所有者和所属组、umask、隐藏权限


目录加上a权限,目录下的文本内容可以修改,但不能对目录下的文件进行重命名、删除操作。

文件和目录权限、更改所有者和所属组、umask、隐藏权限


lsattr 可以查询文件的特殊权限。

lsattr -a 可以查看所有文件的特殊权限,包括隐藏文件

lsattr -d 只列出当前目录的数据

lsattr -R 可以连同子目录的数据一并列出来

文件和目录权限、更改所有者和所属组、umask、隐藏权限




本文转自 豆渣锅 51CTO博客,原文链接:http://blog.51cto.com/754599082/1976016