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

2023-10-15  本文已影响0人  zachary_lee726

一、什么是权限

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

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

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

# 如果某个文件的权限设置为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. 权限管理的作用

2. 权限的使用原则

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在如今的环境如此盛行的原因,当然使用容器本身也会带来很多技术性难题,这里不做讨论。

上一篇下一篇

猜你喜欢

热点阅读