←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Problem z CHMODami pliku .ini


Najlepsza odpowiedź GwynBleidD 29.07.2014 08:36

CHMODy mają się NIJAK do tego, co klient może z plikami, bo nie może nic, bez względu na nie. Poza tym chmody odnoszą się do użytkowników systemowych, czyli do wewnętrznej konfiguracji serwera dedykowanego lub VPSa na którym serwer stoi.

Zwykle na hostingach wygląda to tak, że użytkownik FTP jest ten sam, co użytkownik serwera HLDS. Wtedy 600 daje pełne prawa dla serwera do odczytu i zapisu pliku (700 dla katalogów, 700 dla plików się nie opłaca ustawiać, bo dla HLDS nie zrobi to różnicy żadnej, ale może umożliwić ataki z zewnątrz poprzez wadliwą infrastrukturę hostingu). 700 powinny mieć w takim wypadku wyłącznie katalogi i pliki binarne serwera (w katalogu głównym, powyżej katalogu cstrike).

Na PORZĄDNYCH hostingach użytkownik FTP jest inny od użytkownika HLDS, ale są w tej samej grupie. Co oznacza, że 660 daje możliwość zapisu i odczytu dla serwera (770 dla katalogów). Tutaj masz już możliwość ustawienia praw 640, aby serwer mógł tylko odczytać niektóre pliki i katalogi, co zapobiega wykorzystywaniu niektórych dziur w HLDSie. Aby jednak takie ograniczenie zadziałało, właścicielem plików musi być użytkownik FTP (czyli plik musi zostać utworzony z poziomu FTP, a nie automatycznie przez HLDS). Dodatkowo w jednej grupie są wyłącznie użytkownicy do zarządzania tym samym serwerem, dzięki czemu właściciel innego serwera na tym samym hostingu nie ma dostępu do Twoich plików.

Na BADZIEWNYCH hostingach, od których należy od razu uciekać, użytkownik FTP jest inny od użytkownika HLDS i należą oni do OSOBNYCH grup. Przez co, aby serwer mógł odczytywać i zapisywać pliki, musimy dać chmody 666, co daje dostęp do naszych plików właścicielom innych serwerów na tym samym hostingu, więc ktoś wykupując sobie serwer na takim hostingu może dodawać sobie admina na wszystkich innych serwerach!

Dlatego ostatnia cyfra powinna być ZAWSZE ustawiona na 0, porządniejsze hostingi to wymuszają, albo przynajmniej ustawiają dla domyślnie tworzonych plików.

Poza tym we fragmencie pluginu, który przedstawiłeś nie ma ANI JEDNEJ linijki, która potrzebuje ZAPISU do pliku, jest sam odczyt. Więc albo pokaż gdzie próbujesz zapisać do tego pliku w pluginie, albo daj sobie spokój z chmodami, bo nie to robisz źle. Przejdź do postu
Zablokowany

  • +
  • -
Rellik # - zdjęcie Rellik # 28.07.2014

Witam, mam problem jak w temacie... tzn. chodzi mi o to, że gdy zmienie chmody pliku klany-data.ini z 644 na 777 po zmianie mapy chmody same się zmieniają na 644 co nie umożliwia poprawnego działania plugin klan...

Jak mam zaradzić temu, aby Chmody same się nie zmieniały na 644 tylko zostały na 777 tak jak chce.?

Każdy pomocny post = +

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 28.07.2014

Czy hosting sam nie "poprawia" chmodów?

W jakim folderze trzymasz ten plik ini?

Czy usuwasz plik w swoim pluginie i tworzysz go jeszcze raz?
Odpowiedz

  • +
  • -
Rellik # - zdjęcie Rellik # 28.07.2014

Czy hosting sam nie "poprawia" chmodów?

Nie wiem, jak niby to sprawdzić?.

 

W jakim folderze trzymasz ten plik ini?

Trzymam go w folderze configs .. ( cstrike/addons/amxmodx/configs )

 

 

Czy usuwasz plik w swoim pluginie i tworzysz go jeszcze raz?

Tzn. jeśli chodzi Ci o to czy plugin sam go tworzy to owszem tak...
Próbowałem zrobić tak, że... wyłączyłem ten plugin, zmieniłem mu nazwe z klan.amxx na klany.amxx usunąłem klans-data.ini zrobiłem nowy klans-data.ini samodzielnie i wrzuciłem go na serwer po czym zmieniłem chmody na 777 włączyłem plugin i zrestartowałem serwer i nic nie pomogło... oczywiście klans-data.ini było puste ale chmody z 777 zmieniły się na 644 .:/

