Показаны сообщения с ярлыком ftp. Показать все сообщения
Показаны сообщения с ярлыком ftp. Показать все сообщения

четверг, 28 апреля 2016 г.

FTP from DOS

Get yourself a DOS prompt, type FTP and hit Enter. You've found 
the built-in command-line FTP program that ships with every copy 
of Windows 95 and NT! That means it's the only thing you KNOW will 
be on someone else's computer. But talking someone through how to 
use FTP is messy. If you need to help someone else out, you're 
better off automating the whole process by supplying them with an 
FTP "script". If you need to learn more about FTP, read on and go 
photocopy the FTP section out of a UNIX or LINUX book.

Before you go further, the sample FTP command lines I give here are 
(like most of my code) for Win9x. If you have NT, don't leave this 
page without checking out the NT difference mentioned at the bottom 
of this page!

FTP supports scripting. You use the "-s:" option to specify a script, 
for example if you name this text SCRIPT.TXT:

open ftp.microsoft.com
anonymous
username@nowhere.com
cd Products
cd Windows
cd Windows95
cd CDRomExtras
cd AdministrationTools
cd ApplicationTools
binary
hash
lcd c:\
get envars.exe
bye

Then you could execute it like this:

ftp -s:SCRIPT.TXT

There is one complication. Some people have more than one 
FTP program. So we need to specify we want to use the original. 
Do it by replacing "ftp" in the above example with %windir%\ftp.exe
for example

%windir%\ftp.exe -s:SCRIPT.TXT

By the way, the "envars.exe" the example script above downloads 
is a zipped file that contains two programs. One allows you to 
create shortcuts from DOS, and the other allows you to set 
system environment variables. Both are for Win9x only.

Here are all the command-line options for FTP:
FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:buffer] [-A] [host]

  -v           Suppresses display of remote server responses.
  -n           Suppresses auto-login upon initial connection.
  -i           Turns off interactive prompting during multiple file
               transfers.
  -d           Enables debugging.
  -g           Disables filename globbing (see GLOB command).
  -s:filename  Specifies a text file containing FTP commands; the
               commands will automatically run after FTP starts.
  -a           Use any local interface when binding data connection.
  -A           login as anonymous.
  -w:buffer    Overrides the default transfer buffer size of 4096.
  host         Specifies the host name or IP address of the remote
               host to connect to.

Using the "-A" option logs you in with user and host name you 
specified in your TCPIP setup. Which is why I prefer to specify 
the login name and password in the script.

