Perintah su: beda su dan su -, sudo su dan sudo -i, serta cara berganti akun

Lingkungan ujiKeluarga RHELAlmaLinux 9.8util-linux 2.37akun rootDebian 12 · util-linux 2.38 akun biasaDiperiksa 2026-11-05
Perintah Pengguna · GrupsuLokasi/usr/bin/su
Menjalankan perintah dengan akun lain

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 dasar dan kembali dengan exit

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 --version
su from util-linux 2.38.1

Apakah akun tujuan bisa membuka shell dapat dilihat dari kolom terakhir barisnya di getent passwd.

getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

Shell 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 -

  • ↪️ Shell login dan variabel lingkungan

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
/tmp
su - -s /bin/sh -c pwd daemon
/usr/sbin

Tanpa 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/bin
su - -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/sbin

HOME, 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' daemon
sh
su - -s /bin/sh -c 'echo $0' daemon
-sh

Dengan [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.

Perbandingansusu -
Folder kerjaTetap (/tmp)Folder home akun tujuan (/usr/sbin)
HOME, USER, LOGNAMENilai milik daemonNilai milik daemon
PATHNilai root yang menjalankan suDitetapkan ulang oleh pengaturan login
Nama shell ($0)sh-sh (shell login)
Variabel lingkungan lainnyaTetap adaDihapus 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

  • ↪️ Menjalankan satu perintah saja dan menentukan shell

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 daemon
This 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 daemon
uid=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

OpsiFungsiHasil di artikel ini
-Membuka shell yang sama seperti login dengan akun tujuan dan pindah ke folder home akun ituDari /tmp, pwd tanpa tanda hubung adalah /tmp dan dengan tanda hubung /usr/sbin, dan echo $0 menghasilkan -sh
-c perintahMenjalankan satu perintah dengan shell akun tujuan tanpa membuka shellSaat su -c id daemon dijalankan pada akun nologin daemon, muncul [This account is currently not available.]
-s shellMenjalankan shell yang ditentukan sebagai ganti shell akun; untuk akun dengan shell terbatas, hanya rootsu -s /bin/sh -c id daemon menghasilkan uid=2(daemon) gid=2(daemon) groups=2(daemon)
--helpMenampilkan cara pakai dan daftar opsiBaris Usage dan daftar opsi -m, -w, -g, -G, -l, -c, -f, -s, -P, -h, -V
--versionMenampilkan informasi versisu from util-linux 2.38.1 di server Debian 12

📎 Opsi lainnya: menurut manual resmi

OpsiFungsi
-lOpsi login yang sama dengan tanda hubung (-); nama panjang --login
-mMembiarkan variabel lingkungan dan tidak mengubah HOME, SHELL, USER, maupun LOGNAME; diabaikan jika dipakai bersama opsi login (sama dengan -p)
-w daftarMempertahankan variabel yang ditulis dengan koma saat opsi login mengosongkan lingkungan; HOME, SHELL, USER, LOGNAME, dan PATH ditetapkan ulang
-g grupMenentukan grup utama; hanya root
-G grupMenentukan grup tambahan; hanya root; tanpa -g, grup tambahan pertama menjadi grup utama
-fMeneruskan -f ke shell; opsi yang dipakai di csh dan tcsh
-PMembuat terminal semu baru agar terminal tidak dipakai bersama sesi asal
--session-command perintahSama 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.

Simulator perintah suutil-linux 2.37
[user1@server1 ~]$
Hanya berjalan di dalam browser; akun dan kata sandi adalah nilai contoh, dan ↑↓ memanggil kembali perintah sebelumnya (kata sandi tidak tersimpan di riwayat).

4️⃣ Beda sudo su dan sudo -i

  • ↪️ Kata sandi yang diminta dan folder yang berubah

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).

PerintahKata sandi yang dimintaShell yang dijalankanFolder kerja
surootShell rootTetap
su -rootShell login root/root
sudo suAkun yang menjalankanShell rootTetap
sudo su -Akun yang menjalankanShell login root/root
sudo -iAkun yang menjalankanShell login root/root
sudo -sAkun yang menjalankanShell 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

  • ↪️ This account is currently not available · Authentication failure

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 daemon
This 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.

OutputPenyebabYang perlu diperiksa
This account is currently not available.Shell akun tujuan adalah nologinKolom terakhir baris akun di getent passwd; sebagai root, tentukan shell dengan -s
su: Authentication failureKata sandi salahApakah itu kata sandi akun tujuan (sudo meminta kata sandi Anda sendiri)
su: user user9 does not exist …Tidak ada akun dengan nama itugetent passwd nama_akun
user1 is not in the sudoers file.Akun yang tidak diizinkan memakai sudoPengaturan sudoers dan grup wheel

🔢 FAQ & Konten yang Direkomendasikan

Manual resmi menjelaskan su terutama sebagai perintah untuk pengguna biasa, dan untuk skrip yang dijalankan root, manual menyarankan perintah runuser yang tidak melewati autentikasi. Bentuknya adalah [runuser -u akun -- perintah].

Jika Anda menulis nama variabel yang ingin dipertahankan setelah -w (--whitelist-environment), dipisahkan koma, [su -] mempertahankan variabel itu saat mengosongkan lingkungan. Menurut manual resmi, HOME, SHELL, USER, LOGNAME, dan PATH tetap ditetapkan ulang meskipun ada di daftar.

Menurut manual resmi, su selalu mencatat percobaan login yang gagal di file btmp dan tidak menulis ke file lastlog. Catatan btmp bisa dilihat dengan perintah lastb.

ℹ️ 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.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 5   +   8   =