LINUX-BG   Adres : http://www.linux-bg.org
Direktorii i prava v ProFTPd
Ot: Vladsun
Publikuvana na: 2-08-2007
Adres na statiiata: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=395338847
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


    << | >>

    Avtorite na saita, kakto i tehnite sutrudnitsi zapazvat avtorskite prava vurhu sobstvenite si materiali publikuvani tuk, no te sa copyleft t.e. mogat svobodno da budat kopirani i razprostraniavani s iziskvaneto izrichno da se upomenava imeto na avtora, kakto i da se publikuva na vidno miasto, che te sa vzeti ot originalniia im URL-adres na tozi survur (http://www.linux-bg.org). Avtorskite prava na prevodnite materiali prinadlezhat na tehnite avtori. Ako s publikuvaneto tuk na niakakuv material nevolno sa narusheni nechii prava - sled konstatiraneto na tozi fakt materialut shte bude svalen.

    All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
    Linux is copyright by Linus Torvalds.
    © Linuks za bulgari EOOD 2007
    © Slavei Karadjov 1999 - 2006

    All rights reserved.

    Изпълнението отне: 0 wallclock secs ( 0.13 usr + 0.02 sys = 0.15 CPU)