Filesystem MCP

Filesystem MCP

安全地修改 MCP 服务器根目录下的文件,同时防止用户逃逸到根目录之外: 这里提供一些建议,结合了安全性和实用性: **核心原则:最小权限原则 (Principle of Least Privilege)** * **用户权限限制:** 这是最重要的一点。 运行 MCP 服务器的用户账户(例如,一个专门创建的 `mcp_user` 账户)**绝对不能**拥有 root 权限。 它应该只拥有修改根目录下特定文件和目录的权限。 * **chroot 环境 (Chrooted Environment):** 将 MCP 服务器限制在一个 chroot 环境中。 Chroot 会创建一个虚拟的根目录,让服务器认为它位于文件系统的顶层,即使它实际上位于更深的位置。 这可以防止用户访问 chroot 环境之外的文件。 * **输入验证和清理:** 对所有用户输入进行严格的验证和清理。 这可以防止命令注入攻击,攻击者可能会利用这些漏洞来执行任意代码。 * **输出编码:** 对所有输出进行编码,以防止跨站脚本攻击 (XSS)。 * **定期更新:** 保持 MCP 服务器软件和操作系统更新到最新版本,以修复已知的安全漏洞。 **具体实现方法:** 1. **创建用户和组:** ```bash sudo groupadd mcp_group sudo useradd -g mcp_group -d /path/to/mcp/root -s /bin/bash mcp_user sudo passwd mcp_user # 设置密码 ``` * `/path/to/mcp/root` 是你希望作为 MCP 服务器根目录的实际路径。 例如,`/opt/mcp_server`。 * `-s /bin/bash` 允许用户使用 bash shell。 如果不需要 shell 访问,可以设置为 `/bin/false` 或 `/usr/sbin/nologin`。 2. **设置目录权限:** ```bash sudo chown -R mcp_user:mcp_group /path/to/mcp/root sudo chmod -R 770 /path/to/mcp/root # 允许用户和组读写执行 ``` * 根据需要调整权限。 例如,如果用户只需要读取某些文件,则可以将其权限设置为 `440`。 * **重要:** 确保 `mcp_user` 拥有修改所需文件的权限,但不要授予不必要的权限。 3. **Chroot 环境 (推荐):** * **创建 chroot 环境:** 这需要一些手动操作,因为你需要复制所有必要的库和程序到 chroot 目录中。 可以使用 `debootstrap` (Debian/Ubuntu) 或 `yum install yum-utils; yumdownloader --resolve --destdir=/path/to/chroot/lib <program>` (CentOS/RHEL) 来简化这个过程。 ```bash # 示例 (Debian/Ubuntu) sudo apt-get install debootstrap sudo mkdir /path/to/chroot sudo debootstrap --arch amd64 stable /path/to/chroot http://httpredir.debian.org/debian ``` * `stable` 可以替换为 `testing` 或 `unstable`,但 `stable` 最安全。 * `amd64` 替换为你的架构 (例如 `i386`, `arm64`)。 * **重要:** 你需要复制 MCP 服务器依赖的所有库和程序到 `/path/to/chroot` 中。 这可能包括 `libc.so.6`, `libpthread.so.0`, 等等。 使用 `ldd <mcp_server_executable>` 来查看依赖项。 * **使用 `chroot` 命令:** 在启动 MCP 服务器之前,使用 `chroot` 命令将其限制在 chroot 环境中。 ```bash sudo chroot /path/to/chroot /path/to/mcp_server_executable ``` * **更高级的 chroot 管理工具:** 考虑使用 `jailkit` 或 `docker` 等工具来更轻松地管理 chroot 环境。 Docker 提供了一种更隔离和可移植的解决方案。 4. **输入验证和清理:** * **白名单:** 使用白名单来限制允许的输入。 例如,如果用户只能修改某些特定的文件,则只允许这些文件的名称作为输入。 * **正则表达式:** 使用正则表达式来验证输入的格式。 例如,如果用户必须输入一个数字,则可以使用正则表达式来确保输入只包含数字。 * **转义:** 转义所有特殊字符,以防止命令注入攻击。 例如,在 bash 中,可以使用 `\` 来转义特殊字符。 5. **输出编码:** * **HTML 编码:** 如果 MCP 服务器生成 HTML 输出,则对所有输出进行 HTML 编码,以防止 XSS 攻击。 * **URL 编码:** 如果 MCP 服务器生成 URL,则对所有 URL 进行 URL 编码。 6. **日志记录:** * 记录所有用户操作,以便进行审计和故障排除。 * 监控日志文件,以检测可疑活动。 7. **防火墙:** * 使用防火墙来限制对 MCP 服务器的访问。 只允许来自受信任的 IP 地址的连接。 **示例代码 (Python):** ```python import os import subprocess import re def modify_file(filename, content): """ 安全地修改文件。 Args: filename: 要修改的文件名 (相对于根目录). content: 要写入文件的内容. """ # 1. 白名单验证文件名 allowed_files = ["config.txt", "data.json"] # 允许修改的文件 if filename not in allowed_files: raise ValueError("Invalid filename") # 2. 构造完整路径 (相对于根目录) filepath = os.path.join("/path/to/mcp/root", filename) # 3. 检查文件是否存在 if not os.path.exists(filepath): raise FileNotFoundError("File not found") # 4. 输入验证 (例如,限制内容长度) if len(content) > 1024: raise ValueError("Content too long") # 5. 使用 subprocess 安全地写入文件 try: with open(filepath, "w") as f: f.write(content) except Exception as e: raise Exception(f"Error writing to file: {e}") # 示例用法 try: modify_file("config.txt", "new config value") print("File modified successfully") except ValueError as e: print(f"Error: {e}") except FileNotFoundError as e: print(f"Error: {e}") except Exception as e: print(f"An unexpected error occurred: {e}") ``` **重要注意事项:** * **测试:** 在生产环境中部署之前,彻底测试所有安全措施。 * **安全审计:** 定期进行安全审计,以识别和修复潜在的安全漏洞。 * **具体情况:** 以上建议只是一些通用的指导原则。 你需要根据你的具体情况进行调整。 * **复杂性:** 构建一个完全安全的系统非常复杂。 如果你不确定如何操作,请咨询安全专家。 **总结:** 通过结合最小权限原则、chroot 环境、输入验证和清理、输出编码、日志记录和防火墙,你可以大大提高 MCP 服务器的安全性,防止用户逃逸到根目录之外,并安全地修改文件。 记住,安全是一个持续的过程,需要不断地监控和改进。 --- **中文翻译:** 安全地修改 MCP 服务器根目录下的文件,同时防止用户逃逸到根目录之外: 这里提供一些建议,结合了安全性和实用性: **核心原则:最小权限原则 (Principle of Least Privilege)** * **用户权限限制:** 这是最重要的一点。运行 MCP 服务器的用户账户(例如,一个专门创建的 `mcp_user` 账户)**绝对不能**拥有 root 权限。它应该只拥有修改根目录下特定文件和目录的权限。 * **chroot 环境 (Chrooted Environment):** 将 MCP 服务器限制在一个 chroot 环境中。Chroot 会创建一个虚拟的根目录,让服务器认为它位于文件系统的顶层,即使它实际上位于更深的位置。这可以防止用户访问 chroot 环境之外的文件。 * **输入验证和清理:** 对所有用户输入进行严格的验证和清理。这可以防止命令注入攻击,攻击者可能会利用这些漏洞来执行任意代码。 * **输出编码:** 对所有输出进行编码,以防止跨站脚本攻击 (XSS)。 * **定期更新:** 保持 MCP 服务器软件和操作系统更新到最新版本,以修复已知的安全漏洞。 **具体实现方法:** 1. **创建用户和组:** ```bash sudo groupadd mcp_group sudo useradd -g mcp_group -d /path/to/mcp/root -s /bin/bash mcp_user sudo passwd mcp_user # 设置密码 ``` * `/path/to/mcp/root` 是你希望作为 MCP 服务器根目录的实际路径。例如,`/opt/mcp_server`。 * `-s /bin/bash` 允许用户使用 bash shell。如果不需要 shell 访问,可以设置为 `/bin/false` 或 `/usr/sbin/nologin`。 2. **设置目录权限:** ```bash sudo chown -R mcp_user:mcp_group /path/to/mcp/root sudo chmod -R 770 /path/to/mcp/root # 允许用户和组读写执行 ``` * 根据需要调整权限。例如,如果用户只需要读取某些文件,则可以将其权限设置为 `440`。 * **重要:** 确保 `mcp_user` 拥有修改所需文件的权限,但不要授予不必要的权限。 3. **Chroot 环境 (推荐):** * **创建 chroot 环境:** 这需要一些手动操作,因为你需要复制所有必要的库和程序到 chroot 目录中。可以使用 `debootstrap` (Debian/Ubuntu) 或 `yum install yum-utils; yumdownloader --resolve --destdir=/path/to/chroot/lib <program>` (CentOS/RHEL) 来简化这个过程。 ```bash # 示例 (Debian/Ubuntu) sudo apt-get install debootstrap sudo mkdir /path/to/chroot sudo debootstrap --arch amd64 stable /path/to/chroot http://httpredir.debian.org/debian ``` * `stable` 可以替换为 `testing` 或 `unstable`,但 `stable` 最安全。 * `amd64` 替换为你的架构 (例如 `i386`, `arm64`)。 * **重要:** 你需要复制 MCP 服务器依赖的所有库和程序到 `/path/to/chroot` 中。这可能包括 `libc.so.6`, `libpthread.so.0`, 等等。使用 `ldd <mcp_server_executable>` 来查看依赖项。 * **使用 `chroot` 命令:** 在启动 MCP 服务器之前,使用 `chroot` 命令将其限制在 chroot 环境中。 ```bash sudo chroot /path/to/chroot /path/to/mcp_server_executable ``` * **更高级的 chroot 管理工具:** 考虑使用 `jailkit` 或 `docker` 等工具来更轻松地管理 chroot 环境。Docker 提供了一种更隔离和可移植的解决方案。 4. **输入验证和清理:** * **白名单:** 使用白名单来限制允许的输入。例如,如果用户只能修改某些特定的文件,则只允许这些文件的名称作为输入。 * **正则表达式:** 使用正则表达式来验证输入的格式。例如,如果用户必须输入一个数字,则可以使用正则表达式来确保输入只包含数字。 * **转义:** 转义所有特殊字符,以防止命令注入攻击。例如,在 bash 中,可以使用 `\` 来转义特殊字符。 5. **输出编码:** * **HTML 编码:** 如果 MCP 服务器生成 HTML 输出,则对所有输出进行 HTML 编码,以防止 XSS 攻击。 * **URL 编码:** 如果 MCP 服务器生成 URL,则对所有 URL 进行 URL 编码。 6. **日志记录:** * 记录所有用户操作,以便进行审计和故障排除。 * 监控日志文件,以检测可疑活动。 7. **防火墙:** * 使用防火墙来限制对 MCP 服务器的访问。只允许来自受信任的 IP 地址的连接。 **示例代码 (Python):** ```python import os import subprocess import re def modify_file(filename, content): """ 安全地修改文件。 Args: filename: 要修改的文件名 (相对于根目录). content: 要写入文件的内容. """ # 1. 白名单验证文件名 allowed_files = ["config.txt", "data.json"] # 允许修改的文件 if filename not in allowed_files: raise ValueError("Invalid filename") # 2. 构造完整路径 (相对于根目录) filepath = os.path.join("/path/to/mcp/root", filename) # 3. 检查文件是否存在 if not os.path.exists(filepath): raise FileNotFoundError("File not found") # 4. 输入验证 (例如,限制内容长度) if len(content) > 1024: raise ValueError("Content too long") # 5. 使用 subprocess 安全地写入文件 try: with open(filepath, "w") as f: f.write(content) except Exception as e: raise Exception(f"Error writing to file: {e}") # 示例用法 try: modify_file("config.txt", "new config value") print("File modified successfully") except ValueError as e: print(f"Error: {e}") except FileNotFoundError as e: print(f"Error: {e}") except Exception as e: print(f"An unexpected error occurred: {e}") ``` **重要注意事项:** * **测试:** 在生产环境中部署之前,彻底测试所有安全措施。 * **安全审计:** 定期进行安全审计,以识别和修复潜在的安全漏洞。 * **具体情况:** 以上建议只是一些通用的指导原则。你需要根据你的具体情况进行调整。 * **复杂性:** 构建一个完全安全的系统非常复杂。如果你不确定如何操作,请咨询安全专家。 **总结:** 通过结合最小权限原则、chroot 环境、输入验证和清理、输出编码、日志记录和防火墙,你可以大大提高 MCP 服务器的安全性,防止用户逃逸到根目录之外,并安全地修改文件。记住,安全是一个持续的过程,需要不断地监控和改进。

