Διαγραφή αρχείων χρήστη

Ξεκίνησε από gidarakos, 25 Σεπ 2009, 01:18:31 ΜΜ

« προηγούμενο - επόμενο »

gidarakos

Αφού διαγράψουμε έναν χρήστη από το "χρήστες και ομάδες" τα αρχεία του παραμένουν.
Ερώτηση 1η: Αν δοκιμάσουμε να τον ξαναδημιουργήσουμε με το ίδιο username δεν μπορούμε γιατί υπάρχει ήδη! Πως μπορούμε να τον επαναφέρουμε τον λογαριασμό; Δηλαδή να επαναφέρουμε το username που διαγράψαμε και όλα να λειτουργούν όπως πριν τη διαγραφή;
Μια 2η ερώτηση: Πως μπορούμε να διαγράψουμε τα πάντα που αφορούν έναν χρήστη όπως π.χ. το φάκελο του κάτω από το home φάκελο. Το είχα προσπάθησει με sudo rm (με κάποιες παραμέτρους διαγραφής φακέλων) αλλά κάπου μου έβγαζε πρόβλημα με δικαιώματα..

Ευχαριστώ για το χρόνο σας!

Κώστας Γιδαράκος

alkisg

Case study:
Πηγαίνουμε στο "Χρήστες και ομάδες" και φτιάχνουμε ένα χρήστη με όνομα username.
Αυτόματα δημιουργείται μια ομάδα πάλι με όνομα username, καθώς και ο προσωπικός του φάκελος στο /home/username.
Το όνομα χρήστη καθώς και το όνομα group αντιπροσωπεύονται από κάποια νούμερα που λέγονται UID (User ID) και GID (Group ID).
Σύνοψη:
Όνομα χρήστη: username
UID: 1001
Όνομα ομάδας: username
GID: 1001
Προσωπικός φάκελος: /home/username

Πάμε να σβήσουμε τον χρήστη. Ο προσωπικός του φάκελος όπως είπες δεν σβήνεται αυτόματα, αφού μπορεί να έχει χρήσιμα αρχεία εκεί μέσα. Μάλιστα, δεν σβήνεται καν η ομάδα του, επειδή μπορεί κάποιος administrator να έβαλε κι άλλον χρήστη στην ίδια ομάδα (μην το κάνετε, προτείνεται κάθε χρήστης να έχει σαν πρωτεύουσα ομάδα πάλι το username του).
Την ομάδα μπορούμε να τη σβήσουμε επιλέγοντας "Διαχείριση ομάδων".

Για τη διαγραφή του προσωπικού φακέλου, η εντολή είναι:
sudo rm -rf /home/username

Προσοχή - προσοχή: μην το συνηθίζετε. Αν έχετε προηγουμένως εκτελέσει άλλη sudo, δεν θα σας ζητήσει κωδικό. Και αν ενώ έχετε γράψει το μισό (sudo rm -rf /) και πριν γράψετε το home ένα παιδί σας κουνήσει λίγο με τον αγκώνα και πατήσετε το Enter, ε, τη βάψατε, σβήστηκε όλος ο σκληρός! :)

Ανάποδα λοιπόν από ότι συνηθίζεται στην κοινότητα, προτιμώ να πατάω Alt+F2, να γράφω
gksu nautilus

ώστε να ξεκινήσει η "εξερεύνηση" με δικαιώματα root, και να κάνω με γραφικό τρόπο τη διαγραφή επιλέγοντας το φάκελο και πατώντας Shift+Delete. Εννοείται φυσικά ότι και ο nautilus με δικαιώματα root θέλει τεράστια προσοχή και πρέπει να χρησιμοποιείται μόνο σε τέτοιες περιπτώσεις, όχι γενικά...


Η επαναφορά τώρα ενός λογαριασμού που έχει διαγραφεί είναι λίγο πιο κολπατζίδικη, επειδή θα πρέπει να ελέγξουμε ότι ο νέος λογαριασμός που θα δημιουργηθεί θα έχει το ίδιο UID και GID με τον διαγραμμένο λογαριασμό.
Κι εδώ υπάρχει τρόπος να γίνει με γραφικό τρόπο· είτε με την εισαγωγή/εξαγωγή χρηστών των sch-scripts, ορίζοντας το UID και το GID που θέλουμε, είτε μετονομάζοντας προσωρινά τον προσωπικό κατάλογο πριν ξαναδημιουργήσουμε το username από το "Χρήστες και ομάδες".

