Giriş
Neden “sudo” yazmanız gerektiğini hiç merak ettiniz mi? Bir Linux veya Unix İşletim Sistemi ortamında belirli komutları çalıştırmaya çalışırken? Sudo aslında “super-user do” anlamına gelen bir kısaltmadır. Sudo komutunu kullandığınızda, programları çalıştırabilir ve komutları başka bir kullanıcının güvenlik ayrıcalıklarıyla yürütebilirsiniz.
Varsayılan olarak, sudo komutu sistem kullanıcılarının komutları süper kullanıcı ayrıcalıklarıyla yürütmesine olanak tanır. Bir Linux/Unix işletim sisteminin yeni kurulumu, süper kullanıcı ayrıcalıklarına sahip bir root hesabı oluşturur. Bir Linux/Unix sisteminin ilk sunucu kurulumunu yaparken, sistem yöneticileri root hesabıyla oturum açar ve diğer sistem kullanıcılarına sistem hakları atar. Bu ayarlar sudoers adlı bir dosyada saklanır. Root ayrıcalıklı bir hesap, sudoers dosyasını düzenleyebilir ve diğer kullanıcıların ayrıcalıklarını değiştirebilir.
Bu eğitimde, root ayrıcalıklarını nasıl elde edebileceğinizi ve sudoers dosyasında nasıl düzenlemeler yapabileceğinizi tartışacağız.
Gereksinimler
Bu uygulamalı bir eğitimdir ve eğitimi tam olarak anlamak için komutları test etmeniz gerekecektir. Bu eğitimde Ubuntu 20.04 sunucusunu kullanacağız, ancak Debian ve CentOS gibi modern Linux dağıtımlarından herhangi birine sahipseniz adımları takip edebilirsiniz. CloudSigma üzerinde kendi Ubuntu bulut sunucunuzu kurmak için bu bağlantıyı takip edebilirsiniz.
Root Ayrıcalıklarını Elde Etme
Aşağıda tartışacağımız üç yolla root ayrıcalıkları elde edebilirsiniz:
Root olarak oturum açma
Çoğu kişinin root ayrıcalıkları elde etmek için kullandığı en basit yöntem, root kullanıcı kimlik bilgilerini kullanarak bir sistemde oturum açmaktır. Yerel makinenize erişiyorsanız, sadece bir kullanıcı adı girmeniz yeterlidir ve sizden bir şifre istenecektir.
Root olarak oturum açmak için kullanabileceğiniz başka bir yöntem de, bir sunucuda oturum açmak ve görevleri gerçekleştirmek için kullanılan bir komut satırı aracı olan SSH'yi kullanmaktır. Sunucunuzun kullanıcı adını ve IP adresini gerektirir. Root olarak oturum açma sözdizimi aşağıdaki gibidir, sunucunuzun IP adresini yazın:
|
1 |
ssh root@your_server_ip_or_domain_name |
Terminalinizde yukarıdaki komutu girdiğinizde, SSH anahtarlarını kurmadıysanız şifrenizi girmeniz istenir veya kurduysanız SSH anahtarınızın parolasını girmeniz istenir. Doğru kimlik bilgilerini sağladığınızda oturum açmış olursunuz. Ubuntu'da uzak bir sunucuya bağlanmak için SSH'nin nasıl kullanılacağına ilişkin adım adım talimatlar için bu kılavuzu takip edin.
Root olmak için su kullanma
Bir Linux sisteminde root olmayan başka bir hesabı kullanarak oturum açabilirsiniz; bu, genellikle yönetimsel olmayan görevleri yaparken önerilen yöntemdir. Ne zaman root ayrıcalıkları elde etmek isterseniz, terminalinize su yazmanız yeterlidir:
|
1 |
su |
Sistem sizden root şifresini ister, ardından bir root kabuk oturumuna erişim kazanırsınız. Bu kabuk oturumundayken tüm yönetimsel görevleri gerçekleştirebilirsiniz ve normal kabuğa geri dönmek istediğinizde sadece Ctrl + D tuşlarına basın. İsteğe bağlı olarak, terminale exit yazıp enter tuşuna basabilirsiniz.
Root ayrıcalıklı komutları çalıştırmak için sudo kullanma
Bu eğitimin başında kısaca tanıtılan sudo komutu, root ayrıcalıklı bir kabuğa ihtiyaç duymadan tek satırlık komutları yürütmenize olanak tanır. Sadece sudo yazıp ardından yürütülecek komutu girersiniz:
|
1 |
sudo execute_this_command |
Örneğin, sisteminizi güncellemek için aşağıdakini girebilirsiniz:
|
1 |
sudo apt-get update |
Sizden bir şifre isteyecektir. su ile sudo komutu arasındaki fark, su komutunun root şifresini istemesi, sudo komutunun ise mevcut kullanıcının şifresini istemesidir. Sudo erişimi, sistem için büyük güvenlik etkileri taşıdığından varsayılan olarak kullanıcılara verilmez. Sonraki bölümlerde bu konuyu daha ayrıntılı ele alacağız.
Sudoers dosyasını düzenlemek için Visudo kullanma
Sudo ayrıcalıkları şu konumda bulunan sudoers dosyasında yapılandırılır: /etc/sudoers. Bu ayrıcalıklar, herhangi bir kullanıcının Linux sistemine erişim kazanması için gereklidir. Herhangi bir sözdizimi hatası, kullanıcıların sisteme giriş yapmasını engelleyecek ve dolayısıyla sistemi çalışamaz durumda bırakacaktır.
Visudo komutu, dosyayı kaydederken dosyanın sözdizimini kontrol eden özel bir düzenleyiciyle açar. Bu nedenle, sunucu sisteminizi kullanılamaz hale getirmenizi önlemek için yalnızca visudo komutunu kullanarak dosyayı açmanız önemlidir. Varsayılan olarak visudo, metin düzenleyiciyi (vi) vim ile açacak şekilde ayarlanmıştı. Ancak Ubuntu, visudo'yu nano metin düzenleyicisini kullanacak şekilde yapılandırdı. Debian veya Ubuntu'da, aşağıdaki komutu girerek farklı bir düzenleyiciye geçiş yapabilirsiniz:
|
1 |
sudo update-alternatives --config editor |
Ekran görüntüsünde gösterildiği gibi, varsayılan bir düzenleyici seçebileceğiniz düzenleyicilerin bir listesini görüntüler. Tercih ettiğiniz düzenleyicinin karşısındaki numarayı seçin:

