WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Frågor om filrättigheter och PHP, CHMOD (https://www.wn.se/forum/showthread.php?t=1042471)

Jim_Westergren 2010-06-10 11:11

Frågor om filrättigheter och PHP, CHMOD
 
På både Loopia och Binero så kan PHP fritt ändra på filer, skapa filer, skapa mappar, radera filer och mappar osv och man behöver inte sätt att något ska vara CHMOD 777. Filerna som PHP skapar får CHMOD 644 och katalogerna CHMOD 755 automatiskt. Det har funkat perfekt för mig.

Nu har jag skaffat en VPS och installerat LAMP enligt denna guiden.

På min VPS måste mappen först ha CHMOD 777 innan PHP kan skapa mappar och filer under den katalogen. Men de mappar och filer som skapas får 644 för filer och 755 för mappar.

Mitt problem blir när jag nu flyttar filer från min sajt på Binero till min VPS via FTP. PHP vägrar skriva till filerna om inte alla mappar plus alla filer får CHMOD 777.

Jag gissar att det har något att göra vem som äger eller vem som har skapat filerna - eller? Hur kan jag på min Debian VPS göra så att PHP fritt kan manipulera filer precis som på Binero och Loopia? Det har väl att göra med kommandot chown att göra - eller?

Och om jag sätter CHMOD 777 på allting - gör jag inte säkerheten mindre då? Vad skulle kunna hända? Säkerhet är det viktigaste för mig.

Tack på förhand.

abergman 2010-06-10 11:49

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20358893)
På både Loopia och Binero så kan PHP fritt ändra på filer, skapa filer, skapa mappar, radera filer och mappar osv och man behöver inte sätt att något ska vara CHMOD 777. Filerna som PHP skapar får CHMOD 644 och katalogerna CHMOD 755 automatiskt. Det har funkat perfekt för mig.

Nu har jag skaffat en VPS och installerat LAMP enligt denna guiden.

På min VPS måste mappen först ha CHMOD 777 innan PHP kan skapa mappar och filer under den katalogen. Men de mappar och filer som skapas får 644 för filer och 755 för mappar.

Mitt problem blir när jag nu flyttar filer från min sajt på Binero till min VPS via FTP. PHP vägrar skriva till filerna om inte alla mappar plus alla filer får CHMOD 777.

Jag gissar att det har något att göra vem som äger eller vem som har skapat filerna - eller? Hur kan jag på min Debian VPS göra så att PHP fritt kan manipulera filer precis som på Binero och Loopia? Det har väl att göra med kommandot chown att göra - eller?

Och om jag sätter CHMOD 777 på allting - gör jag inte säkerheten mindre då? Vad skulle kunna hända? Säkerhet är det viktigaste för mig.

Tack på förhand.

chown är din vän:) jag antar att du använder apache och debian, då bör chown -R www-data:www-data eller -R www-data:root på /var/www fixa biffen.

Jim_Westergren 2010-06-10 11:58

chown -R www-data:www-data funkade perfekt, tack!

Testade bara en viss mapp.

Är det säkrare att köra det på bara de mappar och filer som behöver det än hela /var/www och alla domäner?

abergman 2010-06-10 12:19

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20358903)
chown -R www-data:www-data funkade perfekt, tack!

Testade bara en viss mapp.

Är det säkrare att köra det på bara de mappar och filer som behöver det än hela /var/www och alla domäner?

Som du säkert förstår så ändrar chown ägaren av filerna, så att sätta det på alla filer i webbkatalogen skulle ge webbservern fullt ägarskap på alla filer, och kan potentiellt ge en utomstående hacker eller något tillgång till filerna.

Men jag skulle inte säga att det är något extremt utan du kan lugnt sätta det på alla filer för domänen/siten/vhosten som används av webbservern.

Dock så ska du ju bara ge webbservern skrivrättigheter på de filer som den ska ha skrivrättigheter på.

Jim_Westergren 2010-06-10 12:30

Ok jättebra.

Dock upptäckte jag om jag satte webbservern som ägare så förlorade jag själv skrivrättigheter via FTP. Jag behöver både två.

Jag har tidigare använt detta för att skapa en grupp och en användare:
groupadd www-pub
adduser –ingroup www-pub NN

Så hur fixar jag så att denna användaren NN äger och har rättigheter till allt och sedan kan webbservern även äga vissa mappar och filer. Kan mappar och filer ha flera ägare? Googlade lite men hittade inget svar.

Weaver 2010-06-10 12:33

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20358903)
Är det säkrare att köra det på bara de mappar och filer som behöver det än hela /var/www och alla domäner?

Rent generellt skall du låta servern kunna läsa allt i webrooten men du skall vara mycket sparsam med skrivrättigheter.

Skrivrättigheter skall du bara dela ut på uppladdnings-mappar (tex för wordpress: wp-content/upload, wp-content/gallery) och mappar som innehåller cachar.

Om ett script behöver skriva till servern under installation så ge den temporärt tillstånd genom chmod (utan -R) i den specifika mappen och ta sedan bort skrivrättigheterna när installationen är klar.

Weaver 2010-06-10 12:41

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20358907)
Dock upptäckte jag om jag satte webbservern som ägare så förlorade jag själv skrivrättigheter via FTP. Jag behöver både två.

Jag har tidigare använt detta för att skapa en grupp och en användare:
groupadd www-pub
adduser –ingroup www-pub NN

Så hur fixar jag så att denna användaren NN äger och har rättigheter till allt och sedan kan webbservern även äga vissa mappar och filer. Kan mappar och filer ha flera ägare? Googlade lite men hittade inget svar.

På min server äger NN filerna vilket gör att man kan logga in via ftp och ändra och ta bort filer hur man vill. Gruppägaren för filerna är apache vilket gör att apache kan läsa och tolka innehållet.

Kataloger och filer kan bara ha en ägare men via grupper kan man låta flera användare få access till filerna.

abergman 2010-06-10 12:43

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20358907)
Ok jättebra.

Dock upptäckte jag om jag satte webbservern som ägare så förlorade jag själv skrivrättigheter via FTP. Jag behöver både två.

Jag har tidigare använt detta för att skapa en grupp och en användare:
groupadd www-pub
adduser –ingroup www-pub NN

Så hur fixar jag så att denna användaren NN äger och har rättigheter till allt och sedan kan webbservern även äga vissa mappar och filer. Kan mappar och filer ha flera ägare? Googlade lite men hittade inget svar.

Du kan prova lägga till ftp-användaren i gruppen www-data/www-pub eller tvärt om. annars kan du alltid sätta ftp-gruppen som ägare och www-data användaren som ägare.

Jag undviken att använda FTP av den här anledningen:) Kör med scp eller något liknande istället och har en användare med lite mer rättigheter.

cyner 2010-06-10 13:02

Jag tycker att /var/www och alla underkataloger och filer ska ägas av användaren www-pub och gruppen www-pub som jag skrev i guiden (inte www-data, alltså webbservern).

MEN, det krävs ofta att man ger PHP eller webbservern rättigheter att skriva till vissa filer eller mappar (vi tar exemplet "wp-content" i WordPress), och då föreslår jag att du gör så här:

Kod:

chown -R www-pub:www-data wp-content
Då blir www-pub ägare och www-data ägargrupp för dessa filer och mappar, men alla andra är fortfarande skrivskyddade för webbservern.

Sedan måste du också ange vilka rättigheter ägaren och användarna i ägargruppen ska ha -- de kan nämligen skilja sig åt. Det gör du med kommandot chmod:

Kod:

chmod -R g+w wp-content
ger (+) gruppen (g) rättighet att skriva (w) till wp-content och alla underkataloger och filer.

(Jag brukar aldrig använda siffror för chmod, det är obegripligt för mig.)

Du kan också skriva exempelvis

Kod:

chmod -R o-wx wp-content
för att ta bort (-) rättigheterna att skriva (w) och köra/öppna (x) från användare som inte är ägare eller tillhör ägargruppen.

För att se vilka rättigheter filerna och mapparna har, kör kommandot "ls -l" och titta på de första kolumnerna.

Jim_Westergren 2010-06-10 13:05

Weaver,

Jo det är väl så man normalt gör. Men i mitt fall måste servern även kunna manipulera med filer och mappar i två stora mappar.

abergman,

Tack så mycket för hjälpen. Som du kanske förstod så är jag helt noob med detta. Har nyligen skaffat VPS.

Jag testade useradd -G www-data NN och då stod det:
useradd: user NN exists

Sen för att testa skrev jag groups NN men då nämns bara www-pub och sudo och inte www-data plus att det är samma sak på FTP.

Jag vet inte om jag gjorde fel. scp har jag aldrig hört talat om.

Jag behöver inte riktigt FTP för dessa två stora mapparna, jag kan skriva ett PHP script istället som kan manipulera de filerna så jag har i alla fall löst mitt problem även om det kanske inte är perfekt.

Är det förresten någon skillnad i säkerhet mellan om www-data äger och kan manipulera filerna eller om filerna har CHMOD 777 och kan på det sättet manipuleras av www-data?

Jim_Westergren 2010-06-10 13:08

Tack så mycket Christian! Mitt svar kom före ditt inlägg.

Jag testar och återkommer.

Jim_Westergren 2010-06-10 13:31