Here are all the local FTP commands (which you can see by 
typing "help" at an FTP prompt:

!           delete       literal     prompt       send
?           debug        ls          put          status
append      dir          mdelete     pwd          trace
ascii       disconnect   mdir        quit         type
bell        get          mget        quote        user
binary      glob         mkdir       recv         verbose
bye         hash         mls         remotehelp
cd          help         mput        rename
close       lcd          open        rmdir

Just type help (or ?) followed by the command you want a 
description of. For example:
help append
gives this response:
append          Append to a file
Okay, it isn't much. But it's a start. 

You can even turn your script into a batch file:

%windir%\ftp.exe -s:%0
goto done
open ftp.microsoft.com
anonymous
username@nowhere.com
cd Products
cd Windows
cd Windows95
cd CDRomExtras
cd AdministrationTools
cd ApplicationTools
binary
hash
lcd c:\
get envars.exe
bye
:done
@echo off
cls
exit

I only had to add two lines to the beginning of my script 
and four lines to the end to turn it into a batch file. The 
great part is those same lines will turn ANY FTP script into 
a batch file! The DOS batch file will jump over the ftp 
script part, and the FTP program will just return "Invalid 
command" and go on to the next line harmlessly when it hits 
the DOS batch file commands.

But remember -- this and all files I write are for Win95! If
you find yourself using NT/W2K, you'll need to change the 
%windir%\ftp.exe -s:%0
line in the above code to
%windir%\system32\ftp.exe -s:%~f0 
(or %windir%\system32\ftp.exe -s:"%~f0" if the batch file path has embedded spaces)
NT is different in small ways that make big problems.
(Thanks to Joseph Hayes for pointing that one out!)
Also, if you still have problems on NT, you may need to add 
your "account" to your password in the script file. See here 
for more information:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q135858

Now then... Let's assume you don't want to embed your user name 
and password in the FTP batch file or script. Or maybe you want 
to pull the user name from somewhere else. Same problem. You're 
going to have to have your batch file create a separate script 
as it is needed. We'll start with a simple modification of the 
above sample code:

@echo off
>  C:\script.txt echo open ftp.microsoft.com
>> C:\script.txt echo anonymous
>> C:\script.txt echo username@nowhere.com
>> C:\script.txt echo cd Products
>> C:\script.txt echo cd Windows
>> C:\script.txt echo cd Windows95
>> C:\script.txt echo cd CDRomExtras
>> C:\script.txt echo cd AdministrationTools
>> C:\script.txt echo cd ApplicationTools
>> C:\script.txt echo binary
>> C:\script.txt echo hash
>> C:\script.txt echo lcd c:\
>> C:\script.txt echo get envars.exe
>> C:\script.txt echo bye
start /w %windir%\ftp.exe -s:C:\script.txt
del C:\script.txt
cls
exit

Those of you "new" to batch may be confused over the 
"> file echo text" layout. Maybe you are used to 
"echo text > file". They both work the same. The only reason 
I used the unusual layout is that it looks neater and is 
easier to copy and paste.

Now, suppose you had wanted batch file that could be called 
with the user name as parameter one, and the password as 
parameter two. You'd just modify the above code like this:

@echo off
>  C:\script.txt echo open ftp.microsoft.com
>> C:\script.txt echo %1
>> C:\script.txt echo %2
>> C:\script.txt echo cd Products
... and so on

Or maybe you have the user name and password stored in the 
environment as %user% and %pass%. You would do this:

@echo off
>  C:\script.txt echo open ftp.microsoft.com
>> C:\script.txt echo %user%
>> C:\script.txt echo %pass%
>> C:\script.txt echo cd Products
... and so on

Notice at the end of this batch file, I run FTP by using the 
START command with the /W (wait) option. That's so we don't 
delete the script we made until FTP is done using it! Under NT, 
sometimes (quite often) NT won't wait on a program even if you 
specify /w. In those cases, you may have to specify other 
options for START and force FTP to run in the same memory space 
as your batch file.

If you want a few ways to prompt a user for user names and 
passwords, check out the sample code on this page:
http://www.ericphelps.com/batch/samples/samples.htm
or read about it in general here:
http://www.ericphelps.com/batch/userin/index.htm

If you want to embed your user name in your batch file but don't 
want it visible, read my advice here:
http://www.ericphelps.com/batch/samples/obfuscating.txt



::  http://www.ericphelps.com

среда, 27 апреля 2016 г.

FTP-сервер (ProFTPd) Ubuntu14.04.2


FTP-сервер (ProFTPd) на Ubuntu 12.04 LTS 

часть 1 проверена на Ubuntu14.04.2

 
Задача: поднять FTP-сервер (возможно, с шифрованием) в локальной сети, а именно установить и настроить ProFTPd на Ubuntu 12.04 LTS
Источники:
1. http://vdsadmin.ru/ftp-proftp-ftpasswd
2. http://www.proftpd.org/docs/
3. http://www.proftpd.org/docs/directives/linked/config_ref_Limit.html
4. http://www.debianadmin.com/list-of-ftp-clients-available-in-linux.htm
5. https://forums.proftpd.org/smf/index.php?topic=1198.0
6. http://www.masterit.ru/5-besplatnyx-sftp-menedzherov-dlya-windows/
7. http://www.coreftp.com/download.html
8. http://proftpd.org/docs/contrib/mod_tls.html
9. sysadmins.ru/topic347156.html
10. http://www.castaglia.org/proftpd/modules/mod_sftp.html

Выполнение:
Часть 1. Ставим простой FTP-сервер на Ubuntu 12.04 LTS
1. Устанавливаем ProFTPd:
sudo apt-get install proftpd-basic
В процессе установки выбираем ответ standalone, т.е. самостоятельный запуск FTP-сервера, а не через суперсервер inetd.
2. Пусть каталоги будущих пользователей будут находится в /home/ftp . Создаем этот каталог:
sudo mkdir /home/ftp
Пусть у нас будут два пользователя: vasya и petr. Для каждого из них заведем отдельную папку в каталоге /home/ftp:
sudo mkdir /home/ftp/vasya
sudo mkdir /home/ftp/petr
3. Перед тем, как создавать пользователей нашего FTP-сервера, необходимо отметить следующее. Поскольку эти пользователи являются виртуальными по отношению к ОС, то возникает проблема обращения к каталогам и файлам FTP-сервера. Предположение о том, что доступ к файлам и каталогам будет осуществлять сам FTP-сервер с именем proftpd и группой nogroup, неверно. При обращении к кокому-либо файлу будет использоваться UID и GID конкретного пользователя FTP-сервера. Поэтому логично будет создавать пользователей с такими же UID, что и у какого-либо реального пользователя в системе, прописанного в /etc/passwd . Далее в качестве такого пользователя возмем сам proftpd . Чтобы узнать его UID, выполним команду:
cat /etc/passwd | grep proftpd
результат будет примерно таким
proftpd:x:110:65534::/var/run/proftpd:/bin/false
Следовательно, пользователей будем создавать с UID 110.
3.1  Создаем пользователей vasya и petr:
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=vasya --shell=/bin/false --home=/home/ftp/vasya --uid=110 --gid=65500
sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=petr --shell=/bin/false --home=/home/ftp/petr --uid=110 --gid=65501
3.2 Сменим владельца и группу для всех созданных каталогов, чтобы пользователи FTP-сервера (с UID=110, как мы уже условились) смогли что-либо делать с ними:
sudo chown -R proftpd:nogroup /home/ftp
4. Правим конфигурационный файл /etc/proftpd/proftpd.conf :
Include /etc/proftpd/modules.conf
# Отключаем использование протокола IP v6
UseIPv6 off
# Имя FTP-сервера
ServerName "Ubunftp"
# Режим запуска FTP-сервера
ServerType standalone
DeferWelcome off
# Порт, который будет слушать FTP-сервер
Port 21
# выдавать многострочные сообщения в стандарте RFC 959 или RFC 2228
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
# Таймаут на передачу - вошел и не начал передачу (мс.)
TimeoutNoTransfer 600
# Подвисание во время передачи файлов (мс.)
TimeoutStalled 600
# Таймут бездействия после входа (мс.)
TimeoutIdle 1200
# Сообщение, которое будет показываться пользователю при входе
DisplayLogin                    welcome.msg
ListOptions                 "-l"
# Запретить закачивать файлы, начинающиеся на точку
DenyFilter \*.*/
# Максимальное количество дочерних процессов
MaxInstances 30
# Пользователь, под которым будет запускаться FTP-сервер
User proftpd
# Группа, с которой будет запускаться FTP-сервер
Group nogroup
# Маска (права доступа) для файлов (первое значение 022) и каталогов (второе значение 022), создаваемых в каталогах
Umask 022  022
# Разрешить перезаписывать существующие файлы
AllowOverwrite on
# Для каждого пользователя в качестве корневого каталога устанавливаем его домашнюю папку. В этом случае пользователь не сможет выйти выше, т.е. попасть в /home/ftp или /home/ftp/petr
DefaultRoot ~
# Настраиваем права доступа к пользовательским каталогам
# для каталога  /ftp/vasya:
<Directory /home/ftp/vasya>
# Пусть vasya не сможет редактировать содержимое каталога (закачивать файлы, создавать папки, ...)
<Limit WRITE>
DenyALL
</Limit>
# , но сможет читать файлы
<Limit READ>
AllowUser vasya
</Limit>
# и, как исключение из первого правила, удалять их
<Limit DELE>
AllowUser vasya
</Limit>
</Directory>
# для каталога  /ftp/petr:
<Directory /home/ftp/petr>
# Пусть petr имеет полный доступ к своей папке (закачивать файлы, скачивать файлы, создавать папки, удалять )
<Limit WRITE>
AllowUser petr
</Limit>
</Directory>
# Настраиваем логи
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log
# Отключаем проверку командного интерпретатора пользователя
RequireValidShell off
# указываем файл с учетными записями для авторизации пользователей
AuthUserFile        /etc/proftpd/ftpd.passwd
# Include other custom configuration files
Include /etc/proftpd/conf.d/
5. Перезапускаем ProFTPd:sudo service proftpd restart
sudo service proftpd restart
Должно все работать. Проверить работу FTP-сервера можно так:
 
ftp localhost

Дополнительно настраиваем права (иточник)
sudo chmod 440 /etc/proftpd/ftpd.passwd && sudo chown proftpd.root /etc/proftpd/ftpd.passwd
Еще одна возмодная проблема:

The workaround is to edit the service file, to add a retry.
/etc/init.d/proftpd
Find this line:
start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE"
Change to this:
start-stop-daemon --stop --signal $SIGNAL --retry 1 --quiet --pidfile "$PIDFILE"
This change solved it for me.


 Часть 2. FTP-сервер с SSL/TLS-шифрованием на Ubuntu 12.04 LTS
 
6. Сейчас можно прикрутить к нашему серверу SSL/TLS-шифрование. Сначала сгенерируем сертификат и ключ:
openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/proftpd.cert.pem -keyout /etc/proftpd/proftpd.key.pem
 
7. Теперь отредактируем файл конфигурации /etc/proftpd/tls.conf, но сперва скопируем его, на свякий случай:
cp /etc/proftpd/tls.conf /etc/proftpd/tls.conf.old
  и добавляем в /etc/proftpd/tls.conf следующее: 
TLSEngine                  on
TLSLog                     /var/log/proftpd/tls.log
TLSProtocol                SSLv23
TLSOptions                 NoCertRequest
TLSRSACertificateFile      /etc/proftpd/proftpd.cert.pem
TLSRSACertificateKeyFile   /etc/proftpd/proftpd.key.pem
TLSVerifyClient            off
# если хотите всё таки разрешить обычное соединение, поставьте TLSRequired off
TLSRequired                on

8. В конец конфигурационного файла /etc/proftpd/proftpd.conf добавим строку
Include /etc/proftpd/tls.conf
9. Перезапускаем Proftpd:
sudo service proftpd restart 
Сейчас проверим, работает ли шифрование. Установим ftp-ssl :
sudo apt-get install ftp-ssl
и попробуем подключиться:
ftp-ssl localhost
 Если после ввода логина и пароля выходит приглашение ftp> , значит все работает.
На Windows мне не удалось подключиться к такому FTP ни через Total Commander (с плагинами), ни через FileZilla Client: в /var/log/proftpd/tls.log было видно, что соединение заканчивается с ошибкой
SSL/TLS required but absent on control channel, denying ... command
По видимому, эта ошибка возникала из-за того, что клиент начинал подключаться так, как подключается к обычному FTP, в то время, как требовалось установление SSL/TLS сессии.
 Подключиться смог только CoreFTP. Но для этого пришлось в /etc/proftpd/proftpd.conf добавить следующее: 
<IfModule mod_tls.c>
TLSOptions NoSessionReuseRequired
</IfModule>
Эта опция, как я понял, отменяем требование к клиенту работать в одной продолжиющейся сессии. Клиент может выполнять новую команду, создав новую SSL сессию. Это и делает CoreFTP. На рисунке ниже привожу настройки соединения CoreFTP.
 Часть 3. SFTP-сервер на базе ProFTPd и Ubuntu 12.04 
10. Теперь попробуем приктутить SFTP.
Закомментируем все строки в /etc/proftpd/proftpd.conf, относящиеся к использованию tls, а именно:
#<IfModule mod_tls.c>
#TLSOptions NoSessionReuseRequired
#</IfModule>
...
#Include /etc/proftpd/tls.conf
 Продолжаем реадктировать конфигурационный файл /etc/proftpd/proftpd.conf: добавляем следующее
#Если есть модуль SFTP, то применять следующие настройки 
<IfModule mod_sftp.c>
SFTPEngine            on
SFTPHostKey           /etc/ssh/ssh_host_dsa_key
SFTPHostKey           /etc/ssh/ssh_host_rsa_key
SFTPLog               /var/log/proftpd/sftp.log
SFTPCompression       delayed 
SFTPAuthMethods password # метод авторизации - пароль
</IfModule>
 # запрещаем подключаться всем (DenyALL) для того, чтобы пользователи из /etc/passwd не могли подключаться, и разрешаем пользователям vasya и petr  
<Limit LOGIN>
DenyALL
AllowUser vasya, petr
</Limit>
Проверим как работает:
sftp -P 21 petr@localhost
Если после ввода пароля выходит приглашение sftp> , значит работает. Для того, чтобы удостоверится в том, что сервер пускает только пользователей из файла /etc/proftpd/ftpd.passwd , выполним команду:
sftp -P 21 localhost
Даже если введем верный пароль текущего пользователя, все равно получим отказ
Permission denied, please try again.
При использовании SFTP с Windows-машины уже можно легко подключиться через FileZilla client.