Linux中文件权限和所有权

发布时间 2023-12-02 20:28:16作者: 飔鬏
在Linux中,设计与文件和目录相关联的权限的目的是防止用户访问其他用户的私有文件以及保护重要的系统文件。针对每个文件的权限所分配的九位(权限位)定义了你和其他用户对你文件的访问权。
普通文件的权限通常为-rwxrwxrwx。对于不同的项目,前面的“-”是不同的,有可能看到d(针对目录)、l(针对符号链接)、b(针对块设备)、c(针对字符设备)、s(针对套接字)或者p(针对命名的管道)。
在九位权限中,前三位适用于所有者的权限,中间三位表示文件所属组的权限,而最后三位适用于其他人的权限。其中,r表示读取,w表示写入,x表示执行权限。若用“-”代替字母,则意味着相关联的读取、写入或执行位的权限被关闭。
权限 文件 目录
Read 查看文件的内容 查看目录包含的文件和子目录
Write 更改文件的内容,重命名文件或者删除文件 向目录添加文件或者子目录。删除目录中的文件或者子目录
Execute 将文件作为一个程序运行 将目录更改为当前目录,搜索目录或者执行该目录中的一个程序,访问目录中文件的文件元数据(文件大小、时间戳等)

Chmod(数字)更改权限

在Linux中,可以使用chmod更改文件的权限。在更改过程中,每种权限(读取、写入和执行)都被分配了一个数字:r=4、w=2、x=1,通过使用每组的总数建立权限。
[root@fedora32 ~]# chmod 644 passwdbak
[root@fedora32 ~]# chmod -R 755 /root/test/    #-R表示递归
 drwxr-xr-x. 2 root root    6 Dec  2 11:44 test

Chmod(字母)更改权限

除了使用字母表示更改什么以及为谁更改之外,还可以分别使用加号(+)和减号(-)启用和关闭文件权限。针对每个文件,通过使用不同字母,可以更改用户(u)、组(g)、其他人(o)以及所有用户(a)的权限,可以更改的包括读取(r)、写入(w)和执行(x)位。
 [root@fedora32 ~]# chmod -R o-x /root/test/
 drwxr-xr--. 2 root root    6 Dec  2 11:44 test

Umask设置默认的文件权限

当一个普通用户创建一个文件时,其赋予的默认权限是rw-rw-r--,目录的默认权限为rwxrwxr-x。而对于root用户来说,文件和目录的权限分别为rw-r—r—和rwxr-xr-x。这些默认值由umask值确定。
 [root@fedora32 ~]# umask
 0022
根据上述的umask值,暂时忽略前导零,umask值将被视为对文件完全开放权限(666)或者对目录完全开放权限(777)。Umask值002生成对目录的权限775(rwxrwxr-x)。而相同的umask值生成文件的权限644(rw-rw-r--);默认情况下,普通文件的执行权限被关闭。
若想要临时更改umask值,可运行umask命令。
 [root@fedora32 ~]# umask 777 ; touch fhd1 ; mkdir fgd1 ; ls -ld fhd1 fgd1
 d---------. 2 root root 6 Dec  2 11:59 fgd1
 ----------. 1 root root 0 Dec  2 11:59 fhd1
 [root@fedora32 ~]# umask 000 ; touch fhd2 ; mkdir fgd2 ; ls -ld fhd2 fgd2
 drwxrwxrwx. 2 root root 6 Dec  2 12:00 fgd2
 -rw-rw-rw-. 1 root root 0 Dec  2 12:00 fhd2
若想要永久更改umask值,需要向主目录中的.bashrc文件末尾处添加一条umask命令。

Chown更改文件所有权

作为一名普通用户,无法更改文件或者目录的所有权,使它们属于另一名用户。只有root用户才可以更改所有权。
 [root@fedora32 ~]# ll
 total 16
 -rw-r--r--. 1 root root 1335 Nov 27 12:42 passwdbak
 drwxrwxrwx. 2 root root    6 Dec  2 12:06 test
 [root@fedora32 ~]# chown vagrant passwdbak ; ls -ld passwdbak   
 仅将用户改为vagrant,用户组不变
 -rw-r--r--. 1 vagrant root 1335 Nov 27 12:42 passwdbak
 [root@fedora32 ~]# chown vagrant:vagrant test/ ;ls -ld test/
 将用户和用户组均改为vagrant
 drwxrwxrwx. 2 vagrant vagrant 6 Dec  2 12:06 test/