ot Vladsun(2-08-2007)

reiting (19)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

1. Uvod

Statiiata shte razgleda problemite i resheniiata pri suzdavane na home direktoriite na FTP potrebitelite, strukturata im i pravata na potrebitelite v tiah. Vnimanieto e kontsentrirano vurhu konfiguriraneto na FTP surver sus spetsifichni iziskvaniia kum strukturata na direktoriite i poddirektoriite.

ProFTP e edin ot populiarnite ftp surveri i tui kato az rabotia predimno s nego shte razgledam negovata konfiguratsiia.

2. Obshta konfiguratsiia

Sled kato FTP survera se konfigurira i pusne v deistvie e neobhodimo da se dobaviat potrebiteli, koito da imat dostup do tazi usluga.
Neka predpolozhim, che sme suzdali potrebitel ftp kum grupa ftp i survera e pusnat s tozi potrebitel. Sushto taka sme suzdali direktoriiata /home/ftp sus sobstvenik ftp:ftp.
Pri tezi usloviia, iskame da dobaviame direktoriite na potrebitelite kato poddirektorii na /home/ftp/. Dobavianeto mozhe da stane po razlichen nachin - primerno chrez mySQL ili LDAP modulite za avtentifikatsiia na ProFTP. Drug nachin e chrez izpolzvaneto na useradd komandata.
Nai-chesto tova stava chrez:

useradd
useradd -g ftp -s /bin/false -d /home/ftp/ivan -pPAROLA ivan


Izpolzvaneto na /bin/false za shell na FTP potrebitelite e preporuchitelno.
V tazi statiia shte razgledam konfiguriraneto na ProFTP surver s MySQL avtentifikatsiia. Samiiat instalatsionen protses niama da bude razglezhdan.

Eto kakvo predstavliava /etc/proftpd/proftpd.conf:
/etc/proftpd/proftpd.conf
 Include /etc/proftpd/modules.conf
 
 UseIPv6				off
 
 ServerName			"ServerName of you choice"
 ServerType			standalone
 DeferWelcome			off
 
 MultilineRFC2228		on
 DefaultServer			on
 ShowSymlinks			on
 
 TimeoutNoTransfer		600
 TimeoutStalled			600
 TimeoutIdle			1200
 
 ListOptions         "-l"
 
 Port				21
 
 MaxInstances			30
 
 User				ftp
 Group				ftp
 
 Umask				022  022
 AllowOverwrite			on
 
 DenyFilter			\*.*/
 DenyFilter			".ftpaccess"
 
 DefaultRoot			~
 
 TransferLog			/var/log/proftpd/xferlog
 SystemLog			/var/log/proftpd/proftpd.log
 
 <IfModule mod_tls.c>
 TLSEngine off
 </IfModule>
 
 <IfModule mod_quota.c>
 QuotaEngine on
 </IfModule>
 
 <IfModule mod_ratio.c>
 Ratios on
 </IfModule>
 
 <IfModule mod_delay.c>
 DelayEngine on
 </IfModule>
 
 <IfModule mod_ctrls.c>
 ControlsEngine        on
 ControlsMaxClients    2
 ControlsLog           /var/log/proftpd/controls.log
 ControlsInterval      5
 ControlsSocket        /var/run/proftpd/proftpd.sock
 </IfModule>
 
 <IfModule mod_ctrls_admin.c>
 AdminControlsEngine on
 </IfModule>
 
 SQLConnectInfo		proftpd@localhost proftpd_database proftpd_password
 SQLAuthenticate		users groups
 SQLAuthTypes		Crypt Backend
 SQLDefaultHomedir	~
 SQLUserInfo		users userid passwd uid gid homedir shell
 SQLGroupInfo		groups groupid gid members
 
 SQLLogFile		/var/log/proftpd.sql_log
 
 # Count number of logins for each user
 SQLLog                PASS logincount
 SQLNamedQuery         logincount UPDATE "login_count=login_count+1 WHERE userid='%u'" users
 
 # Save last login
 SQLLog                PASS lastlogin
 SQLNamedQuery         lastlogin UPDATE "last_login=now() WHERE userid='%u'" users
 
 # Count number of bytes/files downloaded and uploaded
 SQLLog RETR           dlbytescount
 SQLNamedQuery         dlbytescount UPDATE "dl_bytes=dl_bytes+%b WHERE userid='%u'" users
 SQLLog RETR           dlcount
 SQLNamedQuery         dlcount UPDATE "dl_count=dl_count+1 WHERE userid='%u'" users
 SQLLog STOR           ulbytescount
 SQLNamedQuery         ulbytescount UPDATE "ul_bytes=ul_bytes+%b WHERE userid='%u'" users   
 SQLLog STOR           ulcount
 SQLNamedQuery         ulcount UPDATE "ul_count=ul_count+1 WHERE userid='%u'" users
 
 # Do not let disabled or expired users to login
 SQLUserWhereClause    "disabled!=1 and (NOW()<=expires or expires=-1)"
 
 # Do not require a valid shell, this might be a good thing to turn on for SQL-users
 # This might simplify the configuration a little bit
 RequireValidShell	off


