linux权限模型,指的是对文件、文件夹同的读写权限,同用户之间的权限管理模型
使用ls-l命令即可查看当前路径下的文件、文件夹的权限。
这部分操作是不改变文件所有者和所属组,而只对其现有所有者,组、其它人能操作文件、文件夹的权限进行修改。
chmod764sample英文缩写更改上述基于数字的方式赋权,需要计算二级制到十进制的转化,不够友好。而使用英文缩写的方式,见名知意,更容易使用。用户角色的字母指代
而权限本身的字母指代为
将权限赋予给某个角色,或从某个角色上摘除的操作符如下
可以chmodu+wxfilename一次性给某文件的所有者赋几个权限。再次总结下,赋值符号,=和+,-的区别在于。=是会覆盖对应角色的所有权限,+和-只修改制定的权限项。比如你改的是执行权限,那么文件的读写权限还是原来的。
前面介绍的只是改文件对应角色的权限。这里介绍下,怎么改文件属于的角色。比如改其拥有者,改其所属组。
更改文件所有者的命令
chownuserfilename//更改文件的所有者文件所有者,文件所属组一起更改
chownuser:groupfilename更改文件所属组
chgrpgroup_namefilename查看当前用户的组使用groups命令即可
通过/etc/passwd查看。该文件每一行代表一个用户,每一行的解释如下
mark:x:1001:1001:mark,,,:/home/mark:/bin/bash[--]-[--][--][-----][--------][--------]|||||||||||||+->7.Loginshell|||||+---------->6.Homedirectory||||+-------------------->5.GECOS|||+-------------------------->4.GID||+------------------------------->3.UID|+----------------------------------->2.Password+---------------------------------------->1.Username查看一个组有哪些用户前面说的/etc/group文件中,可以有一个组的用户列表,但通过这个文件去看一个组有哪些用户,往往是不准确的。因为一个组的用户,往往不一定在该文件中体现。最准确的查看方式为
lid-ggroupname删除一个用户在root用户下执行userdelusername命令。如果删除遇到组“username”没有移除,因为它包含其它成员。记得去将username对应组下面的其它用户删除。
文件、文件夹除了拥有九位关于文件拥有者、所属组、其它用户的读写执行权限控制之外。还有两个属性位setuid和setgid,他们用来设置可执行文件的执行行为
能够让所有用户,以该文件的实际所有者身份执行该文件。注意这跟other角色的可执行权限不一样,后者是实际赋予其它用户有执行该文件的权限。而前者是以拥有者的身份执行
这在一些有权限控制的地方很有用,比如该文件执行,需要拥有root的权限,比如程序代码里,就有判断名字是否是'root'的用户启动的该程序。你希望其它用户可以执行该文件,又不可能把所有人编程root,那可以使用这种方式。
设置命令为:sudochmodu+sfilename
跟上述类似,只是其它用户的执行行为,最终会议文件实际所属组的用户启动。Forexample,ifthefileisownedbyuserrootandgroupwheel,itwillrunasroot:wheelnomatterwhoexecutesthefile.
设置命令为:sudochmodg+sfilename
一般不会对文件夹setuid。只会对文件夹setgid。文件夹设置setgid后,其下新创建的文件,其组,都是改文件夹的组。不设置的话,一般文件的组,都是跟创建人的名字一样。
这个设置,不会影响文件夹下已经存在的文件。
可以手动去修改find/path/to/directory-typed-execchmodg+s'{}'\;
setuid和setgid设置,允许所有其它用户执行文件,且执行的时候,是以文件所有者,或文件所属组的用户启动执行。启动的实际用户和组信息丢失了
一般设置在文件夹上,设置文件上无效。设置文件夹上,那么其下文件,只能被文件拥有者、目录拥有者、root用户来进行删除和重命名,其它人则无权限。设置命令chmod+tfoldername。相应的,移除用chmod-tfoldername
该命令能解决的问题是,将文件的删除、重命名权限锁定给文件拥有者或管理员。即便当前用户跟文件所有者在一个组,他也没办法把文件删除.
直接使用chmod对文件、文件夹进行上述权限控制,控制的粒度较粗,只能控制到Owner、ownergroup、others的粒度
如果我们想对除ownergroup外的其它特定分组,定制权限如果我们想对others中,某个特定的用户,定制权限
显然之前的九位,就不能实现了,需要一个表的形式,来存储多个特定用户的特质化权限信息,这个东西叫做AccessControllList,简称ACL
ACL除了能配置一个文件原本的owner、和自己的group、others之外,还能配置指定名字的user,指定名字的group的访问信息
user::rwxuser:joe:rwx#effective:r-xgroup::r-xmask::r-xother::---前面说过mask所列的权限项,会影响除owner以外的其它分组的权限生效情况。比如joe这个user,虽然被赋予了rwx权限。但Mask只允许rx权限,若依其acl的后面有一列注释#effective:r-x,说明其实际生效的权限只有rx
使用setfacl-mu::rmxfilename的方式,用户、group,others的简称还是为u,g,o。其中两个冒号,分隔成三块数据角色:具体名称:读写执行,两个冒号中间不指定内容,则说明就是原始的权限模型。比如前面就是对文件owner赋读写执行的权限
setfacl-mu:tom:rmxfilename表示对名为tom的用户赋读写执行的权限
getfaclfilename我有一个文件,通过ls-l看起权限控制是
drwsr-Srwt4rootroot1105月2017:10temp通过acl方式看是这样的
可以看到,除了前面说的ower,group,others三个权限角色对应权限项外。flags中表名的是setuid、setgid、stickybit这三个权限位的情况,这里显然都开启了
其实通过chmod定义那几种权限,最终也体现到了ACL中。
其中的default项会成为其下新文件的acl
umask是一个权限反码,用来约束新创建的文件、文件夹的默认权限。比如将umask设为077,其对应的二进制为000,111,111,将其取反后变为111,000,000,对应rwx即为'rwx------'也即,默认创建的文件、文件夹其Owner,拥有读写执行的权限其所属组,没有任何权限其它所有用户,没有任何权限
umask对文件、文件夹的影响不一样。即便umask中允许的权限有执行,但新创建的文件依然没有执行权限。但文件夹则是严格按照umask限制的权限列表来的。
比如当前的umask为0002,按照上述的翻译,它允许的权限列表为:rwxrwxr-x。我们创建一个文件夹temp2,和一个文件test2.txt。可以看下其权限情况
drwxrwxr-x2opsops65月2316:09temp2-rw-rw-r--1opsops05月2316:08test2.txt//它的每个角色都没有执行权限umask只会对新创建的文件、文件夹生效。修改umask不会对已经存在的文件、文件夹产生任何影响。