Μετάβαση στο περιεχόμενο

Ρυθμίσεις cookies

Επιλέξτε ανά κατηγορία ποια cookies επιτρέπετε. Μπορείτε να αλλάξετε την επιλογή σας οποιαδήποτε στιγμή μέσω των Ρυθμίσεων cookies στο κάτω μέρος κάθε σελίδας. Δήλωση απορρήτου

Απαραίτητα

Πάντα ενεργά

Χρειάζονται για τη σύνδεση, για να διατηρείται το καλάθι σας και για να θυμόμαστε τις επιλογές σας. Είναι πάντα ενεργά.

Ποια cookies;
  • weboke_sessie, weboke_klant, weboke_remember: η συνεδρία σας και η παραμονή σε σύνδεση
  • weboke_basket: το καλάθι σας
  • wkBtwIncl: εμφάνιση τιμών με ή χωρίς ΦΠΑ
  • wok_cookies: η επιλογή σας για τα cookies, 12 μήνες

Μετρούν ποια διαφήμιση οδηγεί σε επίσκεψη ή παραγγελία, ώστε να μην πληρώνουμε για διαφημίσεις που δεν αποδίδουν.

Ποια cookies;
  • Google Ads μέσω Google Tag Manager (_gcl_au, _gcl_aw), έως 90 ημέρες
  • OpenAI Ads, διαφημίσεις στο ChatGPT
  • wok_aff: μέσω ποιου συνεργάτη ήρθατε σε εμάς (πρόγραμμα συνεργατών), 60 ημέρες

4,6

Χώρα και γλώσσα

Κάθε χώρα έχει τη δική της ιστοσελίδα, με τιμές και ΦΠΑ της χώρας αυτής.

Προβολή

Χρήστες, ομάδες και δικαιώματα αρχείων

Ενότητα 3: Χρήστες, δικαιώματα και sudo · Χρόνος ανάγνωσης: 12 λεπτά

Στόχος μαθήματος: Μετά από αυτό το μάθημα μπορείτε να δημιουργείτε και να εξετάζετε χρήστες και ομάδες, να διαβάζετε τα δικαιώματα ενός αρχείου ή φακέλου στο ls -l και να τα ρυθμίζετε σωστά με τα chmod και chown, χωρίς να ανοίγετε τα πάντα σε όλους.

Βασικές έννοιες: root (UID 0), απλός χρήστης, χρήστης συστήματος, /etc/passwd, /etc/shadow, ομάδα, adduser, id, rwx, κάτοχος, ομάδα, λοιποί, οκταδικό (644, 755, 600), chmod, chown, umask, setuid, 777

Ο καθένας είναι ένας αριθμός

Το Linux σχεδιάστηκε εξαρχής για πολλούς χρήστες σε ένα μηχάνημα. Κάθε διεργασία που εκτελείται, εκτελείται εκ μέρους κάποιου χρήστη, και κάθε αρχείο έχει κάτοχο. Για το σύστημα, ένας χρήστης είναι κυρίως ένας αριθμός, το UID:

  • Ο root έχει UID 0. Ο root μπορεί να κάνει τα πάντα: να διαβάσει και να αλλάξει κάθε αρχείο, να σταματήσει κάθε υπηρεσία, να δημιουργήσει κάθε χρήστη. Δεν υπάρχει ερώτηση "είστε σίγουροι;".
  • Οι απλοί χρήστες, όπως ο anna, παίρνουν στο Debian και στο Ubuntu UID από 1000 και πάνω. Μπορούν να γράφουν στον δικό τους αρχικό φάκελο (home) και ελάχιστα άλλα.
  • Οι χρήστες συστήματος έχουν χαμηλό αριθμό και συνήθως ούτε κωδικό πρόσβασης ούτε shell. Οι υπηρεσίες εκτελούνται υπό τέτοιον χρήστη: το nginx υπό τον www-data, η PostgreSQL υπό τον postgres. Αν παραβιαστεί μια τέτοια υπηρεσία, ο εισβολέας έχει μόνο τα δικαιώματα αυτού του χρήστη, όχι του root.

Ποιος είστε, το βλέπετε με την εντολή id:

anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)

Η Anna έχει UID 1000, μια δική της ομάδα anna, και ανήκει επίσης στις ομάδες sudo και users.

Πού βρίσκονται οι χρήστες

