Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  20 2593
Jeg har 2 .txt filer som ligger på 2 forskjellige servere.

Den ene .txt filen har jeg 755 access på, den andre er 660, på grunn av minecraft.

Jeg har hitill bare klart å synkronisere disse .txt filene med windows-programmet FullSync.

Jeg har ikke klart å bruke funksjoner som "fopen", "fwrite" etc. i PHP siden minecraft-servere ikke tillater 755 rettigheter på filene, kun 660.

Derfor må filen erstattes ved upload, jeg kan ikke åpne og skrive til filen direkte.

Finnes det PHP-funksjoner eller funksjoner i andre språk som kan erstatte en fil ved upload i FTP?

På forhånd takk.
Trigonoceps occipita
vidarlo's Avatar
Donor
Du må i så fall først slette fila, også opprette den på nytt, med høvelege tilgangsrettar. 660 skal i utgangspunktet vere nok uansett - det er user group read write. 755 vil sei exectue,read,write på bruker, exectute og read på gruppe og world.
googlejunkie
Turbolego's Avatar
Trådstarter
Sitat av slashdot Vis innlegg
Du må i så fall først slette fila, også opprette den på nytt, med høvelege tilgangsrettar. 660 skal i utgangspunktet vere nok uansett - det er user group read write. 755 vil sei exectue,read,write på bruker, exectute og read på gruppe og world.
Vis hele sitatet...
Fikk beskjed fra min minecraft-host at de kunne ikke sette chmod 755 på .txt fila på serveren, kun 660 var tillat.

Men kan jeg slette en fil med 660, selv om jeg ikke kan exectue,read,write?

Hvis det er mulig, kan jeg da gjøre følgende?
  • Generere .txt fil fra nettside med 755 rettigheter på skjema-server.
  • Slette .txt fil fra minecraft-server (som har chmod 660).
  • Laste opp .txt fil fra skjema-server (med chmod 755) til minecraft-server med chmod 660.

Eller må jeg finne på noe annet?
En god begynnelse vil være å faktisk forstå hvordan rettigheter fungerer. http://linuxcommand.org/lts0070.php har en grei gjennomgang.

Så, hva trenger filen av rettigheter?
Eieren av filen vil gjerne kunne lese den, og endre den. Men er det kjørbar kode i form av et shellscript? tvilsomt. Altså kan man sette 600

Neste spørsmål blir da: er det noen andre som skal kunne lese/skrive/kjøre filen? Hvis f.eks Minecraft-prosessen kjøres av en annen bruker i samme gruppe trenger de også rettigheter til å minst lese den. Altså må vi bruke 640 (for les) eller 660 (for at også gruppen skal kunne skrive til filen)

Til sist, trenger prosesser som ikke er eieren av filen, eller medlemmer av samme gruppe, rettigheter til den? først da må du ta i bruk siste del og sette 644 eller 666. Da vil derimot alle kunne redigere den, og det er sjelden ønskelig.

Jeg tipper problemet er at php/httpd ikke er eier eller medlem i gruppen som eier filen og derfor ikke kan gjøre noe med den. Enkleste løsning er å bruke chgrp til www-user, httpd eller hva nå enn som er nødvendig for at php/httpd skal kunne skrive til den og sette filen til 660
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av moridin Vis innlegg
Jeg tipper problemet er at php/httpd ikke er eier eller medlem i gruppen som eier filen og derfor ikke kan gjøre noe med den. Enkleste løsning er å bruke chgrp til www-user, httpd eller hva nå enn som er nødvendig for at php/httpd skal kunne skrive til den og sette filen til 660
Vis hele sitatet...
Men da gir ikkje ftp-biten tilgang, for alle autentiserte ftp-servere eg har sett skriv og les som den brukaren ein autentiserer som.
googlejunkie
Turbolego's Avatar
Trådstarter
Jeg har ikke mulighet til å endre rettigheter på filer i minecraft-servern.

Hitill har den eneste metoden vært å erstatte filen via et ftp-sync program til windows.

Kan jeg slette en fil med permission 660 fra en server via ftp og php?
Og deretter laste opp en ny fil med permission 660?

Vurderer nesten å sette opp en egen liten raspberry pi kun for å synkronisere disse .txt filene

Fra ticket med support om dette btw:

I unfortunately can't change that for you due to the way Multicraft handles file permissions.
After a set period, the daemon automatically resets the permissions on each server to prevent data security issues.

I apologize that I can't be more of help here.
Vis hele sitatet...
Sist endret av Turbolego; 3. juni 2015 kl. 17:19. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Da kan man vel la FTP-brukeren bli med i den gruppen?
googlejunkie
Turbolego's Avatar
Trådstarter
Sitat av robhol Vis innlegg
Da kan man vel la FTP-brukeren bli med i den gruppen?
Vis hele sitatet...
After a set period, the daemon automatically resets the permissions on each server to prevent data security issues.
Vis hele sitatet...
Vil ikke denne resetten også fjerne brukere?

Kanskje jeg må teste ut...
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av Turbolego Vis innlegg
Vil ikke denne resetten også fjerne brukere?

Kanskje jeg må teste ut...
Vis hele sitatet...
Eg trur delar av problemet ditt er at du ikkje veit kva problemet ditt er. Det er veldig uklårt for meg korleis oppsettet ditt faktisk er, og du kjem med til dels motstridande informasjon.
Du kan jo høre med dem om ikkje dem kan legge brukeren til webservern inn i gruppen som har lese å skrivetilgang (6) til filen, da kan du benytte PHP sine fil funksjoner på filen.

Såfremt dem kjører apache så vil det se noe slik ut:

Kode

sudo usermod www-data --append --groups <minecraft>
Der <minecraft> er gruppen som har lese å skrivetilgang til filen.
googlejunkie
Turbolego's Avatar
Trådstarter
Sitat av slashdot Vis innlegg
Eg trur delar av problemet ditt er at du ikkje veit kva problemet ditt er. Det er veldig uklårt for meg korleis oppsettet ditt faktisk er, og du kjem med til dels motstridande informasjon.
Vis hele sitatet...
Problemet mitt er at jeg ikke har lese/skriverettigheter på en .txt-fil på minecraft-serveren min.

Jeg kan dermed ikke åpne fila med f.eks. "fopen" funksjonen i PHP og skrive til fila.

Jeg kan heller ikke endre permissions, siden:

Sitat av tek support minecraft-server
After a set period, the daemon automatically resets the permissions on each server to prevent data security issues.
Vis hele sitatet...
Eneste jeg kan gjøre i dag, er å slette fila og laste opp ny, dette via en FTP-klient til windows.

Jeg vil helst slippe å måtte dedikere en windows-maskin for å synkronisere 1 .txt fil.


Sitat av 0xFF Vis innlegg
Du kan jo høre med dem om ikkje dem kan legge brukeren til webservern inn i gruppen som har lese å skrivetilgang (6) til filen, da kan du benytte PHP sine fil funksjoner på filen.

Såfremt dem kjører apache så vil det se noe slik ut:

Kode

sudo usermod www-data --append --groups <minecraft>
Der <minecraft> er gruppen som har lese å skrivetilgang til filen.
Vis hele sitatet...
Takker, skal høre med support om det er mulig.

Dersom også brukerne resettes sammen med permissions, må jeg nok finne på noe annet.
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av Turbolego Vis innlegg
Problemet mitt er at jeg ikke har lese/skriverettigheter på en .txt-fil på minecraft-serveren min.

Jeg kan dermed ikke åpne fila med f.eks. "fopen" funksjonen i PHP og skrive til fila.|
Vis hele sitatet...
Jo, det må du ha, ettersom du får overskrive den via FTP. Hadde du ikkje hatt det hadde du ikkje fått overskrive den.

Men FTP har ikkje konsept om endring. FTP er ein protokoll for overføring av filer, ikkje eit nettverksfilsystem. Det kan tenkast at det er det som roter til ting for deg, utan at eg kjenner oppførselen til PHP sin fopen/fwrite godtnok til å sei det sikkert.

Har du forsøkt FTP-funksjonane i PHP? I utgangspunktet tipper eg dei er betre egna til det du forsøker...
googlejunkie
Turbolego's Avatar
Trådstarter
Sitat av slashdot Vis innlegg
Jo, det må du ha, ettersom du får overskrive den via FTP. Hadde du ikkje hatt det hadde du ikkje fått overskrive den.

Men FTP har ikkje konsept om endring. FTP er ein protokoll for overføring av filer, ikkje eit nettverksfilsystem. Det kan tenkast at det er det som roter til ting for deg, utan at eg kjenner oppførselen til PHP sin fopen/fwrite godtnok til å sei det sikkert.

Har du forsøkt FTP-funksjonane i PHP? I utgangspunktet tipper eg dei er betre egna til det du forsøker...
Vis hele sitatet...
Kan hende det, men da jeg spurte support rundt feilmeldingen jeg fikk:

Kode

500 Command "SITE CHMOD" not understood.
Så gikk samtalen i rettning rettigheter og at å endre rettighetene fra 660 ikke var mulig.

Jeg klarer helt fint å åpne, lese og skrive en .txt fil på min egen host, men jeg får ikke til å åpne, lese og skrive på minecraft-serveren, med den samme koden.
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av Turbolego Vis innlegg
Kan hende det, men da jeg spurte support rundt feilmeldingen jeg fikk:

Kode

500 Command "SITE CHMOD" not understood.
Så gikk samtalen i rettning rettigheter og at å endre rettighetene fra 660 ikke var mulig.

Jeg klarer helt fint å åpne, lese og skrive en .txt fil på min egen host, men jeg får ikke til å åpne, lese og skrive på minecraft-serveren, med den samme koden.
Vis hele sitatet...
Så dei har ein ftp-server som ikkje støtter alle kommandoer. Men ettersom du vitterleg får overskrive fila så har du skrivetilgang til den. Det er ikkje stort å diskutere.

Når du testa skrivekommandoane lokalt, testa du då mot ein ftp-tenar? Eller testa du mot filsystem? Har du prøvd med ein vilkårleg FTP-klient, t.d. ncftp?

Eg står fast på min påstand om at problemet ditt iallefall delvis er at du ikkje veit kva problemet ditt er. Det du har posta i etterkant understrekar i stor grad den forvirringa.
googlejunkie
Turbolego's Avatar
Trådstarter
Sitat av slashdot Vis innlegg
Så dei har ein ftp-server som ikkje støtter alle kommandoer. Men ettersom du vitterleg får overskrive fila så har du skrivetilgang til den. Det er ikkje stort å diskutere.

Når du testa skrivekommandoane lokalt, testa du då mot ein ftp-tenar? Eller testa du mot filsystem? Har du prøvd med ein vilkårleg FTP-klient, t.d. ncftp?

Eg står fast på min påstand om at problemet ditt iallefall delvis er at du ikkje veit kva problemet ditt er. Det du har posta i etterkant understrekar i stor grad den forvirringa.
Vis hele sitatet...
Har bare klart å overskrive .txt fila på minecraft-serveren som har rettigheter 660 med "drag 'n' drop" i FileZilla og automatisk synkronisering mellom min host og minecraft-serveren med FullSync.

Å lese/skrive/overskrive .txt fila med rettigheter 755 på min egen host funker via PHP, null problem.

