Bab 4. Kontrol akses dan autentikasi

# Bab 4. Kontrol akses dan autentikasi

Ketika seseorang (atau program) meminta akses ke sistem, otentikasi menegaskan identitas menjadi yang tepercaya.

| Awas
Kesalahan konfigurasi PAM dapat mengunci Anda keluar dari sistem Anda sendiri. Anda harus memiliki CD penyelamatan yang berguna atau mengatur partisi boot alternatif. Untuk memulihkan, boot sistem dengan mereka dan memperbaiki hal-hal dari sana.

## 4.1. Autentikasi Unix normal

Otentikasi Unix normal disediakan oleh modul pam_unix(8) di bawah PAM (Pluggable Authentication Modules). 3 berkas konfigurasi penting, dengan "`:`" yang memisah entri, adalah sebagai berikut.

Tabel 4.1. 3 berkas konfigurasi penting untuk pam_unix(8)

berkas | izin | pengguna | kelompok | deskripsi
--- | --- | --- | --- | ---
`/etc/passwd` | `-rw-r--r--` | `root` | `root` | (tersanitasi) informasi akun pengguna
`/etc/shadow` | `-rw-r-----` | `root` | `shadow` | informasi akun pengguna yang aman
`/etc/group` | `-rw-r--r--` | `root` | `root` | informasi grup

"`/etc/passwd`" berisi yang berikut ini.

     ...
    user1:x:1000:1000:User1 Name,,,:/home/user1:/bin/bash
    user2:x:1001:1001:User2 Name,,,:/home/user2:/bin/bash
     ...

Seperti yang dijelaskan dalam passwd(5), masing-masing entri yang dipisah "`:`" dari berkas ini berarti sebagai berikut.

- Nama log masuk

- Entri spesifikasi kata sandi

- ID pengguna numerik

- ID grup numerik

- Nama pengguna atau kolom komentar

- Direktori home milik pengguna

- Interpreter perintah pengguna opsional

Entri kedua "`/etc/passwd`" digunakan untuk entri kata sandi terenkripsi. Setelah pengenalan "`/etc/shadow`", entri ini digunakan untuk entri spesifikasi kata sandi.

Tabel 4.2. Konten entri kedua dari "`/etc/passwd`"

isi | arti
--- | ---
(kosong) | akun tanpa kata sandi
x | kata sandi terenkripsi ada di "`/etc/shadow`"

"`/etc/shadow`" berisi yang berikut.

     ...
    user1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7:::
    user2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7:::
     ...

Seperti yang dijelaskan dalam shadow(5), masing-masing entri yang dipisah "`:`" dari berkas ini berarti sebagai berikut.

- Nama log masuk

- Kata sandi terenkripsi ("`$1$`" di awal menunjukkan penggunaan enkripsi MD5. "*" menunjukkan tidak diizinkan login.)

- Tanggal perubahan kata sandi terakhir, dinyatakan sebagai cacah hari sejak 1 Januari 1970

- Berapa hari pengguna harus menunggu sebelum dia diizinkan untuk mengubah kata sandinya lagi

- Cacah hari yang setelah itu pengguna harus mengubah kata sandinya

- Cacah hari sebelum kata sandi akan kedaluwarsa di mana pengguna harus diperingatkan

- Cacah hari setelah kata sandi kedaluwarsa di mana kata sandi masih harus diterima

- Tanggal kedaluwarsa akun, dinyatakan sebagai cacah hari sejak 1 Januari 1970

- …

"`/etc/group`" berisi yang berikut ini.

    group1:x:20:user1,user2

Seperti yang dijelaskan dalam group(5), masing-masing entri yang dipisah "`:`" dari berkas ini berarti sebagai berikut.

- Nama grup

- Kata sandi terenkripsi (tidak benar-benar digunakan)

- ID grup numerik

- daftar nama pengguna yang dipisah ","

