su komutu: su ile su - farkı, sudo su ile sudo -i ve hesap değiştirme yolu

Test ortamıRHEL ailesiAlmaLinux 9.8util-linux 2.37root hesabıDebian 12 · util-linux 2.38 normal hesap2026-11-05 tarihinde kontrol edildi
Başka bir hesapla komut çalıştırma

Linux'ta geçerli hesaptan çıkış yapmadan başka bir hesaba geçip komut çalıştırmak için su komutunu kullanırsınız. AlmaLinux 9 sunucusunda root hesabından oturum açamayan sistem hesabı daemon'a su çalıştırılarak yapılan karşılaştırmada tek bir kısa çizgi çalışma klasörünü ve PATH'i değiştirdi, komut da ancak bir kabuk belirtildikten sonra çalıştı.

Aşağıdaki çıktılar bir AlmaLinux 9.8 sunucusundan (root hesabı) ve bir Debian 12 sunucusundan (normal hesap) alındı. Parola soran ekranlar ve sudo, canlı bir sunucuda çalıştırılmadı ve resmi kılavuzlara göre özetlendi; PATH değerinin bir kısmı ve simülatördeki util-linux yama sürüm numarası örnek değerlerle değiştirildi.

1️⃣ su komutu nasıl kullanılır

  • ↪️ Temel biçim ve exit ile geri dönme

Temel biçim [su hesap_adı] şeklindedir; hesap adını yazmazsanız su, root'a geçer. Yeni kabukta exit yazarsanız o kabuk kapanır ve su'yu çalıştıran asıl hesabın kabuğuna dönersiniz.

Normal bir hesaptan çalıştırırsanız Password: satırına geçilecek hesabın parolasını girersiniz (PAM varsayılan ayarına göre). Bu sunucudaki /etc/pam.d/su, çalıştıran root ise kimlik doğrulamayı atlayacak şekilde ayarlı olduğundan root hesabından daemon'a geçerken parola sorulmadı.

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

Yardım metninde yazdığı gibi, kısa çizgi [-], [-l] ile aynı oturum açma seçeneğidir ve hesap adından sonra yazılan bağımsız değişkenler geçilen hesabın kabuğuna aktarılır. AlmaLinux 9 sunucusundaki su util-linux 2.37 paketinden, Debian 12 sunucusundaki su ise 2.38 paketinden geliyordu.

su --version
su from util-linux 2.38.1

Geçmek istediğiniz hesabın kabuk açıp açamayacağını getent passwd çıktısındaki hesap satırının son alanından anlayabilirsiniz.

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

daemon'un kabuğu /sbin/nologin idi. Oturum açma kabuğu yerine nologin yazılı olan bir hesaba su ile geçseniz de kabuk açılmaz.

2️⃣ su ile su - farkı

  • ↪️ Oturum açma kabuğu ve ortam değişkenleri

Kısa çizgi (-) eklerseniz su, geçilen hesapla oturum açmışsınız gibi aynı kabuğu açar. /tmp klasöründe aynı komut bir kez kısa çizgisiz, bir kez de kısa çizgiyle çalıştırıldı.

su -s /bin/sh -c pwd daemon
/tmp
su - -s /bin/sh -c pwd daemon
/usr/sbin

Kısa çizgi olmadan çalışma klasörü /tmp olarak kaldı, [su -] ise daemon'un ev klasörü /sbin'e geçti. Bu sunucuda /sbin, /usr/sbin'e bağlanan bir bağlantı olduğundan pwd çıktısında /usr/sbin göründü.

Ortam değişkenlerinde env çıktısından yalnızca HOME, USER, SHELL, PATH ve LOGNAME olmak üzere beş satır karşılaştırıldı.

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 ve LOGNAME her iki durumda da daemon'un değerlerine dönüştü. PATH, kısa çizgi yokken su'yu çalıştıran root'un değerini korudu, [su -] ile ise oturum açma ayarlarına göre yeniden belirlendi.

Resmi kılavuza göre kısa çizgisiz su yalnızca HOME ve SHELL'i değiştirir, USER ve LOGNAME'i ise yalnızca hedef hesap root değilse değiştirir. Bu yüzden normal bir hesaptan kısa çizgisiz root'a geçerseniz USER'da asıl hesabın adı kalır.

Kabuk adını yazdıran [$0] da farklıydı.

su -s /bin/sh -c 'echo $0' daemon
sh
su - -s /bin/sh -c 'echo $0' daemon
-sh

[su -] ile kabuk adının önüne kısa çizgi eklendi ve -sh göründü. Adı kısa çizgiyle başlayan bir kabuk, oturum açma kabuğu gibi çalışır ve oturum açma yapılandırma dosyalarını okur (resmi kılavuza göre). İki biçim arasındaki farklar aşağıdadır.

Karşılaştırmasusu -
Çalışma klasörüDeğişmedi (/tmp)Hedef hesabın ev klasörü (/usr/sbin)
HOME, USER, LOGNAMEdaemon'un değeridaemon'un değeri
PATHsu'yu çalıştıran root'un değeriOturum açma ayarlarıyla yeniden belirlenir
Kabuk adı ($0)sh-sh (oturum açma kabuğu)
Diğer ortam değişkenleriOlduğu gibi kalırTERM gibi birkaçı dışında silinir (resmi kılavuza göre)

Resmi kılavuz, ortamlar karışmasın diye oturum açma seçeneğinin her zaman eklenmesini ve kısa çizgi yerine [--login] yazılmasını önerir. Kısa çizgisiz su geçerli klasörü ve PATH'i korur; bu yüzden bir komutu başka bir hesabın ayarlarıyla denemek istediğinizde sonuç [su -] ile alınandan farklı olabilir.

3️⃣ su -c ve su -s seçenekleri

  • ↪️ Tek bir komut çalıştırma ve kabuk belirtme

Kabuk açmadan yalnızca bir komutu başka bir hesapla çalıştırmak için komutu -c'den sonra yazarsınız. nologin hesabında [su -c] ile id çalıştırıldığında komutun çıktısı yerine bir ret iletisi göründü.

su -c id daemon
This account is currently not available.

-c ile verilen komutu da hesabın kabuğu alıp çalıştırır; bu yüzden kabuk nologin ise komuta hiç sıra gelmez. Böyle durumlarda çalıştırılacak kabuğu -s ile belirtirsiniz.

su -s /bin/sh -c id daemon
uid=2(daemon) gid=2(daemon) groups=2(daemon)

/bin/sh belirtilince id, daemon'un UID 2 değeriyle çalıştı. Bir hizmet hesabıyla dosya izinlerini veya komut sonuçlarını denetlerken bu biçimi kullanırsınız.

Hedef hesabın kabuğu nologin gibi /etc/shells içinde olmayan kısıtlı bir kabuksa kabuğu -s ile yalnızca root değiştirebilir. Resmi kılavuza göre root olmayan bir kullanıcının belirttiği -s ve SHELL değişkeni bu durumda yok sayılır.

-c'den sonraki komutta boşluk varsa tek parça olarak aktarılması için tırnak içine alırsınız. su, çalıştırdığı komutun çıkış kodunu olduğu gibi döndürür; komutu çalıştıramazsa 126, bulamazsa 127 döndürür (resmi kılavuza göre).

📌 Başlıca seçenekler: bu yazıda çalıştırılan sonuçlar

SeçenekGörevBu yazıdaki sonuç
-Hedef hesapla oturum açmış gibi aynı kabuğu açar ve o hesabın ev klasörüne geçer/tmp'de kısa çizgisiz pwd /tmp, kısa çizgiyle /usr/sbin oldu ve echo $0 -sh verdi
-c komutKabuk açmadan tek bir komutu hedef hesabın kabuğuyla çalıştırırnologin hesabı daemon'da su -c id daemon çalıştırılınca [This account is currently not available.]
-s kabukHesapta yazılı kabuk yerine belirtilen kabukla çalıştırır; kısıtlı kabuklu hesaplarda yalnızca rootsu -s /bin/sh -c id daemon çıktısı uid=2(daemon) gid=2(daemon) groups=2(daemon)
--helpKullanımı ve seçenek listesini yazdırırUsage satırı ve -m, -w, -g, -G, -l, -c, -f, -s, -P, -h, -V seçenek listesi
--versionSürüm bilgisini yazdırırDebian 12 sunucusunda su from util-linux 2.38.1

📎 Diğer seçenekler: resmî kılavuza göre

SeçenekGörev
-lKısa çizgiyle (-) aynı oturum açma seçeneği; uzun adı --login
-mOrtam değişkenlerini olduğu gibi bırakır, HOME, SHELL, USER ve LOGNAME'i de değiştirmez; oturum açma seçeneğiyle birlikte yok sayılır (-p ile aynı)
-w listeOturum açma seçeneği ortamı temizlerken virgülle yazılan değişkenleri korur; HOME, SHELL, USER, LOGNAME ve PATH yeniden belirlenir
-g grupBirincil grubu belirtir; yalnızca root
-G grupEk grupları belirtir; yalnızca root; -g yoksa ilk ek grup birincil grup olur
-fKabuğa -f aktarır; csh ve tcsh'te kullanılan seçenek
-PYeni bir sözde terminal oluşturur, böylece terminal asıl oturumla paylaşılmaz
--session-command komut-c ile aynıdır ama yeni oturum oluşturmaz; kılavuz önermez

🔲 su komutu simülatörü

Aşağıdaki simülatör normal hesap user1 ile başlar; su, [su -] ve sudo yazıp exit ile geri dönme akışını kendiniz deneyebilirsiniz. Hesaplar ve parolalar örnek değerlerdir.

su komutu simülatörüutil-linux 2.37
[user1@server1 ~]$
Yalnızca tarayıcı içinde çalışır; hesaplar ve parolalar örnek değerlerdir, ↑↓ ile önceki komutları geri çağırırsınız (parolalar geçmişte kalmaz).

4️⃣ sudo su ile sudo -i farkı

  • ↪️ Sorulan parola ve değişen klasör

sudo su, su'yu sudo üzerinden root yetkisiyle çalıştırma biçimidir. su'yu root çalıştırdığı için root parolası sorulmaz; ondan önce sudo, çalıştıran kişinin parolasını sorar (resmi belgelere göre).

sudo çalıştırabilecek hesaplar /etc/sudoers ayarları ile belirlenir. İzin verilmeyen bir hesap sudo çalıştırırsa [user1 is not in the sudoers file.] ile reddedilir (programdaki iletiye göre).

root kabuğu açan her komut için sorulan parola ve çalışma klasörü aşağıdadır. Bu bölümdeki komutlar canlı bir sunucuda çalıştırılmadı, su(1) ve sudo(8) kılavuzlarına göre özetlendi.

KomutSorulan parolaÇalışan kabukÇalışma klasörü
surootroot kabuğudeğişmez
su -rootroot oturum açma kabuğu/root
sudo suÇalıştıran hesaproot kabuğudeğişmez
sudo su -Çalıştıran hesaproot oturum açma kabuğu/root
sudo -iÇalıştıran hesaproot oturum açma kabuğu/root
sudo -sÇalıştıran hesapSHELL değişkenindeki kabuk (root yetkisi)değişmez

[sudo -i] ve [sudo su -] ikisi de root oturum açma kabuğunda biter. [sudo -i] ile sudo, root'un kabuğunu doğrudan oturum açma kabuğu olarak çalıştırır; [sudo su -] ise arada bir kez daha su'dan geçer.

[sudo -s], SHELL değişkenindeki kabuğu root yetkisiyle çalıştırır ve ev klasörüne geçmez. Parolayı bir kez doğru girdiğinizde sudo, varsayılan olarak 5 dakika boyunca aynı terminalde yeniden sormaz (sudoers kılavuzuna göre).

su ile sudo arasındaki fark, birinin ev anahtarını ödünç almakla yönetim ofisine adınızı yazdırıp içeri girmek arasındaki fark gibidir.

5️⃣ su komutu hataları

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

Oturum açamayan bir hesaba geçerseniz kabuk yerine nologin çalışır ve [This account is currently not available.] görünür. root'ta [su daemon] çalıştırıldığında yalnızca bu tek satır göründü ve çıkış kodu 1 oldu.

su daemon
This account is currently not available.

Bu iletiyi hesap satırının son alanında yazılı nologin programı yazdırır; aynı metin sunucudaki /usr/sbin/nologin içinde de görüldü. root iseniz -s ile bir kabuk belirtip o hesapla komut çalıştırabilirsiniz.

Parola yanlışsa [su: Authentication failure] görünür. Bu metin, PAM kitaplığının kimlik doğrulama başarısız olduğunda döndürdüğü iletidir. Resmi kılavuza göre su komutu çalıştırmadan önce başarısız olursa çıkış kodu 1 olur.

Kendi hesabınızın parolasını doğru girdiğiniz hâlde su reddediyorsa önce burada hedef hesabın parolasının mı sorulduğunu kontrol edin. sudo çalıştıran kişinin parolasını, su ise geçilecek hesabın parolasını sorar.

Var olmayan bir hesap adı yazarsanız [su: user user9 does not exist or the user entry does not contain all the required fields] görünür (programdaki iletiye göre). Her hatanın nedeni ve kontrol edilecek nokta aşağıdadır.

ÇıktıNedenKontrol edilecek
This account is currently not available.Hedef hesabın kabuğu nologingetent passwd hesap satırının son alanı; root ise -s ile kabuk belirtin
su: Authentication failureParola yanlışHedef hesabın parolası mı (sudo sizin parolanızı sorar)
su: user user9 does not exist …Bu adda bir hesap yokgetent passwd hesap_adı
user1 is not in the sudoers file.sudo izni verilmemiş hesapsudoers ayarları ve wheel grubu

🔢 SSS & önerilen içerikler

Resmi kılavuz su'yu çoğunlukla normal kullanıcılar için bir komut olarak anlatır ve root'un çalıştırdığı betikler için kimlik doğrulamadan geçmeyen runuser komutunu önerir. Biçimi [runuser -u hesap -- komut] şeklindedir.

-w (--whitelist-environment) seçeneğinden sonra korunacak değişken adlarını virgülle ayırarak yazarsanız [su -], ortamı temizlerken bu değişkenleri korur. Resmi kılavuza göre HOME, SHELL, USER, LOGNAME ve PATH listede olsa da yeniden belirlenir.

Resmi kılavuza göre su, başarısız oturum açma denemelerini her zaman btmp dosyasına kaydeder ve lastlog dosyasına yazmaz. btmp kayıtlarını lastb komutuyla görürsünüz.

ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İnsan olduğunuzu kanıtlayın: 9   +   3   =