Perintah su: beda su dan su -, sudo su dan sudo -i, serta cara berganti akun
Untuk menjalankan perintah dengan akun lain di Linux tanpa keluar dari akun saat ini, gunakan perintah su. Saat su dijalankan dari akun root di server AlmaLinux 9 ke daemon, akun sistem yang tidak bisa login, satu tanda hubung mengubah folder kerja dan PATH, dan perintah baru berjalan setelah shell ditentukan.
Output di bawah berasal dari server AlmaLinux 9.8 (akun root) dan server Debian 12 (akun biasa). Layar yang meminta kata sandi dan sudo tidak dijalankan di server produksi, melainkan dirangkum berdasarkan manual resmi, dan sebagian nilai PATH serta nomor versi patch util-linux di simulator diganti dengan nilai contoh.
1️⃣ Cara memakai perintah su
Bentuk dasarnya adalah [su nama_akun], dan jika nama akun tidak ditulis, su berganti ke root. Jika Anda mengetik exit di shell yang baru, shell itu berakhir dan Anda kembali ke shell akun asal yang menjalankan su.
Jika dijalankan dari akun biasa, Anda memasukkan kata sandi akun tujuan di baris Password: (berdasarkan pengaturan bawaan PAM). Di server ini, /etc/pam.d/su melewati autentikasi jika yang menjalankannya root, jadi kata sandi tidak diminta saat berganti dari akun root ke daemon.
su --help
Usage:
su [options] [-] [<user> [<argument>...]]
Change the effective user ID and group ID to that of <user>.
A mere - implies -l. If <user> is not given, root is assumed.
Options:
-m, -p, --preserve-environment do not reset environment variables
-w, --whitelist-environment <list> don't reset specified variables
-g, --group <group> specify the primary group
-G, --supp-group <group> specify a supplemental group
-, -l, --login make the shell a login shell
-c, --command <command> pass a single command to the shell with -c
--session-command <command> pass a single command to the shell with -c
and do not create a new session
-f, --fast pass -f to the shell (for csh or tcsh)
-s, --shell <shell> run <shell> if /etc/shells allows it
-P, --pty create a new pseudo-terminal
-h, --help display this help
-V, --version display version
For more details see su(1).Seperti tertulis di bantuan, tanda hubung [-] adalah opsi login yang sama dengan [-l], dan argumen yang ditulis setelah nama akun diteruskan ke shell akun tujuan. Di server AlmaLinux 9, su berasal dari paket util-linux 2.37, dan di server Debian 12 dari paket 2.38.
su --versionsu from util-linux 2.38.1Apakah akun tujuan bisa membuka shell dapat dilihat dari kolom terakhir barisnya di getent passwd.
getent passwd daemondaemon:x:2:2:daemon:/sbin:/sbin/nologinShell milik daemon adalah /sbin/nologin. Akun yang berisi nologin, bukan shell login, tidak membuka shell meskipun sudah diganti dengan su.
2️⃣ Beda su dan su -
Dengan tanda hubung (-), su membuka shell yang sama seperti saat login dengan akun tujuan. Di folder /tmp, perintah yang sama dijalankan sekali tanpa tanda hubung dan sekali dengan tanda hubung.
su -s /bin/sh -c pwd daemon/tmpsu - -s /bin/sh -c pwd daemon/usr/sbinTanpa tanda hubung, folder kerja tetap /tmp, sedangkan [su -] pindah ke folder home daemon, yaitu /sbin. Di server ini /sbin adalah tautan ke /usr/sbin, jadi pwd menampilkan /usr/sbin.
Untuk variabel lingkungan, hanya lima baris dari output env yang dibandingkan: HOME, USER, SHELL, PATH, dan LOGNAME.
su -s /bin/sh -c env daemon | grep -E '^(HOME|USER|SHELL|PATH|LOGNAME)='SHELL=/bin/sh
LOGNAME=daemon
HOME=/sbin
USER=daemon
PATH=/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binsu - -s /bin/sh -c env daemon | grep -E '^(HOME|USER|SHELL|PATH|LOGNAME)='SHELL=/bin/sh
LOGNAME=daemon
HOME=/sbin
USER=daemon
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbinHOME, USER, dan LOGNAME berubah ke nilai milik daemon di kedua kasus. Tanpa tanda hubung, PATH tetap memakai nilai root yang menjalankan su, sedangkan dengan [su -] nilainya ditetapkan ulang sesuai pengaturan login.
Menurut manual resmi, su tanpa tanda hubung hanya mengubah HOME dan SHELL, dan baru mengubah USER dan LOGNAME juga jika akun tujuan bukan root. Jadi, jika Anda berganti ke root dari akun biasa tanpa tanda hubung, USER tetap berisi nama akun asal.
[$0], yang menampilkan nama shell, juga berbeda.
su -s /bin/sh -c 'echo $0' daemonshsu - -s /bin/sh -c 'echo $0' daemon-shDengan [su -], tanda hubung ditambahkan di depan nama shell dan muncul -sh. Shell yang namanya diawali tanda hubung bekerja sebagai shell login dan membaca file konfigurasi login (menurut manual resmi). Perbedaan kedua bentuk itu ada di bawah ini.
| Perbandingan | su | su - |
|---|---|---|
| Folder kerja | Tetap (/tmp) | Folder home akun tujuan (/usr/sbin) |
| HOME, USER, LOGNAME | Nilai milik daemon | Nilai milik daemon |
| PATH | Nilai root yang menjalankan su | Ditetapkan ulang oleh pengaturan login |
| Nama shell ($0) | sh | -sh (shell login) |
| Variabel lingkungan lainnya | Tetap ada | Dihapus kecuali beberapa seperti TERM (menurut manual resmi) |
Manual resmi menyarankan untuk selalu menambahkan opsi login agar lingkungan tidak tercampur, dan menulis [--login] sebagai ganti tanda hubung. su tanpa tanda hubung mempertahankan folder saat ini dan PATH, jadi saat Anda ingin memeriksa perintah dengan pengaturan akun lain, hasilnya bisa berbeda dari [su -].
3️⃣ Opsi su -c dan su -s
Untuk menjalankan satu perintah saja dengan akun lain tanpa membuka shell, tulis perintahnya setelah -c. Saat id dijalankan dengan [su -c] pada akun nologin, yang muncul adalah pesan penolakan, bukan hasil perintah.
su -c id daemonThis account is currently not available.Perintah yang diberikan dengan -c juga diterima dan dijalankan oleh shell akun, jadi jika shell-nya nologin, perintah tidak pernah sampai dijalankan. Dalam kasus ini, tentukan shell yang akan dijalankan dengan -s.
su -s /bin/sh -c id daemonuid=2(daemon) gid=2(daemon) groups=2(daemon)Dengan /bin/sh, id berjalan sebagai UID 2 milik daemon. Gunakan bentuk ini untuk memeriksa izin file atau hasil perintah dengan akun layanan.
Jika shell akun tujuan adalah shell terbatas yang tidak ada di /etc/shells, seperti nologin, hanya root yang bisa mengganti shell dengan -s. Menurut manual resmi, -s dan variabel SHELL yang ditentukan pengguna selain root diabaikan dalam kasus ini.
Jika perintah setelah -c berisi spasi, apit dengan tanda kutip agar diteruskan sebagai satu kesatuan. su mengembalikan kode keluar perintah yang dijalankan apa adanya, 126 jika perintah tidak bisa dijalankan, dan 127 jika tidak ditemukan (menurut manual resmi).
📌 Opsi utama: hasil dari artikel ini
| Opsi | Fungsi | Hasil di artikel ini | |
|---|---|---|---|
| - | Membuka shell yang sama seperti login dengan akun tujuan dan pindah ke folder home akun itu | Dari /tmp, pwd tanpa tanda hubung adalah /tmp dan dengan tanda hubung /usr/sbin, dan echo $0 menghasilkan -sh | |
| -c perintah | Menjalankan satu perintah dengan shell akun tujuan tanpa membuka shell | Saat su -c id daemon dijalankan pada akun nologin daemon, muncul [This account is currently not available.] | |
| -s shell | Menjalankan shell yang ditentukan sebagai ganti shell akun; untuk akun dengan shell terbatas, hanya root | su -s /bin/sh -c id daemon menghasilkan uid=2(daemon) gid=2(daemon) groups=2(daemon) | |
| --help | Menampilkan cara pakai dan daftar opsi | Baris Usage dan daftar opsi -m, -w, -g, -G, -l, -c, -f, -s, -P, -h, -V | |
| --version | Menampilkan informasi versi | su from util-linux 2.38.1 di server Debian 12 |
📎 Opsi lainnya: menurut manual resmi
| Opsi | Fungsi | |
|---|---|---|
| -l | Opsi login yang sama dengan tanda hubung (-); nama panjang --login | |
| -m | Membiarkan variabel lingkungan dan tidak mengubah HOME, SHELL, USER, maupun LOGNAME; diabaikan jika dipakai bersama opsi login (sama dengan -p) | |
| -w daftar | Mempertahankan variabel yang ditulis dengan koma saat opsi login mengosongkan lingkungan; HOME, SHELL, USER, LOGNAME, dan PATH ditetapkan ulang | |
| -g grup | Menentukan grup utama; hanya root | |
| -G grup | Menentukan grup tambahan; hanya root; tanpa -g, grup tambahan pertama menjadi grup utama | |
| -f | Meneruskan -f ke shell; opsi yang dipakai di csh dan tcsh | |
| -P | Membuat terminal semu baru agar terminal tidak dipakai bersama sesi asal | |
| --session-command perintah | Sama dengan -c tetapi tidak membuat sesi baru; manual tidak menyarankannya |
🔲 Simulator perintah su
Simulator di bawah dimulai dari akun biasa user1, dan Anda bisa mencoba sendiri su, [su -], dan sudo lalu kembali dengan exit. Akun dan kata sandi adalah nilai contoh.
4️⃣ Beda sudo su dan sudo -i
sudo su adalah cara menjalankan su dengan hak root melalui sudo. Karena su dijalankan oleh root, kata sandi root tidak diminta, dan sebelumnya sudo meminta kata sandi orang yang menjalankannya (menurut dokumentasi resmi).
Akun yang boleh menjalankan sudo ditentukan oleh pengaturan /etc/sudoers. Jika akun yang tidak diizinkan menjalankan sudo, akun itu ditolak dengan [user1 is not in the sudoers file.] (berdasarkan pesan di dalam program).
Untuk setiap perintah yang membuka shell root, kata sandi yang diminta dan folder kerjanya ada di bawah ini. Perintah di bagian ini tidak dijalankan di server produksi, melainkan dirangkum berdasarkan manual su(1) dan sudo(8).
| Perintah | Kata sandi yang diminta | Shell yang dijalankan | Folder kerja |
|---|---|---|---|
| su | root | Shell root | Tetap |
| su - | root | Shell login root | /root |
| sudo su | Akun yang menjalankan | Shell root | Tetap |
| sudo su - | Akun yang menjalankan | Shell login root | /root |
| sudo -i | Akun yang menjalankan | Shell login root | /root |
| sudo -s | Akun yang menjalankan | Shell dari variabel SHELL (hak root) | Tetap |
[sudo -i] dan [sudo su -] sama-sama berakhir di shell login root. Dengan [sudo -i], sudo langsung menjalankan shell root sebagai shell login, sedangkan [sudo su -] melewati su sekali lagi di tengahnya.
[sudo -s] menjalankan shell dari variabel SHELL dengan hak root dan tidak pindah ke folder home. Setelah kata sandi dimasukkan dengan benar sekali, sudo secara bawaan tidak memintanya lagi di terminal yang sama selama 5 menit (menurut manual sudoers).
Beda su dan sudo seperti beda antara meminjam kunci rumah seseorang dan menulis nama di pos keamanan untuk bisa masuk.
5️⃣ Error perintah su
Jika Anda berganti ke akun yang tidak bisa login, nologin berjalan sebagai ganti shell dan muncul [This account is currently not available.]. Saat [su daemon] dijalankan dari root, hanya satu baris ini yang muncul dan kode keluarnya 1.
su daemonThis account is currently not available.Pesan ini ditampilkan oleh program nologin yang tertulis di kolom terakhir baris akun, dan teks yang sama ditemukan di dalam /usr/sbin/nologin di server. Jika Anda root, Anda bisa menentukan shell dengan -s dan menjalankan perintah dengan akun itu.
Jika kata sandi salah, muncul [su: Authentication failure]. Teks ini adalah pesan yang dikembalikan pustaka PAM saat autentikasi gagal. Menurut manual resmi, jika su gagal sebelum menjalankan perintah, kode keluarnya 1.
Jika su menolak padahal kata sandi akun Anda sudah dimasukkan dengan benar, periksa dulu apakah yang diminta di situ adalah kata sandi akun tujuan. sudo meminta kata sandi orang yang menjalankannya, sedangkan su meminta kata sandi akun yang dituju.
Jika Anda menulis nama akun yang tidak ada, muncul [su: user user9 does not exist or the user entry does not contain all the required fields] (berdasarkan pesan di dalam program). Penyebab dan hal yang perlu diperiksa untuk setiap error ada di bawah ini.
| Output | Penyebab | Yang perlu diperiksa |
|---|---|---|
| This account is currently not available. | Shell akun tujuan adalah nologin | Kolom terakhir baris akun di getent passwd; sebagai root, tentukan shell dengan -s |
| su: Authentication failure | Kata sandi salah | Apakah itu kata sandi akun tujuan (sudo meminta kata sandi Anda sendiri) |
| su: user user9 does not exist … | Tidak ada akun dengan nama itu | getent passwd nama_akun |
| user1 is not in the sudoers file. | Akun yang tidak diizinkan memakai sudo | Pengaturan sudoers dan grup wheel |
🔢 FAQ & Konten yang Direkomendasikan
Izin · kepemilikan
Izin Linux (4,2,1) dan kepemilikan | perintah chmod, chown, umask
Artikel tentang cara melihat dan mengubah izin baca, tulis, dan eksekusi serta pemilik file dan direktori.
Pengguna dan akses
Perintah Linux who, w & perintah user
Perintah untuk melihat pengguna yang sedang login ke server dan pekerjaan yang sedang mereka jalankan.
Jaringan dan akses
Perintah SSH: opsi dan cara memakainya
Artikel tentang bentuk dasar dan opsi perintah ssh, yang terhubung ke server jarak jauh dengan akun pengguna.
ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.