Yetenekler, mevcut süreçten farklı olarak bazı önemli sistem ayrıcalıklarının ayrı bir iş parçacığında değerlendirilmesine izin verir. Bu şekilde, sistemin belirli bölümlerine erişmek için bir programı root olarak çalıştırmanız gerekmez.

İhtiyaçlardan kaynaklanan bir çözüm olarak POSIX.1e'nin 25. bölümü bu konu ile ilgilidir. Bu bölümde tanımlanan ayrıcalıkların geliştirilmesi ve daha fazlası, Linux çekirdeği 2.6.26 sürümünün yayınlanmasıyla tamamlanmıştır. Linux çekirdeğindeki yetenekler hakkında bilmeniz gereken her şey burada.

Yetenekler API Mantığını Anlama

Unix tabanlı sistemlerde yetki denetimi iki adımdan oluşur:

  • Çalışan uygulamanın mevcut sahibi (etkili kullanıcı kimliği, EUID) sıfırsa, sistem yetkilendirmeyi kontrol etmez.
  • EUID değeri sıfırdan farklı ise sistem, ilgili uygulamanın etkin kullanıcısı ve grubunun yetkileri doğrultusunda kontrol işlemini gerçekleştirir.

Bazı uygulamaların çalışırken daha geniş ayrıcalıklara (SUID, SGIT bitleri) sahip olması gerekir. En tipik örnek olarak şunu düşünebilirsiniz.

instagram viewer
şifre uygulaması. Bununla bir sistemdeki kullanıcılar şifrelerini değiştirebilirler. Ancak siteye yazmak için /etc/shadow Dosya, şifrelenmiş şifrelerin tutulduğu dosyada, root kullanıcı haklarıyla (yani kullanıcı kimliği = 0) çalışmak gerekir.

Bu sorunu çözmek için passwd uygulamasının bir SUID biti vardır. Bu uygulamayı hangi kullanıcı çalıştırırsa çalıştırsın, etkin sahip (EUID) her zaman kök olacaktır:

ls -l /usr/bin/passwd

# Çıktı
-rwsr-xr-x. 1 kök kök 32552 23 Temmuz 2021 /usr/bin/passwd

SUID uygulamalarını geleneksel Unix kimlik doğrulama modelinde çalıştırma yeteneği sorunu çözmüş gibi görünüyor. Ancak SUID bitli uygulamalardaki kritik hatalar sistemde tam yetkiye sahip kullanıcılar için istenmeyen kodların çalıştırılmasına kapı aralamaktadır. İdeal bir uygulama mümkünse root kullanıcı haklarına ihtiyaç duymadan çalışabilmelidir.

Sorun sadece SUID biti ile bitmiyor. Dinlemek istediğinizde de kök kullanıcı haklarına sahip olmalısınız. ayrıcalıklı TCP veya UDP bağlantı noktası Unix tabanlı sistemlerde 1024'ten az. Örneğin bir web sunucusunun TCP 80 portunu dinleyebilmek için uygulamayı root kullanıcısı olarak çalıştırmalısınız.

Yıllar geçtikçe ağ ortamına hizmet veren yazılımları tam yetkili bir kullanıcı hesabıyla çalıştırmanın ne kadar yıkıcı olduğu anlaşıldı. Geçici bir çözüm olarak, programın yalnızca belirli ve daha küçük bir bölümünün ayrıcalıklı bağlantı noktasını root olarak dinlemesi benimsendi, ve ardından sonraki işlemler için etkin kullanıcı kimliğini başka bir kullanıcıyla değiştirir (örneğin, kısıtlı haklara sahip hiç kimse).

Yıllardır kullanılan bu sistem sadeliği ile iyi iş görmüş ve halen verimli bir şekilde kullanılmaktadır. Ancak günümüzde uygulamaya özel bazı ek yetenekler elde etmek mümkündür. Yukarıda belirtilenler dışında, kök haklarına ihtiyaç duymadan Linux yetenekleri API'si aracılığıyla sistem.

