Для настройки централизованной аутентификации на FTP сервере удобно использовать учетные записи, которые можно хранить централизованно на одном сервере. Для таких целей подходит протокол Radius, который позволяет производить аутентификацию и авторизацию пользователей централизованно. В качестве radius сервера будем использовать свободное программное обеспечение Freeradius сервер. А в качестве Ftp сервера будет использован Proftpd.
Настройка Freeradius
Настроим так называемые VSA (Vendor-Specific Attributes), которые позволят использовать при общении NAS и Radius сервера расширенные атрибуты вендора
Редактируем файл /etc/raddb/dictionary , добавим в конец файла записи вендора Unix
1 2 3 4 5 6 7 8 9 10 11 12 13 |
VENDOR Unix 4 BEGIN-VENDOR Unix ATTRIBUTE Unix-User-UID 10 integer ATTRIBUTE Unix-User-GID 11 integer ATTRIBUTE Unix-User-Home 12 string ATTRIBUTE Unix-User-Shell 13 string ATTRIBUTE Unix-User-Group-Names 14 string ATTRIBUTE Unix-User-Group-Ids 15 string END-VENDOR Unix |
Описание расширенных атрибутов
- Unix-User-UID - uid пользователя;
- Unix-User-GID - gid группы пользователя;
- Unix-User-Home - домашняя директория пользователя;
- Unix-User-Shell - командная оболочка пользователя;
- Unix-User-Group-Names - имя группы в которую входит пользователь;
- Unix-User-Group-Ids - gid группы в которую входит пользователей.
Третий столбец с числами указывает идентификатор атрибута, четвертый столбец - указывает тип записи, которая может храниться в атрибуте.
Теперь настроим пользователей на Radius сервере учетные записи которых будут использоваться при авторизации на FTP. И добавим для пользователей расширенные атрибуты.
В файл /etc/raddb/users добавляем пользователей
Создадим двух пользователей у одного укажем расширенные атрибуты Unix, а другой будет получать эти атрибуты автоматически при подключении к FTP
1 2 3 4 5 6 7 8 9 10 11 |
"admin" Auth-Type := Accept, User-Password == "qwerty123" Unix-User-UID := 10010, Unix-User-GID := 10020, Unix-User-Home := "/ftp", Unix-User-Shell := "/bin/bash", Unix-User-Group-Names := "radius_users,ftp_users", Unix-User-Group-Ids := "10030,10040" "test" Auth-Type := Accept, User-Password == "1111" |
Добавим наш FTP сервер как клиента Freeradius, для этого добавим в файл /etc/raddb/clients.conf запись
1 2 3 4 5 6 |
client proftpd { ipaddr = 172.20.1.58/32 secret = testing111 nas_type = ftp } |
Запускаем демона Freeradius
sudo systemctl start radiusd
Настройка Proftpd
В основной конфигурационный файл /etc/proftpd/proftpd.conf добавляем секции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<IfModule mod_radius.c> # включение использования radius сервера RadiusEngine on # адрес сервера и пароль NAS для аутентификации RadiusAuthServer 172.20.1.210:1812 testing111 # адрес сервера и пароль NAS для авторизации RadiusAcctServer 172.20.1.210:1813 testing111 # расположение файла логов RadiusLog /etc/proftpd/radius.log # Указание для определения расширенных атрибутов # Вендор RadiusVendor Unix 4 # Информация для параметров пользователя # формат - uid gid home shell RadiusUserInfo $(10:10015) $(11:10021) $(12:/tmp) $(13:/bin/bash) # Информация о членстве пользователя в группах # формат - "основная группа" "группы в которую входит пользователь" "gid для груп в которые входит пользователь" RadiusGroupInfo $(11:10021) $(14:ftp) $(15:10040) </IfModule> |
При указании параметров используется формат записи значений $(значение1:значение2)
Значение1 - идентификатор расширенного атрибута, который мы указывали при настройке Freeradius,
Значение2 используется по-умолчанию, если указанный идентификатор для пользователя не указан в настройках radius.
Т.е. для пользователя admin uid будет равен - 10010 (как указано в файле /etc/raddb/users), а
для пользователя test он получит значение по-умолчанию, которое указано как значение2 в файле настройки Proftpd.
Правим настройки для директории Ftp
cat /etc/proftpd/conf.d/test.conf
1 2 3 4 5 6 7 8 9 10 11 |
<Directory /ftp > DirFakeGroup on ftp_users Umask 112 002 $ltLimit ALL> DenyGroup !ftp_users $lt/Limit> $lt/Directory> |
Перезапускаем Protfpd
systemctl restart proftpd
Пробуем подключиться к Ftp серверу:
ftp 172.20.1.58
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Connected to 172.20.1.58. 220 ProFTPD 1.3.5b Server (Debian 9 test ftp) [172.20.1.58] Name (172.20.1.58:alexeit): admin 331 Необходим пароль для пользователя admin Password: 230 Пользователь admin подключён Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 Команда PORT успешно обработана 150 Открываю режим ASCII данных для file list drwxrwxr-x 3 admin ftp_users 4096 Dec 19 07:57 1 -rw-rw-r-- 1 admin ftp_users 0 Dec 19 07:57 1212 226 Передача завершена |
Как видим пользователь admin смог подключиться к FTP серверу так как был получен атрибут, где прописано что он входит в группу ftp_users, которй разрешен доступ к каталогу /ftp
Смотрим логи подключения
cat /etc/proftpd/radius.log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
.... 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: sending auth request packet 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: sending packet to 172.20.1.210:1812 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: receiving auth response packet 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: packet receive succeeded 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: verifying packet 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: authentication successful for user "admin" 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: parsing packet for RadiusUserInfo attributes 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: packet includes "Unix" Vendor-Specific Attribute 10 for user ID: <b>"10010"</b> 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: packet includes "Unix" Vendor-Specific Attribute 11 for group ID: <b>"10020"</b> 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: packet includes "Unix" Vendor-Specific Attribute 12 for home directory: <b>"/ftp"</b> 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: packet includes "Unix" Vendor-Specific Attribute 13 for shell: <b>"/bin/bash"</b> 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: parsing packet for RadiusGroupInfo attributes 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: packet includes "Unix" Vendor-Specific Attribute 11 for primary group name: "" 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: packet includes "Unix" Vendor-Specific Attribute 14 for additional group names: <b> "radius_users,ftp_users" </b>> 2017-12-19 11:42:27,102 mod_radius/0.9.2[13782]: packet includes "Unix" Vendor-Specific Attribute 15 for additional group IDs: <b>"10030,10040" </b> 2017-12-19 08:42:28,922 mod_radius/0.9.2[13782]: sending start acct request packet 2017-12-19 08:42:28,922 mod_radius/0.9.2[13782]: sending packet to 172.20.1.210:1813 2017-12-19 08:42:28,922 mod_radius/0.9.2[13782]: receiving acct response packet 2017-12-19 08:42:28,923 mod_radius/0.9.2[13782]: packet receive succeeded 2017-12-19 08:42:28,923 mod_radius/0.9.2[13782]: verifying packet 2017-12-19 08:42:28,923 mod_radius/0.9.2[13782]: accounting started for user "admin" ....... |
Как видно все атрибуты получены
Теперь подключаемся под пользователем test
ftp 172.20.1.58
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Connected to 172.20.1.58. 220 ProFTPD 1.3.5b Server (Debian 9 test ftp) [172.20.1.58] Name (172.20.1.58:alexeit): test 331 Необходим пароль для пользователя test Password: 230 Пользователь test подключён Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 200 Команда PORT успешно обработана 150 Открываю режим ASCII данных для file list 226 Передача завершена ftp> mkdir 1 550 1: Отказано в доступе |
Видим, что он не видит содержание каталога и не имеет прав на создание файлов и директорий, так как не имеет к нему доступа
Смотрим лог radius
cat /etc/proftpd/radius.log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
2017-12-19 11:46:07,376 mod_radius/0.9.2[13784]: sending auth request packet 2017-12-19 11:46:07,376 mod_radius/0.9.2[13784]: sending packet to 172.20.1.210:1812 2017-12-19 11:46:07,376 mod_radius/0.9.2[13784]: receiving auth response packet 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet receive succeeded 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: verifying packet 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: authentication successful for user "test" 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: parsing packet for RadiusUserInfo attributes 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet includes invalid length (0) for attribute type 0, rejecting 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet lacks "Unix" Vendor-Specific Attribute 10 for user ID: <b>defaulting to "10010"</b> 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet includes invalid length (0) for attribute type 0, rejecting 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet lacks "Unix" Vendor-Specific Attribute 11 for group ID: <b>defaulting to "10021"</b> 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet includes invalid length (0) for attribute type 0, rejecting 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet lacks "Unix" Vendor-Specific Attribute 12 for home directory: <b>defaulting to "/tmp"</b> 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet includes invalid length (0) for attribute type 0, rejecting 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet lacks "Unix" Vendor-Specific Attribute 13 for shell: <b>defaulting to "/bin/bash"</b> 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: parsing packet for RadiusGroupInfo attributes 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet includes invalid length (0) for attribute type 0, rejecting 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet lacks "Unix" Vendor-Specific Attribute 11 for prime group name: <b>defaulting to "10021"</b> 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet includes invalid length (0) for attribute type 0, rejecting 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet lacks "Unix" Vendor-Specific Attribute 14 for additional group names: <b>defaulting to "ftp"</b> 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet includes invalid length (0) for attribute type 0, rejecting 2017-12-19 11:46:07,377 mod_radius/0.9.2[13784]: packet lacks "Unix" Vendor-Specific Attribute 15 for additional group IDs: <b>defaulting to "10040"</b> 2017-12-19 08:46:09,398 mod_radius/0.9.2[13784]: sending start acct request packet 2017-12-19 08:46:09,398 mod_radius/0.9.2[13784]: sending packet to 172.20.1.210:1813 2017-12-19 08:46:09,398 mod_radius/0.9.2[13784]: receiving acct response packet 2017-12-19 08:46:09,398 mod_radius/0.9.2[13784]: packet receive succeeded 2017-12-19 08:46:09,399 mod_radius/0.9.2[13784]: verifying packet 2017-12-19 08:46:09,399 mod_radius/0.9.2[13784]: accounting started for user "test" |
Он получил значение атрибутов по-умолчанию, которые были указаны в файле конфигурации Proftpd