Przejdź do głównej zawartości

Linux RHCSA cz.43 - FTP - File Transfer Protocol

Istnieje dużo różnych rozwiązań umożliwiających udostępnianie plików dla użytkowników w sieci. W tym przypadku przedstawiony zostanie FTP - File Transfer Protocol. Zaletą tego rozwiązania jest fakt, że użytkownicy muszą się zalogować zanim uzyskają dostęp do zasobów oraz jest prosty do konfiguracji.

INSTALACJA SERWERA FTP 

Zastosowany zostanie pakiet o nazwie vsftpd jest to Very Secure FTP Deamon.

Krok 1 - Instalujemy odpowiedni pakiet

[root@RHEL01 yum.repos.d]# yum install -y vsftpd
Loaded plugins: product-id, security, subscription-manager
Updating certificate-based repositories.
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package vsftpd.i686 0:2.2.2-6.el6_0.1 will be installed
--> Finished Dependency Resolution


Dependencies Resolved


=================================================================
 Package                Arch                 Version                         Repository             Size
=================================================================
Installing:
 vsftpd                 i686                 2.2.2-6.el6_0.1                 cdrom                 155 k


Transaction Summary
=================================================================
Install       1 Package(s)


Total download size: 155 k
Installed size: 343 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : vsftpd-2.2.2-6.el6_0.1.i686                                                           1/1
cdrom/productid                                                                   | 1.7 kB     00:00 ...
Installed products updated.


Installed:
  vsftpd.i686 0:2.2.2-6.el6_0.1


Complete!

Krok 2 - Sprawdzamy czy pakiet faktycznie jest już zainstalowany w systemie:

[root@RHEL01 yum.repos.d]# rpm -qa | grep vsftpd
vsftpd-2.2.2-6.el6_0.1.i686

Krok 3 - Sprawdzamy również czy jest uruchamiany w momencie startu systemu jeżeli nie zmieniamy by był uruchamiany:

[root@RHEL01 yum.repos.d]# chkconfig vsftpd on
[root@RHEL01 yum.repos.d]# chkconfig --list vsftpd
vsftpd  0:off   1:off   2:on    3:on    4:on    5:on    6:off

KONFIGURACJA VSFTPD 

Konfiguracja serwera FTP rozpoczynamy w pliku /etc/vsftpd/vsftpd.conf zawierającym ustawienia serwera.

Krok 1 - Zobaczmy dostępne opcje konfiguracyjne dla vsftpd:

[root@RHEL01 vsftpd]# grep -v ^# vsftpd vsftpd.conf
grep: vsftpd: No such file or directory
vsftpd.conf:anonymous_enable=YES
vsftpd.conf:local_enable=YES
vsftpd.conf:write_enable=YES
vsftpd.conf:local_umask=022
vsftpd.conf:dirmessage_enable=YES
vsftpd.conf:xferlog_enable=YES
vsftpd.conf:connect_from_port_20=YES
vsftpd.conf:xferlog_std_format=YES
vsftpd.conf:listen=YES
vsftpd.conf:
vsftpd.conf:pam_service_name=vsftpd
vsftpd.conf:userlist_enable=YES
vsftpd.conf:tcp_wrappers=YES

Krok 2 - Zobaczmy jakie opcję będą nam potrzebne 

anonymous_enable=YES - by zachować lepsze bezpieczeństwo sytemu warto zmienić tą opcję na NO

local_enable=YES - Zezwala lokalnym użytkownikom na zalogowanie się 

write_enable=YES - Zawala użytkownikom zapis w katalogach 

local_umask=022 - Ustawia umask dla wszystkich wgrywanych plików

dirmessage_enable=YES - Wyświetla informacje katalogów

xferlog_enables=YES - Logowanie wszystkich transferów w /var/log/xferlog

connect_from_port_20=YES - Wymusza połączenia na porcie 20 

xferlog_std_format=YES - Logowanie wszystkiego w stadardowym formacie transferu

listen=YES - Zezwala serwerowi nasłuchiwania połaczeń

pam_service_name=vsftpd - Ustawienie nazwy serwisu 

userlist_enables=YES - Uruchamia usługę konsultacji user_list

tcp_wrappers=YES - Zezwala przychodzącym pakietom skonfigurowanym z TCP 

userlist_deny=YES - Włącza listę user_list dla logowania do FTP

W chwili obecnej usługa serwera FTP już działa ale w wyniku działającego firewall'a nie jest możliwe zalogowanie się do usługi. 

W kwestii konfiguracji pliku konfiguracyjnego dla vsftpd przydać może się zawartość man : 

# man vsftpd.conf 

Wpisując parametry konfiguracyjne należy uważać by nie używać żadnych spacji. 