Bir CentOS Linux dağıtımında, /etc/sudoers dosyasını düzenleyin ve aşağıdaki satırları ekleyin:
|
1 2 |
Defaults editor = /usr/bin/vim:/usr/bin/vi:/usr/bin/nano Defaults env_keep += "EDITOR" |
Aşağıdaki komutu girin. your_editor_of_choice kısmını kendi seçtiğiniz düzenleyici adıyla değiştirmeyi unutmayın:
|
1 |
export EDITOR=`which your_editor_of_choice` |
Komut, satırı ~/.bashrc dosyasına ekler. Değişiklikleri uygulamak için terminalinize aşağıdakileri girin:
|
1 |
. ~/.bashrc |
Artık visudo'nuz yapılandırıldığına göre, aşağıdaki komutu girerek dosyayı /etc/sudoers konumunda açabilirsiniz:
|
1 |
sudo visudo |
Sudoers Dosyasını Düzenleme
Önceki komutu çalıştırdığınızda, dosya yapılandırdığınız gibi birincil düzenleyicinizde açılır. Dosyanın içeriği aşağıdadır:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# # Bu dosya root olarak 'visudo' komutu ile DÜZENLENMELİDİR. # # Lütfen doğrudan bu dosyayı değiştirmek yerine /etc/sudoers.d/ dizinine # yerel içerik eklemeyi düşünün. # # Bir sudoers dosyasının nasıl yazılacağına ilişkin ayrıntılar için man sayfasına bakın. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Ana bilgisayar takma adı belirtimi # Kullanıcı takma adı belirtimi # Komut takma adı belirtimi # Kullanıcı ayrıcalığı belirtimi root ALL=(ALL:ALL) ALL # Yönetici grubu üyeleri root ayrıcalıkları kazanabilir %admin ALL=(ALL) NOPASSWD:ALL # sudo grubu üyelerinin herhangi bir komutu yürütmesine izin ver %sudo ALL=(ALL) NOPASSWD:ALL # "#include" yönergeleri hakkında daha fazla bilgi için sudoers(5) sayfasına bakın: #includedir /etc/sudoers.d |
Yorumlar oldukça açıklayıcıdır, ancak aşağıda satırların neyi belirttiğini tartışacağız.
Default Lines
- Defaults env_reset – Herhangi bir kullanıcı değişkenini kaldırmak için terminal ortam değişkenlerini sıfırlar. Böylece, bir sudo oturumundaki potansiyel olarak zararlı değişkenleri temizler.
- Defaults mail_badpass – Sisteme, başarısız sudo şifre denemelerinin bildirimlerini yapılandırılmış olan mailto kullanıcısına (genellikle root hesabı) e-postayla göndermesini söyler.
- Defaults secure_path – Sisteme tehlikeli olabilecek diğer kullanıcı tanımlı yolların kullanılmasını önlemek için, bir sudo işleminin yürütülürken kullanacağı uygulamaları arayacağı dosya sistemindeki birkaç yolu içerir.
Kullanıcı Yetki Belirleme Satırları
|
1 |
root ALL=(ALL:ALL) ALL |
- root ALL=(ALL:ALL) ALL – İlk alan, kuralın uygulanacağı kullanıcı adını belirtir. Bu durumda bu, root kullanıcısıdır.
- root ALL=(ALL:ALL) ALL – İlk ALL kuralın tüm ana bilgisayarlar için geçerli olacağını belirtir.
- root ALL=(ALL:ALL) ALL – İkinci ALL bu kuralın uygulandığı kullanıcının (yani root) tüm kullanıcılar olarak komut çalıştırabileceğini belirtir.
- root ALL=(ALL:ALL) ALL – Üçüncü ALL bu kuralın uygulandığı kullanıcının (yani root) tüm gruplar olarak komut çalıştırabileceğini belirtir.
- root ALL=(ALL:ALL) ALL – Son ALL bu kuralların tüm komutlar için geçerli olduğunu belirtir.
Bu kuralın belirttiğine göre, bir root kullanıcısı doğru şifreyi girdikten sonra sudo kullanarak herhangi bir komutu çalıştırabilir.
Grup Yetkileri Belirleme Satırları
Bu satırlar, gruplar için geçerli olan sudo yetki kurallarını belirtir. Alanlar, küçük bir farkla kullanıcı yetki satırlarıyla aynı eylemleri gösterir. Grup adlarını belirtmek için % işareti ile başlarlar.
Gördüğünüz gibi, admin grubu, herhangi bir ana bilgisayarda herhangi bir kullanıcı olarak herhangi bir komutu yürütebilir. sudo grubu, herhangi bir grup olarak komut yürütme ek yetkisiyle birlikte aynı yetkiye sahiptir.
/etc/sudoers.d Satırını Dahil Etme
Satırın başındaki # işaretinden dolayı #includedir /etc/sudoers.d satırı bir yorum satırı gibi görünebilir. Ancak bu, /etc/sudoers.d dizini içindeki dosyaların kaynak olarak alınması ve sudoers dosyasının bir parçası olarak kullanılması gerektiğini belirten bir dahil etme (include) yönergesidir. Bu dizin içindeki dosyalar, sudoers dosyasıyla aynı kuralları takip eder.
Dizin içindeki, içinde nokta (.) bulunmayan ve ~ ile bitmeyen tüm dosyalar okunur ve sudoers dosyası yapılandırmasına eklenir. Bu dizin, uygulamaların kurulum sırasında varsayılan sudoers dosyasını değiştirmeden, ilgili tüm kurallarını /etc/sudoers.d dizini altındaki tek bir özel dosyaya koyarak sudo yetkilerini değiştirmelerine olanak tanır. Dahası, bir uygulamanın yetkilerini incelemek veya geri almak istediğinizde, /etc/sudoers.d dizini içindeki dosyaları kolayca kontrol edebilir veya değiştirebilirsiniz, böylece /etc/sudoers dosyasını doğrudan değiştirmeniz gerekmez.
Genel bir kural olarak, /etc/sudoers.d dizini içindeki tüm dosyalar her zaman visudo komutu kullanılarak düzenlenmelidir. Sözdizimi aşağıdadır, komutta düzenlemek istediğiniz dosya adını değiştirmeyi unutmayın:
|
1 |
sudo visudo -f /etc/sudoers.d/file_name_to_edit |
Bir Kullanıcıya Sudo Yetkileri Atama
Yeni bir kullanıcıya genel sudo erişimi verdiğinizde, bu, kullanıcı hesabına sistem üzerinde tam yönetici erişimi verdiğiniz anlamına gelir. Bu, sistem yöneticilerinin sudo yetkilerine sahip diğer root olmayan kullanıcıları oluştururken gerçekleştirdikleri yaygın bir görevdir.
Zaten genel amaçlı yönetim grubuna sahip olan Ubuntu 20.04 gibi sistemlerde, kullanıcıyı bu gruba ekleyerek kolayca sudo yetkileri atayabiliriz. /etc/sudoers dosyasında görüldüğü gibi sudo grubu tam yönetici yetkilerine sahiptir ve aşağıdaki komutu girerek gruba bir kullanıcı adı ekleyebiliriz:
|
1 |
sudo usermod -aG sudo username |
İsteğe bağlı olarak, aynı şeyi gerçekleştirmek için gpasswd komutunu kullanabilirsiniz:
|
1 |
sudo gpasswd -a username sudo |
On CentOS üzerinde, sudo yetkilerine sahip varsayılan grup wheel olarak adlandırılır, bu nedenle yetkileri şu komutu kullanarak atayabilirsiniz:
|
1 |
sudo usermod -aG wheel username |
İsteğe bağlı olarak, gpasswd komutunu kullanarak, aynı işlemi şu komutla gerçekleştirebilirsiniz:
|
1 |
sudo gpasswd -a username wheel |
Bazı durumlarda, wheel CentOS üzerindeki grup /etc/sudoers dosyasında yorum satırı haline getirilmiş olabilir. Etkinleştirmek için dosyayı visudo ile açın ve grup adının bulunduğu satırın başındaki yorum işaretini kaldırın. Bunu satırın başındaki # işaretini kaldırarak yapabilirsiniz: %wheel ALL=(ALL) ALL.
Özel Kurallar Oluşturma
Şu ana kadar edindiğiniz sudoers genel sözdizimi bilgisiyle, artık bazı kurallar belirleme zamanınız geldi.
Takma Adlar (Aliases) Oluşturun
Takma adlar, öğeleri çeşitli "takma adlar" altında gruplandırarak sudoers dosyanızı düzenlemenize olanak tanır. Bu bölümde ele alacağımız üç yönerge bulunmaktadır: User_Alias kullanıcı/grup takma adları oluşturmak için, Cmnd_Alias komut takma adları oluşturmak için ve Runas_Alias bir kullanıcının başka bir kullanıcı olarak çalışmasına izin vermek için.
Örneğin, User_Alias kullanarak, /etc/sudoers dosyanızın içine, üç farklı kullanıcı grubu oluşturmak için aşağıdaki kod parçacığını ekleyebilirsiniz. Bazı kullanıcılar birden fazla gruba ait olabilir:
|
1 2 3 |
User_Alias GROUPONE = adelle, nikita, ellie User_Alias GROUPTWO = nikita, brenden, natalia User_Alias GROUPTHREE = brenden, walter, james |
Tüm grup adlarının büyük harfle başladığına dikkat edin. Yukarıdaki grup takma adları /etc/sudoers dosyasına eklendiğinde, GROUPTWO grubuna apt veritabanını güncelleme yetkisi atamak için /etc/sudoers dosyasına aşağıdaki kuralı ekleyebilirsiniz:
|
1 |
GROUPTWO ALL = /usr/bin/apt-get update |
Çalıştırılacak kullanıcı/grup belirtilmediğinde, sudo komutunun her zaman varsayılan olarak root kullanıcısını temel alacağını unutmayın.
İşte sistemi kapatmak ve yeniden başlatmak için bir komut takma adı oluşturduğumuz bir Cmnd_Alias örneği. Bu kural daha sonra GROUPTHREE grubuna atanır. /etc/sudoers dosyasının içine aşağıdaki satırları eklemek bunu sağlar:
|
1 2 |
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart GROUPTHREE ALL = POWER |
Yukarıdaki kod parçacığında, ilk satır kapatma ve yeniden başlatma komutlarını içeren POWER adında bir komut takma adı oluşturur. İkinci satır ise GROUPTHREE üyelerinin bu komutu çalıştırmasına izin verir.
İşte bir grup kullanıcının başka bir kullanıcı olarak çalışmasına izin verecek bir takma ad oluşturduğumuz Runas_Alias örneği:
|
1 2 |
Runas_Alias WEB = www-data, apache GROUPONE ALL = (WEB) ALL |
Yukarıdaki kod parçacığında, ilk satır WEB adında bir takma ad oluşturarak bu takma adın apache kullanıcısı veya www-data kullanıcısı olarak çalışacağını belirtir. İkinci satır ise takma adı GROUPONE grubuna atar. Artık birinci grubun üyeleri komutları apache veya www-data kullanıcısı olarak çalıştırabilir.
Kısıtlama Kuralları
Bu bölümde, sudo komutunun bir çağrıya nasıl yanıt vereceğini kontrol etmenin çeşitli yollarını öğreneceksiniz. Bazı komutlar tek kullanıcılı sistemlerde nispeten zararsızdır. Bu gibi durumlarda, kullanıcıların root yetkileriyle, root şifresini yazmak zorunda kalmadan çalışmalarına izin verebilirsiniz. Örneğin, GROUPONE grubundaki kullanıcıların updatedb komutunu şifre girmeden çalıştırmalarına izin vermek için /etc/sudoers dosyasına aşağıdakileri ekleyerek bir kural oluşturabilirsiniz:
|
1 |
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb |
NOPASSWD etiketi, şifre istenmeyeceğini belirtir. NOPASSWD etiketinin eşlik eden etiketi, varsayılan davranış olan PASSWD etiketidir. Bu, istemde bir şifre girilmesi gerektiği anlamına gelir.
Bir kurala, eşlik eden etiketi tarafından geçersiz kılınmadığı sürece bir etiket uygulanır, örneğin:
|
1 |
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill |
Bu kuralda, GROUPTWO grubundaki kullanıcılar updatedb komutunu şifre girmeden çalıştırabilir. Ancak, kill komutunu yürütmeden önce bir şifre girmeleri gerekir.
Bazı durumlarda, tehlikeli yürütmeleri önlemek için kullanıcıların belirli komutları çalıştırmasını kısıtlamak isteyebilirsiniz. İşte bu noktada NOEXEC etiketi devreye girer. Bazı programlar kendi arayüzlerinden başka komutlar çalıştırabilir. Bu tür bir programa örnek olarak less verilebilir. Eğer less arayüzünde aşağıdaki sözdizimine sahip bir komut yazarsanız, bu komut çalışacak ve bazı beklenmedik davranışlara neden olacaktır.
|
1 |
!calistirilacak_komutun_adi |
Bu tür bir davranışı önlemek için, kullanici_adi:
|
1 |
kullanici_adi ALL = NOEXEC: /usr/bin/less |
Ek Bilgiler
Bu bölümde, sudo ile çalışırken gerekli bulabileceğiniz bazı ek bilgileri, yönergeleri ve komutları ekliyoruz.
Yapılandırmada Runas_Alias kullandıysanız ve bir kullanıcının veya grubun başka bir kullanıcı olarak çalışabileceğini belirttiyseniz, kullanıcıda -u bayrağını ve gruplarda -g bayrağını kullanarak bu kullanıcılar olarak komutları yürütebilirsiniz. İşte sözdizimi:
|
1 2 |
sudo -u calistirilacak_kullanici komut sudo -g calistirilacak_grup komut |
Komutların her biri sizden ilgili şifreyi girmenizi isteyecektir. Kolaylık sağlamak amacıyla sudo, şifreyi bir süreliğine kaydeder, böylece sudo ile her komut çalıştırdığınızda şifreyi tekrar tekrar girmek zorunda kalmazsınız. Sudo ayrıcalıklı komutlarıyla işiniz bittiğinde aşağıdaki komutu girerek bu süreyi temizlemek isteyebilirsiniz:
|
1 |
sudo -k |
Sudo ayrıcalıklarıyla gerçekleştirmeniz gereken daha fazla göreviniz varsa ve şifre talebinden önceki süreyi uzatmak istiyorsanız veya sudo komutunun daha sonra şifre istemesini önlemek istiyorsanız, aşağıdaki komutu yazarak süreyi yenileyebilirsiniz:
|
1 |
sudo -v |
Komut sizden bir şifre ister ve bunu daha sonraki sudo kullanımları için önbelleğe alır.
Adınız için tanımlanmış sudo ayrıcalıklarını listelemek için aşağıdaki komutu girebilirsiniz:
|
1 |
sudo -l |
Komut, /etc/sudoers dosyasında yapılandırılmış olan ve kullanıcı adınız için geçerli olan tüm kuralları listeler. Kurallardan, kullanıcı adınızın sistemde hangi görevleri yapabileceği hakkında bir fikir edinebilirsiniz. İşte örnek bir ekran görüntüsü:

