linux 权限笔记
权限模型
linux权限模型,指的是对文件、文件夹同的读写权限,同用户之间的权限管理模型
三种角色
- user 文件、文件夹的创建者,所有人
- group 一个group对应多个user,user自动具有group的权限
- all 也叫others, 就是除开上述两个角色之外的所有用户
三种权限
- 读 r .文件读表示可以读内容,文件夹的读,表示可以查看其下的文件列表。具体其下的文件的读写权限,要在单个的文件上控制
- 写w. 文件的写权限能让你修改文件内容。文件夹的写权限,让你有权限在其下添加、删除文件和更改文件名。如果你没有文件夹的写权限,只有其下某个文件的写权限,那么你可以更改文件的内容,但确无法添加新文件,或删除该文件,或更改文件名
- 执行x. 文件的可执行,就是能不能执行该文件,文件夹的可执行则是限制对应角色能否进入该文件夹,比如你把一个文件夹组的x的权限去掉,那么所有该组下的用户将无法进入该该文件夹
查阅方式
使用ls -l
命令即可查看当前路径下的文件、文件夹的权限。
- 红色部分是文件所有人、文件所属组、其它用户各自的读、写、可执行的权限。形如:
lrwxrwxrwx
。从左开始,第一个字符表示文件的类型,可以有l,-,d
其中l
表示当前项目是个链接文件,-
表示当前项目是文件,d
表示当前项目是文件夹。从截图中可以看到,前三个项目分别是:链接文件、文件夹、文件 - 蓝色框选部分显示的是当前项目的所有人和所属组。第一个root是所有人,第二个root是所属组。一般一个用户创建后,其默认的分组跟他的用户名相同
- 黑色框选部分,为项目的名称,即链接路径,或文件名,或文件夹名
权限更改
这部分操作是不改变文件所有者和所属组,而只对其现有所有者,组、其它人能操作文件、文件夹的权限进行修改。
数字更改
以三位二进制来代表读、写、执行的权限。为1表示具有权限,0表示没有权限。3位二进制转成的十进制为从0到7。 比如二进制111,即为7,表示读写执行权限都有
chmod 764 sample
英文缩写更改
上述基于数字的方式赋权,需要计算二级制到十进制的转化,不够友好。而使用英文缩写的方式,见名知意,更容易使用。
用户角色的字母指代
- u 文件、文件夹的拥有者user
- g 文件、文件夹的所属组group
- o 除上述两者之外的其它用户others
- a 上述三个角色的指代 all
而权限本身的字母指代为
- r 读权限read
- w 写权限write
- x 执行权限executive
将权限赋予给某个角色,或从某个角色上摘除的操作符如下
- +表示添加权限
chmod u+x filename
给文件拥有者赋执行权限 - -表示删除指定权限
chmod u-x filename
将文件拥有者的执行权限移除 - = 重新设置对应角色的权限,也即会将对应角色的权限覆盖成新的。比如原来其它用户的权限为rwx, 你执行
chmod o=r filename
后,其它用户的权限就只有'r'了。但用户所有者和所属组的权限不会给覆盖
可以chmod u+wx filename
一次性给某文件的所有者赋几个权限。
再次总结下,赋值符号,=和+,-的区别在于。=是会覆盖对应角色的所有权限,+和-只修改制定的权限项。比如你改的是执行权限,那么文件的读写权限还是原来的。
角色更改
前面介绍的只是改文件对应角色的权限。这里介绍下,怎么改文件属于的角色。比如改其拥有者,改其所属组。
更改文件所有者的命令
chown user filename//更改文件的所有者
文件所有者,文件所属组一起更改
chown user:group filename
更改文件所属组
chgrp group_name filename
查看当前用户的组
使用groups命令即可
查看当前用户的分组情况
id
查看系统都有哪些组
通过/etc/group
文件即可。该文件中一行代表一个分组。一行的含义解读为
- 1表示分组名
- 2表示密码,一般没使用密码功能,都是x
- 3表示分组id
- 4表示该分组下的用户列表,以逗号分隔
查看系统都有哪些用户
通过/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
附加属性setuid和setgid
文件、文件夹除了拥有九位关于文件拥有者、所属组、其它用户的读写执行权限控制之外。还有两个属性位setuid和setgid,他们用来设置可执行文件的执行行为
可执行文件代理到用户拥有者setuid
能够让所有用户,以该文件的实际所有者身份执行该文件。注意这跟other角色的可执行权限不一样,后者是实际赋予其它用户有执行该文件的权限。而前者是以拥有者的身份执行
这在一些有权限控制的地方很有用,比如该文件执行,需要拥有root的权限,比如程序代码里,就有判断名字是否是'root'的用户启动的该程序。你希望其它用户可以执行该文件,又不可能把所有人编程root,那可以使用这种方式。
设置命令为: sudo chmod u+s filename
可执行文件代理到用户组setgid
跟上述类似,只是其它用户的执行行为,最终会议文件实际所属组的用户启动。
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
对文件夹设置setgid
一般不会对文件夹setuid。 只会对文件夹setgid。文件夹设置setgid后,其下新创建的文件,其组,都是改文件夹的组。不设置的话,一般文件的组,都是跟创建人的名字一样。
这个设置,不会影响文件夹下已经存在的文件。
可以手动去修改find /path/to/directory -type d -exec chmod g+s '{}' \;
一般一个文件被setuid和setgid后,其执行权限项会变成s
总结
setuid和setgid设置,允许所有其它用户执行文件,且执行的时候,是以文件所有者,或文件所属组的用户启动执行。启动的实际用户和组信息丢失了
附加属性sticky bit
一般设置在文件夹上,设置文件上无效。设置文件夹上,那么其下文件,只能被文件拥有者、目录拥有者、root用户来进行删除和重命名,其它人则无权限。
设置命令chmod +t foldername
。相应的,移除用chmod -t foldername
该命令能解决的问题是,将文件的删除、重命名权限锁定给文件拥有者或管理员。即便当前用户跟文件所有者在一个组,他也没办法把文件删除.
一个加了sticky 位的文件权限列表形如,其Other的执行权限变成了t
ACL
直接使用chmod对文件、文件夹进行上述权限控制,控制的粒度较粗,只能控制到Owner、owner group、others的粒度
如果我们想对除owner group外的其它特定分组,定制权限
如果我们想对others中,某个特定的用户,定制权限
显然之前的九位,就不能实现了,需要一个表的形式,来存储多个特定用户的特质化权限信息,这个东西叫做Access Controll List,简称ACL
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不会被限制 |
mask单拎
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
ACL的配置方式
使用setfacl -m u::rmx filename
的方式,用户、group,others的简称还是为u,g,o。其中两个冒号,分隔成三块数据角色:具体名称:读写执行
,两个冒号中间不指定内容,则说明就是原始的权限模型。比如前面就是对文件owner赋读写执行的权限
setfacl -m u:tom:rmx filename
表示对名为tom的用户赋读写执行的权限
ACL的读取方式及ACL详解
getfacl filename
我有一个文件,通过ls -l
看起权限控制是
drwsr-Srwt 4 root root 110 5月 20 17:10 temp
通过acl方式看是这样的
可以看到,除了前面说的ower, group, others三个权限角色对应权限项外。flags中表名的是setuid、setgid、sticky bit这三个权限位的情况,这里显然都开启了
ACL同原来的模型关系
其实通过chmod定义那几种权限,最终也体现到了ACL中。
default ACL
default ACL一般加载文件夹上,他不会改变文件夹本身的权限,而是对多一个default模板,使得其下的文件都具有这个模板中定义的权限
指定方式是对setfacl命令加-d参数,如setfacl -d -m u:dummy:rw test
,然后看该文件夹的acl列表为
其中的default项会成为其下新文件的acl
umask
umask是一个权限反码,用来约束新创建的文件、文件夹的默认权限。
比如将umask设为077, 其对应的二进制为000, 111, 111, 将其取反后变为 111,000,000 , 对应rwx即为'rwx------'
也即,默认创建的文件、文件夹其Owner,拥有读写执行的权限
其所属组,没有任何权限
其它所有用户,没有任何权限
- umask的设置方法1:
umask 077
- umask的设置方法2,相比于使用二进制反码,直接使用rwx的符号来指定默认文件夹权限,显然更直观。比如:
umask u=rwx,g=x,o=x
,这种方式直接限制了默认的owner权限为rwx, group权限为x , others权限为x - 要取消某个角色权限的所有
umask g=
- 要查看当前的umask限制的权限列表,直接用
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
linux 权限笔记的更多相关文章
- Linux分类笔记(一)-权限管理
Linux分类笔记(一) 权限管理 普通权限 文件的普通权限 对一个普通的文件使用ls -ll命令后,看到下面的输出内容 而对于文件权限中的每一位,又分别代表了以下的意思 文件类型又有以下几类: ...
- 末学者笔记--Linux权限管理
一.权限概述 Linux系统一般将文件可存/取访问的身份分为3个类别:owner(拥有者).group(和所有者同组的用户).others(其他人,除了所有者,除了同组的用户以及除了超级管理员),且3 ...
- Linux——权限管理命令简单笔记
首先linux中的权限分为三种rwx 代表字符 权限 对文件的含义 对目录的含义 r 读权限 可以查看文件 内容 (cat, more, head, tail) 可以列出目录中 的内容 (ls) w ...
- Linux学习笔记(八)权限管理命令
权限管理命令 权限位含义 chmod chown chgrp umask默认权限 权限位含义 第1位代表文件类型 "-":普通文件 "b":块设备文件 &quo ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- linux学习笔记2-linux的常用命令
第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...
- Linux学习笔记(一)2015.4.13
研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...
- 跟着鸟哥学Linux系列笔记2-第10章VIM学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...
- 【转载】linux内核笔记之进程地址空间
原文:linux内核笔记之进程地址空间 进程的地址空间由允许进程使用的全部线性地址组成,在32位系统中为0~3GB,每个进程看到的线性地址集合是不同的. 内核通过线性区的资源(数据结构)来表示线性地址 ...
随机推荐
- Vue.js中scoped引发的CSS作用域探讨
前言 在Vue.js的组件化开发中,常常会对某个组件的style标签加上scoped属性,如<style lang='less' scoped>,这样做的目的在于使这个组件的样式不能轻易在 ...
- 短视频sdk:选择一个靠谱的短视频SDK 你需要了解这些
2017 年,短视频成为了内容创业的新风口,各种短视频 App 如雨后春笋般先后上线.随着互联网内容消费升级,视频越来越像文字.图片一样,成为每一个 App 不可或缺的一部分. 为了能够更好地聚焦于业 ...
- Geomesa-Hbase集群部署
本文记录一下Geomesa-Hbase集群部署,在单机部署的基础上 https://www.cnblogs.com/help-silence/p/12817447.html 1.搭建集群 https: ...
- C++课程设计,12306模拟写起来就是这么粗暴
这篇文章很详细,也很多希望可以好好看看!看完C++稳过! 一.12306应该具备那些功能 1.查询(一个月以内的): 1.查车票:出发地+目的地+出发时间->显示经过两站车票信息 (余票,车次信 ...
- 图论--割边--Tarjan模板
#include<iostream> #include<stdio.h> #include<vector> using namespace std; const i ...
- Jenkins 部署(基于 windows)
一.安装 jdk,配置环境变量 二.安装 tomcat 和 jenkins 1.检查电脑上 8080 端口是否被占用: 命令行中输入:netstat -ano 2.下载Tomcat Tomcat官方网 ...
- 一只简单的网络爬虫(基于linux C/C++)————读取命令行参数及日志宏设计
linux上面的程序刚开始启动的时候一般会从命令行获取某些参数,比如以守护进程运行啊什么的,典型的例子就是linux下的man,如下图所示 实现该功能可以使用getopt函数实现,该函数在头文件uni ...
- 【XR-3】核心城市(树直径)
[XR-3]核心城市 这题真的难啊......... k个核心城市太麻烦,我们假设先找一个核心城市,应该放在哪里? \(任意取一个点,它的最远端是直径的端点.\) \(所以当这个点是直径的中点时,可以 ...
- python语法学习第五天--lambda表达式、filter()、map()
lambda表达式 python使用lamda表达式来创建匿名函数 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数 语法: lambda [arg1 [,arg ...
- SpringData表关系:多对多
一.编写实体类配置关联关系: 1.多对多使用注解@ManyToMany配置:a. 在实体中添加一个集合属性 b.在属性上添加ManyToMany注解 c.@JoinTable 注解配置关联关系(nam ...