Gaining Superuser Access
Published: 2024-04-15 04:27:32

> **The Superuser**

Sistem operasi Linux memiliki akun pengguna khusus yang sangat kuat, disebut **superuser** (pengguna super) atau **root**. Akun ini memiliki akses penuh ke seluruh sistem dan dapat melakukan apapun.

Akun **root** digunakan untuk mengelola dan administer sistem, seperti instalasi software, pengaturan file dan direktori sistem, dan lain sebagainya. Namun, kekuatan tersebut juga menjadi tanggung jawab yang besar. Jika akun root diretas, pengguna lain bisa mengambil alih kontrol penuh atas sistem.

Direkomendasikan untuk tidak login langsung sebagai **root** melainkan sebagai pengguna biasa. Ketika membutuhkan akses root, Anda dapat menggunakan mekanisme lain (**su**, **sudo**, atau **PolicyKit**) untuk sementara meningkatkan hak akses ke level root.


> **Switching Users**

Perintah **su** di Linux memungkinkan untuk beralih ke akun pengguna lain.

_Menjalankan **su** dari akun pengguna biasa:_
•	Anda akan diminta memasukkan password dari akun yang ingin dituju.
•	Contoh: Beralih dari **user01** ke **user02**.

```
[user01@host ~]$ su - user02
Password: 
[user02@host ~]$ 
```

_Menjalankan **su** tanpa nama pengguna (default):_
•	Ini akan mencoba beralih ke akun **root**.
•	Memerlukan password akun **root**.
```
[user01@host ~]$ su -
Password: 
[root@host ~]#
```
 
_Perbedaan **su** dan **su -**:_
•	**su**: Membuka shell non-login dengan pengaturan lingkungan pengguna yang menjalankan **su**.
•	**su -** (dengan tanda hubung): Membuka shell login dengan pengaturan lingkungan yang seolah-olah Anda baru login sebagai pengguna tujuan.

Dalam kebanyakan kasus, administrator sebaiknya menggunakan **su -** untuk mendapatkan shell dengan pengaturan lingkungan normal pengguna target. Perintah **su** paling sering digunakan untuk mendapatkan antarmuka baris perintah (shell prompt) yang dijalankan sebagai pengguna lain, biasanya **root**. Selain beralih pengguna, perintah **su** dengan opsi **-c** dapat digunakan untuk menjalankan program tertentu sebagai pengguna lain.



> **Menjalankan Perintah dengan Sudo**

Akun pengguna root memiliki kekuatan penuh untuk mengelola sistem. Namun, untuk keamanan, akun root terkadang tidak memiliki password. Akibatnya, pengguna tidak bisa login langsung sebagai root dan perintah su tidak bisa digunakan untuk mendapatkan akses shell interaktif.

_**Sudo** sebagai Alternatif untuk Mendapatkan Akses **Root**_

•	Perintah **sudo** menawarkan solusi untuk menjalankan perintah tertentu dengan hak akses **root**.

•	Berbeda dengan **su**, pengguna yang menggunakan sudo tidak perlu mengetahui password **root**. Mereka cukup memasukkan password mereka sendiri untuk autentikasi.

•	Konfigurasi **sudo** dapat diatur untuk mengizinkan pengguna tertentu menjalankan perintah apapun sebagai pengguna lain, atau hanya beberapa perintah tertentu.

_Keuntungan menggunakan **sudo**:_

•	Semua perintah yang dijalankan dengan **sudo** dicatat di log file **/var/log/secure**. Ini memudahkan pelacakan aktivitas.

•	Di Red Hat Enterprise Linux (RHEL) 7 dan 8, pengguna yang tergabung dalam grup **wheel** secara default bisa menggunakan **sudo** untuk menjalankan perintah apapun, termasuk dengan hak akses **root**.

> **Peringatan:**
> Pada RHEL 6, grup **wheel** tidak memiliki hak akses istimewa secara default. Hal ini berbeda dengan RHEL 7 dan 8. Pastikan Anda memahami konfigurasi sistem untuk menghindari pengguna tidak sah mendapatkan akses **root**.

_Mendapatkan Shell **Root** Interaktif dengan **Sudo**_
Beberapa cara untuk mendapatkan akses **root** sementara menggunakan **sudo**.

•	Dengan **sudo su -**: 