Odpowiedz

  • +
  • -
Ogen Dogen - zdjęcie Ogen Dogen 28.07.2014

Wiem że Zabijaka ma zablokowane ustawianie CHMOD'ów , bo sam potrzebowałem. Najlepszym wyjściem tu jest po prostu napisanie do supportu o zmianę. Podaj im dokładną ścieżkę pliku i jaki chmod potrzebujesz.

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 28.07.2014

ad 1. stwórz DOWOLNY plik, który nie jest obsługiwany przez żaden plugin i zmień mu chmody, sprawdź czy po zmianie mapy lub restarcie serwera zostaną przywrócone.

ad 2. Spróbuj trzymać plik w katalogu data, zamiast w configach.

ad 3. Chodzi mi o to, czy przy próbie zapisu do pliku nie kasujesz go w pluginie i nie tworzysz na nowo? Pokaż w jaki sposób go plugin edytuje.

Poza tym czy masz jakieś pluginy zabezpieczające serwer przed atakami?

I chmody 777 to duży błąd. Nawet 644 to błąd. 660 będą wystarczające, 640 powinny być domyślnie. A hosting umożliwia odczytywanie plików na cudzych serwerach, przez co np możesz sobie zerknąć hasło na admina, ukraść pluginy albo podejrzeć hasła do bazy danych, jeśli są w pliku trzymane. Wszystkie pliki serwera powinny mieć chmody z 0 na ostatniej pozycji, no chyba że masz serwery na własnym VPSie i nie jest to problemem, że ktoś Ci podejrzy pliki jednego serwera, mając dostęp do 2go...
Odpowiedz

  • +
  • -
Rellik # - zdjęcie Rellik # 28.07.2014

@@EDIT.

 

Dowiedziałem się, że hosting nie blokuje zmiany CHMODów.

__

Tak mam pluginy zabezpieczające przed atakami...Oto one:

anti_fullupdate_spam2.amxx
bad_rcon_ban.amxx
alias_detector.amxx

W tym przypadku chmody 777 są wymagane... aby INNI mogli odczytywać zawartość pliku .. inni tzn. serwer, gracze. Może prościej, pokaże Ci urywek kodu odpowiedzialnego za odczyt z pliku klans-data.ini

public ReadKlanData()
{
new szConfigsDir[ 60 ];
get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
add( szConfigsDir, charsmax( szConfigsDir ), "/klans-data.ini" );
 
new iFile = fopen( szConfigsDir, "rt" );
 
new szBuffer[ 512 ], szData[ 32 ], szValue[ 33 ]/*, i, iCurGang*/, niepotrzebna_nazwa[64], id_klanu[6]
new idc
new number;
new num_pl=0;
//new j = 0;
//new membername[12][33]
while( !feof( iFile ) )
{
//start:
fgets( iFile, szBuffer, charsmax( szBuffer ) );
 
trim( szBuffer );
remove_quotes( szBuffer );
 
if( !szBuffer[ 0 ] || szBuffer[ 0 ] == ';' ) 
{
continue;
}
if(containi(szBuffer, "KLANS_COUNT") != -1)
{
strtok(szBuffer, niepotrzebna_nazwa, 63, szValue, 32, '=')
g_iKlansCount = str_to_num(szValue);
 
continue;
}
if( szBuffer[ 0 ] == '[' && szBuffer[ strlen( szBuffer ) - 1 ] == ']' )
{
replace(szBuffer, 511, "[", "")
replace(szBuffer, 511, "]", "")
 
strtok(szBuffer, id_klanu, 5, niepotrzebna_nazwa, 63, '=')
idc = str_to_num(id_klanu);
copy(g_szKlanName[idc], 63, niepotrzebna_nazwa)
 
//copy( niepotrzebna_nazwa, strlen( szBuffer ) - 2, szBuffer[ 1 ] );
g_iKlanExperience[idc] = 0.0
g_iKlanLevel[idc] = 0 
g_iKlanAdditionalPoints[XP][idc] = 0
g_iKlanAdditionalPoints[DMG][idc] = 0
g_iKlanAdditionalPoints[ARMOR][idc] = 0
g_iKlanAdditionalPoints[GRAV][idc] = 0 
g_iKlanMembersCount[idc] = 0 
g_szKlanOwner[0][idc] = "" 
g_szKlanOwner[1][idc] = "" 
g_iKlanCoins[idc] = 0
 
number = 0;
continue;
 
}
number++;
if(number < 11)
{
strtok( szBuffer, szData, 31, szValue, 32, '=' );
trim( szData );
trim( szValue );
switch(number)
{
case 1: g_iKlanExperience[idc] = str_to_float(szValue)
case 2: g_iKlanLevel[idc] = str_to_num(szValue);
case 3: g_iKlanMembersCount[idc] = str_to_num(szValue);
case 4: g_iKlanCoins[idc] = str_to_num(szValue);
case 5: copy(g_szKlanOwner[0][idc], 63, szValue);
case 6: copy(g_szKlanOwner[1][idc], 63, szValue);//g_szKlanOwner[1][idc] = szValue;
case 7: g_iKlanAdditionalPoints[XP][idc] = str_to_num(szValue);
case 8: g_iKlanAdditionalPoints[DMG][idc] = str_to_num(szValue);
case 9: g_iKlanAdditionalPoints[ARMOR][idc] = str_to_num(szValue);
 
case 10: 
{
g_iKlanAdditionalPoints[GRAV][idc] = str_to_num(szValue);
g_iKlanAdditionalPoints[TO_ADD][idc] = (g_iKlanLevel[idc]-1)*2-g_iKlanAdditionalPoints[XP][idc]-g_iKlanAdditionalPoints[DMG][idc]-g_iKlanAdditionalPoints[ARMOR][idc]-g_iKlanAdditionalPoints[GRAV][idc];
}
}
continue;
}
if(g_iKlanMembersCount[idc] > 1)
{
if(number >= 11)
{
num_pl++
trim(szBuffer);
copy(g_szKlanMembers[num_pl][idc], 63, szBuffer)
}
}
 
}
 
fclose( iFile );
}

