Προς το περιεχόμενο

Αλλαγή real (=finger) name από απλό user?


alkisg

Προτεινόμενες αναρτήσεις

Παιδιά ευχαριστώ για τη μέχρι τώρα βοήθειά σας. Ένα προβληματάκι ακόμα:

 

Ας πούμε ότι έχουμε 100 χρήστες, και θέλουμε όταν κάνουν για πρώτη φορά login να βάζουν το real name τους, το οποίο αποθηκεύεται στο /etc/passwd και μπορούμε στη συνέχεια να το δούμε με finger username.

 

Το gnome-fast-user-switching applet δεν επιτρέπει αλλαγή του ονόματος.

Η chfn δε δουλεύει με ελληνικά ονόματα.

Η usermod δουλεύει κανονικά, αλλά μόνο από sudoers.

 

Πώς μπορώ να τους επιτρέψω να αλλάξουν το όνομα χωρίς να τους δώσω δικαιώματα sudo;

Μπορώ να φτιάξω ένα script το οποίο θα καλεί τη usermod αλλά θα εκτελείται με διαφορετικό λογαριασμό με περισσότερα προνόμια (π.χ. τον δικό μου) χωρίς να τους ζητάει password κτλ;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@myle: το setuid bit αγνοείται στα scripts, γιατί διαφορετικά αποτελεί τεράστιο κενό ασφαλείας.

 

@alkisg: η chfn είναι ο σωστός τρόπος. Επειδή το /etc/passwd το διαβάζουν διάφορες εφαρμογές, πολλές απ' τις οποίες περιμένουν 8-bit ή ASCII text, προσωπικά δε θα έγραφα ελληνικούς χαρακτήρες μέσα (σε καμία περίπτωση UTF, αλλά ούτε και iso). Αν τώρα επιμένεις να χρησιμοποιήσεις την usermod για να βάλεις ελληνικά, θα πρέπει με πολλή προσοχή να φτιάξεις έναν setuid root binary wrapper, που θα κάνει μια getuid() για να πάρει το real user ID και μετά θα καλεί την usermod (με μια execve μάλλον) για να αλλάξει το real name του χρήστη. Προσοχή πάντως, γιατί με το setuid ανοίγεις τις πόρτες της κόλασης αν δεν προσέξεις πολύ την ασφάλεια αυτού που θα γράψεις.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Apoike ευχαριστώ για το hint με τα scripts, κι ότι απορούσα γιατί δεν δούλευε το script που δοκίμαζα, ενώ το chfn δουλεύει.

 

Utf8 ονόματα επιτρέπει και ο διάλογος ρυθμίσεων του gnome user settings και τα αποθηκεύει απευθείας στο passwd! Είναι ο μόνος τρόπος για να βλέπω τα ονόματα των μαθητών στο panel, και είναι κρίμα να τους πω να γράφουν greeklish... Άμα δω κανένα πρόβλημα το αλλάζω στη συνέχεια.

post-13492-129062962323_thumb.png

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Είπαμε ότι το setuid bit αγνοείται στα scripts. Αυτό γίνεται για διάφορους λόγους, με κυριότερο τον ακόλουθο:

 

Όταν έχεις ένα script, αυτό εκτελείται με κάποιον interpreter, αυτόν που ορίζει το sha-bang:

>
#!/bin/zsh 
print "This is a script"

Έστω ότι το παραπάνω script λέγεται π.χ. test. Όταν τρέχεις ./test, ο πυρήνας βλέπει την πρώτη γραμμή και αυτό που εκτελεί στην πραγματικότητα είναι

>
/bin/zsh test

Επομένως βλέπουμε ότι κατ' αρχήν δεν εκτελείται το script, αλλά κάτι άλλο (ο interpreter). Αυτό σημαίνει ότι το setuid bit θα έπρεπε να μεταφερθεί στον interpreter από τον πυρήνα, κάτι το οποίο θα μπορούσε να γίνει. Το βασικότερο πρόβλημα όμως είναι το εξής: η εντολή /bin/zsh test θα φορτώσει τον interpreter (/bin/zsh), ο οποίος στη συνέχεια θα διαβάσει το αρχείο test. Ωστόσο θα μεσολαβήσει κάποιος χρόνος μεχρι να διαβάσει το test, μέσα στον οποίο μπορεί κάποιος να δημιουργήσει ένα race condition: μπορεί να αντικαταστήσει το αρχείο test αφού εκτελεστεί, αλλά πριν προλάβει ο interpreter να το διαβάσει, με ένα άλλο, δικού του περιεχομένου. Ο κακόβουλος χρήστης στην περίπτωση αυτή δε χρειάζεται κάποια ειδικά permissions εφόσον το setuid script είναι κάπου που μπορεί να γράψει, και μπορεί έτσι να εκτελέσει πρακτικά οτιδήποτε θελήσει ως κάποιος άλλος χρήστης (συνήθως ο root). Αυτό το race condition είναι το μεγάλο κενό ασφαλείας και είναι κάτι που δεν υπάρχει στα binaries.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για ακόμη μια φορά κατατοπιστικότατος.

 

Τα binary αρχεία πόσο ασφαλή είναι; Τι εννοώ... Έγραψα ένα πολύ απλό πρόγραμμα σε C που το έτρεχε κάποιος χρήστης και αυτό καλούσε με την σειρά του μια εντολή που ήθελε root δικαιώματα μέσω της su αν θυμάμαι καλά. Πρόσεξα όμως ότι στο binary αρχείο θα μπορούσε εύκολα να το αλλάξει κάποιος και να καλεί την rm για παράδειγμα. Με ένα απλό cat του binary μπορούσε να δεις αρκετά πράγματα. Ίσως ήταν και εσφαλμένος ο τρόπος που καλούσα την εντολή. Υπάρχει κάποια παράμετρος που μπορούμε να περάσουμε κατά το compile ώστε να γίνει το αρχείο ποιο ασφαλές.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για να σου αλλάξει το αρχείο δε νομίζω να μπορεί, αφού δεν έχει δικαιώματα στο file system (εννοείται group και others μόνο read/execute).

Αλλά άμα π.χ. εσύ τρέχεις system('rm κάτι') και αυτός αλλάξει το path του, και φτιάξει ένα δικό του προγραμματάκι rm, τότε θα τρέξει το δικό του rm με suid root και θα κάνει ότι θέλει...

 

Εγώ τελικά έφτιαξα ένα php αρχείο σαν ιστοσελίδα στον apache και έκανα προσωρινά chmod +s στο usermod, οπότε έπαιξε τέλεια χωρίς να δει κανένας χρήστης κώδικα... Βέβαια δεν ήταν και κανένας χακεράς, με λίγο παίξιμο με τα quotes θα μπορούσε να το διαλύσει το σύστημα! :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...