Kan godt hende jeg ikke vet hva som er galt.
Sist endret av Turbolego; 3. juni 2015 kl. 18:43.
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av Turbolego Vis innlegg
Kan godt hende jeg ikke vet hva som er galt.
Vis hele sitatet...
Nei, du veit ikkje kva som er problemet heller. Det kan tenkast at PHP sin FTP-implementasjon er meir eller mindre standardtru enn filezilla. Har du forsøkt å sjekke kva kommandoar filezilla sender for å utføre oppgåva, og deretter forsøke å replisere det med ftp-funksjonane i php? FTP er trass alt klartekst, som er rimeleg triviell å undersøke, enten ved å nytte ein klient som printar kommandoar eller lar deg skrive dei inn sjølv, eller ved å lytte på nettverket med t.d. wireshark.

Det bør vel vere ei oppgåve som er gjennomførbar for nokon som markedsfører seg som utviklar, eh?
googlejunkie
Turbolego's Avatar
Trådstarter
Sitat av slashdot Vis innlegg

Det bør vel vere ei oppgåve som er gjennomførbar for nokon som markedsfører seg som utviklar, eh?
Vis hele sitatet...
Godt poeng, skal sjekke ut hvordan FileZilla gjør dette og se på svaret jeg får fra tech-support på minecraft-serveren anngående å legge til bruker i group.

Takk for hjelpen!
@Slashdot: Tror du har missforstått problemet til Turbolego, la meg prøve å forklare dette bedre.

Turbolego har en fil på en minecraft server som han ønsker å holde up-to-date med en PHP script som kjører på samme server som minecraft serveren. Men filen har 660 permission, noe som vil si at eieren og gruppen har lese og skrivetilgang til filen, mens alle andre null tilgang.

Grunnen til at han kan laste opp en ny versjon via FTP protokollen er fordi FTP brukeren hans er inkludert i gruppen som eier filen, dermed har FTP brukeren lese og skrivetilgang til filen. Men Apache brukeren «www-data» ikkje er inkludert i denne gruppen, og dermed kan ikkje han bruke PHP sine fil funksjoner for å manipulere dataen på denne filen.

Håper jeg fikk det rett Turbolego? Og at det ble litt mer klart for Slashdot.

Slik jeg ser det så er det to løsninger på problemet, ene er å legge «www-data» brukeren til i gruppen som eier filen, eller bruke PHP sin FTP funksjonalitet for å laste opp en ny versjon av filen.
Sist endret av 0xFF; 3. juni 2015 kl. 20:40.
Trigonoceps occipita
vidarlo's Avatar
Donor
Sitat av 0xFF Vis innlegg
@Slashdot: Tror du har missforstått problemet til Turbolego, la meg prøve å forklare dette bedre.
Vis hele sitatet...
Eg tolker det som at turbolego forsøker å skrive til fila, i php, via ftp. Det er den rimelegaste tolkinga, iom. at turbolego seier han har testa med php og ftp mot eigen host.
Sitat av slashdot Vis innlegg
Eg tolker det som at turbolego forsøker å skrive til fila, i php, via ftp. Det er den rimelegaste tolkinga, iom. at turbolego seier han har testa med php og ftp mot eigen host.
Vis hele sitatet...
Beklager, jeg hadde delvis feil, ble litt klarere når vi kommuniserte på PM og jeg fikk lov å titte på FTP serveren hans.

Saken var at han hadde to hoster, der den ene hosten skulle kjøre PHP filen og generere en *.txt fil som videre skulle lastes opp på ftp serveren til den andre hosten.

Jeg skrev et script som hadde FTP funksjonaliteten som han trengte og testet på min lokale host, noe som fungerte utmerket. Men denne fungerte ikkje på hans host, så vi prøvde den på en tredje host der den også fungerte utmerket på. Vi sjekket også phpinfo ( ) og der sto det at FTP modulen skulle være aktivert.

Koden har en ganske omfattende debugings funksjon, så jeg synes det er rart at outputet fra det her scriptet er tomt. Og spesielt når den fungerer fint på 2 av hostene vi har prøvd på.

Kode