Użytkownik sKato. edytował ten post 28.07.2014 14:18
Odpowiedz

  • +
  • -
Najlepsza odpowiedź GwynBleidD - zdjęcie GwynBleidD 29.07.2014

CHMODy mają się NIJAK do tego, co klient może z plikami, bo nie może nic, bez względu na nie. Poza tym chmody odnoszą się do użytkowników systemowych, czyli do wewnętrznej konfiguracji serwera dedykowanego lub VPSa na którym serwer stoi.

Zwykle na hostingach wygląda to tak, że użytkownik FTP jest ten sam, co użytkownik serwera HLDS. Wtedy 600 daje pełne prawa dla serwera do odczytu i zapisu pliku (700 dla katalogów, 700 dla plików się nie opłaca ustawiać, bo dla HLDS nie zrobi to różnicy żadnej, ale może umożliwić ataki z zewnątrz poprzez wadliwą infrastrukturę hostingu). 700 powinny mieć w takim wypadku wyłącznie katalogi i pliki binarne serwera (w katalogu głównym, powyżej katalogu cstrike).

Na PORZĄDNYCH hostingach użytkownik FTP jest inny od użytkownika HLDS, ale są w tej samej grupie. Co oznacza, że 660 daje możliwość zapisu i odczytu dla serwera (770 dla katalogów). Tutaj masz już możliwość ustawienia praw 640, aby serwer mógł tylko odczytać niektóre pliki i katalogi, co zapobiega wykorzystywaniu niektórych dziur w HLDSie. Aby jednak takie ograniczenie zadziałało, właścicielem plików musi być użytkownik FTP (czyli plik musi zostać utworzony z poziomu FTP, a nie automatycznie przez HLDS). Dodatkowo w jednej grupie są wyłącznie użytkownicy do zarządzania tym samym serwerem, dzięki czemu właściciel innego serwera na tym samym hostingu nie ma dostępu do Twoich plików.

Na BADZIEWNYCH hostingach, od których należy od razu uciekać, użytkownik FTP jest inny od użytkownika HLDS i należą oni do OSOBNYCH grup. Przez co, aby serwer mógł odczytywać i zapisywać pliki, musimy dać chmody 666, co daje dostęp do naszych plików właścicielom innych serwerów na tym samym hostingu, więc ktoś wykupując sobie serwer na takim hostingu może dodawać sobie admina na wszystkich innych serwerach!

Dlatego ostatnia cyfra powinna być ZAWSZE ustawiona na 0, porządniejsze hostingi to wymuszają, albo przynajmniej ustawiają dla domyślnie tworzonych plików.

Poza tym we fragmencie pluginu, który przedstawiłeś nie ma ANI JEDNEJ linijki, która potrzebuje ZAPISU do pliku, jest sam odczyt. Więc albo pokaż gdzie próbujesz zapisać do tego pliku w pluginie, albo daj sobie spokój z chmodami, bo nie to robisz źle.
Odpowiedz

  • +
  • -
Rellik # - zdjęcie Rellik # 30.07.2014

Poza tym we fragmencie pluginu, który przedstawiłeś nie ma ANI JEDNEJ linijki, która potrzebuje ZAPISU do pliku, jest sam odczyt. Więc albo pokaż gdzie próbujesz zapisać do tego pliku w pluginie, albo daj sobie spokój z chmodami, bo nie to robisz źle.

Z całym szacunkiem Gwyn... lecz ta funkcja z angielskiego oznacza ODCZYT... Nie ma tam ani jednej liniki która potrzebuje zapisu do pliku bo to jest odczyt :)... public ReadKlanData()

 

 

Tutaj masz zapis: 

public SaveKlanData()
{
new szConfigsDir[ 64 ];
get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
 
add( szConfigsDir, charsmax( szConfigsDir ), "/klans-data.ini" );
 
if(file_exists( szConfigsDir) )
delete_file( szConfigsDir );
 
new iFile = fopen( szConfigsDir, "wt" ); 
new szBuffer[ 256 ];
 
formatex( szBuffer, charsmax( szBuffer ), "KLANS_COUNT=%i^n^n", g_iKlansCount);
fputs( iFile, szBuffer );
 
for(new i=0; i<g_iKlansCount; i++)
{
formatex( szBuffer, charsmax( szBuffer ), "[%i=%s]^n", i, g_szKlanName[i] );
fputs( iFile, szBuffer );
 
formatex( szBuffer, charsmax( szBuffer ), "EXP=%0.1f^n", g_iKlanExperience[i] );
fputs( iFile, szBuffer );
 
formatex( szBuffer, charsmax( szBuffer ), "LVL=%i^n", g_iKlanLevel[i] );
fputs( iFile, szBuffer );
 
formatex( szBuffer, charsmax( szBuffer ), "MEMBERS_C=%i^n", g_iKlanMembersCount[i] );
fputs( iFile, szBuffer );
 
formatex( szBuffer, charsmax( szBuffer ), "COINS=%i^n", g_iKlanCoins[i] );
fputs( iFile, szBuffer );
 
formatex( szBuffer, charsmax( szBuffer ), "LEADER=%s^n", g_szKlanOwner[0][i] );
fputs( iFile, szBuffer );
 
formatex( szBuffer, charsmax( szBuffer ), "VCLEADER=%s^n", g_szKlanOwner[1][i] );
fputs( iFile, szBuffer );
 
formatex( szBuffer, charsmax( szBuffer ), "STAT_XP=%i^n", g_iKlanAdditionalPoints[XP][i] );
fputs( iFile, szBuffer );
 
formatex( szBuffer, charsmax( szBuffer ), "STAT_DMG=%i^n", g_iKlanAdditionalPoints[DMG][i] );
fputs( iFile, szBuffer );
 
formatex( szBuffer, charsmax( szBuffer ), "STAT_ARMOR=%i^n",g_iKlanAdditionalPoints[ARMOR][i] );
fputs( iFile, szBuffer );
 
formatex( szBuffer, charsmax( szBuffer ), "STAT_GRAV=%i^n", g_iKlanAdditionalPoints[GRAV][i] );
fputs( iFile, szBuffer ); 
 
//formatex( szBuffer, charsmax( szBuffer ), "MEMBERS^n", g_szKlanName[i] );
//fputs( iFile, szBuffer );
 
for(new j = 1; j < g_iKlanMembersCount[i]; j++)
{
formatex( szBuffer, charsmax( szBuffer ), "%s^n", g_szKlanMembers[j][i]);
fputs( iFile, szBuffer );
}
formatex( szBuffer, charsmax( szBuffer ), "^n^n");
fputs( iFile, szBuffer );
 
}
 
fclose( iFile );
}
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 30.07.2014

Zamiast plików ini możesz użyć nvault / sqlite

Odpowiedz

  • +
  • -
Rellik # - zdjęcie Rellik # 30.07.2014

No wiem o tym, że jest taka opcja. Tylko nie wiem sam jak ogarnąć to :/

Odpowiedz

  • +
  • -
Rellik # - zdjęcie Rellik # 31.07.2014

Chciałbym sqlite... na baze danych zapis... lecz nie ogarniam tego w ogóle..

Odpowiedz
Zablokowany