Ayrıcalıksız kullanıcı neden dosya sahipliğini değiştiremez?


15

Kesilmiş (2):

Yalnızca ayrıcalıklı bir işlem (Linux: CAP_CHOWN özelliğine sahip bir işlem) bir dosyanın sahibini değiştirebilir. Bir dosyanın sahibi, dosyanın grubunu, sahibinin üyesi olduğu herhangi bir gruba değiştirebilir. Ayrıcalıklı bir işlem (Linux: CAP_CHOWN ile) grubu keyfi olarak değiştirebilir.

Bu kısıtlamanın nedeni nedir? Ayrıcalıksız bir kullanıcı neden sahip olduğu bir dosyanın dosya sahipliğini değiştiremez (yani. / Etc / shadow)?

$ touch blah
$ chown root:root blah
chown: changing ownership of `blah': Operation not permitted

Yanıtlar:


27

Kullanıcıların dosyaları "dağıtmasına" izin vererek, işletim sisteminin çeşitli özelliklerinden haberdar olursunuz. Gibi:

Taking up another user's disk quota.
Impersonating another user (or even root) via setuid.
Having insufficient privileges to undo a mistaken chown.
Making it appear that someone else had created a given file.
Setting up cron jobs to run on other user's accounts.
And many more...

8

Bunu sağlamak için değil linux tasarımcıların sadece kişisel bir seçimdir - tüm sözde güvenlik nedenleri, verilen bu izin Unix sistemleri olduğu gibi, ferah.

Sanırım bu işlevsellik, unix'inizin davranışının 'System-V' (AT&T) veya Berkeley'in unix'i (BSD) izleyip izlemediğine geldi ...

Bahsedilen diğer güvenlik sorunlarına gelince:

  • Setuid aracılığıyla başka bir kullanıcının (veya kökün) kimliğine bürünme.

    Sorun değil: 'owner' değiştirildiğinde 'setXid' bitleri (U / G) temizlenir

  • Yanlış bir chown'ı geri almak için yeterli ayrıcalığa sahip olmak

    Gerçekten bir 'güvenlik riski' değil, AMA, kullanıcı değiştirmeye izin veren sistemlerde olabilir, sahip olduğunuz bir dizindeyse geri değiştirebilirsiniz, diğer akıllıca: 'dikkatli olun'!

  • Başka birinin belirli bir dosyayı oluşturduğunu göstermek.

    Hala sizin tarafınızdan yazılabilir bir dizinde olurdu. Yani, grubunuza veya hepsine yazmak için açık olmadıkça (veya özellikle ACL'ler varsa) kendi homedirlerine taşıyamazsınız.

  • Cron işlerini diğer kullanıcıların hesaplarında çalışacak şekilde ayarlama.

    Yine, işe yaramaz - çünkü crondirler kullanıcıya aittir ve yazılabilir olsa bile , diğer kullanıcılar tarafından okunamayacak şekilde ayarlanmamıştır .

  • herkes sahipliği değiştirebilirse, sistemdeki herhangi bir dosyaya erişmek için izinleri değiştirebilir.

    Hayır: yalnızca kullanıcı bu dosyayı içeren dizine 'sahipse'. Yani root'a 'passwd' adında bir dosya verebilirim, ancak / etc / dizinine yazma iznim olmadığı sürece / etc / dizinine taşıyamadım.

  • kotaları

    Potansiyel olarak geçerli bir nokta - EĞER sen kotaları kullanın, ancak olurdu gibi görünüyor Eğer Özetle-up eğer ev dir tarafından disk alanı kolay tespit etmek için; Tek sorun, birden çok kullanıcı tarafından yazılabilen dizinlerde olabilir. Bu durumda, belki o 'dir' sahibi tarafından gidiyor. Bu OLABİLİR bu sistemlerde durum desteğin sadece dizinleri bunu yapabilirsiniz, dosyaları 'veriyoruz' olduğunu size 'kendi', ama o kadar, ben aslında bu izin veren bir sistem üzerinde olduğumdan beri bir UZUN zaman oldu Kesin kısıtlamaları hatırlamıyorum.

'Dosyaları dağıtmaya' izin vermek için bazı 'takas' olduğunu hatırlıyorum ... örneğin - buna izin veren sistemlerde, linux'un izin verdiği başka bir şeye izin verilmedi, ancak neyin kapalı olduğunu hatırlayamıyorum el...

Yukarıdaki cevap, gerçek cevap DEĞİLDİR, çünkü cevap olarak işaretlenmemiş olduğunu söyleyebilirim. Bu daha çok bir tasarım kararı - sadece denemelerin ne olduğunu bilmiyorum.

Yukarıda belirtilmeyen, geçerli endişeler olabilecek güvenlik sorunları olabilir, ancak yukarıda belirtilenler geçerli değildir.

IMO, "/ proc" da sistem tarafından ayarlanabilen bir "değer" olmalıdır, ama genel olarak konuşursak, çoğu insanın bu kadar umursamadığını düşünüyorum.

Eğer buna büyük bir ihtiyaç varsa, 'chown' güvenlik açısından geliştirilebilir ve buna izin verecek şekilde değiştirilebilir ve daha sonra böyle bir ilkenin uygulanmasını sağlamak için w / setuid 'root' kurabilir.


Kotalar her zaman konuma değil dosya sahipliğine dayanır . Aksi takdirde birisi her şeyi içeride tutabilirdi . /tmp
user1686

+1, çok doğru görünüyorsun :). OpenSolaris sistemlerinde (gerçekten de System V torunudur) bunu bir mountseçenekle ayarlayabilirsiniz (bu nedenle bu ayar, sistem tarafından ayarlanabilen değer önerisine göre sistem çapında olmak yerine tek bir bağlama noktasıyla sınırlandırılabilir): rstchown(varsayılan ), kök kullanıcı için dosya sahibi değişikliklerini sınırlamak, norstchownayrıcalıksız kullanıcıların kendi dosyalarının sahibini değiştirmesine izin vermek için (dosyayı değiştiremezler).
WhiteWinterWolf

6

Herkes sahipliği değiştirebilirse, sistemdeki herhangi bir dosyaya erişmek için izinleri değiştirebilir. Bu yalnızca kötü amaçlı yazılım açısından (sudo gerekmez) değil, aynı zamanda bir sistem yöneticisi açısından da kötüdür. Kullanıcılardan herhangi biri dosyalardan herhangi birini değiştirebilirse, dosya izinleri işe yaramaz.


2
Sağ. Soruyu, kullanıcının sahip olduğu dosyalara atıfta bulunduğumu ve herhangi bir dosyaya atıfta bulunmayacak şekilde değiştirdim.
Alexandru

1
@Alexandru: myTrojan.shKök sahip olunan ve SUID bayrağına sahip olan kötü niyetli bir kullanıcıyı düşünün .
Benjamin Bannier

@honk: şimdi mantıklı.
Alexandru

5

Çünkü o zaman kullanıcı dosya sistemi kotalarından kaçabilir. 100MB'lık bir kotam varsa ve 100MB'lık bir kotanız varsa, 100MB yükleyebilir, chmod a + r, sizi seçebilir ve daha sonra başka bir 100MB yükleyebilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.