开发者进阶——浅析linux文件权限设计

一、什么是权限

在linux系统中主要包含三种权限rwx,rwx权限对于文件和目录而言,分别代表了不同的含义

tips:这里暂不讨论suid,sgid等复杂权限

1. rwx的含义——读?写?执行?

  • 对于文件来说:

    r: 读文件内容的权限

    w: 编辑文件内容

    x: 执行文件的权限,例如shell脚本需要有x权限才可以被执行

  • 对于目录来说:

    r: 读取目录下文件列表权限

    w: 新增、删除目录下文件,对已存在的文件或目录改名、移动

    x: 进入目录的权限

# 如果某个文件的权限设置为rwx,那我可以随意操作这个文件吗?包括cat, vi, mv, rm?
# 答案:可以cat和vi,  能否mv和rm取决于父级目录的w权限

# 如果某个目录的权限设置为rwx, 那我可以随意操作这个目录下所有文件吗?包括cat, vi, mv, rm?
# 答案:可以mv和rm,  能否cat和vi取决于子文件的rw权限

tips: 所以,即便我限制了当前文件的权限,但如果父级目录权限没有控制好,这个文件也有可能不翼而飞,反之亦然。

2. ls -l命令下权限列表的含义

linux权限ls -l (1).jpg
1) 第1个字符代表是目录、文件还是软链接
    "-"代表文件,"d"代表目录,"l"代表软链接
    # 扩展:软链接和硬链接有什么区别,两者的rwx权限有何不同
    
2) 第2-4字符代表owner的权限

3) 第5-7字符代表group的权限

4) 第8-10字符代表others的权限

5) 第11字符代表是否有acl权限设置

    "."代表没有配置acl权限,"+"代表有配置有acl权限

如果在src目录下你有一个private目录,不想让领导和其他开发者看,你要怎么设置权限?
chmod 700 ./private

tips: 常用命令chmod的744、777的含义

777.jpg

将每组3位二进制数转化为十进制,就分别代表各自的权限

二、怎么改权限

  1. chmod 命令——修改owner, grouper, others权限
# 递归修改某个目录下所有文件权限
# drwxrwx---.   aa  agroup  src
chmod -R 774 ./src

# 修改某个目录的权限
# drwxrwxr--.   aa  agroup  private
chmod 700 ./private

# 修改某个文件权限
# -rwxr--r--.     aa  agroup  README.md
chmod 764 ./README.md

# 给某个文件去除写权限,增加执行权限
# -rwxrw-r--.     aa  agroup  README.md
chmod -w ./README.md
chmod +x ./README.md

# 细粒度权限配置,u代表owner, g代表group, o代表others
chmod u=rw,g=rx,o=r /README.md
  1. chown 命令——修改文件属主和群属主(需要root权限)
# 例如:将file文件属主改为${name}, group改为${group}
chown ${name}:${group} ./file
  1. usermod命令——修改用户信息,可以将某用户加入群组,获得该群组权限
# 例如:将${name}用户加入到docker group
usermod -aG docker ${name}
  1. setfacl——细粒度修改文件权限(赋予某用户特定权限)
# 对src目录,单独为aa用户配置r-x权限
setfacl -m u:aa:r-x src/
# 对test及其下属子目录,单独为myuser用户配置r-x权限
setfacl -m d:u:myuser:r-x test/
# 删除test目录的acl配置
setfacl -b test/
# 查询用户细粒度配置
getfacl test/

显示权限列表时,-rwxr-xr-x**+ ** 中"+"代表该文件配置了acl权限

三、如何用权限

1. 权限管理的作用

  • 系统保护

    在你的系统中,关于系统服务的文件通常只有root才能读写,系统的重要命令只有root才能执行。

    # 例如:test-api 服务去年有log4j漏洞,假设不法分子侵入行内网络发现并利用这个漏洞植入了脚本
    
    # 如果启动app的用户是appuser,植入的脚本能够获得的权限也只有appuser的权限,无法对其他应用和系统层造成影响,
    # 如果启动app的用户是root,那整个应用层+系统层都有可能被侵入,影响层面会变得非常大。
    
  • 保证应用规范合理

    # 举个testapp的例子,testapp应用会把dsApp上传的文件归档到testapp自己的目录内,如果把这个目录权限放得太大[ rwxrwxrwx ], 当dsApp在sftp过来操作的时候不小心给你把归档目录误删了,会导致很严重的问题,而且追溯和恢复都不简单,最后的责任还很可能是自己,谁让文件权限设置这么大呢?
    
  • 团队开发软件或数据共享

    # 如果你有一个软件开发团队,在你的团队中有三个人aa, bb, cc,你希望每个人都可以使用某一些目录下的文件, 而不是你团队的其他人则不予以开放呢?
    
    # 可以新建一个dev的群组,将aa, bb, cc账号加入dev群组,那么我就可以将团队所需的文件和目录权限订为           [ rwxrwx--- ]来提供给dev的工作团队使用!
    