| Catatan
"`/etc/gshadow`" menyediakan fungsi yang serupa dengan "`/etc/shadow`" untuk "`/etc/group`" namun tidak benar-benar digunakan.

| Catatan
Keanggotaan grup pengguna yang sebenarnya dapat ditambahkan secara dinamis jika baris "`auth optional pam_group.so`" ditambahkan ke "`/etc/pam.d/common-auth`" dan menatanya dalam "`/etc/security/group.conf`". Lihat pam_group(8).

| Catatan
Paket `base-passwd` berisi daftar otoritatif pengguna dan grup: "`/usr/share/doc/base-passwd/users-and-groups.html`".

## 4.2. Mengelola informasi akun dan kata sandi

Berikut adalah beberapa perintah penting untuk mengelola informasi akun.

Tabel 4.3. Daftar perintah untuk mengelola informasi akun

perintah | fungsi
--- | ---
`getent passwd user_name` | menelusuri informasi akun "`user_name`"
`getent shadow user_name` | menelusuri informasi akun ter-shadow "`nama_pengguna`"
`getent group group_name` | menelusuri informasi grup "`nama_grup_`"
`passwd` | mengelola kata sandi untuk akun
`passwd -e` | mengatur kata sandi satu kali untuk aktivasi akun
`chage` | mengelola informasi pembatasan umur kata sandi

Anda mungkin perlu memiliki hak istimewa root agar beberapa fungsi dapat bekerja. Lihat crypt(3) untuk enkripsi data dan kata sandi.

| Catatan
Pada sistem yang disiapkan dengan PAM dan NSS sebagai mesin salsa Debian, konten lokal "`/etc/passwd`", "`/etc/group`", dan "`/etc/shadow`" tidak dapat digunakan secara aktif oleh sistem. Perintah di atas berlaku bahkan di bawah lingkungan tersebut.

## 4.3. Kata sandi yang baik

Saat membuat akun selama instalasi sistem Anda atau dengan perintah passwd(1), Anda harus memilih kata sandi yang baik yang terdiri dari setidaknya 6 hingga 8 karakter termasuk satu atau lebih karakter dari masing-masing set berikut sesuai dengan passwd(1).

- Alfabet huruf kecil

- Digit 0 sampai 9

- Tanda baca

| Awas
Jangan memilih kata-kata yang bisa ditebak untuk kata sandi. Nama akun, nomor jaminan sosial, nomor telepon, alamat, ulang tahun, nama anggota keluarga atau hewan peliharaan Anda, kata-kata kamus, urutan karakter sederhana seperti "12345" atau "qwerty", ... Ini adalah pilihan yang buruk untuk kata sandi.

## 4.4. Membuat kata sandi terenkripsi

Ada alat independen untuk menghasilkan kata sandi terenkripsi dengan salt.

Tabel 4.4. Daftar alat untuk menghasilkan kata sandi

paket | popcon | ukuran | perintah | fungsi
--- | --- | --- | --- | ---
`whois` | V:23, I:208 | 384 | `mkpasswd` | front end dengan fitur berlebih untuk pustaka crypt(3)
`openssl` | V:847, I:996 | 2532 | `openssl passwd` | menghitung hash kata sandi (OpenSSL). `passwd`(1ssl)

## 4.5. PAM dan NSS

Sistem mirip Unix modern seperti sistem Debian menyediakan mekanisme PAM (Pluggable Authentication Modules) dan NSS (Name Service Switch) ke administrator sistem lokal untuk mengonfigurasi sistemnya. Peran ini dapat diringkas sebagai berikut.

- PAM menawarkan mekanisme otentikasi fleksibel yang digunakan oleh perangkat lunak aplikasi sehingga melibatkan pertukaran data kata sandi.

- NSS menawarkan mekanisme layanan nama fleksibel yang sering digunakan oleh pustaka standar C untuk mendapatkan nama pengguna dan grup untuk program seperti ls(1) dan id(1).

Sistem PAM dan NSS ini perlu dikonfigurasi secara konsisten.