Estestveno, vashiiat konfiguratsionen fail mozhe da se razlichava, osobeno v MySQL chastta. V sluchaia sum izpolzval gotovo reshenie za web interfeis - "ProFTPd management", v koeto ima zadanie za tablitsite i konfiguratsiiata na ProFTP.
Do tuk nishto interesno.

3. Suzdavane na direktorii pri poiskvane

Ako se opitate da vlezete vuv FTP survera s potrebitel suzdaden ot www interfeisa i po gorniia konfiguratsionen fail, to shte poluchite greshka poradi fakta, che niama suzdadena home direktoriia za potrebitelia. Prichinite za lipsata na tazi direktoriia sa dve:

  • www survera ne bi triabvalo da ima prava za suzdavane na direktorii v /home/ftp/;
  • niamate zadadena optsiia v konfiguratsionniia fail na ProFTP za avtomatichno suzdavane na direktoriiata.

  • Edina ot optsiite v sluchaia e:
    SQLHomedirOnDemand
    SQLHomedirOnDemand	on


    T.e. pri purvoto vlizane na potrebitelia negovata home direktoriia shte se suzdade avtomatichno sus suotvetnite sobstvenik, grupa i prava. Za pravata shte govorim po-dolu.
    Druga optsiia, s po-golemi vuzmozhnosti e:
    CreateHome
    CreateHome on

    Ako sa zadadeni i dvete optsii, to CreateHome e s prioritet.
    Optsiiata e v sledniia format:
    CreateHome
    CreateHome off|on [<mode>] [skel <path>] [dirmode <mode>]

    V nai-prostiia variant imame:
    CreateHome
    CreateHome on

    V tozi sluchai shte se suzdavat avtomatichno direktorii za potrebitelite, kato pravata za direktoriiata sa 0700 - stoinostta na mode po premulchavane.
    Ako iskame da promenim pravata, prim. na 711, to shte izpolzvame:
    CreateHome
    CreateHome on 711

    Izpolzvaneto na dirmode parametura se nalaga v sluchaite, kogato suzdavame home direktoriia za potrebitel, koiato se namira v nesushtestvuvasha(i) direktoriia(i). Primeno imame potrebitel hasan. Iskame taka da organizirame durvoto na FTP potrebitelskite direktorii, che to da e podredeno po azbuchen red ot vtori red. T.e. direktoriiata na hasan triabva da e /home/ftp/h/ha/hasan. Ako hasan e purviia potrebitel s bukvata "h", to direktoriite /home/ftp/h i /home/ftp/h/ha vse oshte ne sushestvuvat. V takiva sluchai izpolzvame slednoto:
    CreateHome
    CreateHome on 700 dirmode

    V tozi sluchai pravata vurhu direktoriite /home/ftp/h i /home/ftp/h/ha sa otnovo 0700. Ako iskame da promenim pravata vurhu direktoriite /home/ftp/h i /home/ftp/h/ha (prim na 0711), to izpolzvame:
    CreateHome
    CreateHome on 700 dirmode 711

    V niakoi sluchai se nalaga da se izgradi struktura ot poddirektorii za vseki potrbitel. Primerno vseki potrebitel triabva da ima direktorii out, in, temp pri tova s razlichni prava vurhu tiah.
    Realizatsiiata na podobna funktsionalnost se zadava chrez skel parametura:
    CreateHome
    CreateHome on skel /etc/ftpd/skel

    Stoinostta na tozi parametur de fakto e putia do direktoriiata, koiato sudurzha modela (skeleta) za suzdavane na strukturata na direktoriite zaedno s failovete v tiah za vseki potrebitel.
    Spored primera po-gore v /etc/ftpd/skel triabva da imame imame:

    /etc/ftpd/skel/in
    /etc/ftpd/skel/out
    /etc/ftpd/skel/temp


    Togava pri purvoto vlizane na potrebitelia hasan shte se poluchi slednoto durvo na direktoriite:

    /home/ftp/hasan/in
    /home/ftp/hasan/out
    /home/ftp/hasan/temp


    Ako izpolzvame i primera za dirmode, to shte se poluchi slednoto durvo na direktoriite:

    /home/ftp/h/ha/hasan/in
    /home/ftp/h/ha/hasan/out
    /home/ftp/h/ha/hasan/temp


    V tozi sluchai pulnata optsiia e:
    CreateHome
    CreateHome on 700 skel /etc/ftpd/skel dirmode 711


    V "skeletnata" direktoriia mozhe da ima i failove - te sushto she se suzdadat v direktoriiat na potrebitelia. Nai-umestno e tezi failove da sa .ftpaccess failove, s koito da se zadavat dopulnitelno ogranicheniia po deistviiata na potrebitelia za vsiaka direktoriia. Imenno tozi fail shte razgledame v sledvashtata tochka.

    4. Izpolzvane na .ftpaccess faila

    Fail s takova ime, namirasht se v direktoriia prinadlezhashta na FTP potrebitel deistva kato direktivite v sektsiia na konfiguratsionniia fail na ProFTP. Eto zashto e nalozhitelno da zashtitim dostupa do tozi fail chrez izpolzvaneto na:
    .ftpaccess
    DenyFilter			".ftpaccess"

    v konfiguratsionniia fail.
    Estestveno, niama da opisvam vsichki vuzmozhni optsii, koito mozhete da zadadete v tozi fail. SHTe razgledam samo niakoi sluchai za ogranichavane na pravata za pisane, chetene, triene i redaktsiia na failove ot potrebitelia.

    4.1. Samo za chetene


    .ftpaccess
    <Limit ALL>
     DenyAll
     </Limit>
     
     <Limit CDUP CWD XCWD XCUP PWD XPWD LIST>
     AllowAll
     </Limit>
     
     <Limit READ>
     AllowAll
     </Limit>



    4.2. Samo za zapis, bez triene


    .ftpaccess
    <Limit ALL>
     DenyAll
     </Limit>
     
     <Limit CDUP CWD XCWD XCUP PWD XPWD LIST>
     AllowAll
     </Limit>
     
     <Limit STOR STOU>
     AllowAll
     </Limit>



    4.3. Samo zapis, bez triene, bez redaktsiia

    Vazhno e da se otbelezhi zabranata za CHMOD komandata.
    .ftpaccess
    <Limit ALL>
     DenyAll
     </Limit>
     
     <Limit CDUP CWD XCWD XCUP PWD XPWD LIST>
     AllowAll
     </Limit>
     
     <Limit STOR STOU>
     AllowAll
     </Limit>
     
     Umask	222

    Za poveche informatsiia otnosno FTP komandite, koito mozhete da izpolzvate po opisaniia po-gore nachin:
    http://www.nsftools.com/tips/RawFTP.htm


    5. Izpolzvani materiali

    http://www.nsftools.com/tips/RawFTP.htm
    http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-CreateHome.html
    http://www.khoosys.net/single.htm?ipg=848
    http://ppmy.sourceforge.net/HOWTO



    << | >>