Linux Yetenek Modeli, Açıklandı!

Yetenekler API'sinin en kapsamlı uygulamasını Linux çekirdeğinde bulabilirsiniz. Modern Linux dağıtımları da bu yeni modeli sistem genelinde mümkün olduğunca kullanmaya çalışır.

Örneğin, ping uygulamasının çalışması için, genellikle yalnızca kök kullanıcılar için ayrılmış olan RAW yuvalarını açabilmelidir. Eski Linux dağıtımlarında sorun, normal kullanıcıların kullanabilmesi için uygulamaya SUID bitini vermektir. Bu sürümlerde SUID bitini uygulamadan kaldırdığınızda ve uygulamayı normal bir kullanıcı olarak çalıştırmayı denediğinizde aşağıdaki hatayı alıyorsunuz:

ping atmak 8.8.8.8

# Çıktı
ping: icmp açık soket: İşleme izin verilmiyor

Modern Linux dağıtımlarında ise, ping uygulaması muhtemelen SUID bitine sahip değildir:

ls -l /bin/ping 

# Çıktı
-rwxr-xr-x. 1 kök kök 95232 25 Temmuz 2021 /bin/ping

Yine de uygulamayı normal bir kullanıcı olarak başarıyla çalıştırabilirsiniz. Bunu mümkün kılan mekanizma, ping uygulamasının özel yeteneğe sahip olmasıdır. CAP_NET_RAW.

Uygulamanın ek yeteneklerini şuradan öğrenebilirsiniz: getcap aşağıdaki gibi komut:

sudo getcap /bin/ping

# Çıktı
/bin/ping cap_net_raw=ep

getcap komutu boş bir yanıt döndürürse, bu değeri şu şekilde manuel olarak ayarlayabilirsiniz:

sudo set kapağı cap_net_raw+ep /bin/ping

Süreç Yetenek Modeli

Linux uygulamasında, her sürecin yetenekleri üç başlık altında gruplandırılmıştır:

Kabiliyet İfade
izin verilen Bu kümede, ilgili süreç için izin verilen ek yeteneklerin bir listesi vardır. İzin verilmesi, o anda aktif olarak kullanılabileceği anlamına gelmez. Buradaki yetkileri, ek bir eylemle etkin yetenek setine dahil etmek mümkündür.
etkili İlgili prosesin o anda aktif olan yetenek listesini gösterir. Beceri sistemini düzenleyen yardımcı işlevler ile bir beceriden vazgeçmek veya bir beceriyi yeniden kazanmak mümkündür. Ancak her durumda, bu yalnızca izin verilen grupta zaten yetkilendirilmiş olanlar arasında yapılabilir.
kalıtsal Bir uygulama yeni bir süreç başlattığında, yeni başlatılan süreç, izin verilenler listesinden devralacağı yeteneklerin listesini görüntüler.

Herhangi bir zamanda çalışan işlemler için izin verilen, etkili ve kalıtsal yeteneklerin listesi, satırlarda bit maskesi olarak görüntülenir. CapPrm, CapEff, ve CapInh dosyanın içinde /proc//status. ek olarak CapBnd satırı, yetenek sınırı kontrol işleminde kullanılan bit maskesini içerir.

Örneğin, çalışan kabuk uygulamanızın değerlerini şuradan okumayı deneyin: /proc/self/status dosya:

kedi /proc/öz/durum | grep Kap

# Çıktı
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000

Linux'ta Dosya Yetenek Modeli

Dosyalar için yetenek sisteminin çalışması, bu özelliklerin sanal dosya sistemi (VFS) katmanında saklanabilmesi ön koşuluna bağlıdır. Süreç modeline benzer şekilde, dosyalar için yetenekler üç başlık altında toplanır:

1. izin verildi