Paket penting dari sistem PAM dan NSS adalah sebagai berikut.

Tabel 4.5. Daftar sistem PAM dan NSS yang terkenal

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`libpam-modules` | V:941, I:1000 | 891 | Pluggable Authentication Modules (layanan dasar)
`libpam-ldapd` | V:7, I:14 | 79 | Pluggable Authentication Modules yang memungkinkan antarmuka LDAP
`libpam-systemd` | V:738, I:966 | 777 | Pluggable Authentication Modules untuk mendaftarkan sesi pengguna bagi `logind`
`libpam-doc` | I:7.1 | 1491 | Pluggable Authentication Modules (dokumentasi dalam html dan teks)
`libc6` | V:940, I:999 | 5355 | Pustaka C GNU: Pustaka bersama yang juga menyediakan layanan "Name Service Switch"
`glibc-doc` | I:5.5 | 3836 | Pustaka C GNU: Halaman man
`glibc-doc-reference` | I:3.3 | 14261 | Pustaka C GNU: Manual referensi dalam format info, pdf, dan html (non-free)
`libnss-mdns` | V:271, I:505 | 142 | Modul NSS untuk resolusi nama DNS Multicast
`libnss-ldapd` | V:8, I:17 | 131 | Modul NSS untuk menggunakan LDAP sebagai layanan penamaan

- "The Linux-PAM System Administrators' Guide" (Panduan Administrator Sistem Linux-PAM) dalam `libpam-doc` sangat penting untuk mempelajari konfigurasi PAM.

- Bagian "System Databases and Name Service Switch" (Basis Data Sistem dan Sakelar Layanan Nama) di `glibc-doc-reference` sangat penting untuk mempelajari konfigurasi NSS.

| Catatan
Anda dapat melihat daftar yang lebih luas dan terkini dengan perintah "`aptitude search 'libpam-|libnss-'`". Akronim NSS juga bisa berarti "Network Security Service" yang berbeda dari "Name Service Switch".

| Catatan
PAM adalah cara paling dasar untuk menginisialisasi variabel lingkungan bagi setiap program dengan nilai baku seluruh sistem.

Di bawah systemd, paket `libpam-systemd` dipasang untuk mengelola login pengguna dengan mendaftarkan sesi pengguna dalam hirarki grup kontrol `systemd` untuk logind. Lihat systemd-logind(8), logind.conf(5), dan pam_systemd(8).

### 4.5.1. Berkas konfigurasi yang diakses oleh PAM dan NSS

Berikut adalah beberapa berkas konfigurasi penting yang diakses oleh PAM dan NSS.

Tabel 4.6. Daftar berkas konfigurasi yang diakses oleh PAM dan NSS

berkas konfigurasi | fungsi
--- | ---
`/etc/pam.d/program_name` | menyiapkan konfigurasi PAM untuk program "`nama_program`"; lihat pam(7) dan pam.d(5)
`/etc/nsswitch.conf` | menyiapkan konfigurasi NSS dengan entri untuk setiap layanan. Lihat nsswitch.conf(5)
`/etc/nologin` | membatasi login pengguna dengan modul pam_nologin(8)
`/etc/securetty` | membatasi tty untuk akses root oleh modul pam_securetty(8)
`/etc/security/access.conf` | menetapkan batas akses dengan modul pam_access(8)
`/etc/security/group.conf` | mengatur pengekangan berbasis grup oleh modul pam_group(8)
`/etc/security/pam_env.conf` | mengatur variabel lingkungan dengan modul pam_env(8)
`/etc/environment` | mengatur variabel lingkungan tambahan dengan modul pam_env(8) dengan argumen "`readenv=1`"
`/etc/default/locale` | mengatur lokal dengan modul pam_env(8) memakai argumen "`readenv=1 envfile=/etc/default/locale`" (Debian)
`/etc/security/limits.conf` | mengatur pengekangan sumber daya (ulimit, core, …) oleh modul pam_linits(8)
`/etc/security/time.conf` | mengatur pengekangan waktu oleh modul pam_time(8)
`/etc/systemd/logind.conf` | mengatur konfigurasi manajer login `systemd` (lihat logind.conf(5) dan systemd-logind.service(8))

Pembatasan pemilihan kata sandi dilaksanakan oleh modul PAM, pam_unix(8) dan pam_cracklib(8). Mereka dapat dikonfigurasi oleh argumen mereka.

| Tip
Modul PAM menggunakan akhiran "`.so`" untuk nama berkas mereka.

### 4.5.2. Manajemen sistem terpusat modern

Manajemen sistem terpusat modern dapat digelar memakai server Lightweight Directory Access Protocol (LDAP) terpusat untuk mengelola banyak sistem mirip Unix dan non-Unix di jaringan. Implementasi open source dari Lightweight Directory Access Protocol adalah Perangkat Lunak OpenLDAP.

Server LDAP menyediakan informasi akun melalui penggunaan PAM dan NSS dengan paket `libpam-ldapd` dan `libnss-ldapd` untuk sistem Debian. Beberapa tindakan diperlukan untuk mengaktifkan ini (Saya belum menggunakan penyiapan ini dan berikut ini adalah informasi sekunder murni. Silakan baca ini dalam konteks ini).

- Anda menyiapkan server LDAP terpusat dengan menjalankan program seperti daemon LDAP yang berdiri sendiri, slapd(8).

- Anda mengubah berkas konfigurasi PAM di direktori "`/etc/pam.d/`" untuk menggunakan "`pam_ldap.so`" alih-alih baku "`pam_unix.so`".

- Anda mengubah konfigurasi NSS dalam berkas "`/etc/nsswitch.conf`" untuk menggunakan "`ldap`" alih-alih baku ("`compat`" atau "`file`").

- Anda harus membuat `libpam-ldapd` untuk menggunakan koneksi SSL (atau TLS) bagi keamanan kata sandi.

- Anda dapat membuat `libnss-ldapd` menggunakan koneksi SSL (atau TLS) untuk memastikan integritas data dengan beban overhead jaringan LDAP.

- Anda harus menjalankan nscd(8) secara lokal untuk menyinggahkan hasil pencarian LDAP agar mengurangi lalu lintas jaringan LDAP.

Lihat dokumentasi di nsswitch.conf(5), pam.conf(5), ldap.conf(5), dan "`/usr/share/doc/libpam-doc/html/`" dari paket `libpam-doc` dan "`info libc 'Name Service Switch'`" dari paket `glibc-doc` package.

Demikian pula, Anda dapat mengatur sistem terpusat alternatif dengan metode lain.

- Integrasi pengguna dan grup dengan sistem Windows.

  - Mengakses layanan domain Windows dengan paket `winbind` dan `libpam_winbind`.

  - Lihat winbindd(8) dan Mengintegrasikan Jaringan MS Windows dengan Samba.

- Integrasi pengguna dan grup dengan sistem warisan mirip Unix.

  - Mengakses NIS (awalnya disebut YP) atau NIS+ dengan paket `nis`.

  - Lihat Linux NIS(YP)/NYS/NIS+ HOWTO.

### 4.5.3. "Mengapa GNU su tidak mendukung kelompok wheel"

Ini adalah frasa terkenal di bagian bawah halaman "`info su`" lama oleh Richard M. Stallman. Tidak perlu khawatir: perintah `su` saat ini di Debian menggunakan PAM, sehingga seseorang dapat membatasi kemampuan untuk menggunakan `su` ke grup `root` dengan mengaktifkan baris dengan "`pam_wheel.so`" dalam "`/etc/pam.d/su`".

### 4.5.4. Aturan kata sandi yang lebih ketat

Memasang paket `libpam-cracklib` memungkinkan Anda untuk memaksa aturan kata sandi yang lebih ketat.

