← man/system_admin
sudo — man sudo — 80×24
ugur@toprak:~/man/system_admin$man sudo
Bölüm 8 Sistem Yönetimi

sudo

başka bir kullanıcı olarak komut çalıştırma

Özet

       sudo -h | -K | -k | -V
       sudo -v [-ABkNnS] [-g grup] [-h makine] [-p istem] [-u kullanıcı]
       sudo -l [-ABkNnS] [-g grup] [-h makine] [-p istem] [-U kullanıcı] [-u kullanıcı] [komut [arguman_...]]
       sudo [-ABbEHnPS] [-C sayi] [-D dizin] [-g grup] [-h makine] [-p istem] [-R dizin]
	    [-T zaman_asimi] [-u kullanıcı] [DEG = deger] [-i | -s] [komut [arguman_...]]
       sudoedit [-ABkNnS] [-C sayi] [-D dizin] [-g grup] [-h makine] [-p istem] [-R dizin]
		[-T zaman_asimi] [-u kullanıcı] dosya_...

Açıklama

sudo, yetkili bir kullanıcının, güvenlik politikası tarafından belirtildiği şekilde süper kullanıcı (superuser) veya başka bir kullanıcı olarak bir komut çalıştırmasına izin verir. Çağıran kullanıcının gerçek (etkin olmayan) kullanıcı kimliği (real user-ID), güvenlik politikasına sorgulanacak kullanıcı adını belirlemek için kullanılır.

sudo; güvenlik politikaları, denetim (auditing) ve girdi/çıktı günlüğü kaydı için bir eklenti mimarisini destekler. Üçüncü taraflar, sudo ön ucuyla sorunsuz çalışacak kendi eklentilerini geliştirebilir ve dağıtabilirler. Varsayılan güvenlik politikası, /private/etc/sudoers dosyası veya LDAP üzerinden yapılandırılan sudoers eklentisidir. Daha fazla bilgi için Eklentiler (Plugins) bölümüne bakın.

Güvenlik politikası, bir kullanıcının sudo çalıştırmak için hangi ayrıcalıklara (varsa) sahip olduğunu belirler. Politika, kullanıcıların kendilerini bir parola veya başka bir kimlik doğrulama mekanizmasıyla doğrulamasını gerektirebilir. Kimlik doğrulama gerekiyorsa ve kullanıcının parolası yapılandırılabilir bir zaman sınırı içinde girilmezse sudo sonlanır. Bu sınır politikaya özgüdür; sudoers güvenlik politikası için varsayılan parola istemi zaman aşımı 0 dakikadır.

Güvenlik politikaları, kullanıcının kimlik doğrulamasına gerek kalmadan bir süre daha sudo çalıştırmasına izin vermek için kimlik bilgisi önbelleğe almayı (credential caching) destekleyebilir. Varsayılan olarak sudoers politikası, kimlik bilgilerini terminal başına 5 dakika süreyle önbelleğe alır. Daha fazla bilgi için sudoers(5) kılavuzundaki timestamp_type ve timestamp_timeout seçeneklerine bakın. Kullanıcı, sudo komutunu -v seçeneğiyle çalıştırarak, herhangi bir komut çalıştırmadan önbelleğe alınmış kimlik bilgilerini güncelleyebilir.

sudo'nun süper kullanıcı ayrıcalıkları elde etmenin birincil yöntemi olduğu sistemlerde, güvenlik politikası yapılandırma dosyalarında sözdizimi hatalarından kaçınmak zorunludur. Varsayılan güvenlik politikası olan sudoers(5) için, yapılandırma dosyalarındaki değişiklikler, herhangi bir sözdizimi hatası yapılmamasını garanti eden visudo(8) yardımcı programı kullanılarak yapılmalıdır.

sudoedit olarak çağrıldığında, -e seçeneği (aşağıda açıklanmıştır) doğrudan geçerli olur.

Güvenlik politikaları ve denetim eklentileri, sudo'yu çalıştırma konusundaki başarılı ve başarısız girişimleri günlüğe kaydedebilir. Bir G/Ç (I/O) eklentisi yapılandırılmışsa, çalışan komutun girdisi ve çıktısı da günlüğe kaydedilebilir.

Seçenekler aşağıdaki gibidir:

-A, --askpass Normalde, sudo bir parola gerektiriyorsa, bunu kullanıcının terminalinden okur. -A (askpass) seçeneği belirtilirse, kullanıcının parolasını okumak ve parolayı standart çıktıya yazmak için (muhtemelen grafiksel) yardımcı bir program çalıştırılır. SUDO_ASKPASS ortam değişkeni ayarlanmışsa, bu yardımcı programın yolunu belirtir. Aksi takdirde, sudo.conf(5) dosyası askpass programını belirten bir satır içeriyorsa o değer kullanılır. Örneğin:

askpass yardımcı programının yolu

Path askpass /usr/X11R6/bin/ssh-askpass

Eğer hiçbir askpass programı mevcut değilse, sudo bir hata ile çıkış yapacaktır.

-B, --bell Terminal mevcut olduğunda parola isteminin bir parçası olarak zili çalar. Bir askpass programı kullanılıyorsa bu seçeneğin hiçbir etkisi yoktur.

-b, --background Verilen komutu arka planda çalıştırır. sudo tarafından başlatılan arka plan süreçlerini yönetmek için kabuk iş kontrolünü (shell job control) kullanmak mümkün değildir. Çoğu etkileşimli komut arka plan modunda düzgün çalışmayacaktır.

-C sayi, --close-from=sayi Bir komutu yürütmeden önce sayi değerine eşit veya ondan büyük tüm dosya tanımlayıcılarını (file descriptors) kapatır. Üçten küçük değerlere izin verilmez. Varsayılan olarak sudo, bir komutu yürütürken standart girdi, standart çıktı ve standart hata dışındaki tüm açık dosya tanımlayıcılarını kapatacaktır. Güvenlik politikası, kullanıcının bu seçeneği kullanma yeteneğini kısıtlayabilir. sudoers politikası, -C seçeneğinin kullanılmasına yalnızca yönetici closefrom_override seçeneğini etkinleştirdiğinde izin verir.

