Naujausias pranešimas: Samba kritinis pažeidžiamumas
frame

Sveiki apsilankę!

Jei forume lankaisi pirmą kartą, kviečiame registruotis ir prisijungti prie diskusijų.

Prisijungti Registruotis

PureFTPd susieto su MySQL įdiegimas CentOS 6 aplinkoje

IV_VygandasSIV_VygandasS Serverių ekspertas (-ė)
edited 2021 sausio 20 Į Archyvas
Pateikiama pamoka kaip įdiegus PureFTPd serverį, kurio FTP naudotojus galima būtų valdyti per phpMyAdmin valdymo pultą sujungtą su MySQL serveriu. Atlikus įdiegimą bus suteikta galimybė, naudojantis phpMyAdmin valdymo pultu kiekvienam FTP naudotojui priskirti kvotas ir įkeliamų/parsiunčiamų duomenų srauto pralaidumo limitus.

1. Pradžiai mūsų CentOS sistemoje aktyvuojame EPEL repozitoriją::
rpm --import https://fedoraproject.org/static/0608B895.txt
wget ftp://ftp.univie.ac.at/systems/linux/fedora/epel/beta/6/i386/epel-release-6-5.noarch.rpm
rpm -ivh epel-release-6-5.noarch.rpm
yum install yum-priorities

2. Redaguojame /etc/yum.repos.d/epel.repo failą, kuriame ties žyme [epel] įterpiame priority=10 eilutę. Bendrai kodas po [epel] žyme turėtų atrodyti taip:
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
[...]

3. Tuomet įdiegiame MySQL ir phpMyAdmin:
yum -y install mysql mysql-server phpMyAdmin httpd

4. Koreguojame /etc/httpd/conf.d/phpMyAdmin.conf failą užkomentuojant ties Deny from All eilutę šioje vietoje:
<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
[B]#     Deny from All[/B]
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

5. Nurodome automatinį MySQL ir Apache tarnybų paleidimą, persikrovus serverio sistemai:
chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start
chkconfig --levels 235 httpd on
/etc/init.d/httpd start

6. Nurodome MySQL root naudotojo slaptažodį (ties užrašu naujas_sql_slaptažodis įvedame naują root naudotojo sql slaptažodį, visur kitur tiesiog spaudžiame ENTER klavišą):
mysql_secure_installation
[root@test ~]# mysql_secure_installation




NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): <-- ENTER
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] <-- ENTER
New password: <-- naujas_sql_slaptažodis
Re-enter new password: <-- naujas_sql_slaptažodis
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] <-- ENTER
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] <-- ENTER
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] <-- ENTER
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] <-- ENTER
 ... Success!

Cleaning up...



All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!


[root@test ~]#

7. Įdiegiame PureFTPd:
yum install pure-ftpd

8. Sukuriame FTP grupę (ftpgroup) ir naudotoją (ftpuser) su kuriais bus susieti visi mūsų virtualūs naudotojai.
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

9. Sukuriame duomenų bazę pavadinimu pureftpd ir MySQL naudotoją vardu pureftpd, kuriuo vėliau PureFTPd jungsis prie pureftpd duomenų bazės. Pakeičiame ftpdpass žodį, mūsų pageidaujamu slaptažodžiu, kurį norėsime priskirti MySQL naudotojui pureftpd:
mysql -u root -p
CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;

10. MySQL komandinėje eilutėje sukuriame mums reikalingą lentelę:
USE pureftpd;

CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) ENGINE=MyISAM;

11. Išeiname iš MySQL komandinės eilutės:
quit;

12. Mūsų phpMyAdmin valdymo pultą galime pasiekti http://mūsų.serveris.lt/phpMyAdmin/ adresu. Prie pačio phpMyAdmin valdymo pulto prisijungsime pureftpd naudotojo vardu ir ties ftpdpass pakeistu slaptažodžiu.

13. Redaguojame /etc/pure-ftpd/pure-ftpd.conf ir įsitikiname, kad ChrootEveryone, MySQLConfigFile ir CreateHomeDir eilutės atrodo taip:
[...]
ChrootEveryone              yes
[...]
MySQLConfigFile               /etc/pure-ftpd/pureftpd-mysql.conf
[...]
CreateHomeDir               yes
[...]

ChrootEveryone parametras nurodo jog PureFTPd naudos chroot kiekvieno naujo FTP naudotojo pradinėje direktorijoje, siekiant apriboti naudotojo galimybes naršyti už savo pradinės direktorijos ribų. CreateHomeDir parametras nurodo, jog PureFTPd automatiškai sukurs naudotojui pradinę direktoriją, tuo atveju jeigu naudotojui prisijungus ši direktorija dar neegzistuos.

14. Redaguojame /etc/pure-ftpd/pureftpd-mysql.conf failą, atlikdami šią komandų seką:
cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf
vi /etc/pure-ftpd/pureftpd-mysql.conf

