Thank you for reading this post, don't forget to subscribe!
Для настройки централизованной аутентификации на 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