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