目录一、umask1.1.umask的作用1.2.umask实用程序对文件、目录权限的影响1.2.1.对文件而言1.2.2.对目录而言1.3.更改默认权限一、umaskmask翻译为面具、口罩、遮挡物在计算机的世界中译为掩码像计算机网络中的网络掩码它在网络的世界中用于子网的划分在操作系统的世界中它充当着权限划分的角色1.1.umask的作用文件在被创建时会分配一个初始权限。有两个因素会影响这些初始权限。其一是您要创建常规文件还是目录。其二是系统当前的umask 它代表用户文件创建掩码。如果创建目录时则其初始八进制权限为0777 (drwxrwxrwx)。如果是创建常规文件时则此刻初始八进制权限为0666 (- rw- rw- rw-)。必须始终为常规文件显式添加执行权限。这步可使攻击者更难以破坏系统创建和运行恶意文件。此外 shell 会话会设置 umask 进一步限制文件的初始权限。umask 是一个八进制位掩码可以清除由进程创建的新文件和目录的权限。如果在 umask中设置了一个位则新文件中的对应的权限将被清除。例如umask.0002可清除其他用户的写入位。前导零表示特殊的用户和组权限未被清除。umask为0077时清除新创建文件的所有组和其他权限。不带参数运行umask命令将显示shell的umask的当前值:通过一个八进制参数使用umask命令可以更改当前shell的umask。该参数应当是与新umask值对应的八进制值。umask中的任何前导零均可以省略。例如umask 077与umask 0077相同。Bash shell用户的系统默认umask值在/etc/login.defs和/etc/bashrc 文件中定义。用户可以在其主目录的.bash_profile或.bashrc文件中覆盖系统默认值。1.2.umask实用程序对文件、目录权限的影响1.2.1.对文件而言如果您创建常规文件则其初始八进制权限为0666二进制表示为000 110 110 110。然后0022umask000 000 010 010将禁用组和其他对象的写入权限位。因此所有者对文件具有读取和写入权限组和其他对象设置为读取权限(000 110 100 100)。注意umask 是拿来和默认最大权限做“减法”的当减出来是负数时最终权限按0处理。示例1.查看当前系统的umask值2.创建一个测试文件注意使用umask直接修改值只是临时性生效并不能一直持续当前会话重新刷新之后系统还是会从配置文件中获取umask的值。1.2.2.对目录而言同理如果是创建目录则其初始八进制权为0777(000 111 111 111)。然后0022umask000 000 010 010将禁用组和其他对象的写入权限位。因此所有者对目录具有读取、写入和执行权限组和其他对象设置为读取和执行权限(000 111 101 101)。示例1示例2屏蔽其他的所有文件和目录权限请将umask值设置为007文件权限原始二进制值 000 111 111 111umask掩码原始二进制值 000 000 000 111二进制结果值 000 111 111 000八进制结果值 0770目录权限原始二进制值 000 110 110 110umask掩码原始二进制值 000 000 000 111二进制结果值 000 110 110 00-1八进制结果值 066-1 ---------------- 最终转为0660注意对于文件系统默认的最大权限是666(rw-rw-rw-)。因为创建普通文件时系统为了安全会默认剥夺所有执行权限(x)以防止意外执行。对于目录系统默认的最大权限是777(rwxrwxrwx)。因为目录必须有执行权限(x)用户才能进入该目录。示例3umask为027可确保用户对新文件具有读写权限组具有读取权限。组对新目录具有读取和执行权限而其他对象则没有任何权限。文件权限原始二进制值 000 111 111 111umask掩码原始二进制值 000 000 010 111二进制结果值 000 111 101 000八进制结果值 0750目录权限原始二进制值 000 110 110 110umask掩码原始二进制值 000 000 010 111二进制结果值 000 110 100 00-1八进制结果值 064-1 ---------------- 最终转为06401.3.更改默认权限在红帽企业Linux9中/etc/login.defs文件为用户设置默认的umask。默认情况下其umask行指定的默认umask为0022。在红帽企业Linux9.0和9.1中这只影响登录shell。如果您启动新的终端窗口或以其他方式启动交互式非登录shell则/etc/bashrc中的设置仍然适用。对于这些shell如果帐户的UID为200或更大值并且用户名和主要组名相同就会向帐户分配一个值为0002的umask。否则其umask 为 0022.root 用户可以通过在/etc/profile.d/目录中添加local-umask.sh shell启动脚本来更改交互式非登录shell的默认umask。以下示例显示了一个local-umask.sh文件:[roothost -]# cat /etc/profile.d/local-umask.sh # Overrides default umask configuration asda sda if [ $UID -gt 199 ] [ id -gn id -un]; then umask 007 else umask 022 fi对于UID大于199且用户名和主要组名相匹配的用户上面的示例会将umask设为0007其余的则全部设为0022。(前导零可以省略)如果想将所有人的umask都设为0022可以使用以下内容创建该文件:# Overrides default umask configurationumask 022shell的当前umask将一直适用直到您注销shell并重新登录或者您使用umask命令手动更改当前umask。