文件权限 1、chown 普通用户无权限执行 选项: -R # 递归对文件和目录进行操作 --reference # 取文件的权限对另一个文件设置权限 格式: chown OPTION USER:GROUP FILE chown OPTION USER.GROUP FILE chown OPTION USER FILE 示例: chown user1: file0 # 将file0的属主改为user1,属组改为user1的属组 chown :user1 file0 # 将file0的属组改为user1组 2、chgrp 普通用户可以将属组改为此用户所属于的组时有权限执行 选项: -R # 递归对文件和目录进行操作 3、chmod 1、同时修改三类用户的权限:chmod NUMMODE file,...... -R # 递归操作目录及目录下的所有文件 --reference=/etc/shadow # 取shadow的权限对另一个文件设置权限 2、修改某类用户的权限:u,g,o,a(表示所有用户) , chmod u=rwx file1 chmod u=rw file1 chmod o=rx file1 chmod o=rwx,u=rwx file1 chmod uo=rwx file1 3、修改某类用户的某些位权限:chmod 用户类别=MODE file,...... chmod u-wx file,...... chmod u+x,g-x file,...... chmod -x file,...... #将三类用户的执行权限都去掉 4、设置权限位 X ,一般配合 -R 选项使用,对目录下子目录加x执行权限,但不对文件加执行权限 1、在递归修改权限时,只给目录文件设置执行权限,对其他文件不添加执行权限 2、但当文件本来就有执行权限时,X权限 会给文件加上执行权限 4、目录权限意义 1、对于文件的删除、创建权限,只取决于用户对其父目录是否[写权限],与目录下的文件的属组属组没有关系 2、对目录而言,[执行权限]意味着可以进入该目录,可以查看目录内文件的元数据 3、对目录而言,如果没有[读权限],则无法看到目录内的文件列表,但可以查看目录下的文件的内容 4、目录的 x [执行权限] 是一个基本权限,如果只有w权限,但还是不能创建、删除文件 5、权限检查顺序 所有者、组、其他人 6、权限的数字转换 每一个身份的权限是一个三位的二进制数 000 000 000 7、Linux中权限控制与文件系统相关,权限控制需要文件系统的支持。 默认权限 1、umask 1、root的默认umask是[022],普通用户的默认umask是[002] 2、权限计算 umask+文件权限=666(file) umask+目录权限=777(dir) 3、创建文件和创建目录,默认的权限是:对于文件,umask和默认权限对位相加等于666;对于目录,umask和默认权限对位相加等于777。 2、修改umask 临时修改umask: 方法一:umask 026 方法二:umask u=rw,g=r,o=r(直接设置默认权限,即创建的文件默认权限是rw-r--r--) 永久修改umask: 写进.bashrc文件或者修改/etc/bashrc文件;或者直接修改/etc/profile文件内 3、umask真实含义 对位将最大权限中(file,666|dir,777)与 umask 的相应位的权限去除,即将umask指定权限中的位去除,umask起到一个遮罩的作用。 示例一: umask:022 umask:022 000 010 010 文件最大权限:666 110 110 110 默认权限:664 110 100 100 示例二:(需要加1的情况) (最大权限)666 - (umask)015 = 651 = 662 mask:015 000 001 101 文件最大权限:666 110 110 110 默认权限:662 110 110 010 示例三: mask:057 000 101 111 文件最大权限:666 110 110 110 默认权限:620 110 010 000 4、总结计算默认权限的计算 对于目录:777 - umask 对于文件:666-umask 然后 对结果奇数加一,偶数不变 先用最大权限减去umask的值,对得到数的每一位上如果是偶数则不变,如果是奇数则加一,得到的结果就是默认权限。 5、umask命令 umask -S # 以模式化显示,而不以数字化显示 umask -p # 执行结果可被调用 特殊权限 1、SUID 通常对于一个二进制程序来说,当它被用户执行并成为一个进程后,这个进程的属主将变成该用户。但当这个二进制文件具有 SUID权限 s 后,这个程序再次被其他用户执行并成为一个进程后,这个进程的属主还是原二进制文件的属主,具有原文件属主 的权限。即当一个具有特殊权、限SUID的可执行文件被执行时,相应进程的属主是程序自身的属主,而不启动者。 例如系统程序:/usr/bin/passwd文件就具有SUID权限。 注意: 1、SUID作用于二进制程序才有意义,当作用于二进制文件上时,继承二进制程序文件所有者的权限。 2、当二进制程序本来没有执行权限时,添加SUID权限没有意义,这时候二进制程序的权限为显示为S(大写s) 3、设定特殊权限之后,如果更改二进制程序的属组,则可能会破坏特殊权限位,SUID消失 添加: chmod u+s FILENAME 删除: chmod u-s FILENAME SUID的s权限用数字表示是 4 chmod 4755 FILENAME chmod 0775 FILENAME 2、SGID 1、和SUID类似,当其他用户运行二进制程序的时候,不在是该用户的身份操作,而是以执行程序的属组。当SUID作用于 二进制程序才有意义,当作用于二进制文件上时,继承程序所属组的权限。 2、SGID的s权限用数字表示是 2 给文件添加SGID权限: chmod g+s FILE 给文件删除SGID权限: chmod g-s FILE 3、示例: -rwxr-xr-x. 1 root root 54080 Jul 16 09:29 cat -rw-r-----. 1 root root 407 Jul 16 09:29 fstab su - xuejw0 xuejw0用户没有权限查看fstab文件,赋予二进制文件cat特殊权限SGID权限,则xuejw0用户使用cat查看fstab文件时, xuejw0用户继承了cat属组的身份root的权限,所以就可以查看fstab文件了。 注意:SGID可以作用在二进制文件和目录上。 4、SGID作用于目录 目录内的新建文件的所属组自动继承该目录的所属组。在一个目录下,所有用户在此目录下[新创建的文件]的属组是该目录 的属组。前提是给这个目录设置SGID特殊权限。 注意: 1、当针对目录进行设置了SGID之后,要对其他用户添加读写执行权限 2、为了权限控制,可以将需要操作该目录的所有用户添加到目录的所属组中 3、sticky sticky权限作用于目录。在一个公共目录,每个用户都可以创建文件,删除自己的文件,但不能删除别人的文件。 例如系统目录/tmp目录 添加sticky权限: chmod o+t DIR chmod o-t DIR 注意:作用于目录上,目录内的文件只有所有者能删除 SUID、SGID、sticky组合起来,又对应三位二进制数,一个十进制数。 三个二进制数表示: 000:三种权限都没有 …… 110:有SUID、SGID权限 111:三种权限都有 示例: chmod 3755 /tmp/testfile #testfile文件具有SGID、sticky权限 4、示例 在/tmp下创建一个目录,让属于不同的组的用户可以在这个目录下都可以创建文件,修改所有的文件,不能删除其他用户的文件, 但可以删除自己创建的文件。/tmp下project目录。 一个用户组tem,三个用户test1、test2、test3 mkdir /tmp/project mkdir /tmp/project groupadd tem #创建一个组 chmod -R :tem /tmp/project/ # 将project的属组设置为新建组tem usermod -G tem test1 # 给三个用户分别添加附加组为tem usermod -G tem test2 usermod -G tem test3 chmod g+s /tmp/project # 将project目录文件设置SGID权限 sticky 0+t /tmp/project # 设置project目录sticky权限 4、chattr 使得命令具有特性的权限属性。对目录设置属性,则其目录下的文件目录都会继承这个属性、 选项: -R # 递归修改 属性: a # 允许给文件进行追加操作,但不允许更改、重命名、删除 A # 不允许更新文件的访问时间,atime c # 文件在磁盘上自动压缩 D # 文件同步保存到磁盘 i # 启用后,不能更改、重命名、或者删除 设置属性使用到的操作符号: + # 添加属性 - # 删除属性 = # 将设置的属性设置为唯一的属性 chattr -i FILENAME 5、lsattr 查看文件的特殊权限 访问控制列表 1、介绍 ACL (Access Control List) 访问控制列表功能的使用,需要文件系统支持此功能。 2、tune2fs工具 调整可设置的文件系统参数。 如果需要支持acl功能,挂载时需要添加额外的参数选项挂载:mount –o acl /dev/sdb1 /mnt/test 3、ACl检查顺序 所有者 --> 所属组 --> ACL自定义用户 --> ACL自定义组(多个自定义组最后的权限是累加的效果) --> 其他人 * 按照getfacl查看的信息的列表的顺序进行检查。有一个特殊情况是,所属组的检查顺序低于ACL自定义组 4、setfacl 选项: -m # 设定acl权限 -x # 删除某一个acl权限 -b # 彻底删除所有acl权限 -k # 移除默认acl权限,即d:xuejw0:rwx指令添加的默认权限 -R # 递归设置 -M # 从文件中读取acl配置,-M acl.txt FILENAME -X # 从文件中读取要删除的acl配置,-X acl.txt FILENAME 5、特殊用法: 1、setfacl -m d:xuejw0:rwx data # 默认在data目录下创建的文件也具有和data一样的acl权限,只对目录有效 2、getfacl FILENAME1 | setfacl --set-file=- FILENAME2 # 复制文件1的acl权限给文件2 3、setfacl -Rm FILENAME u:USERNAME:rwX # 对目录下的文件不设置执行权限 注意:复制文件时,不会将源文件的acl属性复制。cp命令加-p选项可以连同acl属性一同复制 6、facl中的mask 用户的最高权限。acl中mask权限限制的是所属组、自定义用户、自定义组这些角色的权限。 setfacl -m mask::rw FILENAME # 设定文件的mask权限 注意:如果设定mask权限之后,再次设定facl权限,可能会将mask的权限调大 7、facl的备份与恢复 getfacl -R /tmp/dir1 > acl.txt # 备份 setfacl -R --set-file=acl.txt /tmp/dir1 # 恢复 或者 setfacl --restore=acl.txt [/path/to/file] # 设定的目标目录或文件必须在当前目录下,或者指定路径