Η λίστα των χρηστών βρίσκεται στο /etc/passwd, μία γραμμή ανά χρήστη:

anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bash

Τα πεδία, χωρισμένα με άνω και κάτω τελεία: όνομα, x (ο κωδικός πρόσβασης βρίσκεται αλλού), UID, κύρια ομάδα, περιγραφή, αρχικός φάκελος, shell. Στον www-data το shell είναι /usr/sbin/nologin: η σύνδεση δεν είναι δυνατή.

Οι ίδιοι οι κωδικοί πρόσβασης βρίσκονται, κρυπτογραφημένοι (σε μορφή hash), στο /etc/shadow. Αυτό το αρχείο μπορεί να το διαβάσει μόνο ο root. Ένα ! ή * στην αρχή του πεδίου κωδικού σημαίνει: η σύνδεση με κωδικό πρόσβασης δεν είναι δυνατή. Έτσι ο root είναι κλειδωμένος από προεπιλογή στο Ubuntu, και στο Debian αν δεν ορίσατε κωδικό root κατά την εγκατάσταση.

Δημιουργία χρηστών και ομάδων

Στο Debian και στο Ubuntu χρησιμοποιείτε το φιλικό adduser:

root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...

Το adduser δημιουργεί τον χρήστη, μια δική του ομάδα με το ίδιο όνομα, έναν αρχικό φάκελο και ζητά κωδικό πρόσβασης. Υπάρχει επίσης το χαμηλότερου επιπέδου useradd (που στο AlmaLinux και στο Rocky Linux είναι η συνηθισμένη εντολή), αλλά χωρίς επιλογές κάνει λιγότερα: δεν ορίζει κωδικό πρόσβασης και σε ορισμένα συστήματα δεν δημιουργεί αρχικό φάκελο.

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

root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna     # το ίδιο, λειτουργεί παντού

Προσέξτε το -a στο usermod: χωρίς το -a αντικαθιστάτε όλες τις επιπλέον ομάδες του χρήστη με μόνο αυτήν τη μία. Μια νέα ομάδα ισχύει μόνο μετά από νέα σύνδεση.

Κλείδωμα ενός λογαριασμού χωρίς διαγραφή (για παράδειγμα ενός πρώην συνεργάτη):

root@web1:~# usermod -L -e 1 jan

Το -L κλειδώνει τον κωδικό πρόσβασης, το -e 1 κάνει τον λογαριασμό να λήξει. Προσοχή: ένας κλειδωμένος κωδικός δεν σταματά πάντα ένα κλειδί SSH. Αφαιρέστε λοιπόν και τα κλειδιά από το /home/jan/.ssh/authorized_keys (μάθημα 2.3)· τον λογαριασμό που έχει λήξει (-e 1) το sshd τον απορρίπτει.

Ανάγνωση δικαιωμάτων

anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna     www-data  1520 Nov  9 10:12 index.html
-rw-r----- 1 anna     www-data   412 Nov  9 10:14 config.php
drwxr-xr-x 2 anna     www-data  4096 Nov  9 10:15 images
drwxrwxr-x 2 www-data www-data  4096 Nov  9 10:20 uploads

Το πρώτο μπλοκ των δέκα χαρακτήρων είναι το κλειδί για όλα:

  • Χαρακτήρας 1: το είδος. Το - είναι απλό αρχείο, το d φάκελος (directory), το l συντόμευση (symlink).
  • Χαρακτήρες 2 έως 4: τι επιτρέπεται στον κάτοχο.
  • Χαρακτήρες 5 έως 7: τι επιτρέπεται στην ομάδα.
  • Χαρακτήρες 8 έως 10: τι επιτρέπεται στους λοιπούς (όλους τους άλλους).

Ακολουθούν ο αριθμός συνδέσμων, ο κάτοχος, η ομάδα, το μέγεθος και η ημερομηνία.

Τα γράμματα σημαίνουν σε ένα αρχείο:

ΓράμμαΣημασία σε αρχείο
rανάγνωση
wτροποποίηση
xεκτέλεση ως πρόγραμμα ή script

Και σε έναν φάκελο κάτι λίγο διαφορετικό:

ΓράμμαΣημασία σε φάκελο
rπροβολή των ονομάτων των αρχείων του φακέλου
wδημιουργία, μετονομασία και διαγραφή αρχείων στον φάκελο
xείσοδος στον φάκελο και άνοιγμα αρχείων μέσα σε αυτόν

