Claude Code, Cursor, Gemini CLI, Copilot CLI veya başka bir AI kodlama asistanı rdc komutunu yönettiğinde, CLI onu klavye başındaki bir insandan farklı ele alır. Bu sayfa ajanın yapabileceklerini, yapamayacaklarını ve ajan koruma önlemlerini atlatmaya çalışsa bile bunların nasıl geçerli kaldığını açıklar.
Hızlı başvuru: ajanların yapabileceği ve yapamayacağı işlemler
| İşlem | Ajan varsayılanı | Belirli bir kullanım durumu için nasıl açılır |
|---|---|---|
rdc config show (gizlenmiş) | ✅ allowed | |
rdc config field get --pointer <pointer> (gizlenmiş taslak veya özet) | ✅ allowed | |
rdc config field get --pointer <pointer> --digest | ✅ allowed | |
rdc config field set --pointer <pointer> (genel alan) | ✅ allowed | |
rdc config field set --pointer <pointer> (hassas alan, doğru --current ile) | ✅ allowed | |
rdc config edit --dump (gizlenmiş JSONC) | ✅ allowed | |
rdc config audit {log, tail, verify} | ✅ allowed | |
rdc config field set --pointer <pointer> (hassas alan, --current olmadan) | 🔴 refused | --current "<eski değer>" sağlayın |
rdc config field get --pointer <pointer> --reveal | 🔴 refused | Bunun yerine --digest kullanın |
rdc config show --reveal | 🔴 refused | Düz rdc config show kullanın |
rdc config edit (etkileşimli düzenleyici) | 🔴 refused | İnsan, ajanı başlatmadan önce REDIACC_ALLOW_CONFIG_EDIT=* ayarlar |
rdc config edit --apply <file> | 🔴 refused | Aynı geçersiz kılma |
rdc config field rotate --pointer <pointer> | 🔴 refused | Aynı geçersiz kılma; etkileşimli onay kullanır |
rdc term connect -m <machine> (doğrudan makine SSH) | 🔴 refused | Önce bir repo forkla ve fork’a bağlan |
Bir ajana reddedilen her şey outcome: refused ve bir gerekçeyle denetim kaydına yazılır.
Ajanlar nasıl tespit edilir
CLI bir işlemi ajan olarak değerlendirirken şu koşullardan herhangi birinin doğru olması yeterlidir:
REDIACC_AGENT,CLAUDECODE,GEMINI_CLI,COPILOT_CLIdeğişkenlerinden biri"1"olarak ayarlanmış ya daCURSOR_TRACE_IDherhangi bir değerle ayarlanmış.- Linux’ta: soy ağacındaki herhangi bir üst işlem bu değişkenlerden birini kendi ortamında barındırıyorsa ((
/proc/<pid>/environüzerinden). Ajanenv -iveya sarmalayıcı bir betikle kendi değişkenlerini kaldırsa bile üst zincir CLI’a kimin başlattığını söyler.
Tespit işlem başına bir kez çalışır ve önbelleğe alınır. Devre dışı bırakılamaz.
Bilgi kapısı modeli
Hassas değişiklikler passwd(1) kuralına uyar: bir sırrı değiştirmek için onu önceden bildiğinizi kanıtlayın.
/credentials/cfDnsApiTokenadresinde saklanan bir API token’ını döndürmek istiyorsunuz?- CLI sorar: “mevcut değer nedir?”
- Ajan düz metni
--current "$OLD"aracılığıyla sağlar. CLI$OLDdeğerini SHA-256 ile hashler ve şu anda saklanan değerin özeti ile karşılaştırır. Eşleşme → yazma işlemi gerçekleşir. Uyumsuzluk → reddedilir, denetlenir.
Model basit ama üç saldırı yüzeyini kapatır:
- Sessiz rotasyon:
$OLDdeğerine önceden erişimi olmayan bir ajan onu kendi seçtiği bir değerle değiştiremez. - Araştırma yoluyla sızdırma: özet yanıtı asla düz metin içermez; ele geçirilmiş bir denetim kaydı bile
expected abc12345…, got deadbeef…gösterir, altta yatan değerleri değil. - Kullanıcı yapılandırmasının yanlışlıkla üzerine yazılması: her seferinde kasıtlı
--currentgerektirir;setişleminde otomatik üzerine yazma yoktur.
Uygulamalı örnek
# Gizleme taslağının kısa özetini alma (ajanlar için güvenli).
$ rdc config field get --pointer /credentials/cfDnsApiToken
{"pointer": "/credentials/cfDnsApiToken", "value": "<redacted:secret>:abc12345"}
# Kanıt olmadan üzerine yazmayı deneme: reddedildi.
$ rdc config field set --pointer /credentials/cfDnsApiToken --new '"agent-picked-value"'
✗ Precondition failed: sensitive path requires --current (or --rotate-secret)
# Mevcut düz metni sağlama: izin verildi.
$ rdc config field set --pointer /credentials/cfDnsApiToken \
--current "$OLD_CF_TOKEN" \
--new "$NEW_CF_TOKEN"
Set /credentials/cfDnsApiToken
Ajan hiç $OLD_CF_TOKEN değerine sahip olmadıysa ön koşulu karşılayamaz ve rotasyon reddedilir. Sahip olan kullanıcı bunu yine de düzenleyici aracılığıyla veya kabuğundan --current geçirerek yapabilir.
Varsayılan olarak gizleme
Hassas durumu okuyan her rdc komutu: config show, config field get, config machine list, config edit --dump: gizli alanlar için düz metin yerine gizleme taslakları döndürür:
"sshKey": "<redacted:credential>:9f3a2c1b"
"cfDnsApiToken":"<redacted:secret>:abc12345"
"storages.s3-prod.vaultContent": "<redacted:secret>:1f2e3d4c"
Taslağın 8 karakterli onaltılık soneki sha256(canonicalize(value)) değerinin ilk 8 karakteridir: bir bakışta iki farklı değeri ayırt etmeye yeterli, tersine çevirmeye yeterli değil. Ajan bir taslak kullanarak değeri hiç görmeden değişip değişmediğini takip edebilir.
--reveal etkileşimli bir TTY’deki insanlar için gizlemeyi kaldırır. Ajanlar TTY durumundan bağımsız olarak reddedilir. Her verilen izin reveal_granted denetim kaydı yazar; her red, aktörün ajan sinyalleri eklenmiş refused kaydı yazar.
REDIACC_ALLOW_CONFIG_EDIT geçersiz kılma
Etkileşimli düzenleyici, --apply, field rotate gibi bazı işlemler insanlar için vardır ve ajan için güvenli bir yol sunmaz. Bir ajanın bunlardan birini yapmasını etkin olarak istiyorsanız şunu ayarlarsınız:
export REDIACC_ALLOW_CONFIG_EDIT='*' # tam atlama
# veya
export REDIACC_ALLOW_CONFIG_EDIT='/credentials/ssh/privateKey,/infra/cfDnsZoneId'
# (virgülle ayrılmış kapsam globları: segment başına * joker karakterlere izin verilir)
…ve ajan bunu devralır.
Kritik ayrıntı: geçersiz kılma, soy zincirinde ajanın üstündeki bir işlemde görünmelidir. Ajan bunu kendi ortamına (ya da oluşturduğu bir alt kabukta) ayarlarsa CLI reddeder ve size bunu bildirir:
Interactive editor is blocked in agent environments (REDIACC_ALLOW_CONFIG_EDIT was set but ancestry verification failed: the override must be set by your shell, not by an agent).
Efekt: bir ajan oturum ortasında export REDIACC_ALLOW_CONFIG_EDIT='*' çalıştırarak bir koruma önlemini aşamaz. Yalnızca bir üst işlem (ajanı başlatmadan önce terminalinizdeki siz) o kapıyı açabilir.
Denetim kaydı
Her değişiklik, her red, her --reveal izni ~/.config/rediacc/audit.log.jsonl dosyasına (mod 0600, 10 MB’ta döndürülür) bir JSONL satırı yazar. Her satır karma ile zincirlenmiştir: prevHash alanı sha256("<önceki satır>") değeridir. Herhangi bir satırı değiştirmek, sonraki tüm satırlarda zinciri bozar.
{"ts":"2026-04-21T10:02:47.831Z","actor":{"kind":"agent","agentSignals":["CLAUDECODE"]},"command":"config field set","paths":["/credentials/cfDnsApiToken"],"outcome":"ok","configId":"...","configVersion":48,"prevHash":"sha256:9f3a..."}
{"ts":"2026-04-21T10:02:51.114Z","actor":{"kind":"agent","agentSignals":["CLAUDECODE"]},"command":"config edit","paths":[],"outcome":"refused","reason":"agent without REDIACC_ALLOW_CONFIG_EDIT=*","prevHash":"sha256:abc1..."}
{"ts":"2026-04-21T10:03:05.220Z","actor":{"kind":"human"},"command":"config show --reveal","paths":[],"outcome":"reveal_granted","configId":"...","configVersion":48,"prevHash":"sha256:deac..."}
İnceleme
# Son kayıtları listele
rdc config audit log --since 24h
# İşaretçi globuna göre filtrele
rdc config audit log --path '/credentials/*'
# Yalnızca ajandan kaynaklanan kayıtlar
rdc config audit log --actor agent
# Yeni kayıtları canlı akış (durdurmak için Ctrl+C)
rdc config audit tail
# Karma zincirinin bozulmadığını doğrula
rdc config audit verify
# → "Chain integrity verified across 247 entries."
# VEYA
# → "Chain broken at line 103: file has been tampered with or corrupted."
Denetim kaydında asla görünmeyenler
- Düz metin sır değerleri
- Parolalar, tokenlar, SSH anahtarları
--currentön koşul uyumsuzluğunda eski/yeni değerler (yalnızca 8 karakterlik özet öneki)
Kayıt, bir güvenlik denetçisiyle paylaşmak veya bir hata raporuna eklemek için güvenlidir.
Davranış modelinin sınırları
Ajan koruma önlemleri davranışsaldır, kriptografik değil. Yapılandırma dosyasıyla aynı UID altında çalışan kararlı veya yönlendirilmiş bir ajan her zaman cat ~/.config/rediacc/rediacc.json yaparak düz metni okuyabilir, çünkü dosya işlem tarafından okunabilir.
Gerçek kriptografik zorunluluk için şifreli yapılandırma deposunu kullanın: sırlar sunucu tarafında yaşar, her hassas alan alan başına bir HMAC taahhüdü taşır ve hesap çalışanı depolananla karma eşleşmesi yapmayan --current ön koşullu yazmaları reddeder. Sunucu hiçbir zaman düz metni görmez: sıfır bilgi: ama kapıyı zorlar.
Yerel dosya yolu “kolay yol güvenlidir”. Uzak depo yolu “zor yol da zordur”.
Hızlı tarifler
Bir ajana tek bir bulut tokenını döndürme izni verme
# Siz olarak, ajanı başlatmadan önce:
export REDIACC_ALLOW_CONFIG_EDIT='/credentials/cfDnsApiToken'
claude-code # ya da cursor, gemini vb.
Artık ajan config field rotate /credentials/cfDnsApiToken --new … çalıştırabilir ama /credentials/ssh/privateKey alanını düzenleyemez veya etkileşimli düzenleyiciyi açamaz.
Bir ajana geniş kapsamlı bir yapılandırma düzenleme oturumuna izin verme
export REDIACC_ALLOW_CONFIG_EDIT='*'
claude-code
Ajan rdc config edit açabilir, --reveal kullanabilir ve field rotate çalıştırabilir. Her işlem yine de actor.kind: agent ve CLAUDECODE sinyaliyle denetim kaydına yazılır.
Bir ajanın hangi alanları değiştirebileceğini keşfetme
rdc config field list --sensitive --output json
Her işaretçi şablonunu, türünü (secret / credential / pii / identifier) ve sunucu tarafındaki HMAC zarfına dahil edilip edilmediğini döndürür.
Ayrıca bakınız
- AI Ajan Entegrasyonuna Genel Bakış: üst düzey tur
- Claude Code kurulumu: entegrasyon şablonu
- JSON çıktı zarfı: makine tarafından okunabilir yanıtlar
- Şifreli yapılandırma deposu: sunucu tarafı kriptografik zorunluluk
- Hesap güvenliği: operatör odaklı güvenlik duruşu