KONFIGURACJA FIREWALL ORAZ SELINUX DLA FTP

Zanim zaczniemy korzystać z możliwości FTP należy ustawić odpowiednie opcje w usługach iptables oraz SELinux. Zacznijmy od ustawienia odpowiednich zasad firewall'a. FTP używa dwóch portów komunikacyjnych TCP 20 oraz 21, którym ruch należy otworzyć.

Krok 1 - Utworzenie zasad firewall

Użyjmy polecenia iptables do utworzenia nowych zasad:

# iptables -I INPUT 5 -p tcp -m tcp --dport 20 -j ACCEPT
# iptables -I INPUT 5 -p tcp -m tcp --dport 21 -j ACCEPT

Zmiany zobaczyć można po wydaniu polecenia : # iptables --list

Krok 2 - Zapis ustawień

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[OK]

Krok 3 - Restart usługi firewall 

[root@RHEL01 vsftpd]# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

Powyższe można również wykonać przy użyciu narzędzia graficznego : 

# system-config-firewall-tui

Gdzie przy pomocy menu można otworzyć lub zamknąć porty różnych usług. 

Zmiany zapisane zostają w pliku : # /etc/sysconfig/iptables

Zawartość pliku po zmianach : 

# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Thu May 10 11:24:33 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [44:6156]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu May 10 11:24:33 2012

Zawartość pliku po zmianach narzędziem graficznym : 

# cat /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Po ustawieniu zasad firewall trzeba zająć się ustawieniami SELinux

Zmienne logiczne dla SELinux :

ftp_home_dir - Umożliwia FTP odczyt i zapis plików w katalogach domowych użytkowników

allow_ftpd_full_access - Umożliwia serwerowi FTP logowanie lokalnych użytkowników oraz zapis i odczyt wszystkich plików w systemie

allow_ftpd_use_nfs - Umożliwia serwerowi FTP stosowanie NFS dla publicznych transferów

allow_ftpd_anon_write - Umożliwia serwerowi FTP otrzymywać pliki z publicznych serwisów. Katalog musi mieć nazwę public_content_rw_t

ftpd_connect_db - Umożliwia połączenie FTP z serwerem MySQL

allow_ftpd_use_cifs - Umożliwia stosowanie CIFS

httpd_enabled_ftp_server - Umożliwia dostęp do serwera FTP protokołem hhtpd.

Krok 1 - Zapytanie sprawdzające wartości jakie należy zmienić

[root@RHEL01 vsftpd]# getsebool -a | grep ftpd_full
allow_ftpd_full_access --> off

Krok 2 - Wyłączenie zabezpieczenia SELinux 

setsebool -P allow_ftpd_full_access=1

Krok 3 - Sprawdzenie wprowadzonych zmian 

[root@RHEL01 vsftpd]# getsebool -a | grep ftpd_full
allow_ftpd_full_access --> on

Podobnie choć nieco inaczej jest to wykonywane dla wersji RHEL05 

Krok 1 - Zapytanie sprawdzające wartości do zmiany 

[root@station1 ~]# getsebool -a | grep ftpd_dis
ftpd_disable_trans --> off
tftpd_disable_trans --> off

Krok 2 - Wyłączenie zabezpieczenia SELinux 

# setsebool -P ftpd_disable_trans=1

Krok 3 - Sprawdzenie wprowadzonych zmian 

[root@station1 ~]# getsebool -a | grep ftpd_dis
ftpd_disable_trans --> on

Jeżeli zachodzi taka potrzeba można również skonfigurować anonimowy dostęp do FTP w tym celu należy się upewnić że opcja allow_ftpd_anon_write została ustawiona. 

Komentarze

  1. [root@RHEL01 vsftpd]# grep -v ^# vsftpd vsftpd.conf
    grep: vsftpd: No such file or directory

    :)

    OdpowiedzUsuń
    Odpowiedzi
    1. cd /etc/vsftpd/
      [root@rhel03 vsftpd]# grep -v ^# vsftpd vsftpd.conf
      grep: vsftpd: No such file or directory
      vsftpd.conf:anonymous_enable=YES
      vsftpd.conf:local_enable=YES
      vsftpd.conf:write_enable=YES
      vsftpd.conf:local_umask=022
      vsftpd.conf:dirmessage_enable=YES
      vsftpd.conf:xferlog_enable=YES
      vsftpd.conf:connect_from_port_20=YES
      vsftpd.conf:xferlog_std_format=YES
      vsftpd.conf:listen=YES
      vsftpd.conf:
      vsftpd.conf:pam_service_name=vsftpd
      vsftpd.conf:userlist_enable=YES
      vsftpd.conf:tcp_wrappers=YES

      Usuń

Prześlij komentarz

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości