Ini terutama tentang apa yang dilakukan oleh alat atau program . Perlu diingat bahwa non-pengguna super hanya dapat menyentuh file yang dimilikinya atau yang dapat diaksesnya, alat apa pun yang harus dapat memasukkan jarinya ke dalam segalanya akan membutuhkan akses pengguna super untuk melakukan hal yang dilakukannya. Contoh singkat dari Hal-hal yang mungkin memerlukan akses superuser termasuk, namun tidak terbatas pada:
- Membuka soket TCP yang mendengarkan pada port di bawah 1024
- Mengubah konfigurasi sistem (misalnya apa pun di
/etc
) - Menambahkan pustaka baru yang dapat diakses secara global (
/lib
dan/usr/lib
) atau biner (/bin
,/usr/bin
) - Menyentuh file apa pun yang bukan milik pengguna yang melakukan sentuhan yang tidak memiliki mode permisif yang memadai
- Mengubah kepemilikan file pengguna lain
- Meningkatkan prioritas proses (mis.
renice
) - Memulai atau menghentikan sebagian besar layanan
- Konfigurasi kernel (mis. menyesuaikan swappiness)
- Menyesuaikan kuota sistem file
- Menulis ke disk "penuh" (sebagian besar sistem file mencadangkan ruang untuk pengguna root)
- Melakukan tindakan sebagai pengguna lain
Di linux, hak istimewa root pada satu titik dibagi menjadi "kemampuan", sehingga Anda bisa mendapatkan daftar lengkap hak istimewa root dengan melihat dokumentasi tersebut:man 7 capabilities
.
Untuk menjawab pertanyaan Anda, sebuah perintah harus dijalankan sebagai root ketika membutuhkan salah satu dari hak istimewa ini, dan yang dapat dieksekusi non-skripnya tidak memiliki kemampuan yang relevan yang diatur dalam metadata file-nya (mis. Jika skrip python memerlukan kemampuan, maka kemampuan harus berada dalam juru bahasa python yang ditentukan dalam baris shebang).
Perhatikan bahwa beberapa perintah yang memerlukan akses root tidak memerlukan sesuatu seperti sudo
karena mereka memiliki SUID bit yang diatur dalam executable mereka. Bit ini menyebabkan executable dijalankan sebagai pemilik (biasanya root) saat dieksekusi oleh siapa saja yang memiliki akses eksekusi. Contohnya adalah sudo
sendiri karena mengubah pengguna adalah tindakan istimewa yang perlu dilakukan.
EDIT:Saya perhatikan dari pertanyaan Anda bahwa Anda mungkin memiliki gagasan bahwa Anda dapat menentukan apakah suatu perintah memerlukan akses root sebelum menjalankannya. Bukan itu masalahnya. Suatu program terkadang memerlukan hak akses root dan terkadang tidak, dan ini bisa menjadi keputusan yang dibuat oleh program karena data yang disediakan selama runtime. Ambil contoh, memanggil vim
, begitu saja tanpa argumen, dan kemudian melalui serangkaian penekanan tombol dan penempelan, menyuruhnya untuk menulis sesuatu ke file yang tidak memiliki izin untuk menulis, atau mungkin menjalankan perintah lain yang akan membutuhkan hak akses root. Tidak ada apa pun tentang perintah sebelum mengeksekusi yang dapat menunjukkan bahwa pada akhirnya akan membutuhkan akses root. Itu adalah sesuatu yang hanya dapat ditentukan pada saat ia mencoba melakukan sesuatu yang membutuhkannya.
Bagaimanapun, berikut adalah beberapa contoh dari halaman manual yang direferensikan dari hak istimewa root:
- Lakukan manipulasi sembarang UID proses (setuid(2), setreuid(2), setresuid(2), setfsuid(2));
- Lewati file baca, tulis, dan jalankan pemeriksaan izin. (DAC adalah singkatan dari "kontrol akses bebas".)
- Melewati pemeriksaan izin untuk mengirim sinyal (lihat kill(2)). Ini termasuk penggunaan operasi ioctl(2) KDSIGACCEPT.
- Lakukan berbagai operasi terkait jaringan:
- konfigurasi antarmuka;
- administrasi firewall IP, penyamaran, dan akuntansi;
- memodifikasi tabel perutean;
- Ikat soket ke port istimewa domain Internet (nomor port kurang dari 1024).
- Memuat dan membongkar modul kernel (lihat init_module(2) dan delete_module(2));
- Atur jam sistem (settimeofday(2), stime(2), adjtimex(2)); menyetel jam waktu nyata (perangkat keras).
- Lakukan serangkaian operasi administrasi sistem termasuk:quotactl(2), mount(2), umount(2), swapon(2), swapoff(2), sethostname(2), dan setdomainname(2);
- Gunakan reboot(2) dan kexec_load(2).
- Gunakan chroot(2).
- Naikkan nilai bagus proses (Nice(2), setpriority(2)) dan ubah nilai bagus untuk proses arbitrer;