mountpoint permissions

Giorgos Keramidas keramida at ceid.upatras.gr
Thu Nov 4 11:33:46 EET 2010


On Wed, 03 Nov 2010 19:38:25 +0200, George Notaras <gnot at g-loaded.eu> wrote:
> Αφού αλλάξουμε ownership & permissions σε ένα mount point ενώ είναι
> mounted ένα block device, και στη συνέχεια κάνουμε umount, τότε τα
> permissions και ownership επανέρχονται στα original perms που είχε ο
> κατάλογος πριν κάνουμε mount το device.
>
> Αν ξανα-mount το device στο ιδιο mountpoint, τα permissions & ownership
> επανέρχονται σε εκείνα που είχαμε ορίσει κατά το προηγούμενο mount.
>
> Πού αποθηκεύονται τα permissions που ορίζουμε πάνω στο mount point οταν
> το device είναι mounted? Δηλαδή αν κάνουμε 800 mounts + αλλαγές στα
> permissions του ίδιου mountpoint, όλα αυτά θα αποθηκευτούν κάπου;

Στο i-node από το mounted block device.  Τα permissions ενός directory
είναι αποθηκευμένα μέσα στο ίδιο το inode στο οποίο "δείχνει" το
αντίστοιχο directory entry.

Ας πούμε ότι έχεις ένα κατάλογο /media/flash στον οποίο ακόμα δεν έχεις
προσαρτήσει τίποτα.  Κάνοντας ls -di στον κατάλογο θα δεις κάτι σαν:

    $ ls -di /media/flash
    2926951 /media/flash

Ο αριθμός 2926951 αναφέρεται στο inode 2926951 του filesystem που είναι
αυτή τη στιγμή προσαρτημένο στο /media/flash.  Σε αυτό το i-node μπορεί
να δεις ότι έχει permissions π.χ. τα εξής:

    $ stat /media/flash
      File: «/media/flash»
      Size: 4096            Blocks: 8          IO Block: 4096   κατάλογος
    Device: fc01h/64513d    Inode: 2926951     Links: 2
    Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2010-11-04 10:16:08.000000000 +0100
    Modify: 2010-11-04 10:16:08.000000000 +0100
    Change: 2010-11-04 10:16:08.000000000 +0100

Τα permissions τα οποία είναι αποθηκευμένα στο inode 2926951 του root
filesystem μου εδώ πέρα είναι 0755.  Αντίστοιχα ο ιδιοκτήτης του inode
είναι ο χρήστης root:root.

Στο parent directory του /media/flash υπάρχει μια αναφορά τόσο στο
device ενός directory entry όσο και στο inode του directory entry.
Οπότε μπορείς να δεις π.χ. ότι το /media και το /media/flash δείχνουν σε
inodes (και κατά συνέπεια σε data blocks) από το ίδιο device πριν από
ένα mount operation:

    $ for path in /media /media/flash ; do stat $path | fgrep Device: ; done
    Device: fc01h/64513d    Inode: 2916353     Links: 3
    Device: fc01h/64513d    Inode: 2926951     Links: 2
            ^^^^^^^^^^^^

Μετά από ένα mount operation όμως το όνομα /media/flash πλέον
αντιστοιχεί σε *άλλο* device ID:

    # mount -t vfat /dev/sdb1 /media/flash
    # for path in /media /media/flash ; do stat $path | fgrep Device: ; done
    Device: fc01h/64513d    Inode: 2916353     Links: 3
    Device: 811h/2065d      Inode: 1           Links: 2

Και όπως βλέπεις το inode του /media/flash είναι πλεον το inode 1 από το
νέο device.  Κι εκεί μπορεί να αποθηκεύσεις διαφορετικές άδειες ή ακόμα
και να ρυθμίσεις το mount point να "δείχνει" διαφορετικές άδειες (κυρίως
για τα filesystems που δεν υποστηρίζουν file owners & permissions, όπως
το vfat).

Ας πούμε στο USB flash που έκανα mount πριν λίγο με το default root:root
owner & group μπορώ να πω ότι θέλω να "δείχνει" το kernel ότι owner
είναι ο χρήστης 'gkeramidas:eng':

# umount /dev/sdb1

    # mount -t vfat -o uid=gkeramidas,gid=eng
    /dev/sdb1 /media/flash
    root at gkeramidas-glaptop:~# ls -ldi /media/. /media/flash/.
    2916353 drwxr-xr-x 3 root       root 4096 2010-11-04 10:25 /media/.
          1 drwxr-xr-x 2 gkeramidas eng  4096 1970-01-01 01:00 /media/flash/.

Τώρα πλέον φαίνεται πάλι ότι τα δυο directories ανήκουν σε διαφορετικό
block device:

    # stat /media/. /media/flash/.

      File: «/media/.»
      Size: 4096            Blocks: 8          IO Block: 4096   κατάλογος
    Device: fc01h/64513d    Inode: 2916353     Links: 3
    Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2010-11-04 10:23:13.000000000 +0100
    Modify: 2010-11-04 10:25:29.000000000 +0100
    Change: 2010-11-04 10:25:29.000000000 +0100

      File: «/media/flash/.»
      Size: 4096            Blocks: 8          IO Block: 4096   κατάλογος
    Device: 811h/2065d      Inode: 1           Links: 2
    Access: (0755/drwxr-xr-x)  Uid: (121165/gkeramidas)   Gid: ( 5000/ eng)
    Access: 1970-01-01 01:00:00.000000000 +0100
    Modify: 1970-01-01 01:00:00.000000000 +0100
    Change: 1970-01-01 01:00:00.000000000 +0100

Αλλά πρόσεξε τι owner έχει το inode 1 από το /media/flash device ;-)

> Υπάρχει περίπτωση να χαθούν με κάποιο τρόπο, ώστε, όταν ξαναγίνει Mount
> το device, τα perms του mountpoint να είναι και πάλι ίδια με εκείνα του
> αρχικού καταλόγου?

Αν το filesystem του mounted device υποστηρίζει κανονικά users & groups,
τότε όχι δε γίνεται να "χαθούν" τα permissions ή το ownership μερικών
αρχείων.  Αν το filesystem από το mounted device είναι κανένα από τα
απλοϊκά filesystems που δεν έχουν per-file access control, τότε δεν
αποθηκεύεται πουθενά η πληροφορία, άρα θα χρειαστεί να κρατήσεις κάπου
"εκτός" filesystem (π.χ. στο mount script σου) τα σωστά owner & group
credentials.



More information about the Linux-greek-users mailing list