Browse Source

增强Cursor权限管理功能,新增macOS特有的深入权限处理,确保在启动前和运行时的权限设置正确。优化了日志目录的权限处理和扩展属性清理,提升了脚本的安全性和用户体验。同时,新增完整权限修复函数,提供更全面的权限管理解决方案。

master v0.0.191
煎饼果子卷鲨鱼辣椒 2 weeks ago
parent
commit
fabff7298b
  1. 215
      scripts/docs/macos_advanced_permission_solution.md
  2. 24
      scripts/fix/cursor_permission_fix.sh
  3. 291
      scripts/run/cursor_mac_id_modifier.sh

215
scripts/docs/macos_advanced_permission_solution.md

@ -0,0 +1,215 @@
# macOS特有的深入权限处理方案实施报告
## 🎯 实施目标
基于深度分析,实施macOS特有的深入权限处理方案,彻底解决Cursor权限错误问题:
```
EACCES: permission denied, mkdir '/Users/chaoqun/Library/Application Support/Cursor/logs/20250709T152940'
```
## 🔧 核心实施内容
### **1. 新增核心函数**
#### **🔧 `apply_macos_advanced_permissions()`**
macOS特有的深入权限处理核心函数:
```bash
功能特性:
├── 🧹 扩展属性清理 (xattr -cr)
├── 🔐 ACL权限设置 (chmod +a)
├── 🔄 权限缓存刷新 (dscacheutil -flushcache)
├── ⏰ 缓存更新等待机制
└── 🧪 权限验证测试
```
**关键技术实现:**
- **ACL权限设置**:`user:$user allow read,write,execute,delete,add_file,add_subdirectory,inherit`
- **扩展属性清理**:清除可能干扰权限的quarantine等属性
- **权限缓存刷新**:确保系统权限状态一致性
- **权限继承**:设置`inherit`标志确保子目录自动继承权限
#### **🛡️ `ensure_cursor_complete_permissions()`**
增强的Cursor权限完整修复函数:
```bash
执行流程:
1. 🔧 基础权限修复 (调用原有函数)
2. 🚀 高级权限处理 (应用macOS特有机制)
3. 🎯 logs目录特殊处理
4. 🧪 Cursor行为模拟测试
5. 🔍 最终权限诊断报告
```
### **2. 增强现有函数**
#### **🚀 `ensure_cursor_startup_permissions()` 增强版**
- 集成macOS高级权限处理
- 添加Cursor启动行为模拟测试
- 增强logs目录特殊处理
- 提供详细的权限诊断信息
### **3. 权限处理机制详解**
#### **🔐 ACL权限处理**
```bash
# 为用户设置完整ACL权限
chmod +a "user:$user allow read,write,execute,delete,add_file,add_subdirectory,inherit" "$dir"
# 为staff组设置ACL权限
chmod +a "group:staff allow read,write,execute,add_file,add_subdirectory,inherit" "$dir"
```
**权限说明:**
- `read,write,execute` - 基础读写执行权限
- `delete` - 删除权限
- `add_file` - 创建文件权限
- `add_subdirectory` - 创建子目录权限 ← **关键解决方案**
- `inherit` - 权限继承标志 ← **防止权限断裂**
#### **🧹 扩展属性清理**
```bash
# 清理可能干扰权限的扩展属性
xattr -cr "$target_dir"
```
**清理内容:**
- `com.apple.quarantine` - 隔离属性
- `com.apple.metadata` - 元数据属性
- 其他可能影响权限的扩展属性
#### **🔄 权限缓存刷新**
```bash
# 刷新系统权限缓存
sudo dscacheutil -flushcache
# 刷新目录服务缓存
sudo killall -HUP DirectoryService
# 等待缓存更新生效
sleep 2
```
### **4. 集成点优化**
#### **关键执行节点**
1. **机器码修改完成后** - 调用`ensure_cursor_complete_permissions()`
2. **备份恢复时** - 集成完整权限修复
3. **Cursor启动前** - 使用增强版启动前权限确保
4. **专用修复脚本** - 集成高级权限处理
#### **向后兼容性**
- 保持原有函数接口不变
- 新增函数作为增强补充
- 渐进式权限处理,确保稳定性
## 🧪 验证机制
### **多层次验证**
```bash
验证层次:
1. 🧪 基础文件创建测试
2. 🧪 子目录创建测试 (模拟Cursor行为)
3. 🧪 子目录文件创建测试
4. 🧪 时间戳目录创建测试 (精确模拟)
5. 🧪 ACL权限检查验证
```
### **Cursor行为模拟**
```bash
# 精确模拟Cursor创建时间戳目录的行为
timestamp_dir="$logs_dir/test_$(date +%Y%m%dT%H%M%S)"
mkdir -p "$timestamp_dir" # 这里是关键测试点
# 模拟在时间戳目录中创建日志文件
touch "$timestamp_dir/test.log"
```
## 📋 权限诊断报告
### **实时权限状态**
```bash
📋 [权限报告] 最终权限状态:
----------------------------------------
✅ ~/Library/Application Support/Cursor: drwxr-xr-x user:staff [ACL:✅]
✅ ~/Library/Application Support/Cursor/logs: drwxr-xr-x user:staff [ACL:✅]
✅ ~/Library/Application Support/Cursor/User: drwxr-xr-x user:staff [ACL:✅]
✅ ~/.cursor: drwxr-xr-x user:staff [ACL:✅]
✅ ~/.cursor/extensions: drwxr-xr-x user:staff [ACL:✅]
```
### **ACL权限检查**
- 自动检查每个目录的ACL权限设置
- 验证用户是否具有完整的权限
- 确认权限继承设置是否正确
## 🎯 解决的核心问题
### **权限继承断裂**
- **问题**:删除重建后权限继承链断裂
- **解决**:ACL权限设置`inherit`标志确保权限继承
### **子目录创建权限**
- **问题**:父目录权限正确但无法创建子目录
- **解决**:明确设置`add_subdirectory`权限
### **权限缓存不一致**
- **问题**:系统权限缓存与实际状态不一致
- **解决**:强制刷新权限缓存并等待更新
### **扩展属性干扰**
- **问题**:macOS扩展属性可能干扰权限
- **解决**:清理所有可能干扰的扩展属性
## 🚀 预期效果
### **彻底解决权限错误**
- ✅ 解决`EACCES: permission denied, mkdir`错误
- ✅ 确保Cursor能正常创建时间戳子目录
- ✅ 防止权限继承断裂问题
- ✅ 提供持久的权限解决方案
### **增强的稳定性**
- ✅ 多层次权限验证机制
- ✅ 实时权限状态诊断
- ✅ 自动权限修复能力
- ✅ 向后兼容性保证
### **用户体验提升**
- ✅ 自动化权限处理,无需用户干预
- ✅ 详细的权限诊断信息
- ✅ 清晰的错误处理和恢复机制
- ✅ 专用权限修复工具
## 📞 使用方法
### **自动集成**
```bash
# 运行主脚本,增强权限处理已完全集成
sudo ./scripts/run/cursor_mac_id_modifier.sh
```
### **独立权限修复**
```bash
# 如果仍有权限问题,运行增强的专用修复脚本
sudo ./scripts/fix/cursor_permission_fix.sh
```
### **手动高级权限设置**
```bash
# 手动应用macOS高级权限(如果需要)
xattr -cr "$HOME/Library/Application Support/Cursor"
chmod +a "user:$(whoami) allow read,write,execute,delete,add_file,add_subdirectory,inherit" "$HOME/Library/Application Support/Cursor"
sudo dscacheutil -flushcache
```
## 🎉 总结
这个增强的权限处理方案通过深入理解macOS权限机制,实施了针对性的解决方案:
1. **技术深度** - 处理ACL权限、扩展属性、权限缓存等macOS特有机制
2. **问题针对性** - 直接解决Cursor无法创建时间戳子目录的核心问题
3. **验证完整性** - 多层次验证确保权限设置的有效性
4. **用户友好性** - 自动化处理,提供详细诊断信息
现在用户应该能够完全解决macOS环境下的Cursor权限问题,享受无障碍的Cursor使用体验!

