Cara jalankan Claude Code dengan selamat
Ketahui kesan penggunaan flag skip permissions dan cara mengehadkan risiko menggunakan sandbox atau VPS untuk mengelakkan kerosakan sistem pada pelayan anda.
Apa maksud menjalankan Claude Code dengan selamat pada pelayan
Untuk menjalankan Claude Code dengan selamat pada pelayan, biarkan permintaan kebenaran (permission prompts) sentiasa aktif, jalankannya sebagai pengguna tanpa keistimewaan (unprivileged user) yang khusus, dan berikan tugasan tanpa pengawasan (unattended runs) sempadan yang sebenar dan bukannya kepercayaan: sandbox terbina dalam, kontena, atau VPS boleh buang yang tidak menyimpan apa-apa data penting anda. Flag --dangerously-skip-permissions membuang langkah kelulusan antara model dan shell anda. Pertukaran ini boleh diterima untuk kerja tanpa pengawasan, tetapi hanya di dalam sempadan yang mengehadkan capaian jika berlaku arahan yang salah. Panduan ini menjelaskan apa yang sebenarnya diubah oleh flag tersebut, dan cara membina sempadan itu melalui peringkat pengasingan yang semakin meningkat.
Apa yang Claude Code boleh lakukan pada mesin anda
Claude Code ialah ejen pengekodan yang berjalan dalam terminal anda. Ia membaca fail, menulis fail, dan menjalankan arahan shell sebagai pengguna yang memulakannya. Itulah nilai utama alat ini: ia boleh mengklon repositori, menyunting kod, menjalankan ujian, membaca kegagalan, dan membaiki kod dalam satu gelung, tanpa anda perlu menaip setiap arahan. Jika anda belum menetapkannya pada pelayan, menjalankan Claude Code pada VPS dengan tmux merangkumi pemasangan dan pengendalian sesi. Halaman ini merangkumi kuasa yang anda berikan kepadanya setelah ia dipasang.
Risikonya adalah perkara yang sama yang dibaca buat kali kedua. Proses yang menjalankan arahan shell sebagai pengguna anda boleh melakukan apa sahaja yang pengguna anda boleh lakukan. Ia boleh membaca ~/.ssh/id_ed25519, ~/.aws/credentials, dan setiap fail .env yang boleh dibuka oleh pengguna anda. Ia boleh menjalankan curl dan menghantar data ke mana-mana hos yang boleh dicapai oleh pelayan. Ia boleh menjalankan git push --force. Ejen tersebut tidak mempunyai motif sendiri. Bahayanya adalah jika sesuatu tugasan menjadi salah, atau jika teks yang dibacanya semasa bekerja mengandungi arahan yang ditulis oleh orang lain: halaman web yang diambilnya, atau komen dalam isu yang diminta untuk dibaiki. Kes kedua ini dipanggil suntikan prompt (prompt injection), dan itulah sebabnya "model biasanya munasabah" bukanlah satu pelan keselamatan. Anda perlu merancang untuk kegagalan, bukan untuk keadaan purata.
Sistem kebenaran dalam bahasa mudah
Secara lalai, Claude Code akan meminta kebenaran sebelum bertindak. Membaca fail di dalam projek berlaku secara senyap, tetapi menyunting fail atau menjalankan arahan shell akan menunjukkan suntingan atau arahan tepat terlebih dahulu dan menunggu pengesahan "yes". Anda boleh meluluskan satu tindakan, atau meluluskan jenis tindakan tersebut untuk baki sesi tersebut. Kelulusan itu adalah terhad kepada sesi tersebut: tutup CLI, dan sesi seterusnya akan bermula dengan mod berwaspada semula. Untuk peraturan yang ingin anda kekalkan, fail tetapan menyimpan senarai benarkan (allow), tanya (ask), dan deny (deny) yang kekal. Sebagai contoh: benarkan git status, tanya pada git push, deny bacaan .env. Peraturan deny sentiasa diutamakan.
Reka bentuk ini mengandaikan seorang manusia sedang memerhati terminal, dan pada komputer riba, perkara itu benar. Pada pelayan, masalahnya selalunya adalah tiada sesiapa yang memerhati. Anda memulakan tugasan panjang di dalam tmux dan pergi tidur, dan ejen yang berhenti untuk bertanya soalan pada jam 2 pagi tidak akan membuat sebarang kemajuan sehingga pagi. Kelewatan itu memakan kos masa dan wang, kerana sesi Claude Code yang tidak aktif akan kehilangan cache prompt yang hangat dan pusingan seterusnya perlu membayar untuk membina semula cache tersebut. Itulah sebab sebenar orang menggunakan flag skip pada pelayan, dan masalah yang diselesaikan adalah nyata. Bahagian lain panduan ini adalah tentang menyelesaikannya tanpa melepaskan setiap penghadang keselamatan.
Apa yang diubah oleh --dangerously-skip-permissions
claude --dangerously-skip-permissions mematikan langkah kelulusan. Suntingan berlaku tanpa permintaan. Arahan shell dijalankan tanpa permintaan. Semakan laluan dilindungi (protected-path checks) yang biasanya menjaga lokasi sensitif juga akan dilewati. Peraturan deny eksplisit anda masih terpakai, dan beberapa tindakan ekstrem masih akan berhenti untuk bertanya, tetapi ringkasannya adalah: apa sahaja yang diputuskan oleh model untuk dijalankan, akan dijalankan.
Dua fakta tentang flag ini penting pada pelayan. Pertama, ia disekat apabila Claude Code dijalankan sebagai root atau di bawah sudo pada Linux dan macOS, kerana root tanpa permintaan boleh mengubah mana-mana fail atau perkhidmatan pada mesin tersebut. Ejen tersebut tetap memerlukan akaun tanpa keistimewaan sendiri, dan flag ini menguatkuaskannya. Kedua, flag ini tidak mengubah tingkah laku model dalam apa jua cara. Ia mengeluarkan manusia daripada gelung kerja dan tidak mengubah perkara lain, jadi setiap kesilapan yang sepatutnya dikesan oleh prompt kini akan dilaksanakan.
Jadi, inilah pengiraan yang jujur. Jika anda melangkau kebenaran, soalan keselamatan berubah daripada "adakah ejen akan melakukan sesuatu yang buruk" kepada "berapa banyak kerosakan yang boleh dilakukan oleh satu tindakan buruk". Anda berhenti cuba mengawal setiap keputusan dan mula mengawal radius letupan (blast radius). Pengasingan adalah jawapannya, dan ia datang dalam peringkat.
Sandbox Claude Code terbina dalam
Sebelum peringkat tersebut, ketahui bahawa Claude Code kini disertakan dengan sandbox peringkat OS untuk arahan yang dijalankannya, dan ia menghapuskan kebanyakan sebab mengapa orang menggunakan flag skip. Pada Linux, ia menggunakan bubblewrap untuk pengasingan sistem fail, ditambah socat untuk menghalakan trafik rangkaian melalui proxy. Di dalam sandbox, arahan hanya boleh menulis ke direktori projek dan direktori sementara sesi, dan ia hanya boleh mencapai rangkaian melalui proxy yang menyemak setiap domain terhadap senarai benarkan. Kali pertama arahan mahukan domain baharu, Claude Code akan bertanya kepada anda.
Aktifkan ia dengan arahan /sandbox di dalam sesi. Pada Ubuntu dan Debian, pasang dua pakej yang diperlukan terlebih dahulu:
sudo apt install bubblewrap socatPada Ubuntu 24.04 dan versi kemudian, polisi AppArmor lalai menghalang bubblewrap daripada mencipta ruang nama pengguna (user namespaces) yang diperlukan. Panel sandbox akan memberitahu anda jika ada sesuatu yang hilang, dan dokumentasi sandboxing Claude Code mengandungi profil AppArmor ringkas yang membaikinya.
Sandbox mempunyai mod benarkan-automatik (auto-allow mode): arahan sandboxed berjalan tanpa sebarang permintaan, kerana sempadan yang dikuatkuasakan kini melakukan kerja yang dahulunya dilakukan oleh prompt. Arahan yang tidak boleh berjalan di dalam sandbox akan kembali ke aliran kebenaran biasa, jadi tindakan yang benar-benar luar biasa masih akan bertanya. Untuk kebanyakan aliran kerja pelayan, ini adalah pengganti yang betul untuk flag skip, kerana anda mendapat jauh lebih sedikit soalan dengan sempadan yang dikuatkuasakan OS berbanding tiada langsung.
Jujur tentang hadnya. Secara lalai, arahan sandboxed masih boleh membaca sebahagian besar sistem fail, termasuk fail kredensial, melainkan anda menyekat laluan tersebut; tetapan sandbox.credentials wujud khusus untuk tujuan itu. Proxy rangkaian menyemak nama domain dan tidak memeriksa trafik itu sendiri, jadi kebenaran luas seperti github.com masih memberi ruang untuk mengeluarkan data. Docker tidak berfungsi di dalamnya. Sandbox meningkatkan tahap keselamatan dengan banyak. Ia bukan sempadan pengasingan yang lengkap, sebab itulah peringkat di bawah masih penting.
Tangga pengasingan
Tiga peringkat, dalam urutan pengasingan yang meningkat. Pilih peringkat terendah yang sesuai dengan apa yang lain wujud pada mesin tersebut.
Peringkat 1: pengguna tanpa keistimewaan yang khusus. Ejen mendapat akaun sendiri, direktori home sendiri, direktori projek sendiri, dan tiada sudo:
sudo adduser --disabled-password --gecos "" agentSempadan akaun ini menjauhkan ejen daripada fail anda: kunci SSH anda dan setiap projek lain pada mesin tersebut. Ia juga menjadikan flag skip boleh digunakan, memandangkan flag tersebut enggan berjalan sebagai root. Ini adalah prinsip yang sama seperti menjalankan setiap perkhidmatan sebagai pengguna tanpa keistimewaan, yang diaplikasikan kepada ejen. Apa yang peringkat 1 tidak hadkan: rangkaian, dan apa sahaja pada mesin yang boleh dibaca oleh semua orang (world-readable).
Peringkat 2: kontena. Anthropic menerbitkan devcontainer rujukan yang menjalankan Claude Code sebagai pengguna bukan-root, dengan peraturan firewall yang mengehadkan hos yang boleh dicapai oleh ejen, dan kontena yang anda bina sendiri melakukan tugas yang sama. Sistem fail mengecil kepada volum yang anda pasang (mount), dan trafik keluar mengecil kepada apa yang dibenarkan oleh peraturan kontena. Ini adalah peringkat tengah yang betul apabila pelayan menghoskan perkhidmatan lain yang anda pentingkan. Hadnya ialah kontena berkongsi kernel hos, dan satu pemasangan (mount) yang cuai akan membatalkan sempadan tersebut; berikan kontena /var/run/docker.sock dan ia boleh mencapai seluruh hos.
Peringkat 3: VPS khusus. Peringkat terkuat adalah yang paling drastik: berikan ejen satu mesin penuh yang tidak mengandungi apa-apa yang anda pentingkan. Sebuah VPS kecil hanya menelan kos beberapa dolar sebulan. Tetapkannya dengan sepuluh minit pertama dalam runbook VPS baharu, ambil snapshot keadaan bersih, dan biarkan ejen bekerja. Tiada perkara lain wujud di sana. Tiada kunci SSH peribadi, hanya kunci deploy yang terhad kepada satu repositori sahaja. Tiada kredensial awan, tiada data pengeluaran. Apabila sesuatu tugasan gagal, atau apabila anda hanya mahu memulakan semula, pulihkan snapshot tersebut atau musnahkan dan bina semula mesin dalam beberapa minit. Radius letupan hanyalah kos sewaan. Ini adalah tetapan di mana --dangerously-skip-permissions tidak lagi menakutkan, kerana hasil terburuk yang realistik adalah pelayan yang dibina semula dan satu token yang dibatalkan.
Peringkat-peringkat ini bertindan. Ejen sandboxed, yang berjalan sebagai pengguna tanpa keistimewaan, pada VPS boleh buang, hampir tidak memerlukan kos tambahan dan menjadikan kisah kegagalan menjadi membosankan. Membosankan adalah matlamatnya.
Lindungi kredensial
Peraturan yang membiayai segala-galanya yang lain: pengguna ejen tidak boleh membaca rahsia yang milik perkara lain.
Berikan kunci API kepada ejen dan bukan kepada perkara lain. Letakkannya dalam fail milik pengguna ejen dengan mod 600, dan muatkannya apabila shell bermula:
install -m 600 /dev/null /home/agent/claude.env
echo 'export ANTHROPIC_API_KEY=your-key-here' >> /home/agent/claude.env
echo 'source ~/claude.env' >> /home/agent/.bashrcKemudian tutup arah yang satu lagi. Pada Debian dan Ubuntu, direktori home sering dicipta supaya boleh dibaca oleh setiap pengguna pada mesin, jadi ketatkan direktori anda sendiri: chmod 750 /home/youruser. Semak dengan ls -ld /home/* dan baiki apa sahaja yang boleh disenaraikan oleh akaun ejen.
Hadkan setiap token. Token GitHub yang terperinci yang terhad kepada satu repositori, atau kunci deploy bagi setiap repositori, bermakna kredensial yang bocor hanya kehilangan satu projek dan bukan keseluruhan akaun anda. Jika anda menggunakan sandbox, tambahkan tetapan kredensialnya supaya ~/.ssh dan ~/.aws disekat walaupun untuk bacaan. Dan jauhkan kredensial pengeluaran daripada mesin sepenuhnya, kerana ejen tidak boleh membocorkan rahsia yang tidak pernah ada di sana.
Git adalah jaring keselamatan
Setiap perubahan yang dibuat oleh ejen harus boleh disemak dan boleh dikembalikan, dan git memberikan kedua-duanya secara percuma jika ejen bekerja pada satu cabang (branch):
git switch -c agent/refactor-authSemak hasil tugasan selepas itu dengan git diff main...agent/refactor-auth, gabungkan (merge) apa yang baik, dan padamkan cabang tersebut jika tugasan tidak membuahkan hasil. Lindungi cabang utama (main branch) pada bahagian forge, supaya token ejen tidak boleh melakukan push ke sana dan tidak boleh melakukan force-push di mana-mana. Sejarah komit juga berfungsi sebagai log audit tentang apa yang berlaku semasa anda tidur, yang mana ia lebih berharga daripada sebarang jumlah skrol terminal.
Rangkaian adalah sebahagian daripada radius letupan
Ejen boleh menjalankan curl. Ayat itu adalah keseluruhan masalah trafik keluar: apa sahaja yang ejen boleh baca, ia juga boleh hantar ke suatu tempat, dan ejen yang terkena suntikan prompt mungkin melakukannya. Pengguna tanpa keistimewaan biasa tidak mengehadkan perkara ini sama sekali, kerana mana-mana pengguna boleh mencapai apa sahaja yang boleh dicapai oleh pelayan. Sandbox mengehadkannya mengikut domain melalui proxinya. Kontena boleh mengehadkannya dengan peraturan firewall sendiri. VPS khusus mengehadkan apa yang ada untuk dibocorkan dari awal lagi, yang merupakan jawapan paling teguh daripada ketiga-tiga itu.
Jangan cuba selesaikan trafik keluar dengan ufw sahaja. ufw membenarkan semua trafik keluar secara lalai, dan menulis peraturan keluar yang masih membenarkan apt, npm, git, dan API Claude adalah kerja yang rumit yang boleh gagal secara senyap. Pilih sempadan pada peringkat sandbox, kontena, atau mesin sebagai ganti, di mana senarai benarkan domain atau mesin kosong melakukan tugas yang sama dengan kemas.
Jika anda membina ejen anda sendiri menggunakan API dan bukannya menjalankan Claude Code, pemikiran yang sama terpakai tanpa perubahan. Membina ejen AI dengan Claude pada VPS merangkumi laluan tersebut, dan ejennya layak mendapat pengguna khusus yang sama, token terhad yang sama, dan mesin boleh buang yang sama.
Kukuhkan mesin terlebih dahulu
Mana-mana peringkat yang anda pilih, mesin itu sendiri masih memerlukan asas sebelum ejen berpindah masuk: hanya kunci SSH, tiada log masuk root, firewall deny-lalai (default-deny), kemas kini keselamatan automatik. Jana senarai semak anda di sini dan laksanakan sekali gus:
FAQ
Adakah --dangerously-skip-permissions selamat digunakan pada pelayan?
Tidak secara bersendirian. Flag tersebut membuang setiap permintaan kelulusan, jadi arahan buruk pertama akan dijalankan sebaik sahaja model menghasilkannya. Ia menjadi pertukaran yang boleh diterima apabila radius letupan dikawal: sekurang-kurangnya pengguna tanpa keistimewaan yang khusus, dan untuk kerja tanpa pengawasan yang sebenar, sebuah kontena atau VPS boleh buang yang hanya menyimpan satu projek dan satu token terhad. Jangan sesekali menggunakannya pada mesin yang menyimpan kredensial pengeluaran atau data yang anda tidak boleh hilangkan.
Adakah Claude Code mempunyai sandbox?
Ya. Claude Code disertakan dengan sandbox terbina dalam untuk arahan shell, yang dibuka dengan arahan /sandbox. Ia menggunakan bubblewrap pada Linux dan Seatbelt pada macOS, mengehadkan penulisan ke direktori projek, dan menghalakan akses rangkaian melalui proxy yang hanya membenarkan domain yang diluluskan. Mod benarkan-automatiknya menjalankan arahan sandboxed tanpa permintaan, jadi ia mengurangkan gangguan seperti mana flag skip melakukannya sambil mengekalkan sempadan yang dikuatkuasakan OS. Ia bukan sempadan pengasingan yang lengkap, jadi pasangkan ia dengan pengguna khusus atau mesin khusus untuk tugasan tanpa pengawasan.
Mengapa flag skip enggan berjalan sebagai root?
Kerana root tanpa permintaan kebenaran boleh mengubah mana-mana fail dan mana-mana perkhidmatan pada sistem, Claude Code menyekat --dangerously-skip-permissions apabila ia berjalan sebagai root atau di bawah sudo pada Linux dan macOS. Penyelesaiannya bukanlah dengan melawan semakan tersebut. Cipta pengguna tanpa keistimewaan untuk ejen dan jalankannya di sana; sempadan akaun itu adalah lapisan pengasingan pertama dan termurah.
Bolehkah Claude Code membaca kunci SSH dan fail .env saya?
Ia boleh membaca apa sahaja yang boleh dibaca oleh pengguna yang menjalankannya, dan polisi lalai sandbox juga membenarkan bacaan pada laluan kredensial sehingga anda menyekatnya. Jadi jalankan ejen sebagai penggunanya sendiri, kekalkan direktori home anda pada mod 750 atau lebih ketat, deny laluan kredensial dalam tetapan sandbox, dan jauhkan rahsia pengeluaran daripada mesin sepenuhnya. Rahsia yang tidak pernah ada pada mesin tidak boleh dibaca atau dibocorkan.
Apakah cara paling selamat untuk menjalankan Claude Code tanpa pengawasan?
Sebuah VPS khusus yang murah yang hanya digunakan untuk kerja ejen: dikukuhkan dalam sepuluh minit, diambil snapshot bersih, menjalankan Claude Code di bawah pengguna tanpa keistimewaan dengan sandbox diaktifkan, fail mod-600 yang memegang kunci API, kunci deploy bagi setiap repositori, dan semua kerja pada cabang yang anda semak sebelum menggabungkannya. Jika sesuatu tugasan gagal, anda hanya perlu membatalkan satu token dan memulihkan snapshot tersebut, dan tiada perkara lain milik anda yang terjejas.