Skip to content

Private finger server, written in FreeBasic, based on finger2020

License

Notifications You must be signed in to change notification settings

Linda-chan/finger2023

Repository files navigation

finger2023

Это – простой Finger сервер, ориентированный на приватность. Он не выдаёт актуальные сведения о системе, а выдаёт только то, что заранее задано пользователем в специальных файлах и переменных окружения. Так же поддерживается только один пользователь.

Данный код основан на проекте finger2020, но написан на FreeBasic. Так же присутствуют некоторые незначительные отличия в способе вывода информации.

Платформа

finger2023 может быть скомпилирован как под Linux, так и под Windows. Однако, поскольку он не является полноценным сервером, ориентирован он, прежде всего, на Linux.

// Но, если подобный сервис можно запустить под Windows, пожалуйста, дайте мне знать!

Принцип работы

finger2023 принимает запрос через stdin, отдаёт результат через stdout, а ошибки и некоторую информацию – через stderr. Это означает, что запускать его должны вышестоящие сервисы типа systemd или inetd (и подобных), которые сами обеспечат сетевое взаимодействие сервера и клиентов. При каждом запросе вышестоящий сервис запускает исполняемый файл сервера, тот обрабатывает запрос, выдаёт результат и завершается.

Формат запроса

Детальную информацию о формате запроса можно почитать в RFC 1288.

finger2023 следует ему, но при этом старается быть терпимее к ошибкам в нём. Например, он может игнорировать отсутствие CRLF в конце запроса, а так же принимать запросы, в которых подряд идут несколько пробелов.

Так же finger2023 поддерживает параметр «/W», но на данный момент просто игнорирует его.

finger2023 не обрабатывает запросы с именем хоста и вместо ответа выдаёт сообщение о том, что форвардинг запрещён.

Так же под запретом всякие множественные имена пользователей и прочие выкрутасы.

Как протестировать

# Запрос списка пользователей...
echo -e -n "\r\n" | finger2023

# Запрос информации о пользователе...
echo -e -n "username\r\n" | finger2023

Настройка

Все настройки finger2023 производятся через переменные окружения, а данные берутся из обычных текстовых файлов.

Переменные окружения

FINGER_NAME

Строка с именем пользователя. Он выдаётся при запросе списка пользователей, его должен запросить клиент для получения информации.

Обратите внимание, что эта строка не имеет никакого отношения к реальным пользователям в системе и может быть любой. Так же в этой строке не допускаются всякие пробелы.

По умолчанию – «anonymous».

FINGER_INFO_LABELS

Указывает, выводить ли подсказки к отдельным блокам типа «Plan». Принимает значения «false», «no», «0» чтобы отключить оные подсказки, и всё что угодно прочее чтобы подсказки оставить.

По умолчанию – подсказки выводятся.

FINGER_CONTACT

Полное имя файла, содержащего шапку ответа.

Это та информация, которая обычно берётся из файла «/etc/passwd» и поля GECOS в нём. Обычно там содержатся логин пользователя, его реальное имя, номер телефона, номер офиса, его адрес, а так же информация об активности в системе (навроде вывода команды «w»).

По умолчанию никакой файл не читается, а в ответе выдаётся сообщение об отсутствии этой информации.

FINGER_PROJECT

Полное имя файла, содержащего раздел «Project».

Это такой многострочный блок текста, который содержит какие-то данные в свободной форме. Например, список программ, над которыми работает пользователь. Предполагается, что эта информация меняется редко.

По умолчанию никакой файл не читается, а в ответе выдаётся сообщение об отсутствии этой информации.

FINGER_PLAN

Полное имя файла, содержащего раздел «Plan».

Это обычно такая строка текста, которая, например, может содержать информацию о том, чем занимается пользователь прямо сейчас. Например, дебажит какой-то конкретный модуль в некоей программе. Предполагается, что эта информация меняется часто.

По умолчанию никакой файл не читается, а в ответе выдаётся сообщение об отсутствии этой информации.