24
scripts/fix/cursor_permission_fix.sh

@ -167,7 +167,29 @@ force_fix_permissions() {
sudo chown -R "$CURRENT_USER:staff" "$CURSOR_HOME_DIR" 2>/dev/null || true
sudo chmod -R 755 "$CURSOR_SUPPORT_DIR" 2>/dev/null || true
sudo chmod -R 755 "$CURSOR_HOME_DIR" 2>/dev/null || true
# 🚀 macOS高级权限处理
log_info "🚀 [高级权限] 应用macOS特有的高级权限处理..."
# 清理扩展属性
log_info "🧹 [扩展属性] 清理扩展属性..."
xattr -cr "$CURSOR_SUPPORT_DIR" 2>/dev/null || true
xattr -cr "$CURSOR_HOME_DIR" 2>/dev/null || true
# 设置ACL权限
log_info "🔐 [ACL权限] 设置ACL权限..."
chmod +a "user:$CURRENT_USER allow read,write,execute,delete,add_file,add_subdirectory,inherit" "$CURSOR_SUPPORT_DIR" 2>/dev/null || true
chmod +a "user:$CURRENT_USER allow read,write,execute,delete,add_file,add_subdirectory,inherit" "$CURSOR_HOME_DIR" 2>/dev/null || true
chmod +a "user:$CURRENT_USER allow read,write,execute,delete,add_file,add_subdirectory,inherit" "$CURSOR_SUPPORT_DIR/logs" 2>/dev/null || true
# 刷新权限缓存
log_info "🔄 [权限缓存] 刷新系统权限缓存..."
sudo dscacheutil -flushcache 2>/dev/null || true
sudo killall -HUP DirectoryService 2>/dev/null || true
# 等待缓存更新
sleep 2
# 特别确保logs目录权限
log_info "🎯 [logs] 特别确保logs目录权限..."
sudo chown "$CURRENT_USER:staff" "$CURSOR_SUPPORT_DIR/logs" 2>/dev/null || true

291
scripts/run/cursor_mac_id_modifier.sh

@ -610,9 +610,9 @@ ensure_cursor_directory_permissions() {
log_info "✅ [完成] 增强权限修复完成"
}
# 🚀 Cursor启动前权限最终确保(新增函数
# 🚀 Cursor启动前权限最终确保(增强版
ensure_cursor_startup_permissions() {
log_info "🚀 [启动前权限] 确保Cursor启动前权限正确..."
log_info "🚀 [启动前权限] 确保Cursor启动前权限正确(增强版)..."
local cursor_support_dir="$HOME/Library/Application Support/Cursor"
local cursor_home_dir="$HOME/.cursor"
@ -629,7 +629,8 @@ ensure_cursor_startup_permissions() {
"$cursor_home_dir/extensions"
)
# 强制确保启动目录权限
# 🔧 第一步:基础权限确保
log_info "🔧 [基础权限] 确保基础权限设置..."
for dir in "${startup_dirs[@]}"; do
# 确保目录存在
sudo mkdir -p "$dir" 2>/dev/null || true
@ -640,17 +641,26 @@ ensure_cursor_startup_permissions() {
# 验证权限
if [ -w "$dir" ]; then
log_info "✅ [启动权限] $dir 权限正确"
log_info "✅ [基础权限] ${dir/$HOME/\~} 权限正确"
else
log_warn "⚠️ [启动权限] $dir 权限异常,尝试强制修复..."
log_warn "⚠️ [基础权限] ${dir/$HOME/\~} 权限异常,尝试强制修复..."
sudo chown -R "$current_user:staff" "$dir" 2>/dev/null || true
sudo chmod -R 755 "$dir" 2>/dev/null || true
fi
done
# 特别处理logs目录 - 这是最容易出问题的地方
# 🚀 第二步:应用macOS高级权限处理
log_info "🚀 [高级权限] 应用macOS特有的高级权限处理..."
for dir in "${startup_dirs[@]}"; do
if [ -d "$dir" ]; then
log_info "🔧 [高级处理] 处理目录: ${dir/$HOME/\~}"
apply_macos_advanced_permissions "$dir" || log_warn "⚠️ [高级处理] 高级权限处理失败: ${dir/$HOME/\~}"
fi
done
# 🎯 第三步:特别处理logs目录
local logs_dir="$cursor_support_dir/logs"
log_info "🎯 [logs目录] 特别确保logs目录权限..."
log_info "🎯 [logs特殊] 特别确保logs目录权限(增强版)..."
# 删除并重新创建logs目录以确保权限正确
sudo rm -rf "$logs_dir" 2>/dev/null || true
@ -658,13 +668,33 @@ ensure_cursor_startup_permissions() {
sudo chown "$current_user:staff" "$logs_dir" 2>/dev/null || true
sudo chmod 755 "$logs_dir" 2>/dev/null || true
# 测试logs目录权限
local test_file="$logs_dir/permission_test_$(date +%s).tmp"
if touch "$test_file" 2>/dev/null; then
log_info "✅ [logs测试] logs目录权限测试成功"
rm -f "$test_file" 2>/dev/null || true
# 应用高级权限到logs目录
if apply_macos_advanced_permissions "$logs_dir"; then
log_info "✅ [logs高级] logs目录高级权限处理成功"
else
log_warn "⚠️ [logs高级] logs目录高级权限处理失败"
fi
# 🧪 第四步:模拟Cursor启动行为测试
log_info "🧪 [启动模拟] 模拟Cursor启动行为测试..."
# 模拟Cursor创建时间戳目录的行为
local timestamp_dir="$logs_dir/startup_test_$(date +%Y%m%dT%H%M%S)"
if mkdir -p "$timestamp_dir" 2>/dev/null; then
log_info "✅ [启动模拟] 时间戳目录创建测试成功"
# 测试在时间戳目录中创建文件
local test_log_file="$timestamp_dir/startup.log"
if touch "$test_log_file" 2>/dev/null; then
log_info "✅ [启动模拟] 启动日志文件创建测试成功"
rm -f "$test_log_file" 2>/dev/null || true
else
log_warn "⚠️ [启动模拟] 启动日志文件创建测试失败"
fi
rmdir "$timestamp_dir" 2>/dev/null || true
else
log_error "❌ [logs测试] logs目录权限测试失败"
log_error "❌ [启动模拟] 时间戳目录创建测试失败"
# 最后的强制修复尝试
log_info "🔧 [最后修复] 执行最后的强制修复..."
@ -673,12 +703,232 @@ ensure_cursor_startup_permissions() {
sudo mkdir -p "$cursor_support_dir/User/globalStorage" 2>/dev/null || true
sudo chown -R "$current_user:staff" "$cursor_support_dir" 2>/dev/null || true
sudo chmod -R 755 "$cursor_support_dir" 2>/dev/null || true
# 再次应用高级权限
apply_macos_advanced_permissions "$cursor_support_dir/logs"
# 再次测试
if mkdir -p "$timestamp_dir" 2>/dev/null; then
log_info "✅ [最后修复] 强制修复后测试成功"
rmdir "$timestamp_dir" 2>/dev/null || true
else
log_error "❌ [最后修复] 强制修复后测试仍然失败"
fi
fi
log_info "✅ [启动前权限] Cursor启动前权限确保完成(增强版)"
}
# 🔧 macOS特有的深入权限处理(新增核心函数)
apply_macos_advanced_permissions() {
local target_dir="$1"
local current_user=$(whoami)
log_info "🔧 [高级权限] 开始macOS特有的深入权限处理: ${target_dir/$HOME/\~}"
# 🧹 第一步:清理扩展属性
log_info "🧹 [扩展属性] 清理可能干扰权限的扩展属性..."
if xattr -cr "$target_dir" 2>/dev/null; then
log_info "✅ [扩展属性] 扩展属性清理成功"
else
log_warn "⚠️ [扩展属性] 扩展属性清理失败或无需清理"
fi
# 🔐 第二步:设置ACL权限
log_info "🔐 [ACL权限] 设置访问控制列表权限..."
# 为当前用户设置完整的ACL权限,包括继承
local acl_rule="user:$current_user allow read,write,execute,delete,add_file,add_subdirectory,inherit"
if chmod +a "$acl_rule" "$target_dir" 2>/dev/null; then
log_info "✅ [ACL权限] 用户ACL权限设置成功"
else
log_warn "⚠️ [ACL权限] 用户ACL权限设置失败,可能已存在或不支持"
fi
# 为staff组设置ACL权限
local staff_acl_rule="group:staff allow read,write,execute,add_file,add_subdirectory,inherit"
if chmod +a "$staff_acl_rule" "$target_dir" 2>/dev/null; then
log_info "✅ [ACL权限] staff组ACL权限设置成功"
else
log_warn "⚠️ [ACL权限] staff组ACL权限设置失败,可能已存在或不支持"
fi
# 🔄 第三步:刷新权限缓存
log_info "🔄 [权限缓存] 刷新系统权限缓存..."
if sudo dscacheutil -flushcache 2>/dev/null; then
log_info "✅ [权限缓存] 系统权限缓存刷新成功"
else
log_warn "⚠️ [权限缓存] 系统权限缓存刷新失败"
fi
# 刷新目录服务缓存
if sudo killall -HUP DirectoryService 2>/dev/null; then
log_info "✅ [目录服务] 目录服务缓存刷新成功"
else
log_warn "⚠️ [目录服务] 目录服务缓存刷新失败或不需要"
fi
# ⏰ 第四步:等待权限缓存更新
log_info "⏰ [等待] 等待权限缓存更新生效..."
sleep 2
# 🧪 第五步:权限验证测试
log_info "🧪 [验证] 执行权限验证测试..."
# 测试基础读写权限
local test_file="$target_dir/.permission_test_$(date +%s)"
if touch "$test_file" 2>/dev/null; then
log_info "✅ [验证] 基础文件创建权限正常"
rm -f "$test_file" 2>/dev/null || true
else
log_error "❌ [验证] 基础文件创建权限异常"
return 1
fi
log_info "✅ [启动前权限] Cursor启动前权限确保完成"
# 测试子目录创建权限(模拟Cursor行为)
local test_subdir="$target_dir/test_subdir_$(date +%s)"
if mkdir -p "$test_subdir" 2>/dev/null; then
log_info "✅ [验证] 子目录创建权限正常"
# 测试子目录中的文件创建
local test_subfile="$test_subdir/test_file"
if touch "$test_subfile" 2>/dev/null; then
log_info "✅ [验证] 子目录文件创建权限正常"
rm -f "$test_subfile" 2>/dev/null || true
else
log_warn "⚠️ [验证] 子目录文件创建权限异常"
fi
rmdir "$test_subdir" 2>/dev/null || true
else
log_error "❌ [验证] 子目录创建权限异常"
return 1
fi
log_info "✅ [高级权限] macOS特有的深入权限处理完成"
return 0
}
log_info "✅ [启动前权限] Cursor启动前权限确保完成"
# �️ 增强的Cursor权限完整修复(新增函数)
ensure_cursor_complete_permissions() {
log_info "🛡️ [完整权限] 开始Cursor权限完整修复..."
local cursor_support_dir="$HOME/Library/Application Support/Cursor"
local cursor_home_dir="$HOME/.cursor"
local current_user=$(whoami)
# 关键目录列表
local critical_dirs=(
"$cursor_support_dir"
"$cursor_support_dir/logs"
"$cursor_support_dir/User"
"$cursor_support_dir/User/globalStorage"
"$cursor_home_dir"
"$cursor_home_dir/extensions"
)
# 🔧 第一步:基础权限修复
log_info "🔧 [基础权限] 执行基础权限修复..."
ensure_cursor_directory_permissions
# 🚀 第二步:高级权限处理
log_info "🚀 [高级权限] 执行macOS特有的高级权限处理..."
for dir in "${critical_dirs[@]}"; do
if [ -d "$dir" ]; then
log_info "🔧 [处理] 处理目录: ${dir/$HOME/\~}"
if ! apply_macos_advanced_permissions "$dir"; then
log_warn "⚠️ [警告] 目录高级权限处理失败: ${dir/$HOME/\~}"
fi
else
log_warn "⚠️ [跳过] 目录不存在: ${dir/$HOME/\~}"
fi
done
# 🎯 第三步:特别处理logs目录
log_info "🎯 [logs特殊] 特别处理logs目录权限..."
local logs_dir="$cursor_support_dir/logs"
# 确保logs目录存在
sudo mkdir -p "$logs_dir" 2>/dev/null || true
sudo chown "$current_user:staff" "$logs_dir" 2>/dev/null || true
sudo chmod 755 "$logs_dir" 2>/dev/null || true
# 应用高级权限
if apply_macos_advanced_permissions "$logs_dir"; then
log_info "✅ [logs特殊] logs目录高级权限处理成功"
else
log_warn "⚠️ [logs特殊] logs目录高级权限处理失败"
fi
# 🧪 第四步:模拟Cursor行为测试
log_info "🧪 [Cursor模拟] 模拟Cursor应用行为测试..."
# 模拟Cursor创建时间戳目录的行为
local timestamp_dir="$logs_dir/test_$(date +%Y%m%dT%H%M%S)"
if mkdir -p "$timestamp_dir" 2>/dev/null; then
log_info "✅ [Cursor模拟] 时间戳目录创建测试成功"
# 测试在时间戳目录中创建文件
local test_log_file="$timestamp_dir/test.log"
if touch "$test_log_file" 2>/dev/null; then
log_info "✅ [Cursor模拟] 日志文件创建测试成功"
rm -f "$test_log_file" 2>/dev/null || true
else
log_warn "⚠️ [Cursor模拟] 日志文件创建测试失败"
fi
rmdir "$timestamp_dir" 2>/dev/null || true
else
log_error "❌ [Cursor模拟] 时间戳目录创建测试失败"
# 如果模拟失败,尝试最后的强制修复
log_info "🔧 [最后修复] 执行最后的强制权限修复..."
sudo rm -rf "$logs_dir" 2>/dev/null || true
sudo mkdir -p "$logs_dir" 2>/dev/null || true
sudo chown "$current_user:staff" "$logs_dir" 2>/dev/null || true
sudo chmod 755 "$logs_dir" 2>/dev/null || true
# 再次应用高级权限
apply_macos_advanced_permissions "$logs_dir"
# 再次测试
if mkdir -p "$timestamp_dir" 2>/dev/null; then
log_info "✅ [最后修复] 强制修复后测试成功"
rmdir "$timestamp_dir" 2>/dev/null || true
else
log_error "❌ [最后修复] 强制修复后测试仍然失败"
return 1
fi
fi
# 🔍 第五步:最终权限诊断
log_info "🔍 [最终诊断] 执行最终权限诊断..."
echo "📋 [权限报告] 最终权限状态:"
echo "----------------------------------------"
for dir in "${critical_dirs[@]}"; do
if [ -d "$dir" ]; then
local perms=$(ls -ld "$dir" | awk '{print $1}')
local owner=$(ls -ld "$dir" | awk '{print $3":"$4}')
# 检查ACL权限
local acl_info=""
if ls -le "$dir" 2>/dev/null | grep -q "user:$current_user"; then
acl_info=" [ACL:✅]"
else
acl_info=" [ACL:❌]"
fi
echo "${dir/$HOME/\~}: $perms $owner$acl_info"
else
echo "${dir/$HOME/\~}: 不存在"
fi
done
log_info "✅ [完整权限] Cursor权限完整修复完成"
return 0
}
# �🛠️ 修改机器码配置(增强版)
@ -894,11 +1144,8 @@ except Exception as e:
log_warn "⚠️ [警告] 无法设置配置文件只读保护"
fi
# 🛡️ 关键修复:确保目录权限正确
ensure_cursor_directory_permissions
# 🚀 关键修复:确保Cursor启动前权限正确
ensure_cursor_startup_permissions
# 🛡️ 关键修复:执行完整的权限修复(包含macOS高级权限处理)
ensure_cursor_complete_permissions
echo
log_info "🎉 [成功] 机器码配置修改完成!"
@ -919,7 +1166,7 @@ except Exception as e:
# 恢复备份并确保权限正确
if cp "$backup_path" "$config_path"; then
chmod 644 "$config_path" 2>/dev/null || true
ensure_cursor_directory_permissions
ensure_cursor_complete_permissions
log_info "✅ [恢复] 已恢复原始配置并修复权限"
else
log_error "❌ [错误] 恢复备份失败"
@ -936,7 +1183,7 @@ except Exception as e:
log_info "🔄 [恢复] 正在恢复备份配置并修复权限..."
if cp "$backup_path" "$config_path"; then
chmod 644 "$config_path" 2>/dev/null || true
ensure_cursor_directory_permissions
ensure_cursor_complete_permissions
log_info "✅ [恢复] 已恢复原始配置并修复权限"
else
log_error "❌ [错误] 恢复备份失败"

Loading…
Cancel
Save