Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Using UNC path with credentials

Îåêßíçóå áðü ôï ìÝëïò γιωργος μπακογιαννης. Τελευταία δημοσίευση από το μέλος γιωργος μπακογιαννης στις 05-04-2016, 16:57. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-03-2016, 13:41 77635

    Using UNC path with credentials

    Έχω φτιάξει μια εφαρμογή (σε C#) για backup αρχείων. Ας υποθέσουμε ότι υπάρχει ένα NAS ή ένας Windows Server που θέλω να αποθηκεύω τα αρχεία ασφάλειας που δημιουργεί. Σε αυτόν τον χώρο δεν θέλω οι χρήστες να έχουν πρόσβαση στο συγκεκριμένο unc folder (πχ. \\192.168.1.200\Backup\). Έχοντας τα credentials για αυτό το folder πως μπορώ να έχω access ΜΟΝΟ στο context της εφαρμογής; 
    Κάποιες «λύσεις» που βρήκα όταν η εφαρμογή έχει access στο φάκελο (έτρεχε) τότε ο τρέχον χρήστης έχει access από τον files explorer. Όταν η εφαρμογή τερμάτιζε μετά από λίγο έχανε και ο τρέχον χρήστης το access.


    while (!dead) learn();
  •  24-03-2016, 15:08 77636 σε απάντηση της 77635

    Απ: Using UNC path with credentials

    Τι θέλεις να κάνεις και τι εννοείς backup? Κατά κανόνα το job το οποίο εκτελεί ένα backup τρέχει με συγκεκριμένο account, άσχετο από τους χρήστες, το οποίο έχει πρόσβαση πχ. και στις βάσεις ή τα αρχεία, και στο share όπου θα αποθηκευθούν τα αρχεία. Αυτό είναι απείρως πιο ασφαλές από το να βάζεις credentials "κάπου" και να ελπίζεις ότι δεν θα τα βρουν οι χρήστες.

     Από κι και πέρα, οι εφαρμογές οι οποίες εκτελούν εργασίες ως άλλοι χρήστες ουσιαστικά κάνουν impersonate: παρουσιάζουν δηλαδή τα credentials ενός account στο λειτουργικό και για ένα ορισμένο διάστημα δουλεύουν ως αυτός ο χρήστης. Αυτό απαιτεί όμως ότι κάπου θα μπορέσεις να αποθηκεύσεις τα username/password με ασφαλή τρόπο. 

     Το impersonation απαιτεί κάποιες κλήσεις Win32, κλήσεις στην WindowsIdentity.Impersonate και χειρισμό hanldes όπως φαίνεται σε αυτή την απάντηση στο SO. Ευτυχώς, ο Martin Johnson έφτιαξε ένα Nuget package που μετατρέπει όλη τη μανούρα σε μία απλή κλήση

     using (Impersonation.LogonUser(domain, username, password, logonType))

    {
        // do whatever you want as this user.
    }

    Αυτό όμως δεν λύνει το θέμα του *πως* και *πού* θα αποθηκεύσεις τα credentials. 


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  24-03-2016, 19:45 77637 σε απάντηση της 77636

    Απ: Using UNC path with credentials

    Παναγιώτη, σε ευχαριστώ για την γρήγορη απάντηση σου.
    Όσο αφορά τα credentials σύμφωνό. Αλλά ας το εξετάσουμε σε δεύτερο χρόνο. (Ξέρω είναι πρωτεύον). Αυτή τη «λύση» «Impersonate» την είχα βρει στο αναζήτηση που είχα κάνει. Το θέμα που έχει αυτή είναι ότι ο impersonate user πρέπει να υπάρχει και στο PC του user. 
     
    Ας υποθέσουμε σε ένα τερματικό με όνομα Nikos-PC υπάρχουν 2 users (Admin & Nikos). Μέσα στο ίδιο δίκτυο υπάρχει ένας Windows Server με όνομα WSBack υπάρχουν 2 users (Administrator & BackUser). Αυτό που θέλω είναι η εφαρμογή να κάνει logon με τα credentials του BackUser μόνο όμως στο context της εφαρμογής.

    while (!dead) learn();
  •  24-03-2016, 20:17 77638 σε απάντηση της 77636

    Απ: Using UNC path with credentials

    Τι θέλεις να κάνεις και τι εννοείς backup? :: Η εφαρμογή κάνει τα έξεις:
    Δέχεται φάκελους ως Sources.
    Δέχεται φάκελους ως Destinations.
    Εξαίρει φάκελους, αρχεία κτλ. από τα Sources.
    Εκτελεί εφαρμογές πριν και μετά το backup.
    Σταματά πριν το backup windows services.
    Εκκινεί μετά το backup τα αντίστοιχά windows services.
    Κάνει Restart ή ShutDown το PC με την ολοκλήρωση του.
    Κρατάει history backup για «n» ημέρες.
    Τα αρχεία στα destinations αποθηκεύονται ως zip. (με ZipLevel & ZipPwd)
    Κάνει σε κάθε backup έλεγχό για FoldersLimitDown, FoldersLimitUp, FilesLimitDown, FilesLimitUp, SizeLimitDown & SizeLimitUp.
    Όταν ολοκληρωθεί το backup στέλνει εκτός των άλλων που περιέχει το emal, έρχεται με μια από τις τρείς  ειδοποιήσεις «Executed successfully», «Executed with warnings» & «Executed with errors».
    Και τέλος και σημαντικότερο έχω μια εφαρμογή monitor που συλλέγει αυτά τα email καθημερινά, και εάν κάποιο backup έρθει με warnings ή errors, τότε πρέπει να επέμβει άνθρωπος.

    while (!dead) learn();
  •  28-03-2016, 14:51 77640 σε απάντηση της 77638

    Απ: Using UNC path with credentials

    Καταρχήν, αν όλα μαζί τα μηχανήματα δεν είναι σε domain, σημαίνει ότι δουλεύεις με workgroup και δεν έχει καμία σημασία πως λέγεται ο χρήστης στο Windows Server. Όλα τα μηχανήματα και οι χρήστες είναι ισότιμοι (χονδρικά). Αν *δεν* υπάρχει το ίδιο username/password και στα άλλα μηχανήματα, δεν έχει κανένα δικαίωμα να συνδεθεί. Το ότι υπάρχει κάποιος χρήστης που λέγεται BackupUser στο server, δεν δίνει κανένα δικαίωμα στο μηχάνημα NikosPC. 

    Αυτό που δεν καταλαβαίνω είναι γιατί να φτιάξεις από το μηδέν εφαρμογή για backup όταν υπάρχουν ήδη τέτοιες εφαρμογές, οι οποίες μάλιστα καλύπτουν πολύ καλύτερα σενάρια που δεν έχεις ακόμα σκεφθεί, όπως η διαχείριση ανοικτών αρχείων, η χρήση shadow volumes για να αποφύγεις να αντιγράψεις "μισά" αρχεία, η χρήση system journal για να εντοπίζει μόνο τα αλλαγμένα αρχεία, η χρήση ειδικών permissions για να διαβάσουν αρχεία χωρίς να δοθούν admin δικαιώματα στην εφαρμογή backup, κλπ.

    Αν τα μηχανήματα είναι σε domain θα μπορούσες να ορίσεις ένα domain account για να κάνει backups και να χρησιμοποιήσεις το backup service των Windows για να κάνεις όλο το backup. Ακόμα, θα μπορούσες να στήσεις versioning στα client μηχανήματα έτσι ώστε να μπορούν να κάνουν μόνοι τους οι χρήστες restore χωρίς να χρειαστεί να ζητήσουν από κάποιον να τους κάνει Restore τα αρχεία.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  29-03-2016, 07:25 77644 σε απάντηση της 77640

    Απ: Using UNC path with credentials

    Ας τα βάλουμε τώρα όλα μαζί.
    Όσο αφορά την ερώτηση στο πρώτο μου post, μετά από αρκετή ερευνά δεν βλέπω να υπάρχει λύση.
    Όσο αφορά το job του backup, ΝΑΙ σύμφωνό πρέπει να το τρέχει ένα «συγκεκριμένο account, άσχετο από τους χρήστες, το οποίο έχει πρόσβαση πχ. και στις βάσεις ή τα αρχεία, και στο share όπου θα αποθηκευτούν τα αρχεία. Αυτό είναι απείρως πιο ασφαλές».
    Όταν έχεις έναν Windows Server και τα όλα τα αρχεία βρίσκονται εκεί, τότε είναι εύκολο. Λες στην task scheduler σε μια συγκριμένη ώρα κάθε μέρα να κάνει backup και όλα καλά. Εάν έχεις domain controller και τα profiles είναι roaming κάνεις το παραπάνω και πάλι όλα καλά. Όμως όταν πρώτον ήμαστε στη Ελλάδα της κρίσης και δεύτερον δεν είναι όλες οι επιχειρήσεις τόσο μεγάλες για να μπορούν να αγοράσουν και να συντηρήσουν έναν Windows Server (hardware, software και σε ανθρώπινο δυναμικό) τότε πάμε σε workgroups. Αυτό συνεπάγεται το εξής: Δεν ξέρεις πότε ο χρήστης θα φύγει άρα δεν έχεις trigger για το backup. Μερικοί χρήστες «αρνούνται πεισματικά» να αποθηκεύουν τα αρχεία τους στο κεντρικό σημείο. Άρα αυτό που πρέπει να κάνεις (με αυτά που ξέρω) είναι να δημιουργήσεις ένα profile σε κάθε PC (πχ BackupUser) το οποίο έχει την πρόσβαση. Και τώρα έρχεται η ώρα της «μεγάλης φυγής». Θα πρέπει να πατήσει κάτι ο χρήστης για να κάνει το backup. Και για να τρέξει η backup εφαρμογή ως BackupUser χρήστης πρέπει να της δώσεις τα credentials του BackupUser. Αρά εδώ είναι που ερχόμαστε στο «θέμα του *πως* και *πού* θα αποθηκεύσεις τα credentials». Αυτό που κάνω είναι ότι χρησιμοποιώ το Data Protection API (DPAPI) και με DataProtectionScope.CurrentUser.
    Σχετικό link: http://www.thomaslevesque.com/2013/05/21/an-easy-and-secure-way-to-store-a-password-using-data-protection-api/
    Και τέλος όσο αφορά το «φτιάξεις από το μηδέν εφαρμογή», δεν ξέρω και δεν έχω βρει εφαρμογή να έχει έλεγχο limtup και limtdown αρχείων, φακέλων και μεγέθους. Γιατί εάν κάνω backup σε «χ» αρχεία/φακέλους και σε «ψ» Mbytes και μετά από «κάτι» που μπορεί να γίνει αλλάξει προς τα πάνω ή προς τα κάτω δραματικά, δεν θα το πάρω χαμπάρι. Εάν είναι προς τα κάτω κάτι κακό μπορεί να έχει συμβεί ή ένα είναι προς τα πάνω μπορεί να μην έχω αρκετό χώρο (συνήθως κρατάω 30 ημέρες backups). Επίσης δεν έχω βρει εφαρμογή να έχει ένα κεντρικό πάνελ (monitor) που θα μαζεύει τα αρκετά emails σε καθημερινή βάση και βλέπεις με μία ματιά εάν είναι όλα οκ. Και το σημαντικό είναι να έχει χαμηλό κόστος. Τη εφαρμογή την δίνουμε για κάθε τερματικό 30€ μαζί με το monitor.

    while (!dead) learn();
  •  29-03-2016, 13:46 77645 σε απάντηση της 77644

    Απ: Using UNC path with credentials

    Δεν είπες ότι υπάρχει ήδη μηχάνημα Windows Server? Δεν κοστίζει κάτι παραπάνω να το κάνεις domain. Ειδικά στην Ελλάδα της κρίσης, όπου είναι πολύ ακριβό να φτιάξεις custom λύση για να αντικαταστήσεις κάτι που είναι διαθέσιμο out-of-the-box. Ακόμα και αν σε απασχολεί μήπως χρειαστούν CALs - ήδη χρειάζονται CALs. 

    Όσο για τους χρήστες - ήδη τα server file shares γίνονται version κεντρικά και μπορούν να ληφθούν backups. Και μιλάω για 2003. Οι μεταγενέστερες εκδόσεις προσθέσαν features τα οποία μπορεί να σου επιτρέπουν ήδη να κάνεις backup από τα client machines. Σίγουρα υπάρχει από το 2003 η δυνατότητα να κάνεις backup τα user folders (Documents, Application Data, Desktop κλπ). Επίσης, ήδη από τα NT 4 υπάρχει το DFS  το οποίο επιτρέπει shares από πολλά μηχανήματα να εμφανίζονται ως ένα file system, replication με differential compression, synchronization αρχείων κλπ.
    Η ερώτηση αυτή θα έπρεπε να γίνει στο Autoexec.gr, όχι στο DotNetZone. 

    Όσο για το αν υπάρχει λύση - δεν θα βρεις όσο προσπαθείς να πας αντίθετα στο λειτουργικό και να βρεις κάτι που κάνει ακριβώς ότι έχεις φανταστεί. Ψάχνεις κάτι ανάμεσα σε backup και OneDrive.  Κι αυτά υπάρχουν και μάλιστα ως πολύ φθηνή υπηρεσία του Azure. Και εταιρικό OneDrive υπάρχει, και Azure AD Domain Services υπάρχει, το οποίο χρεώνεται από $37/μήνα.

    Όσο για τα συγκεκριμένα πράγματα που ψάχνεις δεν θα δουλέψουν ακριβώς γιατί γίνονται ανάποδα - δεν έχει νόημα να χρησιμοποιήσεις το (παλιό) DPAPI γιατί προσπαθείς να κρύψεις τα credentials από τον ίδιο το χρήστη. Γι αυτό υπάρχει το group Backup Operators, *και* στους clients. 


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-04-2016, 13:20 77654 σε απάντηση της 77635

    Απ: Using UNC path with credentials

    Ενδιαφέρον προσπάθεια 

    Να πω μια ακόμα οπτική.

    Γιατί να χρησιμοποιήσεις Shared Folders και να έχεις να αντιμετωπίσεις όλα τα προβλήματα που έχεις παραπάνω.

    Η λύση του FTP/SFTP την έχεις σκεφτεί?

    Έτσι ο Server μπορεί να είναι ότι θέλεις. Από Windows Server μέχρι Linux Mint, Μέχρι και ένα κλασσικό χαζό NAS κουτί που υποστηρίζει SFTP πρωτόκολλο.

     


    Manos
  •  05-04-2016, 16:57 77655 σε απάντηση της 77654

    Απ: Using UNC path with credentials

    Στην κύρια εφαρμογή που έχουμε, έχω φτιάξει file manager μέσω WCF και «τρέχει» ως windows service. Επίσης έχει λογική plug-in για μπορείς σε κάθε διαφορετική port να μπορεί να φορτώνεις διαφορετικά «application servers». Αλλά το backup δεν θέλω να το «βαρύνω» τόσο.


    while (!dead) learn();
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems