linux权限模型,指的是对文件、文件夹同的读写权限,同用户之间的权限管理模型html
使用ls -l
命令便可查看当前路径下的文件、文件夹的权限。linux
lrwxrwxrwx
。从左开始,第一个字符表示文件的类型,能够有l,-,d
其中l
表示当前项目是个连接文件,-
表示当前项目是文件,d
表示当前项目是文件夹。从截图中能够看到,前三个项目分别是:连接文件、文件夹、文件这部分操做是不改变文件全部者和所属组,而只对其现有全部者,组、其它人能操做文件、文件夹的权限进行修改。shell
以三位二进制来表明读、写、执行的权限。为1表示具备权限,0表示没有权限。3位二进制转成的十进制为从0到7。 好比二进制111,即为7,表示读写执行权限都有
编程
chmod 764 sample
上述基于数字的方式赋权,须要计算二级制到十进制的转化,不够友好。而使用英文缩写的方式,见名知意,更容易使用。
用户角色的字母指代bash
而权限自己的字母指代为post
将权限赋予给某个角色,或从某个角色上摘除的操做符以下ui
chmod u+x filename
给文件拥有者赋执行权限chmod u-x filename
将文件拥有者的执行权限移除chmod o=r filename
后,其它用户的权限就只有'r'了。但用户全部者和所属组的权限不会给覆盖能够chmod u+wx filename
一次性给某文件的全部者赋几个权限。
再次总结下,赋值符号,=和+,-的区别在于。=是会覆盖对应角色的全部权限,+和-只修改制定的权限项。好比你改的是执行权限,那么文件的读写权限仍是原来的。翻译
前面介绍的只是改文件对应角色的权限。这里介绍下,怎么改文件属于的角色。好比改其拥有者,改其所属组。代理
更改文件全部者的命令code
chown user filename//更改文件的全部者
文件全部者,文件所属组一块儿更改
chown user:group filename
更改文件所属组
chgrp group_name filename
使用groups命令便可
id
经过/etc/group
文件便可。该文件中一行表明一个分组。一行的含义解读为
经过/etc/passwd
查看。该文件每一行表明一个用户,每一行的解释以下
mark:x:1001:1001:mark,,,:/home/mark:/bin/bash [--] - [--] [--] [-----] [--------] [--------] | | | | | | | | | | | | | +-> 7. Login shell | | | | | +----------> 6. Home directory | | | | +--------------------> 5. GECOS | | | +--------------------------> 4. GID | | +-------------------------------> 3. UID | +-----------------------------------> 2. Password +----------------------------------------> 1. Username
前面说的/etc/group
文件中,能够有一个组的用户列表,但经过这个文件去看一个组有哪些用户,每每是不许确的。由于一个组的用户,每每不必定在该文件中体现。最准确的查看方式为
lid -g groupname
在root用户下执行userdel username
命令。若是删除遇到组“username”没有移除,由于它包含其它成员。
记得去将username对应组下面的其它用户删除。
文件、文件夹除了拥有九位关于文件拥有者、所属组、其它用户的读写执行权限控制以外。还有两个属性位setuid和setgid,他们用来设置可执行文件的执行行为
可以让全部用户,以该文件的实际全部者身份执行该文件。注意这跟other角色的可执行权限不同,后者是实际赋予其它用户有执行该文件的权限。而前者是以拥有者的身份执行
这在一些有权限控制的地方颇有用,好比该文件执行,须要拥有root的权限,好比程序代码里,就有判断名字是不是'root'的用户启动的该程序。你但愿其它用户能够执行该文件,又不可能把全部人编程root,那可使用这种方式。
设置命令为: sudo chmod u+s filename
跟上述相似,只是其它用户的执行行为,最终会议文件实际所属组的用户启动。
For example, if the file is owned by user root and group wheel, it will run as root:wheel no matter who executes the file.
设置命令为: sudo chmod g+s filename
通常不会对文件夹setuid。 只会对文件夹setgid。文件夹设置setgid后,其下新建立的文件,其组,都是改文件夹的组。不设置的话,通常文件的组,都是跟建立人的名字同样。
这个设置,不会影响文件夹下已经存在的文件。
能够手动去修改find /path/to/directory -type d -exec chmod g+s '{}' \;
通常一个文件被setuid和setgid后,其执行权限项会变成s
setuid和setgid设置,容许全部其它用户执行文件,且执行的时候,是以文件全部者,或文件所属组的用户启动执行。启动的实际用户和组信息丢失了
通常设置在文件夹上,设置文件上无效。设置文件夹上,那么其下文件,只能被文件拥有者、目录拥有者、root用户来进行删除和重命名,其它人则无权限。
设置命令chmod +t foldername
。相应的,移除用chmod -t foldername
该命令能解决的问题是,将文件的删除、重命名权限锁定给文件拥有者或管理员。即使当前用户跟文件全部者在一个组,他也没办法把文件删除.
一个加了sticky 位的文件权限列表形如,其Other的执行权限变成了t
直接使用chmod对文件、文件夹进行上述权限控制,控制的粒度较粗,只能控制到Owner、owner group、others的粒度
若是咱们想对除owner group外的其它特定分组,定制权限
若是咱们想对others中,某个特定的用户,定制权限
显然以前的九位,就不能实现了,须要一个表的形式,来存储多个特定用户的特质化权限信息,这个东西叫作Access Controll List,简称ACL
ACL除了能配置一个文件本来的owner、和本身的group、others以外,还能配置指定名字的user, 指定名字的group的访问信息
被配置权限的角色 | 配置权限的格式 | 说明 |
---|---|---|
owner | user::rwx | 就是本来的owner权限,这里对owner配置的是读写执行的权限 |
Owning group | group::rwx | 就是本来的owner所属组的权限,这里对group配置的是读写执行的权限 |
Others | other::rwx | 就是将对原来的其它用户配置的权限,这里配置的是读写执行。下面三项都是ACL独有的概念 |
Named user | user:name:rwx | 经过一个用户名具体指定一个用户,指定其对当前文件的权限。好比user:tom:rmx,即表示对tom这个用户赋予读写执行的权限 |
Named group | group:name:rwx | 经过一个组名具体指定一个用户,指定其对当前文件的权限。好比group:sales:rmx,即表示对sales这个组的用户赋予读写执行的权限 |
Mask | mask::rwx | 上述各角色能够配置的权限项约束。好比这里若是限制了rw。那么上述全部的角色配置执行权限都不会生效,固然文件owner不会被限制 |
user::rwx user:joe:rwx #effective:r-x group::r-x mask::r-x other::---
前面说过mask所列的权限项,会影响除owner之外的其它分组的权限生效状况。好比joe这个user,虽然被赋予了rwx权限。但Mask只容许rx权限,若依其acl的后面有一列注释#effective:r-x
,说明其实际生效的权限只有rx
使用setfacl -m u::rmx filename
的方式,用户、group,others的简称仍是为u,g,o。其中两个冒号,分隔成三块数据角色:具体名称:读写执行
,两个冒号中间不指定内容,则说明就是原始的权限模型。好比前面就是对文件owner赋读写执行的权限
setfacl -m u:tom:rmx filename
表示对名为tom的用户赋读写执行的权限
getfacl filename
我有一个文件,经过ls -l
看起权限控制是
drwsr-Srwt 4 root root 110 5月 20 17:10 temp
经过acl方式看是这样的
能够看到,除了前面说的ower, group, others三个权限角色对应权限项外。flags中表名的是setuid、setgid、sticky bit这三个权限位的状况,这里显然都开启了
其实经过chmod定义那几种权限,最终也体现到了ACL中。
default ACL通常加载文件夹上,他不会改变文件夹自己的权限,而是对多一个default模板,使得其下的文件都具备这个模板中定义的权限
指定方式是对setfacl命令加-d参数,如setfacl -d -m u:dummy:rw test
,而后看该文件夹的acl列表为
其中的default项会成为其下新文件的acl
umask是一个权限反码,用来约束新建立的文件、文件夹的默认权限。
好比将umask设为077, 其对应的二进制为000, 111, 111, 将其取反后变为 111,000,000 , 对应rwx即为'rwx------'
也即,默认建立的文件、文件夹其Owner,拥有读写执行的权限
其所属组,没有任何权限
其它全部用户,没有任何权限
umask 077
umask u=rwx,g=x,o=x
,这种方式直接限制了默认的owner权限为rwx, group权限为x , others权限为xumask g=
umask
umask对文件、文件夹的影响不同。即使umask中容许的权限有执行,但新建立的文件依然没有执行权限。但文件夹则是严格按照umask限制的权限列表来的。
好比当前的umask为0002
,按照上述的翻译,它容许的权限列表为:rwxrwxr-x
。咱们建立一个文件夹temp2,和一个文件test2.txt。 能够看下其权限状况
drwxrwxr-x 2 ops ops 6 5月 23 16:09 temp2 -rw-rw-r-- 1 ops ops 0 5月 23 16:08 test2.txt//它的每一个角色都没有执行权限
umask只会对新建立的文件、文件夹生效。修改umask不会对已经存在的文件、文件夹产生任何影响。
https://www.guru99.com/file-permissions.html
https://www.cyberciti.biz/faq/understanding-etcgroup-file/
https://linuxize.com/post/etc-passwd-file/
https://en.wikipedia.org/wiki/Setuid#Sticky_bit
https://www.geeksforgeeks.org/setuid-setgid-and-sticky-bits-in-linux-file-permissions/
https://www.usenix.org/legacy/publications/library/proceedings/usenix03/tech/freenix03/full_papers/gruenbacher/gruenbacher_html/main.html
https://linuxconfig.org/how-to-manage-acls-on-linux