Pada sistem GNOME umum yang secara otomatis memasang `libpam-gnome-keyring`, "`/etc/pam.d/common-password`" terlihat seperti:

    # here are the per-package modules (the "Primary" block)
    password	requisite			pam_cracklib.so retry=3 minlen=8 difok=3
    password	[success=1 default=ignore]	pam_unix.so obscure use_authtok try_first_pass yescrypt
    # here's the fallback if no module succeeds
    password	requisite			pam_deny.so
    # prime the stack with a positive return value if there isn't one already;
    # this avoids us returning an error just because nothing sets a success code
    # since the modules above will each just jump around
    password	required			pam_permit.so
    # and here are more per-package modules (the "Additional" block)
    password	optional	pam_gnome_keyring.so
    # end of pam-auth-update config

## 4.6. Keamanan autentikasi

| Catatan
Informasi di sini mungkin tidak cukup untuk kebutuhan keamanan Anda tetapi itu mestinya menjadi awal yang baik.

### 4.6.1. Kata sandi aman di Internet

Banyak layanan lapisan transportasi populer mengkomunikasikan pesan termasuk otentikasi kata sandi dalam teks polos. Adalah ide yang sangat buruk untuk mengirimkan kata sandi dalam teks polos melalui Internet liar di mana ia dapat disadap. Anda dapat menjalankan layanan ini melalui "Transport Layer Security" (TLS) atau pendahulunya, "Secure Sockets Layer" (SSL) untuk mengamankan seluruh komunikasi termasuk kata sandi dengan enkripsi.

Tabel 4.7. Daftar layanan dan port yang tidak aman dan aman

nama layanan tidak aman | port | nama layanan aman | port
--- | --- | --- | ---
www (http) | 80 | https | 443
smtp (mail) | 25 | ssmtp (smtps) | 465
ftp-data | 20 | ftps-data | 989
ftp | 21 | ftps | 990
telnet | 23 | telnets | 992
imap2 | 143 | imaps | 993
pop3 | 110 | pop3s | 995
ldap | 389 | ldaps | 636

Enkripsi memakan waktu CPU. Sebagai alternatif yang ramah CPU, Anda dapat menjaga komunikasi dalam teks polos sambil mengamankan hanya kata sandi dengan protokol otentikasi aman seperti "Authenticated Post Office Protocol" (APOP) untuk POP dan "Challenge-Response Authentication Mechanism MD5" (CRAM-MD5) untuk SMTP dan IMAP. (Untuk mengirim pesan surel melalui Internet ke server surel Anda dari klien surel Anda, baru-baru ini populer untuk menggunakan port message submission baru 587 alih-alih port SMTP tradisional 25 untuk menghindari pemblokiran port 25 oleh penyedia jaringan sambil mengautentikasi diri Anda dengan CRAM-MD5.)

### 4.6.2. Secure Shell

Program Secure Shell (SSH) menyediakan komunikasi terenkripsi yang aman antara dua host yang tidak tepercaya melalui jaringan yang tidak aman dengan otentikasi yang aman. Ini terdiri dari klien OpenSSH, ssh(1), dan daemon OpenSSH, sshd(8). SSH ini dapat digunakan untuk membungkus komunikasi protokol yang tidak aman seperti POP dan X dengan aman melalui Internet dengan fitur penerusan port.

Klien mencoba mengautentikasi dirinya sendiri menggunakan autentikasi berbasis host, otentikasi kunci publik, otentikasi challenge-response, atau autentikasi kata sandi. Penggunaan otentikasi kunci publik memungkinkan login tanpa kata sandi jarak jauh. Lihat Bagian 6.3, “Server dan utilitas akses jarak jauh (SSH)”.

### 4.6.3. Langkah-langkah keamanan tambahan untuk Internet

Bahkan ketika Anda menjalankan layanan aman seperti server Secure Shell (SSH) dan Point-to-point tunneling protocol (PPTP), masih ada kemungkinan untuk pembobolan menggunakan serangan brute force menebak kata sandi dari Internet. Penggunaan kebijakan firewall (lihat Bagian 5.7, “Infrastruktur netfilter”) bersama dengan alat-alat keamanan berikut dapat meningkatkan situasi keamanan.

Tabel 4.8. Daftar alat untuk memberikan langkah-langkah keamanan tambahan

paket | popcon | ukuran | deskripsi
--- | --- | --- | ---
`knockd` | V:0.7, I:1.7 | 110 | daemon port-knock kecil knockd(1) dan klien knock(1)
`fail2ban` | V:101, I:111 | 2192 | memblokir IP-IP yang menyebabkan beberapa kesalahan otentikasi
`libpam-shield` | V:0.05, I:0.06 | 115 | mengunci penyerang jarak jauh yang mencoba menebak kata sandi

### 4.6.4. Mengamankan kata sandi root

Untuk mencegah orang mengakses mesin Anda dengan hak istimewa root, Anda perlu membuat tindakan berikut.

- Cegah akses fisik ke perangkat penyimpanan sistem (HDD / SSD / ...)

- Mengunci UEFI/BIOS dan mencegah boot dari media lepasan

- Mengatur kata sandi untuk sesi interaktif GRUB

- Mengunci menu GRUB dari penyuntingan

Dengan akses fisik ke perangkat penyimpanan sistem, pengaturan ulang kata sandi relatif mudah dilakukan dengan langkah-langkah berikut.

1. Pindahkan perangkat penyimpanan sistem ke PC dengan UEFI/BIOS yang dapat di-boot melalui USB.

2. Boot sistem dengan media penyelamat (lihat Bagian 3.2.2, “Sistem penyelamat Linux live pada USB”).

3. Kait partisi root dengan akses baca/tulis.

4. Sunting "`/etc/passwd`" di partisi root dan jadikan entri kedua untuk akun `root` kosong.

Jika Anda memiliki akses sunting ke entri menu GRUB (lihat Bagian 3.1.2, “Tahap 2: boot loader”) untuk `grub-rescue-pc` pada waktu boot, bahkan lebih mudah dengan langkah-langkah berikut.

1. Boot sistem dengan parameter kernel berubah menjadi sesuatu seperti "`root=/dev/sda6 rw init=/bin/sh`".

2. Sunting "`/etc/passwd`" dan jadikan entri kedua untuk akun `root` kosong.

3. Boot ulang sistem.

Shell root sistem sekarang dapat diakses tanpa kata sandi.

| Catatan

Setelah seseorang memiliki akses root shell, ia dapat mengakses semuanya di sistem dan mengatur ulang kata sandi apa pun pada sistem. Lebih lanjut, ia dapat mengkompromikan kata sandi untuk semua akun pengguna menggunakan alat cracking kata sandi brute force seperti paket `john` dan `crack` (lihat Bagian 9.5.10, “Pemeriksaan keamanan dan integritas sistem”). Kata sandi yang tertebak ini dapat menyebabkan kompromi sistem lain.

Satu-satunya solusi perangkat lunak yang masuk akal untuk menghindari semua masalah ini adalah dengan menggunakan partisi root terenkripsi perangkat lunak (atau partisi "`/etc`") menggunakan dm-crypt dan initramfs (lihat Bagian 9.9, “Tips enkripsi data”). Namun Anda selalu membutuhkan kata sandi untuk mem-boot sistem.

## 4.7. Kontrol akses lainnya

Ada kontrol akses ke sistem selain otentikasi berbasis kata sandi dan izin berkas.

| Catatan
Lihat Bagian 9.4.16, “Tombol Alt-SysRq” untuk membatasi fitur secure attention key (SAK) kernel.

### 4.7.1. Access control lists (ACL)

ACL adalah superset dari izin reguler seperti yang dijelaskan di Bagian 1.2.3, “Hak akses sistem berkas”.