15. Patį /etc/pure-ftpd/pureftpd-mysql.conf failo turinį pakeičiame į šį:
MYSQLSocket      /var/lib/mysql/mysql.sock
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLUser       pureftpd
MYSQLPassword   ftpdpass
MYSQLDatabase   pureftpd
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

Įsitikiname, MYSQLPassword eilutėje, vietoje ftpdpass žodžio yra įrašytas tikrasis MySQL naudotojo pureftpd slaptažodis. Taip pat verta atkreipti dėmesį, kad naudotojų slaptažodžiai bus saugomi naudojant MD5 šifravimą.

16. Nurodome automatinį PureFTPd tarnybų paleidimą, persikrovus serverio sistemai:
chkconfig --levels 235 pure-ftpd on
/etc/init.d/pure-ftpd start

17. Įrašant duomenis į duomenų bazę naudosime MySQL komandinę eilutę:
mysql -u root -p
USE pureftpd;

Sukuriame bandomąjį naudotoją testas, ties kuriuo nurodome status parametro reikšmę 1 (tai nurodo jog sukurta FTP paskyra yra aktyvi). Slaptažodį nurodome test (pats slaptažodis bus saugomas naudojant MD5 šifravimą). Ties UID ir GID nurodome prieš tai naudotą 2001 id numerį. Nurodome pradinę direktoriją /home/www.testas.lt ir išsiunčiamų ir parsiunčiamų duomenų srauto pralaidumo apribojimus į 100 KB/s, bei 50 MB kvotą:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('testas', '1', MD5('test'), '2001', '2001', '/home/www.testas.lt', '100', '100', '', '*', '50', '0');
quit;

18. Pabandome prisijungti prie mūsų FTP naudojant FileZilla klientą. Atlikus prisijungimą patikriname ar /home kataloge atsirado naujo naudotojo pradinis katalogas:
ls -l /home

Patikrinus turėtume matyti automatiškai sukurtą /home/www.testas.lt katalogą, kuris turi būti priskirtas ftpuser naudotojui ir ftpgroup naudotojų grupei:
[root@test ~]# ls -l /home
total 4
drwxr-xr-x 2 ftpuser ftpgroup 4096 Apr 2š 19:57 www.testas.lt
[root@test ~]#

19. Kadangi daugumai žmonių yra patogiau turėti grafinę naudotojo sąsają, nurodome kaip yra atliekamas duomenų bazės administravimas naudojant phpMyAdmin valdymo pultą. Pasiekti jau įdiegtą phpMyAdmin valdymo pultą galime adresu:

http://mūsų-serveris-lt/phpMyAdmin/

Kas kartą norint pridėti naują naudotoją, mums reikės įterpti naują eilutę į ftpd lentelę.

ftpd lentelės aprašas:
User: PureFTPd virtualaus naudotojo vardas;
status: 0 arba 1. 0 - naudotojas yra neaktyvus ir negali prisijungti. 1 - aktyvus.
Password: Virtualaus naudotojo slaptažodis. Įvedant patikriname ar nustatytas MD5 šifravimas:
attachmentphpattachmentid17stc1d1367063993
UID: FTP naudotojo id, mūsų pamokoje tai yra 2001.
GID: FTP naudotojų grupės id, mūsų pamokoje tai yra 2001.
Dir: Pradinė naudotojo direktorija. Jeigu nurodyta direktorija naujo naudotojo sukūrimo metu neegzistuoja, ji bus sukurta pirmą kartą šiam naudotojui prisijungus prie FTP serverio. Taip pat šis parametras nurodo ties kuria direktorija bus apribotas naujo naudotojo naršymo galimybės.
ULBandwidth: Naudotojo įkeliamų duomenų srauto pralaidumo apribojimas matuojant kB/s (kilobaitais per sekundę). Nustačius 0 ribojimai nebus taikomi.
DLBandwidth: Naudotojo parsiunčiamų duomenų srauto pralaidumo apribojimas matuojant kB/s (kilobaitais per sekundę). Nustačius 0 ribojimai nebus taikomi.
comment: Bet koks informacinis komentaras.
ipaccess: Įvedami IP adresai kuriems yra leidžiama prisijungti prie FTP naudotojo paskyros. Nurodant * prisijungimas bus leidžiamas iš bet kokio IP adreso.
QuotaSize: Disko vietos sąnaudų apribojimai FTP naudotojui, matuojama MB. Nustačius 0 ribojimai nebus taikomi.
QuotaFiles: Failų kiekio ribojimas FTP naudotojui. Nustačius 0 ribojimai nebus taikomi.
Pažymėtos temos:
Ši diskusija uždaryta
Dedikuoti.lt
Šiame forume rasite informaciją kaip atlikti serverio administravimą, konfigūravimą, įvairių tarnybų bei papildomų aplikacijų diegimą. Taip pat pateiksime rekomendacijų, skirtų serverių saugumui, monitoringui ir optimizavimui. Kviečiame prisijungti prie dedikuotų serverių administratorių bendruomenės, dalyvauti diskusijose ir praplėsti savo žinias serverių administravimo srityje!
© 2007 - 2023 Dedikuoti.lt forumas, visos teisės saugumos.