Το τελευταίο εκπλήσσει πολλούς. Χωρίς x σε έναν φάκελο δεν φτάνετε στα αρχεία του, ακόμη κι αν αυτά είναι αναγνώσιμα. Και όποιος έχει w σε έναν φάκελο, μπορεί να διαγράψει αρχεία μέσα σε αυτόν, ακόμη κι αν ανήκουν σε άλλον.

Στο παράδειγμα: το index.html μπορούν να το διαβάσουν όλοι· το config.php (με τον κωδικό της βάσης δεδομένων) η Anna μπορεί να το διαβάσει και να το τροποποιήσει, η ομάδα www-data (δηλαδή ο web server) μόνο να το διαβάσει, και οι υπόλοιποι τίποτα. Στο uploads ο web server μπορεί να γράψει, επειδή εκεί αποθηκεύονται τα uploads των επισκεπτών.

Δικαιώματα ως αριθμός

Τα δικαιώματα γράφονται συχνά ως τρία ψηφία, ο οκταδικός αριθμός. Κάθε γράμμα έχει μια τιμή: r = 4, w = 2, x = 1. Προσθέστε ανά ομάδα:

ΔικαιώματαΑριθμόςΧρήση
rw-r--r--644απλό αρχείο που μπορούν να διαβάσουν όλοι
rw-r-----640αρχείο για κάτοχο και ομάδα, όπως μια ρύθμιση με κωδικό πρόσβασης
rw-------600μυστικό αρχείο, όπως το authorized_keys ή ένα ιδιωτικό κλειδί
rwxr-xr-x755φάκελος ή πρόγραμμα που μπορούν να χρησιμοποιούν όλοι
rwx------700ιδιωτικός φάκελος, όπως το ~/.ssh

Αλλαγή δικαιωμάτων: chmod και chown

anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.php

Το chmod αλλάζει τα δικαιώματα, με αριθμό ή με γράμματα (u, g, o για κάτοχο, ομάδα, λοιπούς· + ή - και το γράμμα). Το chown eigenaar:groep αλλάζει κάτοχο και ομάδα· αυτό επιτρέπεται μόνο στον root. Με το -R και τα δύο λειτουργούν σε έναν ολόκληρο φάκελο, και εκεί συχνά γίνονται λάθη: το chmod -R 644 σε έναν φάκελο κάνει όλους τους υποφακέλους άχρηστους, επειδή οι φάκελοι χρειάζονται x. Για ένα ολόκληρο δέντρο χρησιμοποιήστε καλύτερα το find:

root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +

Ποτέ 777

"Δεν δούλευε, οπότε έβαλα 777." Το 777 σημαίνει: όλοι στον server μπορούν να το διαβάσουν, να το τροποποιήσουν και να το εκτελέσουν. Αν κάποτε παραβιαστεί μία υπηρεσία ή ένας ιστότοπος στον server σας, ο εισβολέας μπορεί να γράψει οπουδήποτε υπάρχει 777, συμπεριλαμβανομένων των αρχείων PHP σας. Το πραγματικό πρόβλημα είναι σχεδόν πάντα ο κάτοχος ή η ομάδα: δώστε στον web server μέσω της ομάδας ακριβώς το δικαίωμα που χρειάζεται, και μόνο στον φάκελο όπου το χρειάζεται.

Προεπιλεγμένα δικαιώματα και ειδικά bits

Τα νέα αρχεία παίρνουν τα δικαιώματά τους μέσω του umask. Με το συνηθισμένο umask 022 τα νέα αρχεία γίνονται 644 και οι νέοι φάκελοι 755. Το umask σας το βλέπετε με την εντολή umask.

Μερικές φορές βλέπετε ένα s αντί για x, όπως στο /usr/bin/passwd (-rwsr-xr-x). Αυτό είναι το bit setuid: το πρόγραμμα εκτελείται με τα δικαιώματα του κατόχου (root), ακόμη κι αν το ξεκινά ένας απλός χρήστης. Αυτό χρειάζεται για μερικά προγράμματα συστήματος, αλλά μην το βάζετε ποτέ μόνοι σας σε ένα script. Ένα απροσδόκητο αρχείο setuid είναι γνωστή ένδειξη εισβολής· με το find / -perm -4000 -type f 2>/dev/null τα βλέπετε όλα.

