Kamis, 04 Desember 2025

Solusi pada Virtual Private Server ubuntu server dalam mengubah izin upload oleh apache

BY Real IN No comments

Karena senang membuat aplikasi aplikasi sederhana ternyata menemukan masalah ketika aplikasi dipublis di publik tidak sesuai dengan yang sudah diruning pada server lokal, bingung juga menemukan permasalahannya, sehingga terbantukan solusinya oleh AI (AI membantu).

Jadi begini permasalahannya, saya punya vps (virtual private server) yang disewa pada salah satu penyedia hosting, vps tersebut saya gunakan untuk berbagai aplikasi yang berjalan pada webserver. vps ini menggunakan sistem Linux Ubuntu Server 20.04 LTE sedangkan layanan web dan databasenya mengunakan apache dan MySQl. 

Salah satu aplikasi yang diupload di webserver  yaitu mengirimkan gambar (upload) gambar yang tidak tersimpan pada direktori/folder yang disediakan, seperti kutipan kode dibawah ini :


$filename   = $_FILES['bukti']['name'];

$tmp_name   = $_FILES['bukti']['tmp_name'];

$type1       = explode('.', $filename);
$type2       = $type1[1];

$newname    = 'bukti' . time() . '.' . $type2;

$tipe_diizinkan = array('jpg', 'jpeg', 'png', 'gif');

if (!in_array($type2, $tipe_diizinkan)) {
    echo '<script>alert("Format file tidak diizinkan"></script>';
} else {
    move_uploaded_file($tmp_name, './bukti/' . $newname);
}

Nah bingung juga awalnya, 

ternyata permasalahannya terdapat pada mengenai izin (permission) dan kode numerik yang umum digunakan untuk file dan direktori pada web server Apache di Ubuntu yang diterapkan pada web server.

Konsep Dasar Linux

Izin di Linux (dan Ubuntu) dibagi menjadi tiga kategori untuk setiap file atau direktori :

  1. Pemilik (Owner): Pengguna yang memiliki file atau direktori tersebut.

  2. Grup (Group): Grup yang memiliki file atau direktori tersebut.

  3. Lainnya (Others): Semua pengguna lain di sistem.

Setiap kategori dapat memiliki tiga jenis izin :

Izin

Deskripsi

Kode Numerik

r (Read)

Membaca isi file, atau daftar isi direktori.

4

w (Write)

Mengubah atau menghapus file, atau menambah/menghapus file dalam direktori.

2

x (Execute)

Menjalankan file (jika itu skrip), atau masuk/menjelajahi direktori.

1

Kode Izin Apache

Izin biasanya direpresentasikan dalam format tiga digit oktal (numerik), di mana setiap digit mewakili izin untuk Pemilik, Grup, dan Lainnya secara berurutan.

1. Izin File (Website Content Files)

File-file seperti HTML, CSS, gambar, atau skrip PHP (kecuali yang perlu dieksekusi secara langsung) umumnya membutuhkan izin :

KategoriIzinKode Numerik
PemilikBaca/Tulis (rw-)6 (4+2+0)
GrupBaca (r--)4 (4+0+0)
LainnyaBaca (r--)4 (4+0+0)

 Kode izin untuk izin 644 (rw-r--r--)

  • Pemilik : dapat membaca dan menulis
  • Grup : hanya dapat membaca
  • Lainnya : hanya dapat membaca
2. Izin Direktori (Website Folder)

Direktori tempat file situs web berada umumnya membutuhkan izin :

KategoriIzinKode Numerik
PemilikBaca/Tulis/Jalankan (rwx)7 (4+2+1)
GrupBaca/Jalankan (r-x)5 (4+0+1)
LainnyaBaca/Jalankan (r-x)5 (4+0+1)
Kode izin untuk direktori : 755 (rwxr-xr-x)
  • Pemilik: Dapat membaca, menulis, dan menjelajahi.
  • Grup (www-data): Dapat membaca dan menjelajahi (untuk mengakses file di dalamnya).
  • Lainnya: Dapat membaca dan menjelajahi.
3. Izin Khusus (Writable Folders)

Untuk direktori yang harus dapat ditulis oleh Apache (misalnya folder upload atau cache), izin untuk grup harus dimodifikasi :

KategoriIzinKode Numerik
PemilikBaca/Tulis/Jalankan (rwx)7 (4+2+1)
GrupBaca/Tulis/Jalankan (rwx)7 (4+2+1)
LainnyaBaca/Jalankan (r-x) atau tanpa akses (---)5 (4+0+1) atau 0 (0+0+0)

Kode Izin untuk Direktori Writable: 775 (rwxrwxr-x) atau 770 (rwxrwx---)

  • 775: Memberikan izin tulis ke grup (www-data) dan baca/jalankan ke lainnya.
  • 770: Lebih aman, hanya memberikan izin tulis ke Pemilik dan Grup (www-data).

Perintah untuk Mengubah Izin dan Kepemilikan

Asumsi www-data adalah user dan group Apache, dan /var/www/html adalah document root

Mengubah Kepemilikan (User dan Group)

Langkah pertama dan paling penting untuk memastikan Apache dapat membaca file.

        sudo chown -R www-data:www-data /var/www/html


Mengubah Izin

Setelah kepemilikan diatur, Anda dapat menerapkan izin yang disarankan:

# Atur izin direktori ke 755 (rwxr-xr-x)

sudo find /var/www/html -type d -exec chmod 755 {} +


# Atur izin file ke 644 (rw-r--r--)

sudo find /var/www/html -type f -exec chmod 644 {} +

 

Izin Khusus untuk Direktori Writable

Jika memiliki folder upload (misalnya /var/www/html/uploads) yang perlu ditulis oleh Apache:

# Atur izin folder uploads ke 775 (rwxrwxr-x)

sudo chmod 775 /var/www/html/uploads


Izin Khusus untuk Direktori Writable

Jika memiliki folder upload (misalnya /var/www/html/uploads) yang perlu ditulis oleh Apache :

# Atur izin folder uploads ke 775 (rwxrwxr-x)

sudo chmod 775 /var/www/html/uploads

Solusi dari permasalahan pada tidak dapat mengupload file gambar ('jpg', 'jpeg', 'png', 'gif') yaitu dengan mengubah izin direktori khusus untuk penyimpanan gambar. 

Dengan memberikan perintah  

#memastikan apache dapat membaca file

 chown -R www-data:www-data /var/www/html/arsip/bukti

#memberikan izin tulis ke Pemilik dan Grup

            chmod -R 770 /var/www/html/arsip/bukti


Nah, setelah memberikan konfigurasi diatas pada terminal server, akhirnya proses upload file gambar di aplikasi yang dibuat berjalan..😁

 


0 komentar:

Posting Komentar