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.