Jika ada akun pengguna biasa yang diizinkan menjalankan **su** dengan **sudo**, maka Anda bisa menggunakan perintah **sudo su -** untuk mendapatkan shell root interaktif. Hal ini karena sudo akan menjalankan **su -** dengan hak akses **root**, dan **root** tidak perlu memasukkan password untuk menggunakan **su**.

•	Dengan **sudo -i** atau **sudo -s**:

**sudo -i**: Perintah ini akan beralih ke akun **root** dan menjalankan shell default pengguna tersebut (biasanya **bash**) beserta skrip login terkait.

**sudo -s**: Perintah ini hanya akan menjalankan shell sebagai **root** tanpa menjalankan skrip login.

_Mengonfigurasi **Sudo**_

Konfigurasi utama untuk **sudo** terletak pada file **/etc/sudoers**. Untuk menghindari masalah ketika beberapa administrator mencoba mengedit file ini secara bersamaan, gunakan perintah khusus **visudo**.

_Contoh Konfigurasi:_

Baris contoh berikut dari file **/etc/sudoers** memberikan akses sudo kepada anggota grup **wheel**:

```
%wheel        ALL=(ALL)       ALL
```
•	**%wheel**: Menandakan grup **wheel**.

•	**ALL=(ALL)**: Grup **wheel** diizinkan menjalankan perintah apapun pada komputer manapun yang memiliki file konfigurasi ini.

•	**ALL**: Grup **wheel** bisa menjalankan perintah tersebut sebagai pengguna lain manapun di sistem.

Secara default, file **/etc/sudoers** juga menyertakan isi dari file-file yang berada di direktori **/etc/sudoers.d**. Hal ini memungkinkan administrator untuk menambah akses **sudo** bagi pengguna dengan mudah. Mereka cukup meletakkan file dengan nama pengguna atau grup tersebut ke dalam direktori **/etc/sudoers.d**.

> **Catatan:** 
> Menggunakan direktori tambahan ini memudahkan dalam mengatur akses sudo. Anda dapat mengaktifkan atau menonaktifkan akses sudo pengguna atau grup hanya dengan menambah atau menghapus file terkait di direktori tersebut.

Membuat file di direktori **/etc/sudoers.d** untuk memberi akses penuh sudo kepada pengguna atau grup tertentu.

_Contoh:_
•	Buat file **/etc/sudoers.d/user01** dengan isi:
```
user01  ALL=(ALL)  ALL
```
untuk memberi akses penuh **sudo** kepada pengguna **user01**.

•	Buat file **/etc/sudoers.d/group01** dengan isi:

```
%group01  ALL=(ALL)  ALL
```
 untuk memberi akses penuh **sudo** kepada grup **group01**.




> **Konfigurasi sudo tanpa password**

Konfigurasi **sudo** memungkinkan pengguna tertentu untuk menjalankan perintah sebagai pengguna lain tanpa perlu memasukkan password.

Ini adalah tindakan yang berisiko tinggi karena bisa memudahkan orang lain untuk mengambil alih kontrol sistem Anda. Sebaiknya dihindari kecuali dalam keadaan tertentu.

```
ansible  ALL=(ALL)  NOPASSWD:ALL
```

Hal ini sering digunakan pada **cloud instance**, **virtual machine**, dan **sistem provisioning** untuk membantu konfigurasi server. Biasanya akun dengan akses ini memiliki perlindungan ketat seperti **SSH public-key authentication**.

_Contoh:_

AMI resmi untuk Red Hat Enterprise Linux di Amazon Web Services Marketplace dikirimkan bersama **root** dan **ec2-user** kata sandi pengguna terkunci. Akun **ec2-user** pengguna diatur untuk memungkinkan akses interaktif jarak jauh melalui otentikasi kunci publik SSH. Pengguna **ec2-user** juga dapat menjalankan perintah apa pun roottanpa kata sandi karena baris terakhir file AMI **/etc/sudoers** diatur sebagai berikut:

```
ec2-user  ALL=(ALL)  NOPASSWD: ALL
```

Persyaratan untuk memasukkan kata sandi untuk **sudo** dapat diaktifkan kembali atau perubahan lain dapat dilakukan untuk memperketat keamanan sebagai bagian dari proses konfigurasi sistem.