你可能不知道的一些linux文件权限管理方法
为什么需要权限管理?
1.计算机资源有限,我们需要合理的分配计算机资源。
2.Linux是一个多用户系统,对于每一个用户来说,个人隐私的保护是十分重要的
目录的rwx权限
当前用户:vagrant:vagrant
创建testdir目录,进入testdir目录内。创建文件test。
$mkdirtestdir $cdtestdir $touchtest
修改testdir权限为000,尝试执行lstestdir
$chmod000testdir $lstestdir/ ls:cannotopendirectorytestdir/:Permissiondenied
修改testdir权限为400,尝试执行lstestdir
$chmod400testdir ls-ltestdir/ ls:cannotaccesstestdir/test:Permissiondenied total0 -??????????????test
结果:能够读取目录下文件列表,但是看不到具体文件信息(权限、大小、用户组、时间等),尽管当前用户是/testdir/test的拥有者且具有rwx权限。
拥有目录的r权限可以读取目录下的文件列表。
继续,尝试进入testdir目录。
$cdtestdir/ -bash:cd:testdir/:Permissiondenied
看来r权限并不能让我们具有进入目录。
我们增加一个x权限试试。
~$chmod500testdir/ ~$cdtestdir/ ~/testdir$ls-l total0 -rw-rw-r--1vagrantvagrant0Nov1908:16test
成功进入。
拥有目录的x权限能够让我们进入到目录下。在此工作目录下,我们可以查看文件列表及文件的属性信息。
尝试删除test文件或者新建文件test1。
~/testdir$rmtest rm:cannotremove‘test':Permissiondenied ~/testdir$touchtest1 touch:cannottouch‘test1':Permissiondenied
拥有目录的rx权限并不能允许我们改变目录的内容。目录里的文件列表可以看做是目录的内容。
拥有目录的w权限可以对目录的内容进行增删。
~/testdir$chmod700. ~/testdir$rmtest ~/testdir$touchtest1 ~/testdir$ls-l total0 -rw-rw-r--1vagrantvagrant0Nov1908:30test1
umask
在上面的例子里,我们创建的新文件的权限是664(-rw-rw-r--),为什么默认权限会是664,我如果想改变新文件的默认权限怎么办?
控制台输入umask:
$umask 0002
umask是权限的补码。文件的默认权限是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|grepdir1 drwxrwxr-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
当group的x位置变成s时,说明该文件具有SGID权限。
SGID权限对二进制程序有效。类似SUID,用户在具有文件的x权限时,执行该文件,会获取该文件所属用户组的权限支持。
除了二进制程序外,SGID也可以设置在目录上。
若用户对该目录具有SGID权限:
用户在此目录下的有效用户组将会变成该目录的用户组。
如果用户具有该目录的w权限,则用户在此目录下创建的文件的用户组与此目录的用户组相同。
该权限对于项目开发很重要。
SBIT
该权限目前只对目录有效:
当用户对此目录具有w,x权限,用户在该目录下创建文件夹或目录后,仅自己和root才有权限删除该文件。
Others的x权限位若为t,则说明文件夹具有SBIT权限。
比如/tmp目录:
$ls-l/|greptmp drwxrwxrwt4rootroot4096Nov1909:09tmp $sudo-s #touchtest root@vagrant-ubuntu-trusty-64:/tmp#exit exit vagrant@vagrant-ubuntu-trusty-64:/tmp$rmtest rm:removewrite-protectedregularemptyfile‘test'?y rm:cannotremove‘test':Operationnotpermitted
如何设置以上三种权限
如果在普通的权限设置的“三个数字”前再加一个数字,那前面这个数字就代表这几个权限了:
- 4为SUID
- 2为SGID
- 1为SBIT
比如:
#chmod777/tmp #ls-l/|greptmp drwxrwxrwx4rootroot4096Nov1909:17tmp #chmod1777/tmp #ls-l/|greptmp drwxrwxrwt4rootroot4096Nov1909:17tmp End。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。