sudo nasıl kullanılır ve incelikleri nelerdir?
Bu flood’da Unix benzeri sistemlerde bir programı başka bir kullanıcı (genellikle root
) olarak koşturmaya olanak sağlayan sudo - SuperUser DO
programının inceliklerine değineceğiz.
Normal kullanıcılar olarak işletim sistemlerinde zaman zaman yönetici yetkisi gerektiren işlemler yapmamız gerekir. sudo
sıradan kullanıcıların, sisteme yönetici olarak bağlanmaları gerekmeden yönetici yetkisi gerektiren işlemleri yapabilmesini sağlayan bir programdır.
sudo
sayesinde bazı işlemleri yönetici olarak yapması gereken kullanıcılara ayrı bir yönetici hesabı açılması ya da bu kullanıcılarla root
parolasının paylaşılması gerekmez. Kullanıcı ilgili işlemler için kendi adını kullandığı için bu işlemler loglanabilir ve sınırlanabilir. En güvenli yöntem, sudo
listesine eklenen kişilere sadece yapacakları işlemler için yetki vermektir. Bu sayede sudo
yetkisi verilen kişinin yetki aşımı yapması, örneğin sudo
kullanıcılarının işlemlerini loglayan dosyayı silmesi engellenebilir.
sudo
tanımlamalarının bulunduğu dosya genellikle /etc/sudoers
yolunda bulunur. Bu dosyanın muhakkak visudo
programı ile değiştirilmesi gerekir çünkü visudo
dosya güncellenirken sentaks kontrolü yaparak hatalı bazı konfigürasyonların kaydedilmesine izin vermez.
Aşağıda görülen örnekte joe
kullanıcısı için ilk ALL
ile bütün terminal ve makinelerden, ikinci ALL
ile root
dahil bütün kullanıcıların yerine, üçüncü ALL
ile ise bütün komutları koşturma hakkı tanınmıştır.
İşletim sistemi girilen sudo
parolasını belirli bir süre (15 dakika) boyunca tekrar sormaz. Güvenlik kaygıları düşük olan geliştirme ve test sistemlerinde ise sudo
için hiç parola sorulmaması istenebilir. Bunun için ilgili kullanıcıya ait satıra NOPASSWD
eklenir.
sudo
parametre verilmeden çalıştırılırsa root
kullanıcısı olarak işlem yapmaya çalışır. root
'tan başka bir kullanıcı ile işlem yapmak için -u <user_name>
opsiyonu kullanılabilir. Aşağıdaki ekran görüntüsünde bazı durumlar örneklenmiştir.
sudo
ile çalıştırılan komutun root
olarak çalışabilmesi sudo
programında aşağıda görülen s
biti (setuid
) ile mümkün olmaktadır. Bu biti işaretlenmiş programlar kendisini çalıştıran kullanıcı yerine kendisine sahip olan (root
) kullanıcının hakları ile çalışırlar.
sudo
ile ilgili en çok kafa karışıklığı yaşanan kısımlardan biri kullanıcıların sudo
ile Shell Builtin
adı verilen araçları kullanmaya çalışmasıdır. sudo
sadece programlarla çalışmakta, Shell Builtin
'lerle ise çalışmamaktadır.
sudo
'nun kafaları karıştırdığı bir başka nokta ise Shell Redirection
'dır. Aşağıda, istenenin tam aksine program sudo
ile çalıştırılmış, çıktı ise Shell
tarafından yönlendirilmiştir. Shell
asıl kullanıcının yetkileri ile çalıştığı için de yönlendirme başarısız olmuştur.
Yoğun olarak sudo
kullanılacak durumlarda taklalar atmaktan yorularak root
yetkileri ile bir kabuk açmak isteyebilirsiniz. Bunu yapmanın birçok yolu vardır ve insanlar genellikle çok kafa yormadan ilk kullandıkları ile yola devam ederler. Aşağıda değişik yollar özetlenmiştir.
Çok faydalı ancak pek bilinmeyen bir kabuk hilesi sudo
kullanmadan çalıştırınca başarısız olan komutu sudo !!
ile tekrar çalıştırmaktır. !!
kabuk tarafından son verilen komut olarak açılacağı (expand
) için komutu tekrar yazma zahmetine girilmeden komut çalıştırılmış olur.
Son olarak sudo
, -E
ile asıl kullanıcının ortam değişkenlerini (sınırlamalarla çakışmıyorsa) sudo
ile koşturulan programa taşıyabilir. -S
parametresi ise sudo
parolanın terminal yerine stdin
'den alınabilmesini sağlar ve bu özellik otomasyon betiklerinde kullanılır.