Θέλω να αντιγράψω τα αρχεία/φάκελοι όλων των χρηστών (και του teacher) από την 12.04 στην 16.04 που έβαλα σε άλλον δίσκο. Εννοείται ότι θέλω μαζί με την αντιγραφή να έχουν και τα σωστά δικαιώματα ανάλογα με το όνομα χρήστη
Να πω επίσης ότι τα ονόματα χρηστών στην 16.04 είναι ίδια με την 12.04 απλά υπάρχουν και άλλοι χρήστες που δεν υπάρχουν στην 12.04
Γίνεται με κάποιο script ;;
Αν έχετε απορίες - διευκρινήσεις ρωτήστε ...
Και εγώ θα ήθελα ένα σκρπτ. Η δουλειά "με το χέρι" είναι περίπλοκο και εύκολο γίνουν λάθοι.
Έχω να κάνω και εγώ σε μερικά εργαστήρια. Σκέφτηκα τα βήματα ως εξής:
1) Να γίνει την εγκατάσταση 16.04 με ltsp αλλά χωρίς να προσθέσω άλλες χρήστες ακόμα.
2) Να αντιγράψω όλο το /home με rsync -a –progress η να το έχω σε χωριστό διαμέρισμα (partition) η δίσκο.
3) Να αντιγράψω μόνο τις γραμμές τα /etc/shadow και /etc/passwd και /etc/group από το 12.04 στο 16.04 που αναφέρουν τις επιπλέων χρήστες (τα παιδιά.)
4) Εάν όλο δουλεύουν στο 16.04 τότε και μόνο θα προσθέσω και άλλες χρήστες και προγράμματα.
Richard
Τα sch-scripts έχουν επιλογή "Εισαγωγή χρηστών από passwd", με την οποία φροντίζουν να ταιριάζουν τα uid/gid των νέων χρηστών με την παλιά εγκατάσταση, και έτσι με απλή αντιγραφή του /home τα δικαιώματα είναι σωστά.
Αν για οποιονδήποτε λόγο τελικά βγουν λάθος, δείτε αυτό: https://alkisg.mysch.gr/steki/index.php?topic=5959.msg68430#msg68430
Παράθεση από: alkisg στις 12 Μαρ 2018, 09:11:47 ΠΜ
Τα sch-scripts έχουν επιλογή "Εισαγωγή χρηστών από passwd", με την οποία φροντίζουν να ταιριάζουν τα uid/gid των νέων χρηστών με την παλιά εγκατάσταση, και έτσι με απλή αντιγραφή του /home τα δικαιώματα είναι σωστά.
Αν για οποιονδήποτε λόγο τελικά βγουν λάθος, δείτε αυτό: https://alkisg.mysch.gr/steki/index.php?topic=5959.msg68430#msg68430 (https://alkisg.mysch.gr/steki/index.php?topic=5959.msg68430#msg68430)
Όταν λες απλή αντιγραφή του /home ... πώς ακριβώς το εννοείς; ;)
Εννοείται ότι
δεν θέλω τον teacher
Αντιγραφή μπορεί να γίνει είτε από κονσόλα, π.χ.
sudo cp -a /source/home/user1 /source/home/user2 /home/
ή
sudo mv /source/home/user1 /source/home/user2 /home/
είτε γραφικά αν τρέξεις π.χ. sudo caja και κάνεις αντιγραφή/επικόλληση.
Με κονσόλα καλύτερα (γι' αυτό και σε ρώτησα)
Με κανένα κόλπο λόγω παρόμοιων ονομάτων στα ονόματα χρηστών πχ a1a (a1b κλπ) -01 (έως 12) (όπως το script που τα φτιάξαμε από το sch-script) μπορούμε να κάνουμε γιατί είναι πολλοί οι χρήστες;
ΥΓ Και κάτι ακόμα .... είναι καλύτερα η δουλειά αυτή να γίνει μέσα απο το 12.04 ή από το 16.04 ???
Σε ευχαριστώ !!!!
Δεν παίζει ρόλο από πού θα το κάνεις (12.04/16.04), αρκεί φυσικά να μην έχουν κάνει login οι συγκεκριμένοι μαθητές τη στιγμή της αντιγραφής.
Ο πιο απλός τρόπος για να μην μπλέκεις με scripts είναι
cd /source/home
echo *
# Η εντολή echo μόλις εμφάνισε όλους τους χρήστες.
# Με το ποντίκι κάνε αντιγραφή-επικόλληση μόνο των ονομάτων που θες, στην παρακάτω εντολή:
sudo cp -a a1a01 a1a02 ... c03b12 /home/
Τα ονόματα χρηστών στον νέο server είναι ίδια με του παλιού. Μετά από αντιγραφή φακέλων χρηστών από τον 12.04 στον 16.04 (στον νέο server) έκανα το εξής script το οποίο δούλεψε σωστά. Σας το κοινοποιώ όμως ΜΕ ΜΕΓΑΛΗ ΕΠΙΦΥΛΑΞΗ (ας το ελέγξουν όσοι το κατέχουν)
Αυτό που κάνει είναι να δώσει τα σωστά δικαιώματα σύμφωνα με το όνομα του κάθε χρήστη και της ομάδας που ανήκει.
Το script τρέχει στον νέο server
Στην εντολή
group=$(echo $dir| cut -d '-' -f 1,7 )
δεν έχω καταλάβει το -f 1,7 αλλά το είδα ότι κάνει το σωστό και το έβαλα ... ας το εξηγήσει κάποιος ....
#!/bin/bash
# Τα ονόματα των χρηστών είναι της μορφής a1a-01...μέχρι 12 a1b-01... κλπ
cd /home/
for dir in *; do
echo "User folder:",$dir
group=$(echo $dir| cut -d '-' -f 1,7 )
echo "User group: ",$group
sudo chown -hR $dir:$group /home/$dir
done
exit
Βαγγέλη αυτό που βρήκες έχει bugs, η εντολή cut κοιτάει το όνομα του φακέλου για να παράγει το group, το οποίο όχι μόνο δεν έχει νόημα αλλά μπορεί να προκαλέσει και προβλήματα.
Χρησιμοποίησε αυτό που παρέθεσα παραπάνω: https://alkisg.mysch.gr/steki/index.php?topic=5959.msg68430#msg68430
Το δοκίμασα χτες αυτό που παράθεσες αλλά δεν έπαιζε για καποιο λόγο (δεν εμφάνισε τίποτα, ούτε άλλαξε τα δικαιώματα και τις ιδιοκτησίες)
Σήμερα που κάνανε όλοι login δεν υπήρξε κανένα πρόβλημα.
Μήπως το έκανες ολόκληρο αντιγραφή/επικόλληση;
Γιατί τότε όλες οι εντολές μετά την sudo -i, δεν εκτελέστηκαν καθόλου, αυτές πρέπει να επικολληθούν ξεχωριστά, μετά την sudo...
Τώρα ποιο είναι το αποτέλεσμα της παρακάτω εντολής στον server σου;
ls -lha /home
Γιατί αν κατάλαβα καλά, έδωσες δικαιώματα σε όλους τους μαθητές ενός τμήματος να γράφουν στον φάκελο οποιουδήποτε άλλου μαθητή του ίδιου τμήματος...
Το επισύναψα ....
Για παράδειγμα, η γραμμή:
drwxr-xr-x 14 a1-01 a1 4,0K Μάρ 6 11:37 a1-01
έχει λάθος group, έπρεπε να είναι:
drwxr-xr-x 14 a1-01 a1-01 4,0K Μάρ 6 11:37 a1-01
Δηλαδή τώρα μπορεί ο a1-02 να πάει στο "/home/a1-01/Έγγραφα" του άλλου μαθητή και να γράψει/σβήσει ό,τι θέλει...
Μισό ....
Χρήστης a1 δεν υπάρχει ... a1-01 υπάρχει
To a1 είναι ομάδα
Ναι αυτό λέω, έχεις δώσει σε όλα τα μέλη της ομάδα a1 δικαίωμα να γράφουν στους φακέλους όλων των μελών της. Δηλαδή ο a1-01 μπορεί να γράψει στον a1-02 και στον a1-03 και αντίθετα.
Ο χρήστης a1-01 έχει ως βασικό group το a1-01 και ως δευτερεύον group το a1. Και ο φάκελός του πρέπει να έχει group owner το βασικό του, το a1-01, όχι το δευτερεύον του.
Πάντως σε γραφικό περιβάλλον (κάνω μάθημα με το b3b αυτή την ώρα) δεν αφήνει πχ τον χρήστη b3b-12 να ανοίξει τον /home/b3b-11 (δεν εχει δικαιώματα)
Εν πάσει περιπτώσει να κάνω κάτι να το διορθώσω;
Αν βάλω στο script αυτό:
sudo chown -hR $dir:$dir /home/$dir
αντί αυτού που είχα ...
sudo chown -hR $dir:$group /home/$dir
και το ξανατρέξω θα τα κάνει χειρότερα;
Το ίδιο το /home/username δεν είναι εγγράψιμο (rwxr-x), οι υποφακέλοι του είναι (rwxrwx), π.χ. τα Έγγραφα, η Επιφάνεια εργασίας κλπ.
Αν δεν θες να τρέξεις το σκριπτ που παρέθεσα κάνοντας αντιγραφή επικόλληση μετά την sudo, τότε ναι κάνε αυτό που είπες στην τελευταία απάντηση.
Όμως αυτό που όπως είπες έκανα λάθος δεν θα αλλάξει ... σωστά;
Αν τρέξω το script που προτείνεις θα διορθωθεί το λάθος που προκάλεσα;
Θα διορθωθεί, αφού με την αλλαγή που έγραψες τελευταία, θα κάνεις chown -R a1-01:a1-01 που είναι το σωστό.
Ναι και στη δεύτερη ερώτηση.
Για πολλοστή φορά σε ευχαριστώ πολύ Άλκη !!
Το έκανα σήμερα που είχα μάθημα στο σχολείο ...
δηλαδή έτρεξα το:
#!/bin/bash
# Τα ονόματα των χρηστών είναι της μορφής a1a-01...μέχρι 12 a1b-01... κλπ
cd /home/
for dir in *; do
echo "User folder:"$dir
group=$(echo $dir| cut -d '-' -f 1,7 )
echo "User group: "$group
sudo chown -hR $dir:$dir /home/$dir
done
exit
και η εντολή ls -lha /home έφτιαξε το lista2.txt (συνημμένο)
ΥΓ ....
1) Έφτιαξα από ένα χρηστη έναν κοινόχρηστο φάκελο με ένα κοινόχρηστο αρχείο ... τα δικαιώματα του αρχείου όπως φαίνονται στον χρήστη είναι στην εικόνα koinoxristo arxeio.png
2) Έβαλα τα παιδιά να αντιγράψουν φάκελο από έναν κοινόχρηστο φάκελο στον προσωπικο τους φάκελο και είδα ότι δεν με αφήνει να δω τα περιεχόμενά του (δεν έχω δικαίωμα)
Έτρεξα το αρχικό μου script και διόρθωσε το σφάλμα με τον φάκελο που δη,μιούργησαν πριν τα παιδιά .... δηλ μπορώ να τον βλέπω