---
title: "Cara Membuat User SFTP yang Hanya Bisa Akses Satu Folder"
description: "Langkah membuat user SFTP terkunci di satu folder dengan ChrootDirectory OpenSSH: grup khusus, izin folder, konfigurasi sshd, dan cara mengujinya."
url: "https://nivelva.com/insight/cara-membuat-user-sftp-hanya-akses-satu-folder"
category: "Server \u0026 Infrastruktur"
tags: ["sftp","openssh","chroot","linux","keamanan server"]
author: "Lucas Tan"
published: "2026-11-11T12:52:00+07:00"
updated: "2026-11-11T12:52:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Membuat User SFTP yang Hanya Bisa Akses Satu Folder

> **Jawaban singkat:** Buat grup khusus SFTP, siapkan folder chroot milik root, lalu tambahkan blok Match Group di sshd_config dengan ChrootDirectory dan ForceCommand internal-sftp. User dalam grup itu hanya bisa mengunggah file ke folder yang ditentukan, tanpa shell dan tanpa melihat isi server lain.

Perlu memberi akses upload file ke desainer, vendor, atau klien, tapi tidak ingin mereka bisa membuka folder lain atau menjalankan perintah di server? Jawabannya adalah user SFTP yang dikurung (chroot) di satu folder. OpenSSH sudah punya fitur ini bawaan, jadi kamu tidak perlu memasang server FTP terpisah.

Hasil akhirnya: user bisa login dengan FileZilla, WinSCP, atau perintah `sftp`, melihat satu folder sebagai "akar", dan tidak bisa naik ke folder di atasnya. Login SSH biasa ditolak. Panduan ini memakai Ubuntu 24.04, tapi langkahnya sama di Debian dan AlmaLinux dengan sedikit beda nama layanan.

## Kenapa folder chroot harus milik root?

Ini aturan yang paling sering membuat percobaan pertama gagal. Dokumentasi `sshd_config` menyebut folder yang dipakai sebagai `ChrootDirectory`, dan semua folder di atasnya, harus dimiliki root dan tidak boleh bisa ditulis oleh user atau grup lain. Kalau aturan ini dilanggar, sshd menolak login dengan pesan "bad ownership or modes for chroot directory" di log.

Akibatnya, user tidak bisa menulis langsung di folder akar chroot. Solusinya, buat subfolder di dalamnya yang dimiliki user tersebut, misalnya `upload`. Struktur yang akan kita buat:

| Path | Pemilik | Izin | Fungsi |
|:--|:--|:--|:--|
| `/srv/sftp` | root:root | 755 | Folder induk semua user SFTP |
| `/srv/sftp/klien1` | root:root | 755 | Akar chroot, terlihat sebagai `/` oleh user |
| `/srv/sftp/klien1/upload` | klien1:sftpusers | 750 | Tempat user menaruh file |

## Langkah membuat user SFTP terkunci

### 1. Buat grup khusus SFTP

```
sudo groupadd sftpusers
```

Semua user yang ingin dikurung cukup dimasukkan ke grup ini. Satu aturan di sshd berlaku untuk semuanya.

### 2. Buat user tanpa akses shell

```
sudo useradd -g sftpusers -d /upload -s /usr/sbin/nologin klien1
sudo passwd klien1
```

Home `/upload` sengaja ditulis relatif terhadap chroot, sehingga setelah login user langsung berada di folder upload. Shell `nologin` memastikan user tidak bisa membuka terminal.