-D dizin, --chdir=dizin Komutu geçerli çalışma dizini yerine belirtilen dizinde çalıştırır. Kullanıcının çalışma dizinini belirtme yetkisi yoksa güvenlik politikası bir hata döndürebilir.

-E, --preserve-env Güvenlik politikasına, kullanıcının mevcut ortam değişkenlerini korumak istediğini belirtir. Kullanıcının ortamı koruma izni yoksa güvenlik politikası bir hata döndürebilir.

--preserve-env=liste Güvenlik politikasına, kullanıcının virgülle ayrılmış ortam değişkenleri listesini, kullanıcının ortamından korunan değişkenlere eklemek istediğini belirtir. Kullanıcının ortamı koruma izni yoksa güvenlik politikası bir hata döndürebilir. Bu seçenek birden fazla kez belirtilebilir.

-e, --edit Bir komut çalıştırmak yerine bir veya daha fazla dosyayı düzenler. Güvenlik politikasına başvurulurken yol adı yerine "sudoedit" dizesi kullanılır. Kullanıcı politika tarafından yetkilendirilmişse aşağıdaki adımlar izlenir:

  1. Düzenlenecek dosyaların, sahibi çağıran kullanıcı olacak şekilde geçici kopyaları oluşturulur.

  2. Geçici dosyaları düzenlemek için politika tarafından belirtilen düzenleyici (editor) çalıştırılır. sudoers politikası sırasıyla SUDO_EDITOR, VISUAL ve EDITOR ortam değişkenlerini kullanır. SUDO_EDITOR, VISUAL veya EDITOR değişkenlerinden hiçbiri ayarlanmamışsa, sudoers(5) içindeki editor seçeneğinde listelenen ilk program kullanılır.

  3. Değiştirilmişlerse, geçici dosyalar orijinal konumlarına geri kopyalanır ve geçici sürümler kaldırılır.

Yetkisiz dosyaların düzenlenmesini önlemeye yardımcı olmak için, güvenlik politikası tarafından açıkça izin verilmedikçe aşağıdaki kısıtlamalar uygulanır:

• Sembolik bağlar (symbolic links) düzenlenemez (sürüm 1.8.15 ve üzeri).

• Düzenlenecek yoldaki sembolik bağlar, üst dizin çağıran kullanıcı tarafından yazılabilir olduğunda takip edilmez, ancak kullanıcı root ise bu durum hariçtir (sürüm 1.8.16 ve üzeri).

• Çağıran kullanıcı by yazılabilir bir dizinde bulunan dosyalar, kullanıcı root olmadığı sürece düzenlenemez (sürüm 1.8.16 ve üzeri).

Kullanıcıların aygıt özel dosyalarını düzenlemesine asla izin verilmez.

Belirtilen dosya mevcut değilse oluşturulacaktır. sudo tarafından çalıştırılan çoğu komutun aksine, düzenleyici çağıran kullanıcının ortamı değiştirilmeden çalıştırılır. Düzenlemeden sonra geçici dosya boşalırsa, dosya yüklenmeden önce kullanıcıya sorulur. Herhangi bir nedenle sudo bir dosyayı düzenlenmiş sürümüyle güncelleyemezse, kullanıcı bir uyarı alır ve düzenlenen kopya geçici bir dosyada kalır.

-g grup, --group=grup Komutu, hedef kullanıcının parola veritabanı girdisinde belirtilen birincil grup yerine grup olarak ayarlanan birincil grupla çalıştırır. grup, bir grup adı veya başında ‘#’ karakteri bulunan sayısal bir grup kimliği (GID) olabilir (örneğin, GID 0 için ‘#0’). Bir komutu GID olarak çalıştırırken, many shells ‘#’ karakterinin ters eğik çizgi (‘\’) ile kaçırılmasını gerektirir. -u seçeneği belirtilmemişse komut, çağıran kullanıcı olarak çalıştırılacaktır. Her iki durumda da birincil grup grup olarak ayarlanacaktır. sudoers politikası, -P seçeneği kullanımda olmadığı sürece hedef kullanıcının gruplarından herhangi birinin -g seçeneğiyle belirtilmesine izin verir.

-H, --set-home Güvenlik politikasının, HOME ortam değişkenini hedef kullanıcının parola veritabanı girdisinde belirtilen ev dizinine ayarlamasını talep eder. Politikaya bağlı olarak bu varsayılan davranış olabilir.

-h, --help Standart çıktıya kısa bir yardım mesajı yazdırır ve çıkar.

-h makine, --host=makine Güvenlik politikası eklentisi uzak komutları destekliyorsa komutu belirtilen makine üzerinde çalıştırır. sudoers eklentisi şu anda uzak komutların çalıştırılmasını desteklememektedir. Bu seçenek, bir kullanıcının uzak makinedeki ayrıcalıklarını listelemek için -l seçeneğiyle birlikte de kullanılabilir.

-i, --login Hedef kullanıcının parola veritabanı girdisinde belirtilen kabuğu bir oturum açma kabuğu (login shell) olarak çalıştırır. Bu, kabuk tarafından .profile, .bash_profile veya .login gibi oturuma özel kaynak dosyalarının okunacağı anlamına gelir. Bir komut belirtilirse, -c seçeneği kullanılarak kabuğa basit bir komut olarak iletilir. Alfanümerikler, alt çizgiler, tireler ve dolar işaretleri dışındaki her karakter (beyaz boşluk dahil) ters eğik çizgi (‘\’) ile kaçırıldıktan sonra komut ve tüm argümanlar aralarında boşluk olacak şekilde birleştirilir. Herhangi bir komut belirtilmemişse etkileşimli bir kabuk çalıştırılır. sudo, kabuğu çalıştırmadan önce o kullanıcının ev dizinine geçmeye çalışır. Komut, bir kullanıcının oturum açtığında alacağına benzer bir ortamla çalıştırılır. Çoğu kabuk, bir komut belirtildiğinde etkileşimli bir oturuma kıyasla farklı davranır; ayrıntılar için kabuğun kılavuzuna bakın. sudoers(5) kılavuzundaki "Command environment" (Komut ortamı) bölümü, sudoers politikası kullanımdayken -i seçeneğinin bir komutun çalıştırıldığı ortamı nasıl etkilediğini belgeler.