Fan, nu har jag klantat till det och får inte rätt på det.

Jag körde chown –R root:www-pub /var/www för att "nollställa" chown som jag hade det från början enligt Christians guide. Och nu har jag helt förlorat skrivrättigheter på FTP och jag fattar inte varför. Det funkade innan och NN är medlem i gruppen www-pub.

Jim_Westergren 2010-06-10 13:38

Och chown -R www-pub:www-data ger invalid user "www-pub:www-data" ...

cyner 2010-06-10 13:41

Har gruppen skrivrättigheter för /var/www? Eftersom NN är medlem i ägargruppen och inte längre är ägare, måste gruppen har rättigheterna wx, exempelvis så här:

Kod:

chmod -R g+wx /var/www

cyner 2010-06-10 13:53

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20358924)
Och chown -R www-pub:www-data ger invalid user "www-pub:www-data" ...

Jag tänkte fel, du ska byta plats och skriva så här istället:

Kod:

chown -R www-data:www-pub xxx
(eftersom www-pub bara är en grupp, men www-data är både en grupp och en användare)

Jim_Westergren 2010-06-10 14:06

Tack så mycket Christian, nu fungerar det. Både FTP och PHP.

hnn 2010-06-10 16:32

Annars är php med fcgi din vän just här... Då slipper du allt sånt :)...

Då körs PHP som CGI och du anger vilken user php ska exekveras som.

abergman 2010-06-10 18:05

Citat:

Ursprungligen postat av hnn (Inlägg 20358948)
Annars är php med fcgi din vän just här... Då slipper du allt sånt :)...

Då körs PHP som CGI och du anger vilken user php ska exekveras som.

Precis:D Har sluppit alla sånna här fel sen jag gick över till Nginx och php5-fpm!

cyner 2010-06-11 00:06

Citat:

Ursprungligen postat av hnn (Inlägg 20358948)
Annars är php med fcgi din vän just här... Då slipper du allt sånt :)...

Då körs PHP som CGI och du anger vilken user php ska exekveras som.

Nja, hur menar du? Problemet är väl detsamma, att man inte vill att elaka PHP-skript ska kunna skriva över eller förändra vilka filer som helst på webbservern. Om sedan PHP-skripten körs som Apache-användaren eller FCGI-användaren spelar väl ingen roll alls.

Jim_Westergren 2010-06-11 14:43

Flytten från Binero till min VPS på Glesys gick rätt bra och allting fungerar nu förutom att jag upptäckte att jag får permission error på FTP om jag försöker radera eller ändra namn på filer. Skriva över och ändra filer funkar dock.

Jag är inloggad på FTP som NN och inte root.

Jag har provat att testa med olika CHMOD och ange olika ägare till filerna men jag lyckas inte. Alltså även om jag sätter att NN ska äga filen och den ska vara i samma grupp som NN finns i och jag sätter dessutom CHMOD 777 på filen så kan jag inte radera den via FTP utan får permission error. Däremot kan filen raderas via PHP eller Shell kommando utan problem.

Så vad har jag missat här? Inte lätt att hålla reda på ägare, grupper och permissions men säkert finns det något ännu mer som man missat ...

Jim_Westergren 2010-06-11 15:01

Ok, upptäckte det nu ...

Eftersom MAPPEN (inte filen) hade 755 så hade gruppen som NN är medlem i inte rätt att skriva i mappen vilket krävs för att radera FILEN.

Jake.Nu 2010-06-12 00:14

För att nya filer skapade av webbservern skall kunna raderas av din ftpanvändare så är det umask() du skall använda.

Ett exempel där "mappnamn" är en mapp där du laddar upp filer till via formulär (samma gäller om du skapar bilder med GD eller sparar en fil med valfritt innehåll)..
[httpd är användaren som webbservern kör som och ftp-grupp är den gruppen som den användaren du loggar in via FTP är medlem i]

Kod:

// shell
chown httpd mappnamn
chgrp ftp-grupp mappnamn
chmod g+ws mappnamn

// php
<?php
if (is_uploaded_file($_FILES["fil"]["tmp_name"])) {
    umask(2);
    if (!move_uploaded_file($_FILES["fil"]["tmp_name"], "/path/to/mappnamn/" . $_FILES["fil"]["name"])) {
        exit(0);
    }
}
?>


Björklund 2010-06-12 08:16

Citat:

Ursprungligen postat av Jim_Westergren (Inlägg 20359045)
Så vad har jag missat här? Inte lätt att hålla reda på ägare, grupper och permissions men säkert finns det något ännu mer som man missat ...

http://vpsforum.se/viewtopic.php?f=10&t=159


Alla tider är GMT +2. Klockan är nu 19:06.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson