Filer og rettigheter
Hver fil har rettigheter for brukere i denne rekkefølge:
- Eier (Owner)
- Gruppe (Group)
- Andre (Others)
Brukere kan ha følgende rettigheter i denne rekkefølge:
- Lese (Read)
- Skrive (Write)
- Kjøre (Execute)
Notasjon:
-rwxrwxrwx
Tallverdier
r (read) – 4
w (write) – 2
x (execute) – 1
Dette summeres slik:
rwx = 4+2+1 = 7 //read write execute
rw- = 4+2+0 = 6 //read write
r-x = 4+0+1 = 5 //read execute
r– = 4+0+0 = 4 //read
-wx = 0+2+1 = 3 // write execute
-w- = 0+2+0 = 2 // write
–x = 0+0+1 = 1 // execute
Eksempel
Vi står i katalogen testdir og kjører kommando ls -l
brukernavn@servernavn:~/testdir$ ls -l
total 12
4 -rw——- 1 brukernavn brukernavn 2610 Apr 5 2023 test1
4 -rw-r–r– 1 brukernavn brukernavn 578 Apr 5 2023 test2
4 drwxr-xr-x 3 brukernavn brukernavn 4096 Apr 2 2022 test3
Rettigheter vises for 3 elementer, 2 filer og en katalog (eng: directory).
test1 (file)
- Eier har lese/skriverettighet (4+2= 6)
- Gruppe har ingen rettigheter (0)
- Andre har ingen rettigheter (0)
Det skrives 600 for test1; eier har 6, gruppe har 0, andre har 0.
Altså: -rw——- eller 600
test2 (file)
- Eier har lese/skrive-rettighet (4+2+0=6)
- Gruppe har leserettighet (4+0+0=4)
- Andre har leserettighet (4+0+0=4)
Altså: -rw-r–r– eller 644
bindesstrek (-) først betyr at dette er en fil.
Dersom det hadde vært en katalog (dir) ville det stått d først, der hvor bindestreken er.
test3 (katalog)
d foran betyr «directory». Dessuten er navnet farget blå siden det er en katalog.
- Eier har lese/skrive/kjøre-rettighet (4+2+1= 7)
- Gruppe har lese/kjøre-rettighet (4+0+1=5)
- Andre har lese/kjøre-rettighet (4+0+1=5)
Altså: drwxr-xr-x eller 755
Endre filrettigheter
Vi kan endre rettigheter for filer og kataloger med kommando chmod.
La oss si at vi vil endre filen test1 fra 600 til 644. Det kan utføres slik:
brukernavn@servernavn:~$ chmod 644 testdir/test1
Merk: Vi trenger ikke å bruke ‘sudo chmod’ på eget hjemmeområde. Det holder med ‘chmod’.
Endre eierskap til filer rekursivt
Vi kan endre eierskap til filer og kataloger rekursivt med kommando chown og bruke switch -R.
La oss si at vi vil endre eierskap for alle filer og kataloger i nettstedet vårt, slik at Apachebruker www-data blir eier av alle kataloger og filer.
Nå må vi bruke rekursjon, slik at alle filer og kataloger blir løpt gjennom for å endres slik vi ber om.
Vi kjører da følgende kommando:
brukernavn@servernavn:~$ sudo chown -R www-data:www-data /var/www/nettstedet.dev/public_html
www-data blir derfor nå apache2- prosessen som bruker filene, altså den «bruker-gruppe» som eier filer/kataloger. -R sørger for at eier av alle underkataloger og filer blir endret til www-data:www-data.
www-data er default Apache_Run_User. Se avsnittet om Apache
Spesielle filrettigheter
Setuid (suid)
I noen situasjoner kan det være ønskelig at brukere får tillatelse til å kjøre en fil med en annen fileiers rettigheter.
Ett eksempel er å få tillatelse til å endre sitt eget passord i passordfilen /etc/passwd, en fil som brukere egentlig ikke har tilgang til å kjøre.
Med setuid satt på passordfilen kan man få tillatelse til å kjøre passordfilen og endre sitt eget, men bare sitt eget passord, når man er logget inn med brukernavnet sitt.
Setuid settes med tallet 4:
Filen /etc/passwd har rettighet 644. Vi setter nå tallet 4 foran 644. Vi får 4644. Tallet 4 angir suid.
Vi kan sette det med chmod slik:
chmod 4644 /etc/passwd
Vi kan også sette det slik:
chmod u+s /etc/passwd
Vi kan ta det bort slik:
chmod 0644 /etc/passwd
eller slik:
chmod u-s /etc/passwd
Setgid
Det kan være ønskelig at alle filer og kataloger som opprettes i en katalog får samme gruppeeierskap som foreldrekatalogen, uavhengig av hvem som senere oppretter filene og katalogene der.
Med setgid på en katalog vil filer og kataloger som opprettes der arve gruppeeierskapet som er satt på foreldrekatalogen. Setgid arves også.
Setgid angis med tallet 2 foran
Katalog test3 har rettighet 755. Vi må sette tallet 2 foran 755. Tallet 2 angir setgid.
Vi kan sette det med chmod slik:
chmod 2755 test3
Vi kan også sette det slik:
chmod g+s test3
Vi kan ta det bort slik:
chmod 0755 test3
Vi kan også ta det bort slik:
chmod g-s test3
Sticky bit
Det kan være ønskelig å beskytte filer i en katalog slik at de bare skal kunne slettes eller endres av den som eier filene eller av root. Med sticky bit satt på en katalog gjøres dette mulig. Andre brukere med tilgang til samme katalog kan da ikke slette eller endre en annen brukers fil.
Sticky bit angis med tallet 1 foran
Katalog test4 har rettighet 775. Vi må sette tallet 1 foran 775. Tallet 1 angir sticky bit.
Vi kan sette det med chmod slik:
chmod 1775 test4
Vi kan også sette det slik:
chmod +t test4
Vi kan ta det bort slik:
chmod 0775 test4
Vi kan også det bort slik:
chmod -t test4
tree
tree er en nyttig komando hvis man vi se katalogstrukturen som en trestruktur med greiner.
Her har vi kjørt kommando: tree | less, og en side vises av gangen.
Dersom vi kjører bare kommando tree, vil output være veldig lang og rulle nedover i terminalvinduet til det er ferdig med å løpe gjennom alle kataloger og filer.
Derfor er det greit å «pipe» tree til less. Da vises én side av gangen, og vi kan f eks bruke PgDn for nye sider. Vi kan også gå opp igjen.
brukernavn@servernavn:~$ tree | less
│ │ │ ├── rewrite.php
│ │ │ ├── robots-templatephp
│ │ │ ├── rss-functions.php
│ │ │ ├── rss.php
│ │ │ ├── script-loader.php
│ │ │ ├── session.php
│ │ │ ├── shortcodes.php
│ │ │ ├── sitemaps
│ │ │ │ ├── class-wp-sitemaps-index.php
│ │ │ │ ├── class-wp-sitemaps-provider.php
│ │ │ │ ├── class-wp-sitemaps-registry.php
│ │ │ │ ├── class-wp-sitemaps-renderer.php
│ │ │ │ ├── class-wp-sitemaps-stylesheet.php
│ │ │ │ ├── class-wp-sitemaps.php
│ │ │ │ └── providers
│ │ │ │ ├── class-wp-sitemaps-posts.php
│ │ │ │ ├── class-wp-sitemaps-taxonomies.php
│ │ │ │ └── class-wp-sitemaps-users.php
│ │ │ ├── sitemaps.php
Alle verktøy har svitsjer, eller brytere. For å finne ut hvilke brytere tree har, kjører vi kommando man tree.
brukernavn@servernavn:~$ man tree
TREE(1) General Commands Manual TREE(1)
NAME
tree – list contents of directories in a tree-like format……
SYNOPSIS
tree […..
DESCRIPTION
Tree is a recursive directory listing program ……
OPTIONS
Tree understands the following command line switches:
LISTING OPTIONS
-a All files are printed. By default tree does not print hidden files (those beginning with a dot `.’).
In no event does tree print the file system constructs `.’ (current directory) and `..’ (previous di‐
rectory).
-d List directories only.
-l Follows symbolic links if they point to directories, as if they were directories. Symbolic links that
will result in recursion are avoided when detected.
-f Prints the full path prefix for each file.
-x Stay on the current file-system only. Ala find -xdev.
-L level
Max display depth of the directory tree.
-R Recursively …..
Etc ….
Under LISTING OPTIONS finner vi switches.
Levels og directories er interessant.
La oss si at vi bare vil se 3 nivåer med kataloger og ikke filer. Da kan vi skrive:
tree -dL 3
brukernavn@servernavn:/var/www/nettstedet.dev/public_html$ tree -dL 3
.
├── wp-admin
│ ├── css
│ │ └── colors
│ ├── images
│ ├── includes
│ ├── js
│ │ └── widgets
│ ├── maint
│ ├── network
│ └── user
├── wp-confg
├── wp-content
│ ├── gallery
│ │ ├── paint
│ │ ├── job
│ │ ├── tools
│ ├── languages
│ │ ├── plugins
│ │ └── themes
│ ├── mu-plugins
│ ├── ngg
│ │ └── modules