当前位置: 首页 > Linux

你可能不知道linux文件权限管理的rwx权限

时间:2023-04-06 11:58:24 Linux

目录当前用户:vagrant:vagrant创建testdir目录,进入testdir目录。创建文件测试。$mkdirtestdir$cdtestdir$touchtest修改testdir权限为000,尝试执行lstestdir$chmod000testdir$lstestdir/ls:cannotopendirectorytestdir/:Permissiondenied修改testdir权限为400,尝试执行lstestdir$chmod400testdirls-ltestdir/ls:无法访问testdir/test:Permissiondeniedtotal0-??????????????????测试结果:可以读取目录下的文件列表,但是看不到具体的文件信息(权限、大小、用户组、时间等),即使当前用户拥有/testdir/test,并且有rwx权限。使用目录的r权限,您可以读取目录中的文件列表。继续尝试进入testdir目录。$cdtestdir/-bash:cd:testdir/:Permissiondenied好像r权限不允许我们进入目录。我们加个x权限试试。~$chmod500testdir/~$cdtestdir/~/testdir$ls-ltotal0-rw-rw-r--1vagrantvagrant0Nov1908:16测试成功进入。有了目录的x权限,我们就可以进入目录了。在这个工作目录下,我们可以查看文件列表和文件属性信息。尝试删除测试文件或创建一个新文件test1。~/testdir$rmtestrm:cannotremove'test':Permissiondenied~/testdir$touchtest1touch:cannottouch'test1':Permissiondenied拥有目录的rx权限不允许我们更改目录的内容。目录中的文件列表可以被认为是目录的内容。有了目录的w权限,就可以对目录的内容进行增删改查。~/testdir$chmod700.~/testdir$rmtest~/testdir$touchtest1~/testdir$ls-ltotal0-rw-rw-r--1vagrantvagrant0Nov1908:30test1umask在上面的例子中,我们创建的新文件的权限是664(-rw-rw-r--),为什么默认权限是664,如果我想改变新文件的默认权限怎么办?控制台输入umask:$umask0002umask是权限的补充。文件的默认权限是666-umask。如果我们创建的文件不想让其他用户有r权限,修改补码为0006即可。~/testdir$umask0006~/testdir$touchtest2~/testdir$ls-l|greptest2-rw-rw----1vagrantvagrant0Nov1908:38test2为什么文件的默认权限不是777-umask?因为新建的文件默认是没有可执行权限的,所以如果只考虑rw权限的话,这波操作自然是666。目录默认是有x权限的。当umask为0002时,创建目录的默认权限应该是777-0002=775:~/testdir$mkdirdir1~/testdir$ls-l|grepdir1drwxrwxr-x2vagrantvagrant4096Nov1908:39dir1特殊权限SUID一般来说,文件权限是rwx。我们查看一下passwd(密码修改命令)的权限:~/testdir$ls-l/usr/bin/passwd-rwsr-xr-x1rootroot47032May162017/usr/bin/passwd小心点你会发现它的用户权限的x位竟然是s。此权限称为SUID,仅对二进制程序有效。当用户拥有该文件的执行权限时,执行该文件会暂时获得文件属主权限的支持。例如:所有用户的密码都保存在/etc/shadow文件中,而这个文件默认的权限是-r--------rootroot,只有root用户有强制写权限,那为什么可以普通用户还是自己改密码呢?是因为passwd命令具有SUID权限,当用户执行该命令时,会得到文件所有者root的权限支持,从而修改自己的密码。SGID当组的x位置变为s时,表示该文件具有SGID权限。SGID权限对二进制程序有效。与SUID类似,当用户拥有该文件的x权限时,执行该文件将获得该文件所属用户组的权限支持。除了二进制程序,SGID也可以设置在目录上。如果用户对该目录有SGID权限:该用户在该目录下的有效用户组将成为该目录的用户组。如果用户对该目录有w权限,则该用户在该目录下创建的文件的用户组与该目录的用户组相同。此权限对于项目开发很重要。SBIT该权限目前只对目录有效:当用户对该目录有w,x权限时,用户在该目录下创建文件夹或目录后,只有该用户和root才有删除该文件的权限。如果Others的x权限位是t,表示该文件夹有SBIT权限。例如/tmp目录:$ls-l/|greptmpdrwxrwxrwt4rootroot4096Nov1909:09tmp$sudo-s#touchtestroot@vagrant-ubuntu-trusty-64:/tmp#exitexitvagrant@vagrant-ubuntu-trusty-64:/tmp$rmtestrm:删除写入-受保护的常规空文件“测试”?yrm:cannotremove'test':Operationnotpermitted添加一个数字,前面的数字代表这些权限:4是SUID2,SGID1是SBIT例如:#chmod777/tmp#ls-l/|greptmpdrwxrwxrwx4rootroot409611月19日09:17tmp#chmod1777/tmp#ls-l/|greptmpdrwxrwxrwt4rootroot409611月19日09:17tmp