Lebih aman lagi bila memakai SSH key. Untuk itu kamu perlu menaruh `authorized_keys` di lokasi yang bisa dibaca sshd, misalnya dengan opsi `AuthorizedKeysFile` di blok Match. Untuk kebutuhan sederhana dengan klien yang belum terbiasa key, password yang panjang dan unik masih bisa dipakai, ditambah [Fail2ban](https://nivelva.com/insight/fail2ban-blokir-brute-force) untuk menahan tebakan.

### 3. Siapkan folder dengan izin yang benar

```
sudo mkdir -p /srv/sftp/klien1/upload
sudo chown root:root /srv/sftp /srv/sftp/klien1
sudo chmod 755 /srv/sftp /srv/sftp/klien1
sudo chown klien1:sftpusers /srv/sftp/klien1/upload
sudo chmod 750 /srv/sftp/klien1/upload
```

Kalau penjelasan angka izin di atas masih membingungkan, lihat [panduan chmod dan chown](https://nivelva.com/insight/memahami-permission-linux-chmod-chown-bingung).

### 4. Tambahkan aturan di sshd_config

Buka `/etc/ssh/sshd_config`. Pastikan baris Subsystem memakai internal-sftp, karena program sftp-server eksternal tidak tersedia di dalam chroot:

```
Subsystem sftp internal-sftp
```

Lalu tambahkan blok ini di **paling akhir** file. Blok `Match` berlaku sampai akhir file atau sampai ada `Match` berikutnya, jadi pengaturan umum yang ditulis di bawahnya akan ikut terkena.

```
Match Group sftpusers
    ChrootDirectory /srv/sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
    PermitTunnel no
```

`%u` diganti otomatis dengan nama user, sehingga setiap user punya chroot sendiri. `ForceCommand internal-sftp` memaksa sesi apa pun menjadi SFTP, sehingga perintah shell tidak bisa dijalankan meski user mencoba.

### 5. Uji konfigurasi dan muat ulang SSH

Jangan me-restart SSH sebelum konfigurasi dicek, karena kesalahan ketik bisa membuat kamu sendiri terkunci:

```
sudo sshd -t
sudo systemctl restart ssh
```

Di AlmaLinux dan Rocky Linux, nama layanannya `sshd`. Biarkan sesi SSH yang sedang terbuka tetap hidup sampai pengujian selesai.

### 6. Uji dari komputer lain

```
sftp klien1@IP-SERVER
```

Setelah masuk, coba `pwd` (harus `/upload`), `cd ..` lalu `ls` (hanya melihat folder `upload`), dan `put` sebuah file. Lalu coba `ssh klien1@IP-SERVER`, koneksi harus ditolak atau langsung tertutup.

Kalau login gagal, baca log SSH:

```
sudo journalctl -u ssh -n 50
```

Pesan soal "ownership or modes" berarti izin folder chroot belum sesuai langkah 3.

## Menambah user SFTP berikutnya

Setelah aturan Match terpasang, menambah user baru tidak perlu menyentuh sshd lagi. Cukup ulangi langkah 2 dan 3 dengan nama berbeda:

```
sudo useradd -g sftpusers -d /upload -s /usr/sbin/nologin klien2
sudo passwd klien2
sudo mkdir -p /srv/sftp/klien2/upload
sudo chown root:root /srv/sftp/klien2
sudo chmod 755 /srv/sftp/klien2
sudo chown klien2:sftpusers /srv/sftp/klien2/upload
sudo chmod 750 /srv/sftp/klien2/upload
```

Karena sshd membaca keanggotaan grup saat user login, user baru langsung terkena aturan chroot tanpa restart. Simpan perintah di atas sebagai skrip kecil bila kamu sering menambah klien.

## Bagaimana kalau file harus masuk ke folder website?

Sering kali file yang diunggah klien sebenarnya perlu muncul di folder website, misalnya `/var/www/situs/wp-content/uploads`. Jangan menjadikan folder website sebagai chroot, karena aturan kepemilikan root akan bentrok dengan kebutuhan web server.

Cara yang lebih rapi adalah bind mount. Folder website "ditempelkan" ke dalam folder chroot:

```
sudo mkdir -p /srv/sftp/klien1/website
sudo mount --bind /var/www/situs/aset /srv/sftp/klien1/website
```

Agar bertahan setelah reboot, tambahkan baris bind ke `/etc/fstab`. Atur izin folder tujuan supaya user SFTP dan user web server sama-sama punya akses sesuai kebutuhan, misalnya lewat grup bersama.

## Pertanyaan yang sering diajukan

### Apakah user SFTP chroot bisa melihat folder user lain?

Tidak. Dengan ChrootDirectory /srv/sftp/%u, setiap user hanya melihat isi foldernya sendiri dan tidak bisa naik ke /srv/sftp.

### Bisakah memakai FileZilla untuk user ini?

Bisa. Pilih protokol SFTP, bukan FTP, dengan port SSH server kamu. FileZilla akan langsung membuka folder upload.

### Bagaimana mencatat file apa saja yang diunggah?

Tambahkan opsi log ke ForceCommand, misalnya `ForceCommand internal-sftp -l INFO`. Aktivitas seperti membuka dan menulis file akan tercatat di log autentikasi sistem. Bila tidak muncul, cek dulu tingkat log dan fasilitas yang dipakai sshd di servermu.

### Bagaimana mencabut akses user ini?

Kunci akunnya dengan `sudo usermod -L klien1` dan matikan sesi yang aktif, atau hapus user dengan userdel bila tidak dibutuhkan lagi. Folder datanya bisa disimpan atau dihapus terpisah.

Checklist sebelum memberikan akses:

- Folder chroot dan induknya milik root, izin 755
- Subfolder upload milik user SFTP
- Blok Match ada di akhir sshd_config
- `sshd -t` lolos sebelum restart
- Login SSH biasa ditolak, upload SFTP berhasil

## Sumber

- <https://man.openbsd.org/sshd_config>
- <https://man.openbsd.org/sftp-server>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-membuat-user-sftp-hanya-akses-satu-folder
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