<?php
    $ftp_directory          = '';
    $ftp_filename           = '';
    $ftp_hostname           = "";
    $ftp_password           = '';
    $ftp_username           = '';
    $ftp_timeout            = 30; // Connection timeout in secounds

    $script_debug           = true;

    if (( $ftp_handle = ftp_connect ( $ftp_hostname, 21, $ftp_timeout )) == false )
    {
        echo ( "<h1>Unable to connect to FTP server</h1><br />" );

        if ( $script_debug == true )
        {
            echo ( "<p>FTP Hostname: " . $ftp_hostname . "</p><br />" );
        }

        echo ( "<p>Please check your hostname!</p>" );

        exit ( -1 );
    }
    else
    {
        if ( $script_debug == true )
        {
            echo ( "<h1>Successfully connected to FTP server</h1>" );
        }
    }

    if ( ftp_login ( $ftp_handle, $ftp_username, $ftp_password ) == false )
    {
        echo ( "<h1>Unable to authenticate users</h1><br />" );

        if ( $script_debug == true )
        {
            echo ( "<p>FTP Username: \"" . $ftp_username . "\"</p><br />" );
            echo ( "<p>FTP Password: \"" . $ftp_password . "\"</p><br />" );
        }

        echo ( "<p>Please check your username and password!</p><br />" );

        if ( ftp_close ( $ftp_handle ) == false )
        {
            echo ( "<h1>Unable to close the connection</h1><br />" );
            echo ( "<p>Please check your source code for errors!</p><br />" );
        }

        exit ( -1 );
    }
    else
    {
        if ( $script_debug == true )
        {
            echo ( "<h1>Successfully authenticated user</h1>" );
        }
    }


    if ( ftp_chdir ( $ftp_handle, $ftp_directory ) == false )
    {
        echo ( "<h1>Unable to change directory</h1><br />" );

        if ( $script_debug == true )
        {
            echo ( "<p>FTP Directory: \"" . $ftp_directory . "\"</p><br />" );
        }

        echo ( "<p>Please check your spelling of directory!</p><br />" );

        if ( ftp_close ( $ftp_handle ) == false )
        {
            echo ( "<h1>Unable to close the connection</h1><br />" );
            echo ( "<p>Please check your source code for errors!</p><br />" );
        }

        exit ( -1 );
    }
    else
    {
        if ( $script_debug == true )
        {
            echo ( "<h1>Successfully changed directory!</h1>" );
        }
    }

    if ( ftp_put ( $ftp_handle, $ftp_filename, $ftp_filename, FTP_ASCII ) == false )
    {
        echo ( "<h1>Unable to upload the file</h1><br />" );

        if ( $script_debug == true )
        {
            echo ( "<p>FTP Filename: \"" . $ftp_filename . "\"</p><br />" );
        }

        echo ( "<p>Please check your spelling of filename!</p><br /><br />" );

        if ( ftp_close ( $ftp_handle ) == false )
        {
            echo ( "<h1>Unable to close the connection</h1><br />" );
            echo ( "<p>Please check your source code for errors!</p><br />" );
        }

        exit ( -1 );
    }
    else
    {
        echo ( "<h1>Successfully uploaded the file</h1><br />" );
    }

    if ( ftp_close ( $ftp_handle ) == false )
    {
        echo ( "<h1>Unable to close the connection</h1><br />" );
        echo ( "<p>Please check your source code for errors!</p><br />" );

        exit ( -1 );
    }
    else
    {
        if ( $script_debug == true )
        {
            echo ( "<h1>Successfully closed FTP connection</h1>" );
        }
    }

?>
Sist endret av 0xFF; 3. juni 2015 kl. 22:48.
Hvis output fra scriptet ved kjøring på hans server er helt tomt, så ville jeg tippet på at PHP møter på en fatal error og dør på seg før det får muligheten til å skrevet ut noe som helst. Prøv å legge inn noe output før kallet til ftp_connect også f.eks.