Neden normal bir kullanıcı bir dosya chown yapamıyor?


75

Neden chownsadece komut root? Kök olmayan kullanıcılar neden sahip oldukları dosyaları vermek için chown kullanamıyorlar?


sorunuzu anlayamıyorum chown komutu olmayan kök kullanıcı tarafından da kullanılabilir
harish.venkat

Belki yanlış anladım. Peki, uzmanımın tam sorusu şuydu: "Neden normal bir kullanıcıdan hakların taşınmasına UNIX sistemlerinde izin verilmiyor?" ...
phleg

19
Ben gerçek soru olduğunu düşünüyorum: neden root olmayan kullanıcıların kullanamaz chownetmek vermek oldukları dosyaları. (Dosya sistemi yapılandırmasına bağlı olarak yapabileceğiniz sistemleri gördüm.)
Keith Thompson

Yanıtlar:


96

Unix sistemlerinin çoğu, kullanıcıların dosyaları “vermelerini” önler, yani kullanıcılar yalnızca chownhedef kullanıcı ve grup ayrıcalıklarına sahipse çalıştırılabilir . Kullanmak chown, dosyaya sahip olmayı veya root olmayı gerektirir (kullanıcılar hiçbir zaman diğer kullanıcıların dosyalarına uygun olamaz), yalnızca chowndosyanın sahibini başka bir kullanıcıya değiştirmek için çalıştırılabilir .

Bu kısıtlamanın nedeni, başka bir kullanıcıya bir dosya vermenin nadir görülen, ancak yine de önemli durumlarda kötü şeylerin olmasına izin vermesidir. Örneğin:

  • Bir sistemde disk kotaları etkinse, Alice, yalnızca kendisi tarafından erişilebilen bir dizinin altında dünyaca yazılabilir bir dosya oluşturabilir (bu nedenle başka kimsenin o dünya tarafından yazılabilir dosyaya erişemeyeceği) ve chownbu dosyayı başka bir kullanıcı Bill'in sahibi yapmak için çalıştırabilir . Dosya, yalnızca Alice dosyayı kullanabilse bile Bill'in disk kotası altında sayılır.
  • Alice, Bill'e bir dosya verirse, Bill'in bu dosyayı oluşturmadığına dair hiçbir iz yoktur. Dosya yasadışı veya başka bir şekilde tehlikeye atılan veriler içeriyorsa, bu bir sorun olabilir.
  • Bazı programlar, bir isteği doğrulamak için giriş dosyalarının belirli bir kullanıcıya ait olmasını gerektirir (örneğin, dosya programın bu kullanıcı adına gerçekleştireceği bazı talimatlar içerir). Bu genellikle güvenli bir tasarım değildir, çünkü Bill, sözdizimsel olarak doğru talimatları içeren bir dosya oluştursa bile, bunları belirli bir zamanda yürütmeyi amaçlamamış olabilir. Bununla birlikte, Alice'in keyfi içerikli bir dosya oluşturmasına ve Bill'den girdi olarak alınmasına izin vermek işleri daha da kötüleştirebilir.

3
Önceki bir işte, dosyaları verememe yetisine bağlı bir yazılım sistemi kurdum. Belirli bir kullanıcı tarafından bir istek gönderildiğini doğrulamak için dosya sahipliğini kullandı. Kurulum sırasında, dosya verilmesine izin verilip verilmediğini kontrol etti ve öyleyse devam etmeyi reddetti.
Keith Thompson,

2
Daha kritik bir konu da, bir kullanıcının kopyalayabilmesi /bin/bash, ayarlayabilmesi ve daha sonra chownistediği kişiye verebilmesi. Şimdi o kişi olarak kabuk erişimine sahipler.
Patrick,

18
@Patrick chownher zaman setuid ve setgid bitlerini temizler.
Gilles

1
@Gilles ve iyi bir sebepten dolayı ... erişebileceğiniz bir yere bir kabuk ikilisini kopyalayabilseydiniz, setuid / gid bitlerini ayarlayabilir ve onu root olarak (ya da sizi 6755/0: 0 izin alacak herhangi bir sipariş alacak şekilde) / sahiplik) bu sistem üzerinde kök elde edebilirsiniz. Ah, Patrick'in yorumunu kesinlikle kaçırdı.
hanetzer

Ben dir (sahipseniz Tamam, ama drwxr-xr-x ring0 ring0 .) hangi kök içinde (normal dosyası vardır -rw-r--r-- root root file) Ben yapamam neden chown ring0 filebuna beri zaten olarak yapmak için izin verilir ring0, cp file x ; rm file ; mv x file(ve bazı isteğe bağlı touch sometime file...)?
Yüzük,

15

Linux'ta boğulmak için CAP_CHOWN özelliğine ihtiyacınız var. Kök böyle verilir. Açıklamalar için http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html adresine bakın . CAP_CHOWN özelliğini vermek istiyorsanız, kodunuzu aşağıdaki şekilde gösterildiği gibi libcap-ng veya libcap ile oluşturun: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html , CAPIT_WR_AUD_WE_BE_EIT CAP_CHOWN ile.


1
+1 için root olmanız gerekmez. Çünkü artık kök olmana gerek yok.
ctrl-alt-delor

1
Bazen, CAP_CHOWN'e bile gerek duymazsınız: unix.stackexchange.com/questions/399975/… Çekirdek kaynağını okuduğumda, her dosya sistemi uygulaması chown izinlerini kontrol etmekle görevlidir. Görünen o ki, NFS'de izinler sunucu tarafında kontrol ediliyor. Ve eğer sunucu ... garipse ... o zaman mümkün.
Mike S

0

Komutu başlatabilirsiniz, ancak root değilseniz çalışmaz. Çok kolay: bir yazılımı kök kullanıcıya değiştirebilecek bir kullanıcı hayal edin. Setuid bit ekleyebilir ve voilà, adam kök! Böylece, kullanım bit'i chmod ile ekleyebilir, ancak dosyaların sahibini değiştirme şansı yoktur.


12
Setuid bitini sahip olmadığınız bir dosyaya ekleyemezsiniz ve dosyaların setuid bitini temizlemesini sağlayan uygulamalar.
Gilles,

Bence Dom'un cevabının amacı şudur: Yapabildiğini düşün. O zaman sorun olur. Yapamayacağın şey, doğru. Ancak OP “neden?” Diye soruyor. Setuid bitini silmek, yine “neden?” Sorusunu başlatan başka bir güvenlik özelliğidir. Ki o zaman Dom'un cevabına atıfta bulunacağım: Bir kullanıcı boğulabilirse ve bir kullanıcı ayarlayabilirse, o zaman bu birleşme feci olurdu. Sanırım biraz eksik olsa bile iyi bir noktaya değindi.
Mike S
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.