sebastianbachmaier

开发者工具
访问服务器

README

文件系统 MCP

[!WARNING] 应该无法修改指定根文件夹之外的其他文件夹中的文件,但这需要进一步验证...

简单的文件系统 MCP,允许在指定的根文件夹中创建、读取、更新和删除文件。根文件夹作为节点调用的参数指定。 Agent 应该无法修改根文件夹之外的其他文件夹中的文件(但不能保证)。

如何安装:

[!TIP] 你需要 Node.js 12 以上版本才能运行此 MCP。你可能需要通过 nvm 或类似工具来使用它。

修改你的 Clause MCP 配置,例如在 MAC 下通过(另请参阅 claude 文档):

~/Library/Application\ Support/Claude/claude_desktop_config.json

并添加服务器:

{
    "mcpServers": {
        "save-filesystem-mcp": {
            "command": "node",
            "args": [
                "PATH_TO_FOLDER/save-filesystem-mcp/build/index.js",
                "ABSOLUTE_FOLDER_FOR_CLAUDE_TO_WORK_WITH"
            ]
        }
    }
}

然后启动 Claude 并要求它为你编写一个游戏。它将使用 MCP 在指定的根文件夹中创建、读取、更新和删除文件。

推荐服务器

Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
MCP Package Docs Server

MCP Package Docs Server

促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。

精选
本地
TypeScript
Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
mermaid-mcp-server

mermaid-mcp-server

一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。

精选
JavaScript
Jira-Context-MCP

Jira-Context-MCP

MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

精选
TypeScript
Linear MCP Server

Linear MCP Server

一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

精选
JavaScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Curri MCP Server

Curri MCP Server

通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。

官方
本地
JavaScript