Anda menemui ACL beraksi di lingkungan desktop modern. Ketika perangkat penyimpanan USB yang terformat dipasang secara otomatis sebagai, mis., `"/media/penguin/USBSTICK`", pengguna normal `penguin` dapat menjalankan:

     $ cd /media/penguin
     $ ls -la
    total 16
    drwxr-x---+ 1 root    root    16 Jan 17 22:55 .
    drwxr-xr-x  1 root    root    28 Sep 17 19:03 ..
    drwxr-xr-x  1 penguin penguin 18 Jan  6 07:05 USBSTICK

"`+`" pada kolom ke-11 menunjukkan ACL sedang bekerja. Tanpa ACL, pengguna normal `penguin` tidak akan dapat membuat daftar seperti ini karena `penguin` tidak berada di grup `root`. Anda dapat melihat ACL sebagai:

     $ getfacl .
    # file: .
    # owner: root
    # group: root
    user::rwx
    user:penguin:r-x
    group::---
    mask::r-x
    other::---

Sini:

- "`user::rwx`", "`group::---`", dan "`other::---`" berkorespondensi ke izin pemilik reguler, grup, dan yang lain.

- ACL "`user:penguin:r-x`" mengizinkan seorang pengguna normal `penguin` untuk memiliki izin "`r-x`". Ini memungkinkan "`ls -la`" mencantumkan daftar konten direktori.

- ACL "`mask::r-x`" menata batas atas izin.

Lihat "POSIX Access Control Lists on Linux", acl(5), getfacl(1), dan setfacl(1) untuk lebih banyak lagi.

### 4.7.2. sudo

sudo(8) adalah program yang dirancang untuk memungkinkan sysadmin untuk memberikan hak istimewa root terbatas kepada pengguna dan mencatat log aktivitas root. `sudo` hanya membutuhkan kata sandi pengguna biasa. Pasang paket `sudo` dan aktifkan dengan mengatur opsi di "`/etc/sudoers`". Lihat contoh konfigurasi di "`/usr/share/doc/sudo/examples/sudoers`" dan Bagian 1.1.12, “konfigurasi sudo”.

Penggunaan `sudo` saya untuk sistem pengguna tunggal (lihat Bagian 1.1.12, “konfigurasi sudo”) bertujuan untuk melindungi diri dari kebodohan saya sendiri. Secara pribadi, saya menganggap menggunakan `sudo` alternatif yang lebih baik daripada menggunakan sistem dari akun root sepanjang waktu. Misalnya, berikut ini mengubah pemilik "`suatu_berkas`" menjadi "`namaku`".

    $ sudo chown my_name some_file

Tentu saja jika Anda tahu kata sandi root (seperti yang dilakukan pengguna Debian yang dipasang sendiri), perintah apa pun dapat dijalankan di bawah root dari akun pengguna mana pun menggunakan "`su -c`".

### 4.7.3. PolicyKit

PolicyKit adalah komponen sistem operasi untuk mengendalikan hak istimewa di seluruh sistem dalam sistem operasi mirip Unix.

Aplikasi GUI yang lebih baru tidak dirancang untuk berjalan sebagai proses istimewa. Mereka berbicara dengan proses istimewa melalui PolicyKit untuk melakukan operasi administratif.

PolicyKit membatasi operasi tersebut ke akun pengguna milik grup `sudo` pada sistem Debian.

Lihat polkit(8).

### 4.7.4. Membatasi akses ke beberapa layanan server

Untuk keamanan sistem, adalah ide yang baik untuk menonaktifkan sebanyak mungkin program server. Ini menjadi penting untuk server jaringan. Memiliki server yang tidak digunakan, diaktifkan baik secara langsung sebagai daemon atau melalui program super-server, dianggap sebagai risiko keamanan.

Banyak program, seperti sshd(8), menggunakan kontrol akses berbasis PAM. Ada banyak cara untuk membatasi akses ke beberapa layanan server.

- berkas konfigurasi: "`/etc/default/nama_program`"

- Konfigurasi unit layanan systemd untuk daemon

- PAM (Pluggable Authentication Modules)

- "`/etc/inetd.conf`" untuk super-server

- "`/etc/hosts.deny`" dan "`/etc/hosts.allow`" untuk TCP wrapper, tcpd(8)

- "`/etc/rpc.conf`" untuk Sun RPC

- "`/etc/at.allow`" dan "`/etc/at.deny`" untuk atd(8)

- "`/etc/cron.allow`" dan "`/etc/cron.deny`" untuk crontab(1)

- Firewall jaringan dari infrastruktur netfilter

Lihat Bagian 3.6, “Manajemen sistem”, Bagian 4.5.1, “Berkas konfigurasi yang diakses oleh PAM dan NSS”, dan Bagian 5.7, “Infrastruktur netfilter”.

| Tip
Layanan Sun RPC harus aktif untuk NFS dan program berbasis RPC lainnya.

| Tip
Jika Anda mengalami masalah akses jarak jauh dalam sistem Debian baru-baru ini, jadikan komentar saja baris konfigurasi yang menyinggung seperti "`ALL: PARANOID`" di "`/etc/hosts.deny`" jika ada. (Tetapi Anda harus berhati-hati terhadap risiko keamanan yang terlibat dengan tindakan semacam ini.)

### 4.7.5. Fitur keamanan Linux

Kernel Linux telah berevolusi dan mendukung fitur keamanan yang tidak ditemukan dalam implementasi UNIX tradisional.

Linux mendukung atribut extended yang memperluas atribut UNIX tradisional (lihat xattr(7)).

Linux membagi hak istimewa yang secara tradisional terkait dengan superuser menjadi unit-unit yang berbeda, yang dikenal sebagai capabilities(7), yang dapat diaktifkan dan dinonaktifkan secara independen. Kapabilitas adalah atribut per-thread sejak kernel versi 2.2.

Kerangka Kerja Linux Security Module (LSM) menyediakan mekanisme untuk berbagai pemeriksaan keamanan yang akan di-hook oleh ekstensi kernel baru. Misalnya:

- AppArmor

- Security-Enhanced Linux (SELinux)

- Smack (Simplified Mandatory Access Control Kernel)

- Tomoyo Linux

Karena ekstensi ini dapat memperketat model hak istimewa lebih ketat daripada kebijakan model keamanan mirip-Unix biasa, bahkan kekuatan root dapat dibatasi. Anda disarankan untuk membaca dokumen kerangka kerja Linux Security Module (LSM) di kernel.org.

namespaces Linux membungkus sumber daya sistem global dalam abstraksi yang membuatnya tampak pada proses dalam namespace bahwa mereka memiliki instansi terisolasi mereka sendiri dari sumber daya global. Perubahan pada sumber daya global terlihat oleh proses lain yang merupakan anggota ruang nama, tetapi tidak terlihat oleh proses lain. Sejak kernel versi 5.6, ada 8 jenis namespace (lihat namespaces(7), unshare(1), nsenter(1)).

Pada Debian 11 Bullseye (2021), Debian menggunakan hirarki cgroup terpadu (alias cgroups-v2).

Contoh penggunaan namespaces dengan cgroup untuk mengisolasi proses mereka dan untuk memungkinkan kontrol sumber daya adalah:

- Systemd. Lihat Bagian 3.3.1, “Init systemd”.

- Lingkungan sandbox. Lihat Bagian 7.7, “Sandbox”.

- Kontainer Linux seperti Docker, LXC. Lihat Bagian 9.11, “Sistem tervirtualisasi”.

Fungsi-fungsi ini tidak dapat direalisasikan oleh Bagian 4.1, “Autentikasi Unix normal”. Topik-topik tingkat lanjut ini sebagian besar di luar cakupan untuk dokumen pengantar ini.

Bab 3. Inisialisasi sistem |  | Bab 5. Penyiapan jaringan