Кодировка

Finger – протокол очень старый, он создавался во времена, когда семи бит хватало всем, поэтому во всём, что содержит какие-то данные, рекомендуется использовать кодировку типа US-ASCII, иначе клиенты ваш UTF-8 могут не понять.

Это относится к переменным окружения вроде имени пользователя и содержимому файлов с информацией.

Содержимое файлов

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

Концы строк должны быть в виде CRLF. Раз запрос по стандарту оканчивается на CRLF, следовательно и ответ должен следовать этой системе. В любом случае, finger2023 пофиксит концы строк.

Так же ширину строк стоит держать в пределах восьмидесяти символов, поскольку это стандартная ширина терминала. Никто не запрещает держать строки шире, но тогда возможны переносы прямо по словам при выводе ответа клиентом.

Идея для выводимой информации

На самом деле, информация, возвращаемая Finger сервером, ориентирована на человека и никак строго не структурируется. Но пример того, как она обычно выглядит, можно подсмотреть, запустив в Linux терминале следующие команды:

# Запрос списка пользователей...
finger

# Запрос информации о пользователе...
finger username

В данном случае встроенная программа «finger» (клиент протокола Finger) выдаст актуальную информацию о системе, не обращаясь ни к каким серверам.

Компиляция

Программа написана на FreeBasic, поэтому для компиляции он должен быть установлен. Вот инструкции:

https://www.freebasic.net/wiki/CompilerInstalling

После этого можно будет воспользоваться скриптом «make.sh», который создаст каталог «output» и скомпилирует файл «finger2023» в него.

Установка

Как уже было сказано, для работы этого сервера требуется сервис, который будет его запускать.

systemd в Linux

Проект содержит каталог «systemd», в котором находятся все необходимые для установки сервиса файлы. А скрипт «install.systemd.sh» сделает всё автоматически.

Далее можно отредактировать файл «/etc/default/finger2020.env», в котором задаются все переменные окружения для запускаемого finger2023. Там можно указать свои файлы с данными и имя пользователя.

Сервис стартует под пользователем www-data. Возможно, потребуется указать кого-то другого. Сделать это можно в файле «/etc/systemd/system/[email protected]», параметры «User» и «Group».

Управлять сервисом можно с помощью этих команд:

# Просмотреть лог сервиса – там ничего интересного...
sudo journalctl -u finger2023.socket

# Посмотреть общий лог – туда попадают сообщения сервиса...
sudo journalctl

# Активировать сервис...
sudo systemctl enable finger2023.socket

# Запустить сервис...
sudo systemctl start finger2023.socket

# Сведения о состоянии сервиса...
sudo systemctl status finger2023.socket

# Остановить сервис...
sudo systemctl stop finger2023.socket

# Деактивировать сервис...
sudo systemctl disable finger2023.socket

Прочее

В случае с другими вышестоящими сервисами, установка и настройка будет отличаться – я не пробовала. Сообщите мне, если вы сможете использовать что-то ещё!

История изменений

  • 26.07.2023

    • Первый публичный релиз.

Маленький копирайт

  1. Программа и исходный код распространяются бесплатно.
  2. Вы имеете право распространять их на тех же условиях.
  3. Вы не имеете права использовать имя автора после модификации исходного кода.
  4. При этом желательно указывать ссылку на автора оригинальной версии исходного кода.
  5. Вы не имеете права на платное распространение исходного кода, а также программных модулей, содержащих данный исходный код.
  6. Программа и исходный код распространяются как есть. Автор не несёт ответственности за любые трагедии или несчастные случаи, вызванные использованием программы и исходного кода.
  7. Для любого пункта данного соглашения может быть сделано исключение с разрешения автора программы.
  8. По любым вопросам, связанным с данной программой, обращайтесь по адресу [email protected]

Контакты

Почта: [email protected]
Сайт: https://www.lindachan.net

About

Private finger server, written in FreeBasic, based on finger2020

Resources

License

Stars

Watchers

Forks

Packages

No packages published