أفضل ممارسات إدارة الأسرار
احفظ الأسرار بعيدًا عن مستودع dotfiles الخاص بك. يغطي هذا الدليل ثلاث طرق مختبرة لإدارة بيانات الاعتماد بأمان مع Chezmoi.
لماذا هذا مهم
غالبًا ما تكون مستودعات dotfiles عامة. يمكن أن يؤدي مفتاح API واحد أو رمز أو كلمة مرور تم الالتزام بها إلى:
- اختراق الحساب في غضون دقائق من الدفع.
- إساءة استخدام فواتير السحابة من بيانات اعتماد السحابة المسربة.
- هجمات سلسلة التوريد عند كشف رموز CI.
القواعد الذهبية
- لا تخزن أبدًا أسرارًا بنص عادي في التحكم بالإصدارات.
- التشفير في حالة السكون — استخدم age أو SOPS أو مدير أسرار.
- تحقق قبل كل التزام — قم بالأتمتة باستخدام خطافات ما قبل الالتزام.
الطريقة 1: Chezmoi + age (موصى بها)
age هي أداة تشفير ملفات بسيطة وحديثة. يتكامل Chezmoi معها بشكل أصلي.
الإعداد
bash
# Install age
brew install age # macOS
sudo apt install age # Ubuntu
# Generate a key pair
age-keygen -o ~/.config/chezmoi/key.txt
# Tell Chezmoi to use it
chezmoi edit-configأضف إلى ~/.config/chezmoi/chezmoi.toml:
toml
encryption = "age"
[age]
identity = "~/.config/chezmoi/key.txt"
recipient = "age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"تشفير ملف
bash
# Add a secret file as encrypted
chezmoi add --encrypt ~/.config/gh/hosts.yml
# The file is stored encrypted in the source directory
cat "$(chezmoi source-path)/encrypted_dot_config/gh/hosts.yml.age"قوالب الأسرار
bash
# Use Chezmoi templates for inline secrets
chezmoi edit ~/.bashrctext
export GITHUB_TOKEN="{{ (bitwarden "github-token").notes }}"
export AWS_ACCESS_KEY_ID="{{ pass "aws/access-key-id" }}"الطريقة 2: Chezmoi + SOPS
SOPS (Secrets OPerationS) يشفر مفاتيح محددة في ملفات YAML/JSON مع الحفاظ على البنية مرئية.
الإعداد
bash
# Install SOPS
brew install sops # macOS
sudo apt install sops # Ubuntu
# Create a SOPS config
cat > .sops.yaml << 'EOF'
creation_rules:
- age: >-
age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
EOFالتشفير
bash
# Create a secrets file
cat > chezmoi-data.yaml << 'EOF'
github_token: ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
aws_key: AKIAIOSFODNN7EXAMPLE
EOF
# Encrypt with SOPS
sops --encrypt --in-place chezmoi-data.yamlالاستخدام في القوالب
أضف إلى chezmoi.toml:
toml
[data]
[data.secrets]
source = "sops"
path = "chezmoi-data.yaml"الطريقة 3: 1Password CLI
يسترجع 1Password CLI (op) الأسرار في وقت التطبيق دون تخزينها محليًا.
الإعداد
bash
# Install 1Password CLI
brew install --cask 1password-cli # macOS
# Sign in
op signinالاستخدام في قوالب Chezmoi
text
export GITHUB_TOKEN="{{ onepasswordRead "op://Private/GitHub Token/credential" }}"
export NPM_TOKEN="{{ onepasswordRead "op://Development/npm/token" }}"المزايا
- لا تلمس الأسرار القرص أبدًا بدون تشفير.
- مشاركة الفريق من خلال خزائن 1Password.
- دعم التدوير التلقائي.
شبكة أمان ما قبل الالتزام
git-secrets
bash
# Install
brew install git-secrets # macOS
sudo apt install git-secrets # Ubuntu
# Configure for your repo
git secrets --install
git secrets --register-aws
# Add custom patterns
git secrets --add 'ghp_[A-Za-z0-9_]{36}'
git secrets --add 'sk-[A-Za-z0-9]{48}'.gitignore
استبعد دائمًا المسارات الحساسة:
text
# Secrets - never commit
*.age
*.enc
*.key
.sops.yaml
chezmoi-data.yaml
key.txt.chezmoiignore
امنع Chezmoi من إدارة الملفات الحساسة:
text
.ssh/id_*
.gnupg/
.config/chezmoi/key.txtقائمة التدقيق
- [ ] لا توجد أسرار بنص عادي في حالة المصدر:
chezmoi archive | tar -tf - | grep -v '.age' - [ ] مفتاح age غير ملتزم:
git ls-files | grep key.txtلا يُرجع شيئًا - [ ] خطاف git-secrets نشط:
git secrets --scan - [ ] يغطي
.gitignoreالملفات*.ageو*.keyو.sops.yaml - [ ] يمر
dot doctorبدون تحذيرات - [ ] الملفات المشفرة بـ SOPS تُفك تشفيرها بشكل صحيح:
sops --decrypt chezmoi-data.yaml
مختبر على
| المنصة | age | SOPS | 1Password CLI |
|---|---|---|---|
| macOS Sonoma+ | ✅ | ✅ | ✅ |
| Ubuntu 24.04 | ✅ | ✅ | ✅ |
| WSL2 (Ubuntu) | ✅ | ✅ | ⚠️ |