2009-05-22 36 views
9

Soru başlığı önerebileceği gibi, verilen dosyanın veya klasörün ntfs izinlerini denetlemenin yolunu bilmek isterim (ipucu: "güvenlik" sekmesi). Temel olarak, ihtiyacım olan şey bir dosyaya veya dizine (yerel bir makinede veya tercihen uzaktaki bir makinedeki bir paylaşımda) bir yol almak ve kullanıcı/grup listesi ile bu dosya/klasörün ilgili izinlerini almaktır. . Sonuçta, uygulama bir dizin ağacından geçecek, her nesne için izinleri okuyacaktır ve buna göre işleyecektir.Python kullanarak klasör/dosya ntfs izinlerini denetleme

Şimdi, bunu yapmak için bir dizi yolla düşünebilirsiniz:

  • ayrıştırma Cacls.exe'yi çıktı - kolayca yapılır, AMA, im şey eksik sürece, Cacls.exe'yi sadece izinleri verir R | W | C | F (okuma/yazma/değiştirme/tam) formunun yetersiz olması ("Klasörlerin içeriklerini listeleme" gibi izinleri almam gerekiyor), izinler de genişletilmiş)
  • xcacls.exe veya xcacls.vbs çıktı - evet, bana gereken tüm izinleri veriyorlar, ancak korkunç bir şekilde çalışıyorlar, bir yerel sistem dosyasında izin almak için ONE SECOND hakkında xcacls.vbs alır. Ben böyle ele alınabilir, ancak oldukça tekerleği

yeniden icat ediyorum eminim ben başka bir şey var mı - Böyle hız (? Doğru WinAPI sarar)

  • win32security kabul edilemez burada kayıp mı

  • +2

    Bence win32security istediğin şey. Gerçekten de Windows API'sı etrafında bir paketleyicidir. Çok düşük seviyeli olduğunu düşünüyor musunuz? –

    +0

    Eh, eğer win32security kullanarak bunu yapabilmemin tek yolu buysa, ama bu benim kendi kamalarımı yuvarlamak gibi olurdu, bu yüzden bunu direksiyon simidini yeniden icat etmek olarak nitelendirdim. – shylent

    +0

    Öncelikle, cacls, Win API’nın yaptığı her şeyi yapmaz (görünüşte, ne yapmak istediğinizi de içerir). İkincisi, API'yi (bağlamalar yoluyla bile) çağırmak muhtemelen çok daha hızlı olacaktır, ardından başka bir programa bombardıman edecek ve çıktıyı ayrıştıracaktır. –

    cevap

    16

    Kendi yuvarlanmanızdan zevk almadığınız sürece, win32security gitmenin yoludur. Burada bir örnek başlangıcı vardır: (!)

    http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html

    Eğer tehlikeli hafifçe yaşamak istiyorsan benim de ilerleme paket sonra konum tam olarak ne yapmak için tasarlanmıştır winsys.

    http://timgolden.me.uk/python/downloads/WinSys-0.4.win32-py2.6.msi

    veya sadece svn gövdesini ödeme yapabilirsiniz: Burada dev sürümünün bir MSI alabilirsiniz

    svn sen ne tarif yapmak için http://winsys.googlecode.com/svn/trunk winsys

    (en az tahmin eş kesin şartlar) bunu yapabilirdi:

    import codecs 
    from winsys import fs 
    
    base = "c:/temp" 
    with codecs.open ("permissions.log", "wb", encoding="utf8") as log: 
        for f in fs.flat (base): 
        log.write ("\n" + f.filepath.relative_to (base) + "\n") 
        for ace in f.security().dacl: 
        access_flags = fs.FILE_ACCESS.names_from_value (ace.access) 
        log.write (u" %s => %s\n" % (ace.trustee, ", ".join (access_flags))) 
    

    TJG

    +4

    Oh, Tim, çok teşekkür ederim! Söylemeliyim ki, bunu nasıl yapacağımı daha önce anladım (win32security kullanarak, evet), ama fark ettim ki, bunu _your_ sitesindeki örnekleri kullanarak yaptım! Ne tür bir tesadüf bu! :) – shylent