2. 权限的使用原则

  • 谨慎使用root用户进行操作

    1)防止误操作造成无法挽回的后果

    # 例如:当开发人员本来想要执行rm -rf ./ 时,输入成了rm -rf / , root用户不会提示,直接执行
    

    2)权限升级容易,权限降级难,用root用户操作衍生出的所有文件的属主都是root

    # 例如我第一次启动一个应用使用的是root账户,假设应用会生成某些目录,比如日志目录,目录的默认权限775,后面学习了权限知识之后知道了不应该用root起应用,我决定直接创建一个新用户去运行应用,会出现什么结果?
    # 新用户启动该应用会报错,因为无法将日志写入到日志目录内。
    
  • 最小可用权限原则——权限层次划分清晰,保证系统层、应用层权限最小可用

    1)应用层:我们应该为每个应用单独创建属于自己应用的用户(有部分应用在安装时会自动生成本应用用户,如nginx)

    # 例如:创建test用户启动test-app,创建mysql用户启动mysql应用,创建nginx用户启动nginx服务;
    # 创建dsapp-sftp用户给ds-app端负责上传文件
    

2)系统层:创建root权限用户(approot),授予对linux系统熟悉的开发者使用, 如果需要多个root权限用户,可以建立一个root权限组,将用户加入root权限组。

# 正常情况下,以下常用的系统相关文件,需要root权限用户才能进行修改
/etc/profile # 环境文件
/etc/crontab # job文件
/etc/sudoers # root权限用户文件
/etc/ssh/sshd_config # ssh配置文件
/etc/passwd # 用户信息文件

# 以前公司有个同事,在某CSDN上看ssh相关文档去学习私钥登陆服务器,需要配置/etc/ssh/sshd_config,文件里有一项是PasswordAuthentication, 意思是ssh是否允许通过密码登陆,他把这个配置改成了no,导致这台服务器没办法ssh登陆
# 这个问题一方面说明,熟悉linux系统的开发者才能成为root权限用户的使用者;另一方面也说明要带着批判的眼光去看待开源博客!

四、练习

1) 假设aa, bb, cc同属于devgroup这个群组,都不属于root群组,如果有下面的两个文件,请说明aa, bb, cc用户对以下两个文件的相关权限为何?
-rw-r--r-- 1 root root 238 Jun 18 17:22 config.conf
-rwxr-xr-- 1 bb devgroup 5238 Jun 19 10:25 text.txt

config.conf text.txt
aa r rx
bb r rwx
cc r rx

2) 假设有个账号名称为aa,他的home目录在/home/aa/,cloris对此目录具有[rwx]的权限。 若在此目录下有个名为text.data的文件,该文件的权限如下:
-rwx------ 1 root root 4365 Sep 19 23:20 text.data
请问aa是否可以读、修改、删除此文件?

    aa不能读和修改这个文件,但可以删除该文件。

3)案例:某服务器目录/home/test 下,交换文件目录名称 EXCHANGE_DIR
该目录有以下功能:test-app系统向该目录上传交换文件,ds-app系统拉取交换文件,如何设计目录和文件权限?

    分析:为了保证最小权限原则,我们可以创建testusr用户由test-app系统使用,执行交换文件上传,创建dsappusr用户由ds-app使用,执行交换文件下载,因此,testusr用户需要 EXCHANGE_DIR 目录的rwx权限,dsappusr需要 EXCHANGE_DIR 目录的rx权限

    方案1)EXCHANGE_DIR目录owner:group为testusr:testusr, 权限设置成775
    方案2)创建exchangegroup群组,将testusr, dsappusr加入exchangegroup, EXCHANGE_DIR目录owner:group设为testusr:exchangegroup, 权限设置成750
    方案3)EXCHANGE_DIR目录owner:group为testusr:testusr, 权限设置成770, 给予dsappusr用户额外权限,即setfacl -m u:dsappusr:r-x EXCHANGE_DIR/,第三种方案更像是前期设计阶段未设计完善而做出的补救措施

除了目录的权限外,那生成的文件权限也可以按同样的方案进行设计

五、 更多linux资料

网页版《鸟叔的linux私房菜》:可以系统学习linux相关技能

http://cn.linux.vbird.org/linux_basic/linux_basic.php

备注:linux是开发者进阶的必要能力之一!

扩展思考:

所以,从权限和安全问题上看,要考虑的问题非常多,那IT行业经历了这么久,有没有一个很好的工具简化权限和安全管理呢?

有没有一个工具可以做到应用间隔离?

虚拟化容器技术, 容器技术极大的规范和简化了安全和权限问题,容器的使用使得本来容易被忽略的安全和权限问题,得到了强制规划和预防:

1)容器的设计鼓励所有应用容器间通过网络进行交互,尽量少通过文件交互,避免了文件权限耦合

2)容器应用即使遇到安全问题被攻破,影响也不会溢出到容器外

这也是docker在如今的环境如此盛行的原因,当然使用容器本身也会带来很多技术性难题,这里不做讨论。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容