专栏首页乐享123WSL权限管理

WSL权限管理

重装系统,又折腾了一遍WSL环境,记录一下:

WSL (Win­dows Sub­sys­tem for Linux) 通过 /mnt 目录下的 c、d、e 等目录可分别访问本地的 C、D、E 等盘,虽然可以直接访问 Win­dows 下的文件内容,但输入 ls -al 查看文件你会发现文件权限全都是 777。这会导致一些问题出现,比如 Git会保留这些文件的执行权限,如果你之前在 Win­dows 下使用过 Git Bash ,那么在 WSL 中使用 git status查看本地仓库的文件状态时你会发现它们全部被标记成了 modified。

分析问题

首先要了解 WSL 中的两种文件系统:

VolFs

着力于在 Win­dows 文件系统上提供完整的 Linux 文件系统特性,通过各种手段实现了对 In­odes、Di­rec­tory en­tries、File ob­jects、File de­scrip­tors、Spe­cial file types 的支持。比如为了支持 Win­dows 上没有的 In­odes,VolFs 会把文件权限等信息保存在文件的 NTFS Ex­tended At­trib­utes 中。

WSL 中的 / 使用的就是 VolFs 文件系统。

DrvFs

着力于提供与 Win­dows 文件系统的互操作性。与 VolFs 不同,为了提供最大的互操作性,DrvFs 不会在文件的 NTFS Ex­tended At­trib­utes 中储存附加信息,而是从 Win­dows 的文件权限(Ac­cess Con­trol Lists,就是你右键文件 > 属性 > 安全选项卡中的那些权限配置)推断出该文件对应的的 Linux 文件权限。

所有 Win­dows 盘符挂载至 WSL 下的 /mnt 时都是使用的 DrvFs 文件系统。

简单来说就是 WSL 对 / 目录下的文件拥有完整的控制权,而 /mnt 目录中的文件无法被 WSL 完全控制(可修改数据,无法真实的修改权限)。WSL 对 /mnt 目录中权限的修改不会直接记录到文件本身,而在 Win­dows 下对文件权限的修改直接可作用到 WSL 。关于权限在微软开发者博客中有更详细的说明。

解决方案

这只是让文件在 WSL 中的权限看起来正常(目录 755,文件 644),实际并不会作用到 Win­dows 文件系统下的文件本身。

在 /etc/wsl.conf 中添加以下配置:

1 2 3 4 5

[automount] enabled = true root = /mnt/ options = "metadata,umask=22,fmask=111" mountFsTab = true

上面的方法对所有盘符都有效,如果你想在 WSL 中调用 Win­dows 下的应用程序(比如 explorer.exe . 调用资源管理器打开当前路径)就需要对 C 盘进行单独设置,否则会提示没有权限。首先确认 wsl.conf 中的 mountFsTab 没有被设置为 false,然后编辑 /etc/fstab,添加如下内容:

1

C:\ /mnt/c drvfs rw,noatime,uid=1000,gid=1000,metadata,umask=22,fmask=11 0 0

此时执行mkdir等命令的时候,会发现新建的目录权限依然是 777。

目前民间解决方案是在.profile、.bashrc、.zshrc 或者其他 shell 配置文件中添加如下命令,重新设置 umask

1 2

[filesystem] umask = 022

全部设置完成之后,最好重启一遍Windows系统。

参考:

https://segmentfault.com/a/1190000016677670

https://p3terx.com/archives/problems-and-solutions-encountered-in-wsl-use-2.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第三个万能芯片探针ID注释平台R包

    前面我们提到过表达芯片探针注释的3种方法,参见:第一个万能芯片探针ID注释平台R包, 并且帮助大家搞定了第一种bioconductor包的方法,大家无需下载几十...

    生信技能树
  • 我的第一个 60k+ Star开源项目—JavaGuide

    人生总有各种各样的巧合发生。在 1 年多前,换句话说就是我还是大三的一名学生的时候。我开源了 JavaGuide ,直接到今天 JavaGuide 已经达到现在...

    macrozheng
  • 方便的回归测试——diffy平台

    前段时间,公司运维又双叒叕在迁移机房,带来的又是大量的回归测试,虽然负责的项目case还算健全,但是被迁移机房仍然存在大量的历史接口,有些甚至不知道是什么业务在...

    用户5521279
  • JVM Monitor

    其中 load average 代表的是cpu的平均负载,三个数字分别代表1分钟、5分钟、15分钟内cpu的平均负载。 负荷的大小跟cpu个数以及当前负荷...

    itliusir
  • 基于通用组件语言规范的声明式组件库,腾讯WeComponents正式开源

    ? 面对各类运营需求,微信游戏团队在B端开发实践中进行思考和提炼,创立了通用组件语言规范(CLS,Common Components Language Spe...

    腾讯开源
  • 聊聊自动化测试框架

      无论是在自动化测试实践,还是日常交流中,经常听到一个词:框架。之前学习自动化测试的过程中,一直对“框架”这个词知其然不知其所以然。

    小老鼠
  • 布隆过滤器之 Redis

    Redis v4.0 之后有了 Module(模块/插件) 功能,Redis Modules 让 Redis 可以使用外部模块扩展其功能,布隆过滤器就是其中的 ...

    happyJared
  • 功能测试之单词测频

      寻找自己的程序存在的Bug,同时合并他人测试我的代码所找到的Bug,修改上述两种方式找到的Bug。

    小老鼠
  • 你可能不知道的15个 Git 命令[每日前端夜话0xF5]

    Git 有时可能会令人生畏。因为有太多的命令和细节需要学习。不过虽然文档的内容很多,但阅读起来还是很轻松的。一旦你克服了最初不堪重负的感觉,就会感觉到有明显进展...

    疯狂的技术宅
  • “狗屁不通文章生成器”荣登GitHub热榜,分分钟完成万字大作,更有国际版,中国风手写版

    项目星级:10.9k 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator

    Python疯子

扫码关注云+社区

领取腾讯云代金券