-K, --remove-timestamp -k seçeneğine benzer, ancak terminal veya üst süreç kimliğine bakılmaksızın kullanıcı için önbelleğe alınmış tüm kimlik bilgilerini kaldırır. sudo bir sonraki çalıştırıldığında, güvenlik politikası kimlik doğrulaması gerektiriyorsa bir parola girilmelidir. -K seçeneğini bir komutla veya başka bir seçenekle birlikte kullanmak mümkün değildir. Bu seçenek parola gerektirmez. Tüm güvenlik politikaları kimlik bilgisi önbelleğe almayı desteklemez.

-k, --reset-timestamp Bir komut olmadan kullanıldığında, geçerli oturum için kullanıcının önbelleğe alınmış kimlik bilgilerini geçersiz kılar. Oturumda sudo bir sonraki çalıştırıldığında, güvenlik politikası kimlik doğrulaması gerektiriyorsa bir parola girilmelidir. Varsayılan olarak sudoers politikası, kimlik bilgisi önbelleğinde her terminal için (veya terminal yoksa üst süreç kimliği için) ayrı bir kayıt kullanır. Bu, -k seçeneğinin farklı bir terminal oturumunda çalışan sudo komutlarına müdahale etmesini önler. Daha fazla bilgi için sudoers(5) kılavuzundaki timestamp_type seçeneğine bakın. Bu seçenek parola gerektirmez ve bir kullanıcının bir .logout dosyasından sudo izinlerini iptal etmesine izin vermek için eklenmiştir.

Bir komutla veya parola gerektirebilecek bir seçenekle birlikte kullanıldığında, bu seçenek sudo'nun kullanıcının önbelleğe alınmış kimlik bilgilerini yok saymasına neden olur. Sonuç olarak sudo (güvenlik politikası tarafından gerekiyorsa) bir parola isteyecektir ve kullanıcının önbelleğe alınmış kimlik bilgilerini güncellemeyecektir.

Tüm güvenlik politikaları kimlik bilgisi önbelleğe almayı desteklemez.

-l, --list Hiçbir komut belirtilmemişse, geçerli makinede çağıran kullanıcının (veya -U seçeneğiyle belirtilen kullanıcının) ayrıcalıklarını listeler. Bu seçenek birden fazla kez belirtilirse ve güvenlik politikası ayrıntılı çıktı formatını destekliyorsa daha uzun bir liste formatı kullanılır.

Bir komut belirtilirse ve geçerli makinede çağıran kullanıcı (veya -U seçeneğiyle belirtilen kullanıcı) için güvenlik politikası tarafından izin veriliyorsa, komutun tam yolu tüm argümanlarıyla birlikte görüntülenir. -l birden fazla kez belirtilirse (ve güvenlik politikası bunu destekliyorsa), eşleşen kural komutla birlikte ayrıntılı bir biçimde görüntülenir. Bir komut belirtilmişse ancak politika tarafından izin verilmiyorsa, sudo 1 durum değeriyle çıkış yapacaktır.

-N, --no-update Kullanıcı başarıyla kimlik doğrulaması yapsa bile kullanıcının önbelleğe alınmış kimlik bilgilerini güncellemez. -k bayrağının aksine, geçerli olmaları durumunda mevcut önbelleğe alınmış kimlik bilgilerini kullanır. Kullanıcının önbelleğe alınmış kimlik bilgilerinin ne zaman geçerli olduğunu (veya ne zaman kimlik doğrulaması gerekmediğini) tespit etmek için aşağıdaki komut kullanılabilir:

sudo -Nnv

Tüm güvenlik politikaları kimlik bilgisi önbelleğe almayı desteklemez.

-n, --non-interactive Kullanıcıya hiçbir şekilde girdi istemi sunulmasını engeller. Komutun çalışması için bir parola gerekiyorsa, sudo bir hata mesajı görüntüler ve çıkar.

-P, --preserve-groups Çağıran kullanıcının grup vektörünü değiştirmeden korur. Varsayılan olarak sudoers politikası, grup vektörünü hedef kullanıcının üyesi olduğu grupların listesiyle başlatır. Ancak gerçek ve etkin grup kimlikleri (GID'ler), hedef kullanıcıyla eşleşecek şekilde ayarlanmaya devam eder.

-p istem, --prompt=istem İsteğe bağlı kaçış dizileriyle özel bir parola istemi kullanır. Aşağıdaki yüzde (‘%’) kaçış dizileri sudoers politikası tarafından desteklenir:

%H domain adını da içeren makine adına genişletilir (yalnızca makinenin adı tam nitelikliyse veya sudoers(5) kılavuzunda fqdn seçeneği ayarlanmışsa)

%h domain adı olmadan yerel makine adına genişletilir

%p parolası istenen kullanıcının adına genişletilir (sudoers(5) kılavuzundaki rootpw, targetpw ve runaspw bayraklarına saygı duyar)

%U komutun altında çalıştırılacağı kullanıcının oturum açma adına genişletilir (-u seçeneği de belirtilmedikçe varsayılan olarak root olur)

%u çağıran kullanıcının oturum açma adına genişletilir

%% ardışık iki ‘%’ karakteri tek bir ‘%’ karakterine daraltılır

Özel istem, güvenlik politikası veya SUDO_PROMPT ortam değişkeni tarafından belirtilen varsayılan istemi geçersiz kılacaktır. PAM kullanan sistemlerde, sudoers dosyasında passprompt_override bayrağı devre dışı bırakılmadığı sürece özel istem, bir PAM modülü tarafından belirtilen istemi de geçersiz kılacaktır.

-R dizin, --chroot=dizin Komutu çalıştırmadan önce belirtilen kök dizine geçer (bkz. chroot(8)). Kullanıcının kök dizini belirtme izni yoksa güvenlik politikası bir hata döndürebilir.

Bu seçenek kullanımdan kaldırılmıştır ve sudo'nun gelecekteki bir sürümünde kaldırılacaktır.

-S, --stdin İstemi standart hataya (stderr) yazar ve terminal aygıtını kullanmak yerine parolayı standart girdiden (stdin) okur.

-s, --shell SHELL ortam değişkeni ayarlanmışsa belirtilen kabuğu veya çağıran kullanıcının parola veritabanı girdisinde belirtilen kabuğu çalıştırır. Bir komut belirtilirse, -c seçeneği kullanılarak kabuğa basit bir komut olarak iletilir. Alfanümerikler, alt çizgiler, tireler ve dolar işaretleri dışındaki her karakter (beyaz boşluk dahil) ters eğik çizgi (‘\’) ile kaçırıldıktan sonra komut ve tüm argümanlar aralarında boşluk olacak şekilde birleştirilir. Herhangi bir komut belirtilmemişse etkileşimli bir kabuk çalıştırılır. Çoğu kabuk, bir komut belirtildiğinde etkileşimli bir oturuma kıyasla farklı davranır; ayrıntılar için kabuğun kılavuzuna bakın.

-U kullanıcı, --other-user=kullanıcı Çağıran kullanıcı yerine kullanıcı için ayrıcalıkları listelemek üzere -l seçeneğiyle birlikte kullanılır. Güvenlik politikası diğer kullanıcıların ayrıcalıklarının listelenmesini kısıtlayabilir. sudoers politikası kullanılırken, -U seçeneği root kullanıcısı ile belirtilen kullanıcı için “list” ayrıcalığına sahip olan veya geçerli makinede root veya kullanıcı olarak herhangi bir komut çalıştırabilen kullanıcılarla kısıtlanmıştır.

-T zaman_asimi, --command-timeout=zaman_asimi Komut için bir zaman aşımı ayarlamak amacıyla kullanılır. Komut çıkmadan önce zaman aşımı süresi dolarsa komut sonlandırılacaktır. Güvenlik politikası, kullanıcının zaman aşımı ayarlama yeteneğini kısıtlayabilir. sudoers politikası, kullanıcı tarafından belirtilen zaman aşımlarının açıkça etkinleştirilmesini gerektirir.

-u kullanıcı, --user=kullanıcı Komutu, varsayılan hedef kullanıcı (genellikle root) dışındaki bir kullanıcı olarak çalıştırır. kullanıcı, bir kullanıcı adı veya başında ‘#’ karakteri bulunan sayısal bir kullanıcı kimliği (UID) olabilir (örneğin, UID 0 için ‘#0’). Komutları UID olarak çalıştırırken, birçok kabuk ‘#’ karakterinin ters eğik çizgi (‘\’) ile kaçırılmasını gerektirir. Bazı güvenlik politikaları, UID'leri parola veritabanında listelenenlerle kısıtlayabilir. sudoers politikası, targetpw seçeneği ayarlanmadığı sürece parola veritabanında olmayan UID'lere izin verir. Diğer güvenlik politikaları bunu desteklemeyebilir.

-V, --version sudo sürüm dizesini ve yapılandırılmış eklentilerin sürüm dizesini yazdırır. Çağıran kullanıcı zaten root ise, -V seçeneği sudo derlendiğinde configure programına iletilen seçenekleri gösterecektir; eklentiler varsayılan seçenekler gibi ek bilgileri görüntüleyebilir.

-v, --validate Kullanıcının önbelleğe alınmış kimlik bilgilerini günceller, gerekirse kullanıcının kimliğini doğrular. sudoers eklentisi için bu, varsayılan olarak sudo zaman aşımını 5 dakika daha uzatır ancak bir komut çalıştırmaz. Tüm güvenlik politikaları önbelleğe alınmış kimlik bilgilerini desteklemez.

  • --: -- seçeneği, sudo seçeneklerinin sonunu sınırlandırmak için kullanılır. Sonraki seçenekler komuta iletilir.

Açıklamada aksi belirtilmedikçe, bir değer alan seçenekler yalnızca bir kez belirtilebilir. Bu, kullanıcı kontrollü girdilerle sudo'yu çağıran kötü yazılmış betiklerin neden olduğu sorunlara karşı korunmaya yardımcı olmak içindir.

Komut için ayarlanacak ortam değişkenleri de sudo'ya VAR=deger biçiminde seçenek olarak iletilebilir; örneğin LD_LIBRARY_PATH=/usr/local/pkg/lib. Ortam değişkenleri, güvenlik politikası eklentisi tarafından getirilen kısıtlamalara tabi olabilir. sudoers politikası, seçenek olarak iletilen ortam değişkenlerini, mevcut ortam değişkenleriyle aynı kısıtlamalara tabi tutar; ancak önemli bir fark vardır. sudoers dosyasında setenv seçeneği ayarlanmışsa, çalıştırılacak komut SETENV etiketine sahipse veya eşleşen komut ALL ise, kullanıcı aksi takdirde yasaklanacak olan değişkenleri ayarlayabilir. Daha fazla bilgi için sudoers(5) kılavuzuna bakın.

Komut Yürütme

When sudo executes a command, the security policy specifies the execution environment for the command. Typically, the real and effective user and group and IDs are set to match those of the target user, as specified in the password database, and the group vector is initialized based on the group database (unless the -P option was specified).

Aşağıdaki parametreler güvenlik politikası tarafından belirtilebilir:

• gerçek ve etkin kullanıcı kimliği (user-ID)

• gerçek ve etkin grup kimliği (group-ID)

• tamamlayıcı grup kimlikleri (supplementary group-IDs)

• ortam listesi (environment list)

• geçerli çalışma dizini

• dosya oluşturma modu maskesi (umask)

• zamanlama önceliği (scheduling priority - nice değeri)

Süreç modeli sudo'nun bir komutu çalıştırabilmesinin iki farklı yolu vardır.

Bir G/Ç günlük eklentisi (I/O logging plugin) terminal G/Ç'sini günlüğe kaydedecek şekilde yapılandırılmışsa veya güvenlik politikası bunu açıkça talep ediyorsa, yeni bir sözde terminal (“pty”) tahsis edilir ve izleyici (monitor) olarak adlandırılan ikinci bir sudo süreci oluşturmak için fork(2) kullanılır. İzleyici, kendisi lider ve pty kontrol terminali olacak şekilde yeni bir terminal oturumu oluşturur, tekrar fork(2) çağırır, yukarıda açıklandığı gibi yürütme ortamını ayarlar ve ardından çocuk süreçte komutu çalıştırmak için execve(2) sistem çağrısını kullanır. İzleyici, kullanıcının terminali ile komutun çalıştırıldığı pty arasındaki iş kontrolü sinyallerini iletmek için vardır. Bu, komutun normal şekilde askıya alınmasını ve sürdürülmesini mümkün kılar. İzleyici olmasaydı, komut POSIX'in “yetim süreç grubu” (orphaned process group) olarak adlandırdığı grupta olurdu ve çekirdekten herhangi bir iş kontrolü sinyali alamazdı. Komut çıktığında veya bir sinyal ile sonlandırıldığında izleyici, komutun çıkış durumunu ana sudo sürecine iletir ve çıkar. Komutun çıkış durumunu aldıktan sonra, ana sudo süreci komutun çıkış durumunu güvenlik politikasının close işlevine ve yapılandırılmış herhangi bir denetim eklentisinin close işlevine iletir ve çıkar. Bu mod, sudoers politikası kullanılırken sudo 1.9.14 ve üzeri sürümler için varsayılandır.

Hiçbir pty kullanılmazsa, sudo fork(2) çağırır, yukarıda açıklandığı gibi yürütme ortamını ayarlar ve çocuk süreçte komutu çalıştırmak için execve(2) sistem çağrısını kullanır. Ana sudo süreci komut tamamlanana kadar bekler, ardından komutun çıkış durumunu güvenlik politikasının close işlevine ve yapılandırılmış denetim eklentilerinin close işlevine iletir ve çıkar. Özel bir durum olarak, politika eklentisi bir close işlevi tanımlamazsa sudo, önce fork(2) çağırmak yerine komutu doğrudan yürütecektir. sudoers politika eklentisi yalnızca G/Ç günlüğü etkinleştirildiğinde, bir pty gerektiğinde, bir SELinux rolü belirtildiğinde, komutun ilişkili bir zaman aşımı olduğunda veya pam_session ya da pam_setcred seçenekleri etkinleştirildiğinde bir close işlevi tanımlayacaktır. Hem pam_session ve pam_setcred, PAM kullanan sistemlerde varsayılan olarak etkindir. Bu mod, sudoers politikası kullanılırken 1.9.14 öncesindeki sudo sürümleri için varsayılandır.

PAM kullanan sistemlerde, güvenlik politikasının close işlevi PAM oturumunu kapatmaktan sorumludur. Ayrıca komutun çıkış durumunu da günlüğe kaydedebilir.

Sinyal işleme Komut, sudo sürecinin bir çocuğu olarak çalıştırıldığında sudo, aldığı sinyalleri komuta iletecektir. SIGINT ve SIGQUIT sinyalleri yalnızca komut yeni bir pty içinde çalıştırıldığında veya sinyal çekirdek tarafından değil bir kullanıcı süreci tarafından gönderildiğinde iletilir. Bu, kullanıcının her kontrol-C tuşuna basışında komutun SIGINT sinyalini iki kez almasını önler. SIGSTOP ve SIGKILL gibi bazı sinyaller yakalanamaz ve bu nedenle komuta iletilmeyecektir. Genel bir kural olarak, sudo tarafından çalıştırılan bir komutu askıya almak istediğinizde SIGSTOP yerine SIGTSTP kullanılmalıdır.

Özel bir durum olarak sudo, çalıştırmakta olduğu komut tarafından gönderilen sinyalleri iletmeyecektir. Bu, komutun yanlışlıkla kendini öldürmesini önler. Bazı sistemlerde reboot(8) yardımcı programı, sistemi yeniden başlatmadan önce kendisi dışındaki tüm sistem dışı süreçlere SIGTERM gönderir. Bu durum, sudo'nun aldığı SIGTERM sinyalini reboot(8) programına geri iletmesini engeller; aksi takdirde sistem gerçekten yeniden başlatılmadan önce reboot(8) sonlanabilir ve sistemi tek kullanıcı moduna benzer yarı ölü bir durumda bırakabilirdi. Ancak bu kontrolün yalnızca sudo tarafından çalıştırılan komut için geçerli olduğunu, komutun oluşturabileceği diğer süreçler için geçerli olmadığını unutmayın. Sonuç olarak, sudo aracılığıyla reboot(8) veya shutdown(8) çağıran bir betiği çalıştırmak, reboot(8) veya shutdown(8) komutları system() yerine exec() ailesi işlevleri kullanılarak çalıştırılmadığı sürece sistemin bu tanımlanmamış durumda kalmasına neden olabilir (system() işlevi komut ile çağıran süreç arasına bir kabuk yerleştirir).

Eklentiler Eklentiler, sudo.conf(5) dosyasındaki Plugin direktifleri aracılığıyla belirtilebilir. Dinamik paylaşılan nesneler (dynamic shared objects) olarak (bunları destekleyen sistemlerde) yüklenebilirler veya doğrudan sudo ikili dosyasına derlenebilirler. Hiçbir sudo.conf(5) dosyası mevcut değilse veya herhangi bir Plugin satırı içermiyorsa sudo, politika, denetim ve G/Ç günlüğü eklentileri için sudoers(5) kullanacaktır. /private/etc/sudo.conf dosyasının ayrıntıları için sudo.conf(5) kılavuzuna ve sudo eklenti mimarisi hakkında daha fazla bilgi için sudo_plugin(5) kılavuzuna bakın.

Çıkış Değeri

Bir komut başarıyla yürütüldüğünde, sudo'nun çıkış durumu yürütülen programın çıkış durumu olacaktır. Komut bir sinyal nedeniyle sonlandırıldıysa sudo, komutu sonlandıran sinyalin aynısını kendine gönderecektir.

-l seçeneği bir komut olmadan belirtilmişse, kullanıcının sudo çalıştırmasına izin veriliyorsa ve kimlik doğrulamasını başarıyla tamamlamışlarsa (güvenlik politikası gereği) sudo 0 değeriyle çıkış yapacaktır. -l seçeneğiyle bir komut belirtilmişse, çıkış değeri yalnızca komuta güvenlik politikası tarafından izin veriliyorsa 0 olacak, aksi takdirde 1 olacaktır.

Bir kimlik doğrulama hatası, yapılandırma/izin sorunu varsa veya verilen komut yürütülemiyorsa sudo 1 değeriyle çıkış yapar. İkinci durumda hata dizesi standart hataya yazdırılır. sudo, kullanıcının PATH değişkenindeki bir veya daha fazla girdiyi stat(2) ile kontrol edemezse, standart hataya bir hata yazdırılır. (Dizin mevcut değilse veya gerçekten bir dizin değilse, girdi yok sayılır ve hiçbir hata yazdırılmaz.) Bu normal şartlar altında gerçekleşmemelidir. stat(2) işlevinin “permission denied” (izin reddedildi) döndürmesinin en yaygın nedeni, bir otomatik bağlayıcı (automounter) çalıştırıyor olmanız ve PATH dizinlerinizden birinin şu anda ulaşılamayan bir makinede olmasıdır.

Güvenlik Notları

sudo, harici komutları yürütürken güvenli olmaya çalışır.

Komut taklidini (command spoofing) önlemek için sudo, kullanıcının PATH değişkeninde bir komut ararken (biri veya her ikisi PATH içindeyse) "." ve "" (her ikisi de geçerli dizini belirtir) girdilerini en son kontrol eder. Güvenlik politikasına bağlı olarak, kullanıcının PATH ortam değişkeni değiştirilebilir, değiştirilebilir veya sudo'nun yürüttüğü programa değiştirilmeden aktarılabilir.

Kullanıcılara, kullanıcı tarafından yazılabilen veya kullanıcının yazabileceği bir dizinde bulunan dosyaları yürütmek için asla sudo ayrıcalıkları verilme- melidir. Kullanıcı komutu değiştirebiliyor veya değiştirebiliyorsa, hangi ek komutları çalıştırabileceklerini sınırlamanın bir yolu yoktur.

Varsayılan olarak sudo yalnızca açıkça çalıştırdığı komutu günlüğe kaydeder. Bir kullanıcı ‘sudo su’ veya ‘sudo sh’ gibi bir komut çalıştırırsa, bu kabuktan çalıştırılan sonraki komutlar sudo'nun güvenlik politikasına tabi değildir. Aynı durum kabuk kaçışları sunan komutlar (çoğu düzenleyici dahil) için de geçerlidir. G/Ç günlüğü etkinleştirilmişse, sonraki komutların girdileri ve/veya çıktıları günlüğe kaydedilecektir, ancak bu komutlar için geleneksel günlükler olmayacaktır. Bu nedenle, kullanıcılara sudo aracılığıyla komutlara erişim verirken, komutun yanlışlıkla kullanıcıya etkin bir root kabuğu vermediğini doğrulamak için özen gösterilmelidir. Bunu ele alma yolları hakkında bilgi için sudoers(5) kılavuzundaki "Preventing shell escapes" (Kabuk kaçışlarını önleme) bölümünü inceleyin.

Potansiyel olarak hassas bilgilerin ifşa edilmesini önlemek için sudo, yürütülürken varsayılan olarak core dump (çekirdek dökümleri) üretimini devre dışı bırakır (bunlar çalıştırılan komut için yeniden etkinleştirilir). Bu tarihsel uygulama, çoğu işletim sisteminin set-user-ID süreçlerinin varsayılan olarak core dump yapmasına izin verdiği bir zamandan kalmadır. sudo çökmelerinde hata ayıklamaya yardımcı olmak için, sudo.conf(5) dosyasında “disable_coredump” seçeneğini aşağıdaki gibi false olarak ayarlayarak core dump'ları yeniden etkinleştirmek isteyebilirsiniz:

Set disable_coredump false

Daha fazla bilgi için sudo.conf(5) kılavuzuna bakın.

Ortam

sudo aşağıdaki ortam değişkenlerini kullanır. Güvenlik politikası, komutun ortamının gerçek içeriği üzerinde kontrole sahiptir.

EDITOR SUDO_EDITOR veya VISUAL ayarlanmamışsa -e (sudoedit) modunda kullanılacak varsayılan düzenleyici.

MAIL -i seçeneği belirtildiğinde veya sudoers dosyasında env_reset etkinleştirildiğinde (MAIL env_keep listesinde bulunmadığı sürece) hedef kullanıcının posta kuyruğuna (mail spool) ayarlanır.

HOME -i veya -H seçenekleri belirtildiğinde, -s seçeneği belirtildiğinde ve sudoers dosyasında set_home ayarlanmışsa, sudoers dosyasında always_set_home etkinleştirilmişse veya sudoers dosyasında env_reset etkinleştirilmişse ve HOME env_keep listesinde mevcut değilse hedef kullanıcının ev dizinine ayarlanır.

LOGNAME -i seçeneği belirtildiğinde, sudoers dosyasında set_logname seçeneği etkinleştirildiğinde veya sudoers dosyasında env_reset seçeneği etkinleştirildiğinde (LOGNAME env_keep listesinde bulunmadığı sürece) hedef kullanıcının oturum açma adına ayarlanır.

PATH Güvenlik politikası tarafından geçersiz kılınabilir.

SHELL -s seçeneği ile çalıştırılacak kabuğu belirlemek için kullanılır.

SUDO_ASKPASS Bir terminal mevcut olmadığında veya -A seçeneği belirtildiğinde parolayı okumak için kullanılan yardımcı bir programın yolunu belirtir.

SUDO_COMMAND sudo tarafından çalıştırılan komuta, tüm argümanları dahil olmak üzere ayarlanır. Potansiyel bir yürütme hatasını önlemek için argümanlar 4096 karakterde kesilir.

SUDO_EDITOR -e (sudoedit) modunda kullanılacak varsayılan düzenleyici.

SUDO_GID sudo'yu çağıran kullanıcının grup kimliğine (GID) ayarlanır.

SUDO_HOME sudo'yu çağıran kullanıcının ev dizinine ayarlanır.

SUDO_PROMPT -p seçeneği belirtilmediği sürece varsayılan parola istemi olarak kullanılır.

SUDO_PS1 Ayarlanırsa, PS1 değeri çalıştırılan program için bu değere ayarlanacaktır.

SUDO_TTY Mevcutsa, sudo'yu çağıran kullanıcının terminal aygıtına ayarlanır.

SUDO_UID sudo'yu çağıran kullanıcının kullanıcı kimliğine (UID) ayarlanır.

SUDO_USER sudo'yu çağıran kullanıcının oturum açma adına ayarlanır.

USER Yukarıda açıklanan LOGNAME ile aynı değere ayarlanır.

VISUAL SUDO_EDITOR ayarlanmamışsa -e (sudoedit) modunda kullanılacak varsayılan düzenleyici.

Dosyalar

/private/etc/sudo.conf sudo ön uç yapılandırması

Örnekler

       Aşağıdaki örnekler düzgün şekilde yapılandırılmış bir güvenlik politikası varsayar.

       Okunamayan bir dizinin dosya listesini almak için:

	   $ sudo ls /usr/local/protected

       ~yaz dizinini barındıran dosya sisteminin root olarak dışa aktarılmadığı bir makinede yaz kullanıcısının ev dizinini listelemek için:

	   $ sudo -u yaz ls ~yaz

       index.html dosyasını www kullanıcısı olarak düzenlemek için:

	   $ sudoedit -u www ~www/htdocs/index.html

       Yalnızca root ve adm grubundaki kullanıcılara açık olan sistem günlüklerini görüntülemek için:

	   $ sudo -g adm more /var/log/syslog

       Farklı bir birincil grupla jim olarak bir düzenleyici çalıştırmak için:

	   $ sudoedit -u jim -g audio ~jim/sound.txt

       Bir makineyi kapatmak için:

	   $ sudo shutdown -r +15 "quick reboot"

       /home bölümündeki dizinlerin kullanım listesini çıkarmak için. Komutlar, ‘cd’ komutunun ve dosya yönlendirmenin çalışmasına izin vermek için bir alt kabukta çalıştırılır.

	   $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"

Tanılama

sudo tarafından üretilen hata mesajları şunları içerir:

editing files in a writable directory is not permitted Varsayılan olarak sudoedit, üst dizinlerden herhangi biri çağıran kullanıcı tarafından yazılabilir olduğunda bir dosyanın düzenlenmesine izin vermez. Bu, kullanıcının keyfi bir dosyanın üzerine yazmasına izin verebilecek bir yarış durumunu (race condition) önler. Daha fazla bilgi için sudoers(5) kılavuzundaki sudoedit_checkdir seçeneğine bakın.

editing symbolic links is not permitted Varsayılan olarak sudoedit, dosyaları açarken sembolik bağları takip etmez. Daha fazla bilgi için sudoers(5) kılavuzundaki sudoedit_follow seçeneğine bakın.

effective uid is not 0, is sudo installed setuid root? sudo root ayrıcalıklarıyla çalıştırılmadı. sudo ikili dosyasının sahibi root kullanıcısı olmalı ve set-user-ID biti ayarlanmış olmalıdır. Ayrıca, ‘nosuid’ seçeneğiyle bağlanmış bir dosya sisteminde veya uid 0'ı ayrıcalıksız bir uid ile eşleyen bir NFS dosya sisteminde bulunmamalıdır.

effective uid is not 0, is sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges? sudo root ayrıcalıklarıyla çalıştırılmadı. sudo ikili dosyası doğru sahibe ve izinlere sahip ancak yine de root ayrıcalıklarıyla çalışmadı. Bunun en yaygın nedeni, sudo ikili dosyasının bulunduğu dosya sisteminin ‘nosuid’ seçeneğiyle bağlanmış olması veya uid 0'ı ayrıcalıksız bir uid ile eşleyen bir NFS dosya sistemi olmasıdır.

fatal error, unable to load plugins sudo.conf(5) dosyasında belirtilen eklentiler yüklenirken veya başlatılırken bir hata oluştu.

invalid environment variable name -E seçeneği aracılığıyla belirtilen bir veya daha fazla ortam değişkeni adı bir eşittir işareti (‘=’) içeriyordu. -E seçeneğinin argümanları, ilişkili bir değer içermeyen ortam değişkeni adları olmalıdır.

no password was provided sudo parolayı okumaya çalıştığında hiçbir karakter almadı. Bu durum, bir terminal mevcut olmadığında (veya -S seçeneği belirtildiğinde) ve standart girdi /dev/null adresinden yönlendirildiğinde meydana gelebilir.

a terminal is required to read the password sudo'nun parolayı okuması gerekiyor ancak bunu yapabilmesi için kullanılabilir bir mekanizma yok. ssh(1) aracılığıyla çalıştırılan uzak komutlar varsayılan olarak kullanılabilir bir terminale sahip değildir; ssh(1) komutuna -t seçeneğinin geçirilmesi, sudo'nun parolayı okumasına izin vermesi gereken bir terminal tahsis etmesini sağlayacaktır. sudo'nun bir terminal olmadan yerel komutları çalıştırmasına izin vermek için, standart girdiden bir parola okumak üzere -S seçeneği kullanılabilir veya sudo.conf(5) dosyası aracılığıyla ya da SUDO_ASKPASS ortam değişkeni ayarlanarak bir askpass yardımcısı yapılandırılabilir.

no writable temporary directory found sudoedit, geçici dosyalarını saklamak için kullanılabilir bir geçici dizin bulamadı.

The “no new privileges” flag is set, which prevents sudo from running as root. sudo, Linux “no new privileges” bayrağı ayarlanmış bir süreç tarafından çalıştırıldı. Bu durum, bir yürütülebilir dosya çalıştırılırken set-user-ID bitinin yok sayılmasına neden olur ve sudo'nun çalışmasını engeller. Bunun en olası nedeni, sudo'nun bu bayrağı ayarlayan bir kapsayıcı (container) içinde çalıştırılmasıdır. Kapsayıcının bu bayrak ayarlanmayacak şekilde yapılandırılmasının mümkün olup olmadığını görmek için belgeleri kontrol edin.

sudo must be owned by uid 0 and have the setuid bit set sudo root ayrıcalıklarıyla çalıştırılmadı. sudo ikili dosyası doğru sahibe veya izinlere sahip değil. Sahibi root kullanıcısı olmalı ve set-user-ID biti ayarlanmış olmalıdır.

sudoedit is not supported on this platform sudoedit'i yalnızca etkin kullanıcı kimliğinin (effective user-ID) ayarlanmasını destekleyen sistemlerde çalıştırmak mümkündür.

timed out reading password Kullanıcı, parola zaman aşımı (varsayılan olarak 5 dakika) dolmadan önce bir parola girmedi.

you do not exist in the passwd database Kullanıcı kimliğiniz (user-ID) sistem passwd veritabanında görünmüyor.

you may not specify environment variables in edit mode Ortam değişkenlerini yalnızca bir komut çalıştırırken belirtmek mümkündür. Bir dosyayı düzenlerken, düzenleyici kullanıcının ortamı değiştirilmeden çalıştırılır.

Ayrıca Bakınız

su(1), stat(2), login_cap(3), passwd(5), sudo.conf(5), sudo_plugin(5), sudoers(5), sudoers_timestamp(5), sudoreplay(8), visudo(8)

Tarihçe

sudo'nun kısa bir tarihi için sudo dağıtımındaki (https://www.sudo.ws/about/history/) HISTORY.md dosyasına bakın.

Yazarlar

Yıllar boyunca sudo üzerinde birçok kişi çalıştı; bu sürüm temel olarak şu kişi tarafından yazılan kodlardan oluşmaktadır:

Todd C. Miller

sudo'ya katkıda bulunan kişilerin kapsamlı bir listesi için sudo dağıtımındaki (https://www.sudo.ws/about/contributors/) CONTRIBUTORS.md dosyasına bakın.

Uyarılar

Bir kullanıcının sudo aracılığıyla rastgele komutlar çalıştırmasına izin veriliyorsa, o kullanıcının bir root kabuğu elde etmesini engellemenin kolay bir yolu yoktur. Ayrıca birçok program (düzenleyiciler gibi), kullanıcının kabuk kaçışları yoluyla komutlar çalıştırmasına izin verir, böylece sudo'nun kontrollerini atlatır. Ancak çoğu sistemde sudoers(5) eklentisinin noexec işleviyle kabuk kaçışlarını önlemek mümkündür.

‘cd’ komutunu doğrudan sudo aracılığıyla çalıştırmak anlamlı değildir, örn.

$ sudo cd /usr/local/protected

çünkü komut çıktığında üst süreç (kabuğunuz) hala aynı kalacaktır. Belirli bir dizinde bir komut çalıştırmak için -D seçeneği kullanılabilir.

sudo aracılığıyla kabuk betikleri çalıştırmak, bazı işletim sistemlerinde set-user-ID kabuk betiklerini güvensiz kılan aynı çekirdek hatalarını açığa çıkarabilir (işletim sisteminizde bir /dev/fd/ dizini varsa, set-user-ID kabuk betikleri genellikle güvenlidir).

Hatalar

sudo içinde bir hata bulduğunuzu düşünüyorsanız, https://bugzilla.sudo.ws/ adresindeki sudo hata veritabanına bir hata raporu gönderebilir veya https://github.com/sudo-project/sudo/issues adresinden bir sorun açabilirsiniz. E-posta kullanmayı tercih ederseniz, mesajlar sudo-workers e-posta listesine, https://www.sudo.ws/mailman/listinfo/sudo-workers (kamuya açık) veya sudo@sudo.ws (özel) adresine gönderilebilir.

Lütfen güvenlik açıklarını halka açık GitHub sorunları, Bugzilla veya e-posta listeleri aracılığıyla bildirmeyin. Bunun yerine bunları e-posta yoluyla Todd.Miller@sudo.ws adresine bildirin. İsterseniz mesajınızı https://www.sudo.ws/dist/PGPKEYS adresinde bulunan anahtarı kullanarak PGP ile şifreleyebilirsiniz.

Destek

sudo-users e-posta listesi aracılığıyla sınırlı ücretsiz destek mevcuttur; abone olmak veya arşivlerde arama yapmak için https://www.sudo.ws/mailman/listinfo/sudo-users adresine bakın.

Feragatname

sudo “OLDUĞU GİBİ” sunulmaktadır ve satılabilirlik ve belirli bir amaca uygunluk zımni garantileri dahil ancak bunlarla sınırlı olmamak üzere her türlü açık veya zımni garanti reddedilir. Tüm ayrıntılar için sudo ile birlikte dağıtılan LICENSE.md dosyasına veya https://www.sudo.ws/about/license/ adresine bakın.

Sudo 1.9.17p2 Haziran 7, 2025 SUDO(8)