Το παρακάτω όμως είναι πολύ πολύ πιο σύντομο, οπότε ας καταφύγουμε σε κονσόλα:
ls -nd /home/username         # Με αυτό βλέπουμε το παλιό UID και GID, ας πούμε ότι είναι 1001
sudo adduser --uid 1001 --gid 1001 --add_extra_groups username

gidarakos

Αν δημιουργήσουμε κατά λάθος μέσω sch-scripts πολλούς χρήστες ποιος είναι ο πιο σύντομος τρόπος να τους διαγράψουμε;
Για έναν, διαγραφή από το μενού Χρήστες και Ομάδες και μετά διαγραφή του φακέλου με τον nautilus..
Για πολλούς;

Υ.Γ. Δεν ξέρω αν είναι σωστό που κάνω εδώ την ερώτηση γιατί το αρχικό θέμα είναι αρκετά παλιό..


gidarakos

Άλκη sorry, αλλά πριν ρωτήσω με λίγο ψάξιμο που έκανα δεν είχα δει αυτή την απάντηση..
for u in a1-01 a1-02 a1-03; do sudo deluser --remove-home $u; done

το δοκίμασα αλλά σβήνει μόνο τους χρήστες-φακέλους των a1-01 a1-02 a1-03;
Αν έχουμε κι άλλους - με μία λογική ακολουθίας - πρέπει να τους βάλουμε έναν-έναν στην εντολή;
Δεν θα έχει πολύ γράψιμο αυτό για πολλούς χρήστες;

apapakL

Αν το έκανες έτσι

for (( i=101; $i<=112; i++ )); do sudo deluser --remove-home a1-${i:1}; done


για κάθε τμήμα αν υποθέσουμε ότι έχεις 12 χρήστες/τμήμα?

alkisg

Παράθεση από: gidarakos στις 14 Μαρ 2011, 03:16:02 ΜΜ
Δεν θα έχει πολύ γράψιμο αυτό για πολλούς χρήστες;

Τη λίστα των χρηστών μπορείς να την πάρεις με πολλούς τρόπους, π.χ. με
cd /home
echo *

Και στη συνέχεια να την κάνεις copy/paste στην εντολή - αν θες χρησιμοποίησε το gedit σαν ενδιάμεσο ενόσω την κατασκευάζεις.
Μεγάλη προσοχή όμως να εξαιρέσεις τους λογαριασμούς που δεν πρέπει να σβηστούν, π.χ. teacher κτλ.

Επίτηδες δεν μπαίνω σε δημιουργία των ονομάτων με μεταβλητές (π.χ. a$i) για λόγους απλότητας, γιατί η --remove-home διαγράφει και τους φακέλους των χρηστών, οπότε αν ξεφύγει κάτι...  :'(
Πιο ασφαλές μου φαίνεται να δει κάποιος όλους τους χρήστες εντός της εντολής πριν πατήσει το enter. :)

gidarakos

Σας ευχαριστώ και τους δύο για το χρόνο σας..

Παράθεση από: apapakl στις 14 Μαρ 2011, 03:46:07 ΜΜ
Αν το έκανες έτσι

for (( i=101; $i<=112; i++ )); do sudo deluser --remove-home a1-${i:1}; done


για κάθε τμήμα αν υποθέσουμε ότι έχεις 12 χρήστες/τμήμα?
Επειδή δεν έχω ιδιαίτερη εμπειρία, το $ στο $i<=112 τι ρόλο παίζει;
Παρατήρησα ότι χωρίς το $ έχω το ίδιο αποτέλεσμα..

apapakL


gidarakos

