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

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

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

Ответить
GreyCrazyWolf
новенький
Сообщения: 12
Зарегистрирован: 02.03.2023 14:23:57

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

Сообщение GreyCrazyWolf »

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

Есть ли возможность для авторизации на 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;         
как можно проверить пароль?
grot
новенький
Сообщения: 82
Зарегистрирован: 13.02.2010 15:33:03

Сообщение grot »

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

Мне кажется - это очень плохая идея всех этих пользователей перемешивать ( пахнуло AD из Windows )...
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

grot писал(а):Мне кажется - это очень плохая идея всех этих пользователей перемешивать ( пахнуло AD из Windows )...
И чем это плохо? Пользователь во всех программах запущенных на ПК автоматом логинется, программа знает гарантированно кто с ней работает. Чужой логин не подсунуть и не обмануть. Убивается учетка, убивается и доступ к программе. Для безопасности только плюсы.
GreyCrazyWolf
новенький
Сообщения: 12
Зарегистрирован: 02.03.2023 14:23:57

Сообщение GreyCrazyWolf »

В итоге пока наколхозил такое :) По совету с https://forum.lazarus.freepascal.org/in ... 597.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 ;)
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

:oops:
А как тоже самое под win выглядит?)
ssnakess
новенький
Сообщения: 47
Зарегистрирован: 24.09.2011 23:08:55

Сообщение ssnakess »

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

посмотрите, сколько подборов и под какими юзерами ломятся к вам нехорошие личности :)
А потом представьте что Вы дали этим личностям. еще один канал подбора пароля к вашей ОС
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

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

посмотрите, сколько подборов и под какими юзерами ломятся к вам нехорошие личности
А потом представьте что Вы дали этим личностям. еще один канал подбора пароля к вашей ОС
А где проблема? Смотрим IP подключения, запоминаем его. Если он делает больше 3-5 попыток - бан адреса и любых попыток на неделю/месяц. Вот перехватить пакет с правильным паролем - да могут.
ssnakess
новенький
Сообщения: 47
Зарегистрирован: 24.09.2011 23:08:55

Сообщение ssnakess »

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

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

Добавлено спустя 5 минут 44 секунды:
P.s. есть админы которые еще не делают бекапы, а есть те кто уже делает.
Ответить