Sistem, ilgili yürütülebilir dosya bu kümede çalıştığında, sürecin izin verilen yeteneklerini belirler.

2. etkili

Süreç yetenek modelinden farklı olarak, bu başlık yalnızca bir biti depolar: etkin veya etkin değil. Bit aktifse, dosyanın izin verilen listesinde tanımlanan yetenekler otomatik olarak Bu dosya çalıştırıldığında ve bir süreç başlatıldığında ilgili sürecin etkin yetenek listesine aktarılır. yaratıldı. Bit aktif değilse, dosya üzerinde izin verilen yeteneklerin çalışan işleme otomatik aktarımı gerçekleştirilmez.

Ancak ilgili uygulamanın kodu yetenek sistemi ile entegre ise sistem çağrıları ile dosyanın izin verilen setindeki izinleri aktif hale getirebilir. Bu davranışın temel amacı, sisteme özgü yetenek içermeyen eski uygulamaların kod, yazılım kodu düzeyinde geliştirme, herhangi bir kaynak koduna ihtiyaç duymadan yetenek sistemi ile çalışabilir değişir.

Daha iyi yazılmış uygulamaların, yetenekleri yalnızca gerektiğinde kullanacağını düşünebilirsiniz. Bit aktifse, uygulama başladığında izin verilenler listesindeki tüm yetenekler aktif hale gelir.

3. kalıtsal

Süreç modelinde olduğu gibi ilgili dosya çalışır ve bir süreç oluşur. Bundan sonra süreç içerisinden başka bir uygulama çalıştırılırsa, yeni sürecin izin verilenler listesine dahil edilir. Özetlemek gerekirse, devralınacak yeteneklerin bir listesini gösterir.

Bir Linux Sisteminde Yeteneklerin Rolü

Normal bir kullanıcı olarak belirli bir işlemi çalıştırdığınızda herhangi bir ayrıcalığınız yoktur. Sonuç olarak, yalnızca sistemin normal kullanıcılar için izin verdiği bölümlere erişebilirsiniz. Bunun temel nedeni sistem güvenliğinin sıkılaştırılması ve bu tür önlemlerin uygulanmasıdır.

Tüm kullanıcıların tüm kaynaklara erişmesine izin vermek ciddi bir güvenlik açığı oluşturabilir. Sistemi kötü amaçlarla kullanan kişilerin sistem açıklarından yararlanmaları çok kolay olacaktır. Linux yetenekleri bu tür konularda işe yarar. Çekirdek tarafından desteklenen yetenekler API'si ile uygulamalarınızın güvenliğini kolayca güçlendirebilirsiniz.

Linux yetenekleri, root kullanıcısının bilgilerini bölmek gibi çok güçlü yöntemler yapmak için üzerinde düşünülmesi gereken konulardan sadece bir tanesidir. izinlerin verilmesi, ayrıcalıklı olmayan kullanıcılara çeşitli izinlerin atanması ve internet hizmetlerinde açık portlar ile ilgili çeşitli önlemlerin alınması Linux sunucuları.

Bu 7 Sağlamlaştırma Adımıyla Linux Sunucu Güvenliğinizi Artırın

Sonrakini Oku

PaylaşmakCıvıldamakPaylaşmakE-posta

İlgili konular

  • Linux
  • Programlama
  • Linux çekirdeği
  • İşletim sistemi

Yazar hakkında

Fatih Küçükkarakurt (8 Makale Yayınlandı)

Matematik ve teknolojinin hayranı olan bir mühendis ve yazılım geliştiricisi. Bilgisayarları, matematiği ve fiziği her zaman sevmiştir. Oyun motoru projelerinin yanı sıra makine öğrenimi, yapay sinir ağları ve lineer cebir kütüphaneleri geliştirmiştir. Ayrıca makine öğrenmesi ve lineer matrisler üzerinde çalışmalarını sürdürmektedir.

Fatih Küçükkarakurt'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın