su komutu: su ile su - farkı, sudo su ile sudo -i ve hesap değiştirme yolu
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 [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 --versionsu from util-linux 2.38.1Geç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 daemondaemon:x:2:2:daemon:/sbin:/sbin/nologindaemon'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ı
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/tmpsu - -s /bin/sh -c pwd daemon/usr/sbinKı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/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 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' daemonshsu - -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ırma | su | su - |
|---|---|---|
| Çalışma klasörü | Değişmedi (/tmp) | Hedef hesabın ev klasörü (/usr/sbin) |
| HOME, USER, LOGNAME | daemon'un değeri | daemon'un değeri |
| PATH | su'yu çalıştıran root'un değeri | Oturum açma ayarlarıyla yeniden belirlenir |
| Kabuk adı ($0) | sh | -sh (oturum açma kabuğu) |
| Diğer ortam değişkenleri | Olduğu gibi kalır | TERM 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
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 daemonThis 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 daemonuid=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çenek | Görev | Bu 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 komut | Kabuk açmadan tek bir komutu hedef hesabın kabuğuyla çalıştırır | nologin hesabı daemon'da su -c id daemon çalıştırılınca [This account is currently not available.] | |
| -s kabuk | Hesapta yazılı kabuk yerine belirtilen kabukla çalıştırır; kısıtlı kabuklu hesaplarda yalnızca root | su -s /bin/sh -c id daemon çıktısı uid=2(daemon) gid=2(daemon) groups=2(daemon) | |
| --help | Kullanımı ve seçenek listesini yazdırır | Usage satırı ve -m, -w, -g, -G, -l, -c, -f, -s, -P, -h, -V seçenek listesi | |
| --version | Sürüm bilgisini yazdırır | Debian 12 sunucusunda su from util-linux 2.38.1 |
📎 Diğer seçenekler: resmî kılavuza göre
| Seçenek | Görev | |
|---|---|---|
| -l | Kısa çizgiyle (-) aynı oturum açma seçeneği; uzun adı --login | |
| -m | Ortam 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 liste | Oturum açma seçeneği ortamı temizlerken virgülle yazılan değişkenleri korur; HOME, SHELL, USER, LOGNAME ve PATH yeniden belirlenir | |
| -g grup | Birincil grubu belirtir; yalnızca root | |
| -G grup | Ek grupları belirtir; yalnızca root; -g yoksa ilk ek grup birincil grup olur | |
| -f | Kabuğa -f aktarır; csh ve tcsh'te kullanılan seçenek | |
| -P | Yeni 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.
4️⃣ sudo su ile sudo -i farkı
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.
| Komut | Sorulan parola | Çalışan kabuk | Çalışma klasörü |
|---|---|---|---|
| su | root | root kabuğu | değişmez |
| su - | root | root oturum açma kabuğu | /root |
| sudo su | Çalıştıran hesap | root kabuğu | değişmez |
| sudo su - | Çalıştıran hesap | root oturum açma kabuğu | /root |
| sudo -i | Çalıştıran hesap | root oturum açma kabuğu | /root |
| sudo -s | Çalıştıran hesap | SHELL 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ı
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 daemonThis 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ı | Neden | Kontrol edilecek |
|---|---|---|
| This account is currently not available. | Hedef hesabın kabuğu nologin | getent passwd hesap satırının son alanı; root ise -s ile kabuk belirtin |
| su: Authentication failure | Parola yanlış | Hedef hesabın parolası mı (sudo sizin parolanızı sorar) |
| su: user user9 does not exist … | Bu adda bir hesap yok | getent passwd hesap_adı |
| user1 is not in the sudoers file. | sudo izni verilmemiş hesap | sudoers ayarları ve wheel grubu |
🔢 SSS & önerilen içerikler
İzin · sahiplik
Linux izinleri (4,2,1) ve sahiplik | chmod, chown, umask komutları
Dosya ve dizinlerin okuma, yazma ve çalıştırma izinlerini ve sahibini görme ve değiştirme yolunu anlatan yazı.
Kullanıcı ve erişim
Linux who, w komutları & user komutu
Şu anda sunucuda oturum açmış kullanıcıları ve çalıştırdıkları işleri gösteren komutlar.
Ağ ve erişim
SSH komutu: seçenekler ve kullanım
Uzak bir sunucuya kullanıcı hesabıyla bağlanan ssh komutunun temel biçimini ve seçeneklerini anlatan yazı.
ℹ️ 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.