HTTP server и авторизация Linux

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

HTTP server и авторизация Linux

Сообщение GreyCrazyWolf » 13.09.2023 10:37:19

Добрейшего времени суток!

Есть ли возможность для авторизации на FPHttpServer использовать существующих линукс пользователей?

Проверку существования логина получилось сделать так
Код: Выделить всё
function TCliGalSvr.CheckLinuxUser(AUserName, APassword: String): Boolean;
var
  Pwd: PPasswd;
begin
  Result := False;

  Pwd := fpgetpwnam(PChar(AUserName));

  if Pwd <> nil then
  begin
     // тут нужно проверить авторизацию....
  end;
end;         

как можно проверить пароль?
GreyCrazyWolf
незнакомец
 
Сообщения: 9
Зарегистрирован: 02.03.2023 15:23:57

Re: HTTP server и авторизация Linux

Сообщение grot » 13.09.2023 12:14:24

Здесь происходит что-то подобное :
http://www.freepascal.ru/forum/viewtopic.php?f=13&t=3490

Мне кажется - это очень плохая идея всех этих пользователей перемешивать ( пахнуло AD из Windows )...
grot
новенький
 
Сообщения: 75
Зарегистрирован: 13.02.2010 16:33:03

Re: HTTP server и авторизация Linux

Сообщение Sharfik » 13.09.2023 13:53:02

grot писал(а):Мне кажется - это очень плохая идея всех этих пользователей перемешивать ( пахнуло AD из Windows )...

И чем это плохо? Пользователь во всех программах запущенных на ПК автоматом логинется, программа знает гарантированно кто с ней работает. Чужой логин не подсунуть и не обмануть. Убивается учетка, убивается и доступ к программе. Для безопасности только плюсы.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 766
Зарегистрирован: 20.07.2013 01:04:30

Re: HTTP server и авторизация Linux

Сообщение GreyCrazyWolf » 13.09.2023 20:45:03

В итоге пока наколхозил такое :) По совету с https://forum.lazarus.freepascal.org/index.php/topic,64597.0.html
Код: Выделить всё
function TMySvr.CheckLinuxUser(AUserName, APassword: String): Boolean;
var
  Pwd          : PPasswd;
  outString    : String;
  outArrayF    : TStringArray;
  outArrayS    : TStringArray;
  outArrayT    : TStringArray;
begin
  Result := False;

  // Retrieve user information from the Linux user database
  Pwd := fpgetpwnam(PChar(AUserName));
  if Pwd <> nil then
     begin
       if RunCommand(Format('sudo grep %s /etc/shadow', [AUserName]), outString) then
         begin
              outArrayF := outString.Split(':');
              outArrayS := outArrayF[1].Split('$');
              if RunCommand(Format('openssl passwd -%s -salt %s %s', [outArrayS[1], outArrayS[2], APassword]), outString) then
                 begin
                      outArrayT := outString.Replace(#10, '').Split('$');
                      Result :=  outArrayS[3] = outArrayT[3];
                 end;
         end;
     end;
end;         

оно даже работает на тестовой Astre ;)
GreyCrazyWolf
незнакомец
 
Сообщения: 9
Зарегистрирован: 02.03.2023 15:23:57

Re: HTTP server и авторизация Linux

Сообщение Sharfik » 14.09.2023 01:09:35

:oops:
А как тоже самое под win выглядит?)
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 766
Зарегистрирован: 20.07.2013 01:04:30

Re: HTTP server и авторизация Linux

Сообщение ssnakess » 16.09.2023 13:46:24

Не стоит юзеров для веб сервера привязывать к учеткам ОС.
Это черевато тем, что вы даете открытый канал подбора пароля к вашим учеткам ОС, да еще и с проверкой на существование пользователя.
если у вас открыт ssh, то запустите
lastb -i -10

посмотрите, сколько подборов и под какими юзерами ломятся к вам нехорошие личности :)
А потом представьте что Вы дали этим личностям. еще один канал подбора пароля к вашей ОС
ssnakess
новенький
 
Сообщения: 36
Зарегистрирован: 24.09.2011 23:08:55

Re: HTTP server и авторизация Linux

Сообщение Sharfik » 16.09.2023 14:12:40

ssnakess писал(а):Не стоит юзеров для веб сервера привязывать к учеткам ОС.
Это черевато тем, что вы даете открытый канал подбора пароля к вашим учеткам ОС, да еще и с проверкой на существование пользователя.
если у вас открыт ssh, то запустите
lastb -i -10

посмотрите, сколько подборов и под какими юзерами ломятся к вам нехорошие личности
А потом представьте что Вы дали этим личностям. еще один канал подбора пароля к вашей ОС

А где проблема? Смотрим IP подключения, запоминаем его. Если он делает больше 3-5 попыток - бан адреса и любых попыток на неделю/месяц. Вот перехватить пакет с правильным паролем - да могут.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 766
Зарегистрирован: 20.07.2013 01:04:30

Re: HTTP server и авторизация Linux

Сообщение ssnakess » 16.09.2023 14:25:32

Sharfik писал(а):А где проблема? Смотрим IP подключения, запоминаем его. Если он делает больше 3-5 попыток - бан адреса и любых попыток на неделю/месяц. Вот перехватить пакет с правильным паролем - да могут.

Проблемы нет, если Вы в своем сервере предусмотрите ограничение по количеству попыток, а также максимальное количество подключений.

Например у меня в бане сейчас 9518 ip-адресов, с которых были попытки подбора пароля по SSH
А по логам тогоже nginx, постоянный подбор эксплойтов идет.
Поэтому это и опасно, связывать юзера ОС и юзера веб
т.к. ежели подберут для веб, то сломают веб-сервер, и фиг с ним, а вот если он у вас еще и юзер ОС, то последствия могут быть куда более чем плачевные :)

Добавлено спустя 5 минут 44 секунды:
P.s. есть админы которые еще не делают бекапы, а есть те кто уже делает.
ssnakess
новенький
 
Сообщения: 36
Зарегистрирован: 24.09.2011 23:08:55


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 114

Рейтинг@Mail.ru