Disable Directory Indexes on Apache2
Tags: linux, apache2, devops, web
Published: 2024-02-20 05:08:40

Pada postingan ini kita akan membahas index pada apache2. Saat kita menjalankan apache web server maka akan di tampilkan halaman defaultnya adalah `index.html`. Kadang kita tidak ingin struktur direktori aplikasi web kita dibaca oleh orang tak berwenang, tentunya dengan alasan keamanan. Untuk itu kita perlu disable indexes pada web server dalam hal ini apache2. Berikut adalah cara untuk disable indexes.

**- htaccess Untuk Web Server**
Kita perlu memodifikasi virtualhost, by default lokasinya ada pada `/etc/apache2/sites-enabled/000-default.conf`.

```
nano /etc/apache2/sites-enabled/000-default.conf
```
Lalu tambahkan seperti ini

```diff
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

+        <Directory /var/www/html>
+               AllowOverride All
+       </Directory>
</VirtualHost>
```
Jika sdah simpan konfigurasi dengan menekan `ctrl+o` dan `enter`.
Berikutnya kita membuat file `.htacccess` di dalam dokumen root directory dari web server kita, by default biasanya diletakan pada `/var/www/html/`, lalu tambahkan syntax berikut 
```
<IfModule mod_autoindex.c>
	Options -Indexes
</IfModule>
```
Jika sudah selesai kit aperlu restart service apache nya

```
systemctl restart apache2
```

**- htaccess Untuk Userdir**
Kadang kita ingin mengaktifkan modul `userdir`, dalam kasus saya biasanya digunakan untuk access file multimedia seperti gambar atau video dari ftp agar dapat di akses dari web browser. Memang banyak cara untuk melakukan hal tersebut, tpi biasanya saya menggunakan userdir untuk konfigurasinya.
Sebelumnya saya sudah pernah bahas bagaimana cara konfigurasu userdir.

- [Activation Userdir Apache2 on Ubuntu 20.04](https://dev.to/seno21/activation-userdir-apache2-on-ubuntu-2004-1223)

Kita bahas bagaimana cara untuk konfigurasi `.htaccess` untuk disable indexes pada `userdir` apache2. Disini saya asumsikan untuk dokumen rootnya di taruh apda `/home/ftpuser/ftp/`.
Maka untuk file .htaccess diletakan di dalam direkrotori tersebut.

```
#nano /home/ftpuser/ftp/.htaccess
```
Lalu isikan dengan syntax berikut

```
<IfModule mod_autoindex.c>
	Options -Indexes
</IfModule>
```
Jika sudah, simpan dengan menekan tombol `ctrl+o` dan `enter`. Lakukan modifikasi pada file konfigurasi untuk mengaktifkannya

```
nano /etc/apache2/sites-enabled/000-default.conf
```
Lakukan modifikasi pada bagian `AllowOverride`, saya beri tanda hijau untuk menambah syntak pada baris tersebut dan merah untuk menghapus syntax pada barisnya, atau kita bisa beri komentar saja.
```diff
<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root

    <Directory /home/*/public_html>
-        AllowOverride FileInfo AuthConfig Limit Indexes
+        AllowOverride All
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        Require method GET POST OPTIONS
    </Directory>
</IfModule>
```
Restart service pada apache2 dengan cara berikut
```
systemctl restart apache2
```
Jika semua sudah dilakukan uji coba dengan menghapus file `index.html`. Seharusnya tidak akan di tampilkan list direktorinya.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b27jrgf4w1ap0d10fgmy.jpeg)

Lalu pastikan bahwa filenya bisa dibuka, dalam contoh saya buka file `info.php`. Karena tidak tampil index direktorinya jadi untuk memanggilnya bisa langsung melalui url, seperti contoh berikut.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1nzpaxj0vtmixqd16hps.jpeg)

Jika semua konfigurasi sesuai, maka akan file tetap bisa di eksekusi sperti biasa.
Selamat mencoba, semoga bermanfaat.