Στο AlmaLinux και στο Rocky Linux

Εκεί το adduser είναι άλλο όνομα για το useradd· χρησιμοποιήστε useradd -m anna και στη συνέχεια passwd anna. Η προσθήκη ομάδων γίνεται με το usermod -aG. Το SELinux προσθέτει ένα επιπλέον επίπεδο δίπλα στα δικαιώματα αυτού του μαθήματος: ένα αρχείο με τα σωστά δικαιώματα μπορεί παρ' όλα αυτά να απορριφθεί αν έχει λάθος ετικέτα SELinux (το ls -Z την εμφανίζει).

Σύνοψη

  • Κάθε χρήστης έχει ένα UID· ο root (0) μπορεί να κάνει τα πάντα, οι υπηρεσίες εκτελούνται υπό δικούς τους χρήστες συστήματος χωρίς shell.
  • Οι χρήστες βρίσκονται στο /etc/passwd, τα hash των κωδικών στο /etc/shadow. Δημιουργήστε χρήστες με το adduser και προσθέστε ομάδες με το usermod -aG.
  • Το ls -l δείχνει το είδος, τα δικαιώματα κατόχου, ομάδας και λοιπών, και μετά τον κάτοχο και την ομάδα. Σε φάκελο, το x σημαίνει είσοδο και το w δημιουργία και διαγραφή αρχείων.
  • Συνηθισμένοι αριθμοί: 644 και 755 για δημόσια, 640 για ρυθμίσεις με μυστικά, 600 και 700 για ιδιωτικά. Ποτέ 777.
  • Χρησιμοποιήστε το find για να ορίσετε δικαιώματα σε ολόκληρο δέντρο· προσέχετε τα αρχεία setuid.

Κουίζ

1. Τι σημαίνει το -rw-r----- σε ένα αρχείο με κάτοχο anna και ομάδα www-data;



2. Τι συμβαίνει αν ένας φάκελος έχει τα δικαιώματα drw-r--r-- (δηλαδή πουθενά x);



3. Εκτελείτε το usermod -G www-data anna (χωρίς -a). Ποια είναι η συνέπεια;



4. Ένα plugin δεν μπορεί να γράψει στο /var/www/example.com/uploads. Ποια είναι η καλύτερη λύση;



5. Γιατί το nginx εκτελείται υπό τον χρήστη www-data και όχι υπό τον root;



Άσκηση

Άσκηση Z3.1: Ανάγνωση δικαιωμάτων. Ανοίξτε το αρχείο παραδείγματος rechten-1.txt: την έξοδο του id για τρεις χρήστες και του ls -l σε έναν φάκελο ιστότοπου. Απαντήστε σε κάθε ερώτηση ποιος μπορεί να κάνει τι (για παράδειγμα: "μπορεί ο web server να τροποποιήσει το config.php;", "ποιο αρχείο έχει υπερβολικά χαλαρά δικαιώματα;", "ποιος αριθμός αντιστοιχεί στο .env;"). Το πρόγραμμα συγκρίνει τις απαντήσεις σας με το σταθερό κλειδί και εξηγεί για κάθε ερώτηση το γιατί.

Άσκηση Z3.1: Ανάγνωση δικαιωμάτων

Αρχείο για αυτή την άσκηση: rechten-1.txt










Ό,τι συμπληρώνετε και ό,τι βρίσκουμε δεν το αποθηκεύουμε. Το πρόγραμμα περιήγησής σας θυμάται τις απαντήσεις σας και αν περάσατε την άσκηση. Αν έχετε εγγραφεί, αποθηκεύουμε μόνο ότι η άσκηση ήταν (σχεδόν) σωστή στο Τα μαθήματά μου· εκεί μπορείτε και να το διαγράψετε.

Για περαιτέρω μελέτη

Τα βήματα σε αυτά τα άρθρα ισχύουν για τα πακέτα hosting και τα VPS της WebOké· σε άλλους παρόχους η διαδικασία είναι παρόμοια.

Μια στιγμή…

Ρυθμίστε τα domains σας

Ρυθμίστε για κάθε domain τους nameservers, τη σύνδεση με το hosting σας και ποιος θα είναι ο κάτοχος.

Φόρτωση των domains σας…