文件的权限

文件权限是指对文件的访问权限, 包括对文件的读、写、执行等操作。它和文件的共享、保护、保密相互联系, 密切相关。Linux 为保护每个用户个人的文件不受侵犯, 提供了文件权限的管理机制。该机制使一个文件归一个特定的用户所有, 该用户有权对自己的文件进行存取等操作, 也可以设置其它用户的操作权限。Linux 的每个文件和目录都包含有决定谁能访问和如何访问的权限,

文件权限相关的用户分类

执行“ls –l”,我们会看到以下内容

3.2权限管理_Linux

3.2权限管理_系统/运维_02

基本权限分为读、写、执行三种权限, 依次用 r、w、x 表示字符形式, 用 4、2、1 表示数字形式。由于目录是特殊的文件, Linux 的权限管理可以区分为对文件和目录的两种操作。

读权限: 对文件是浏览其内容; 对目录浏览其内容, 即列出其下的文件和子目录。

写权限: 对文件是修改和删除; 对目录是创建、删除、重命名其下的文件和子目录。

执行权限: 对文件是允许执行; 对目录是允许进入、搜索遍历该目录。

使用相关命令管理文件权限

(1)chmod( Change mode) 改变文件或目录的存取权限。使用者为文件属主或 root。

chmod

u

g

o

a

+(加入)

-(除去)

=(设置)

r

w

x

文件或目录


例:取消组用户和其他用户对文件users的读取权限

3.2权限管理_系统/运维_03


数字设定法

语法: chmod n1n2n3 文件名列表

使用三个数字分别代表用户(n1),同组用户(n2),其他用户(3)的访问权限

每个数字模式有不同的权限所对应的数字相加得到一个表示访问权限的八进制数字

3.2权限管理_系统/运维_04


例:所有组用户和其他用户对users只设置读和执行权限没有写的权限

3.2权限管理_系统/运维_05


(2)chown(change owner)使用者为文件的当前属主或 root。

功能: 更改每个<文件>的<所有者>、<所属组>。

语法: chown 所有者 [:[组]] 文件; 或chown :组 文件...

举例:

chown user:grp text

该命令将 text 文件的属主和属组分别改为user和grp

chown :smile text

该命令是将text文件的属组改为smile

(3)chgrp (change group) 使用者为文件属主( 必须属于两个以上的组) 或 root。

功能: 变更文件或目录的所属群组。

语法: chgrp 组 文 件..;

chgrp user test

该命令是将test的属组改为user

acl权限

设定 ACL 权限:setfacl 选项 文件名

3.2权限管理_系统/运维_06

查看 ACL 权限:

删除指定用户的 ACL 权限

setfacl -x u:用户名文件名

删除指定用户组的 ACL 权限

setfacl -x g:组名 文件名

举例:

给用户设定 ACL 权限:setfacl -m u:用户名:权限指定文件名

查看 ACL 权限:getfacl 文件名

3.2权限管理_Linux_07


给用户组设定 ACL 权限:setfacl -m g:组名:权限指定文件名

3.2权限管理_Linux_08


特殊的权限

共有三个特殊权限为,分别为:

suid,设置用户id,显示在拥有者执行权限位

sgid,设置组id,显示在所属组执行权限位

sticky,粘附位,显示在其他用户执行权限位

设置:chmod 4/2/1644 file/dir

使用 ls –l 命令查看时,体现在执行权限x上,

suid:若文件所属用户对文件有x权限,则加上setuid后,显示s,否则显示S

sgid:若文件所属用户对文件有x权限,则加上setuid后,显示s,否则显示S

Sticky:若文件所属用户对文件有x权限,则加上setuid后,显示t,否则显示T

如:

例:设置suid权限位

就是让普通用户可以以root用户的角色运行只有root用户或账号才能执行的程序或命令。

比如passwd命令,普通用户可以运行此命令修改自己的密码,但此命令实际上修改的是/etc/passwd文件,此文件只有root用户有修改权限


例:设置setgid权限位

对目录设置setgid

setgid对目录设置后,任何用户在该目录下创建文件的属组都是该目录的属组。

#groupadd test 创建组test

#mkdir /home/dir 创建目录

#chmod o+w /home/dir 使其他用户可创建

#chgrp test /home/dir 修改目录属组为test

#chmod g+s /home/dir 修改目录setgid位

# ls –ld /home/dir 查看目录权限

以后在/home/dir下新建文件和目录的属组都是/home/dir的属组。


例:设置sticky位

粘附位,主要用来避免其他用户对文件的误操作,

粘着位只对目录有效,普通用户要对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限。如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限也只能删除自己建立的文件,但是不能删除其他用户建立的文件。

新创建两个用户 aa,bb,并为其设置密码123

以root用户创建文件file1,切换到aa用户 创建file2再切换到bb用户

删除file1和file2 都没有权限


umask( 一般只对基本权限进行设置)

umask命令生成的默认掩码是告诉系统当创建一个目录和文件时不应该赋予那些值。

umask - S 显示的掩码值;

3.2权限管理_系统/运维_09


在 Linux 中 root 的 u-mask 的默认值为 022:

3.2权限管理_系统/运维_10


通用户的默认值为 002:

3.2权限管理_系统/运维_11

如果想要改变umask值,只要使用umask命令设置一个新的值即可:

$ umask 002

确认一下系统是否已经接受了新的u m a s k值:

$umask

002

$touch testfile

$ls -l testfile

rw- rw- r—

用umask 命令设置的掩码的有效期为在一次使用终端的过程中从设置开始到下一次的设置结束。系统的默认umask 值, 一般是在/etc/bashrc 或/etc/profile 文件中设置的, 每个用户在登录时都会引用该文件, 每次启动终端时 umask 均为默认值。如希望改变所有用户的umask, 可以在该文件中加入相应的条目。如希望永久性的设置自己的 umask, 则可以把它放在自己主目录下的 bashrc 或.profile 或 bash_profile 文件中。