Δημιούργησα και επισυνάπτω ένα απλό script το οποίο με διευκολύνει να διαγράψω ομαδικά χρήστες.
Ουσιαστικά περιλαμβάνει τις οδηγίες του Άλκη και του apapaki.
Πριν το τρέξουμε θα πρέπει να του κάνουμε μια απλή επεξεργασία αφού πρώτα διαβάσουμε τα σχόλια.

Υ.Γ. Κάθε τροποποίηση ή παρατήρηση ευπρόσδεκτη!

alkisg

Αφού κάνεις που κάνεις επαναλήψεις, μια ακόμα εναλλακτική:
for c in a1 a2 b1 b2 c1 c2; do
    for i in 01 02 03 04 05 06 07 08 09 10 11 12; do
        echo sudo deluser --remove-home user${i}${c};
    done;
done


Αφού βεβαιωθούμε ότι κάνει αυτά που θέλουμε, αφαιρούμε τη λέξη "echo".

yiannis

Είπα να μην ανοίξω καινούριο νήμα, μιας και είναι το πιο σχετικό με την απορία μου...

Θέλω στην αρχή κάθε χρονιάς να χρησιμοποιώ τους ίδιους χρήστες, αλλά να σβήνω όλα τα αρχεία τους, ρυθμίσεις κλπ. Δοκίμασα να σβήσω λοιπόν όλους τους σχετικούς φακέλους στο /home (alt+F2 nautilus κλπ), αλλά μετά έπαιρνα ένα μήνυμα λάθους όταν πήγαινα να μπω σαν χρήστης στα clients (όλα fat). Κατέληξα να σβήσω όλους τους χρήστες, έναν-έναν από το "χρήστες και ομάδες" και να τους ξαναδημιουργήσω από το sch-scripts! Περίεργη λύση, αλλά δούλεψε. Δεν υπάρχει κάποιος πιο απλός τρόπος για να σβήσω μόνο τα αρχεία αλλά οι χρήστες/κωδικοί να ισχύουν κανονικά;

Τέλος, παρατήρησα ότι ακόμα και από το "Χρήστες και Ομάδες" έχω πάλι την επιλογή του να σβήνω το φάκελο κατά τη διαγραφή ενός χρήστη. Έτσι δεν χρειαζόταν να το κάνω χειροκίνητα :)

Ευχαριστώ!

alkisg

Γενικά, για να σβήσουμε τα περιεχόμενα ενός φακέλου αλλά όχι τον ίδιο τον φάκελο, κάνουμε cd μέσα στο φάκελο, και εκτελούμε find . -delete
Για να κάνουμε login ως κάποιος χρήστης και να σβήσουμε το φάκελό του, sudo -i -u username find . -delete
Και για πολλούς χρήστες:

Κώδικας: shell
for user in user1 user2 user3; do
    sudo -i -u $user find . -delete
done


...και για να κάνεις copy/paste τη λίστα των χρηστών που θες να σβήσεις, ls /home

yiannis

Ευχαριστώ Άλκη,
τα σημείωσα για όταν τα ξαναχρειαστώ!! :)

Αν κατάλαβα καλά, έκανα το εξής λάθος: Ήθελα να κρατήσω τους ίδιους χρήστες και να σβήσω αρχεία & ρυθμίσεις για τους χρήστες user1, ..., user12. Έσβησα κατευθείαν τους φακέλους user1, ..., user12 μέσα στο /home. Έτσι, όταν κάποιος από αυτούς τους χρήστες προσπαθούσε να μπει, δεν υπήρχε ο φάκελός του και έβγαζε σφάλμα. Πιθανώς δεν έχει η συγκεκριμένη διαδικασία τα permissions για να δημιουργήσει τον κατάλληλο φάκελο μέσα στο /home. Αν έμπαινα μέσα στους φακέλους user1, ..., user12 και όπως λες και συ έσβηνα τα περιεχόμενά τους, όλα θα δούλευαν κανονικά. Κατάλαβα καλά;;; :)

alkisg

Yup. Επίσης θα μπορούσες αντί να σβήσεις + ξαναδημιουργήσεις τους χρήστες, απλά να δημιουργήσεις τα home directory τους, με τους κατάλληλους owners, π.χ.
sudo mkdir /home/username
sudo chown username:username /home/username