Bazı durumlarda, komutları çalıştırabilirsiniz ve başlarına sudo koymayı unuttuğunuz için başarısız olabilirler. Bu tür senaryolarda, komutu sudo ile başlayarak yeniden yazmanız gerekebilir. Komutu yeniden yazmak zorunda kalmamak için, "son komutu tekrarlama" bash özelliğinden yararlanabilirsiniz. Sözdizimi çift ünlem işaretidir. Terminalinizde çalıştırdığınız son komutu aşağıdakileri girerek yürütebilirsiniz:
|
1 |
sudo !! |
Son olarak, sudo'nun komutu sadece sudo ayrıcalıklarıyla çalıştırılacak şekilde yükselttiğini bilmek önemlidir. Ek bilgi için, kullanıcılarınızla biraz eğlenmek için bu bağlantıdaki talimatları takip edebilirsiniz.
Sonuç
Birden fazla kullanıcıyla çalışırken, sudo komutu ve sudoers dosyası hakkındaki işleyişi anlamak çok önemlidir. Bu eğitimde, sudoers dosyasını okuma ve değiştirmenin temellerinin yanı sıra root ayrıcalıkları elde etmek için kullanabileceğiniz çeşitli yöntemleri tanıttık.
Ayrıcalık ayrımının Linux sistemlerini güvenli kılan şey olduğunu her zaman aklınızda bulundurun. Bu nedenle, süper kullanıcı ayrıcalıkları normal kullanıcılara verilmemelidir. Belirli bir kullanıcıya sistemdeki özel görevlerini yerine getirmesi için tüm ayrıcalıkları değil, yalnızca kesinlikle gerekli olan ayrıcalıkları atayın.
Keyifli Çalışmalar!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.