当前位置: 首页 > news >正文

多人共用同一个 Linux 账户,想稍微隔离一下?最朴实无华的方案——把 HOME 改了(适用于 vscode 的隔离)

有些时候,我们不得不和别人共用一个 Linux 账户,比如某些学校的超算平台,这时候大家的配置都混作一团,特别是碰到不太熟悉 Linux 的可能就乱改全局配置,就很麻烦。然后权限又受到限制,不能安装 docker 之类的东西进行隔离。其实有一个非常轻量的办法,就是在 SSH 登录时改变家目录。(每次都手动改也可以的,那就不用看这篇了,其实主要是个人习惯用 Visual Studio Code ,必须要在连接 vscode-server 之前把家目录切过来。)

之前一直没有尝试这个,是因为担心这种改法太轻量,不知道会不会有隐藏的问题。不过目前看起来多数应用都没啥问题。(文章最后还有一个更激进的办法,就是直接 unshare 把家目录挂载成自己的,保证完全不会访问原本家目录的任何东西。)

注意,下述步骤是高度定制化的,你可能需要理解每一步在做什么,而不能简单复制命令。

第一步:创建好你自己的目录结构

首先我们需要一个地方来存放自己的文件。这里我们创建一个 ~/subuser 作为新的、独属于自己的家目录:

mkdir ~/subuser

第二步:准备 SSH 登录时的命令

就写一个很简单的 shell 脚本:

#!/bin/bashexport HOME="$HOME/subuser"
cd "$HOME"if [ -z "$SSH_ORIGINAL_COMMAND" ]; thenexec /bin/bash --login
elseexec /bin/bash -c "$SSH_ORIGINAL_COMMAND"
fi

这里我们假定把它放在 ~/subuser/ssh-command.sh 。别忘记添加一下运行权限:

chmod +x ~/subuser/ssh-command.sh

第三步:创建 SSH 密钥

如果你现在没有使用 SSH 密钥登录,那就先在本地设备上使用 ssh-keygen 创建一对密钥。它将作为后续的登录密钥,并结合 authorized_keys 实现登录时自动切换家目录。如果已经在使用 SSH 密钥登录,那么可以直接用这个密钥。

创建密钥后复制一下公钥(公钥的路径在创建密钥的时候会提示),它是一个类似于这样的东西:

ssh-xxxxx xxxxxxxxxxxxxxxxxxx xxxxxx

**第四步:配置 authorized_keys **

在服务端上找到 ~/.ssh/authorized_keys 文件。如果没有可以创建一个,如果有的话里面可能已经有内容了,就是一系列上面这种公钥:

ssh-aaaaa aaaaaaaaaaaaaaaaaaa aaaaaa
ssh-bbbbb bbbbbbbbbbbbbbbbbbb bbbbbb

这时候把你的粘进去(如果本来就有,那就改那个),同时设置一下 command

ssh-aaaaa aaaaaaaaaaaaaaaaaaa aaaaaa
ssh-bbbbb bbbbbbbbbbbbbbbbbbb bbbbbb
command="~/subuser/ssh-command.sh" ssh-xxxxx xxxxxxxxxxxxxxxxxxx xxxxxx

第五步:没有第五步了

现在 SSH 登录到你的服务器,它应该默认就会执行这个脚本把你的家切换过去。 Visual Studio Code 的话,你会发现它重新下载了 vscode-server

在使用的过程中,得根据自己的需要去修改第二步中的脚本。例如 XDG_CONFIG_HOMEXDG_DATA_HOMEPATH 之类的变量可能需要修改。可以 env 查一下所有环境变量。

另外前面提到的,如果感觉这样还是有访问到其他东西的隐患,比如环境变量没弄干净,或者说可能有的应用去读了 /etc/passwd 而不尊重 HOME ,那可以考虑一下 unshare 大法:

#!/bin/bash# DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER!
# DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER! DANGER!
# Please make sure you have another way to log in, otherwise you will never see your original home directory.exec unshare --user --map-root-user --mount /bin/bash -c "mount --make-rprivate /mount --bind ~/subuser/home ~cd ~exec /bin/bash -c \"\$1\" -- \"\$1\"
" -- "${SSH_ORIGINAL_COMMAND:-"/bin/bash --login"}"

这下原本的家目录直接蒸发了,还给我升级成 root 了,真是太棒了!

(另外这边稍微记录一下,有的系统上可能出于安全原因禁用了 unshare --map-root-user 。例如新版的 Ubuntu ,只能求管理员使用 sudo sysctl -w kernel.unprivileged_userns_clone=1 允许操作了。其他多数系统目前好像还是放开的。)

http://www.jsqmd.com/news/406387/

相关文章:

  • Chord视频理解工具成果展示:从原始MP4到JSON结构化时空标注的全过程
  • 告别手柄适配难题:AntiMicroX游戏控制器映射全攻略
  • 突破瓶颈!OnmyojiAutoScript百鬼夜行邀请功能性能倍增优化指南
  • DASD-4B-Thinking缓存优化:KV Cache压缩与显存管理技巧
  • Qwen3-4B Instruct-2507实战案例:中小企业文案创作提效50%
  • 造相-Z-Image Python入门教程:零基础学习AI图像生成
  • 使用Qwen3-VL-8B-Instruct-GGUF构建Mathtype公式识别系统
  • N_m3u8DL-CLI-SimpleG:让M3U8视频下载像喝水一样简单
  • Retinaface+CurricularFace人脸识别5分钟快速部署教程:从零搭建到实战
  • 创意工作者的新宠:Jimeng AI Studio实战应用案例分享
  • 7步精通AntiMicroX:让任何游戏手柄适配PC游戏的完整指南
  • 系统优化与空间管理:WindowsCleaner让C盘重获新生
  • DLSS Swapper:智能管理DLSS版本的创新优化方案
  • LLaMA-Factory实战:用CMMLU数据集微调Llama3-8B的避坑指南
  • REX-UniNLU在C盘空间不足情况下的优化运行
  • Cisco Packet Tracer 6.2 汉化与配置优化指南 | 网络仿真实践
  • 如何通过DouyinLiveRecorder实现全平台直播内容捕获与突破限制?
  • 告别DLSS版本混乱烦恼:DLSS Swapper智能优化与版本管理全攻略
  • VSCode Python环境配置:春联生成模型开发第一步
  • 零门槛实现实时字幕翻译:PotPlayer百度插件让跨语言观影不再难
  • 小说阅读总受限制?番茄小说下载器让你随时随地畅读无阻
  • EagleEye高清效果呈现:4K图像上30+目标并行检测且Bounding Box零抖动
  • 【序列推荐、Transformer】SASRec++:增强自注意力机制在长序列推荐中的可扩展性
  • RePKG技术解析:Wallpaper Engine资源处理的底层实现与高级应用
  • LongCat-Image-Edit V2在软件测试中的应用:自动化UI截图比对
  • LingBot-Depth在网络安全中的应用:3D行为识别
  • Qwen3-Reranker-0.6B在C++环境下的高效部署与优化
  • AudioLDM-S提示词魔法:这些音效关键词你一定要试试
  • 解锁小红书高效采集新姿势:XHS-Downloader批量下载全攻略
  • Qwen3-ForcedAligner-0.6B模型解析:非自回归架构的语音对齐技术