LINUX.ORG.RU

SFTPGo 2.0.0

 , , ,


0

3

Вышла новая версия SFTPGo — SFTP-сервера с обширными возможностями, написанного на языке Go. Помимо протокола SFTP, сервер также поддерживает FTP/S и WebDAV. В качестве внутреннего хранилища поддерживаются локальные ФС, зашифрованные ФС, S3-совместимые хранилища, хранилища Google Cloud и Azure Blob Storage, а также другие SFTP-сервера. SFTPGo может быть запущен в portable режиме, а также имеет веб-интерфейс для администрирования.

Основные изменения в релизе:

  • Новая версия REST API v2 с поддержкой роли администратора.

  • Прозрачное шифрование хранимых данных (Data At Rest).

  • Поддержка KMS: учетные записи и ключи теперь могут хранится во внешней KMS (Vault, GCP KMS, AWS KMS).

  • SFTP теперь может использоваться как реализация внутреннего хранилища, позволяя использовать сервер в режиме SFTP-прокси.

  • Двунаправленная аутентификация через TLS (TLS with client certificate authentication) для FTP, WebDAV, REST API и web-админки.

  • Встроенный блокировщик: пользователь может настроить политику автоблокировки подозрительных клиентов.

>>> Подробности

★★★

Проверено: Shaman007 ()

В качестве внутреннего хранилища поддерживаются: локальная ФС, зашифрованная ФС, S3-совместимое хранилище, хранилища Google Cloud и Azure Blob Storage или другой SFTP сервер.

В идеальном мире вся эта вермишель из стораж-бэкендов была бы отдельными продуктами, типа gcloudfs и т.д.

thesis ★★★★★ ()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: Re: man 5 sshd_config от anonymous

ЛОЛШТА?!? =)))

ни виртуальных пользователей.

ssh вообще пофиг откуда берутся учётки пользователей. Из LDAP, так из LDAP. Матчасть учите.

Например, вот так:

Match Group sites
    ForceCommand internal-sftp
    ChrootDirectory /sites/%u

Тогда доступ для владельцев сайтов будет прямо по их именам: my.site1.ru, my.site2.ru, … Учётки будут храниться в LDAP, а не системные. Т.е., пользователей с именами my.site?.ru в системе в принципе не будет, локально.

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

Стесняюсь спросить – Вы дурак? Может, и root-доступ по ssh разрешить, чтоб два раза не вставать? =)))

Moisha_Liberman ()
Ответ на: Это не вопрос. от Moisha_Liberman

Простые инструменты побеждают сложные. Для того, что ты предлагаешь, нужно забурится в маны на пару часов и много раз всё проверить, чтобы потом не утекло. А SFTPGo просто работает и с ним справится даже тупой юзверь за 5 минут. Не у всех такой опыт, какой есть у тебя, и не у всех есть время/желание ковыряться.

Раз уж в теме - какие фичи из SFTPGo покрывают старые инструменты?

InterVi ★★★ ()
Ответ на: комментарий от sT331h0rs3

Я как бы за FTP (в смысле передачи файлов в бинарном виде), но два соединения?? Это чересчур. Нужен протокол, позволяющий общаться текстом, а при передаче бинарей использовать небольшие порции (скажем, в 10 мег). Если что-то случится, всегда можно дозагрузить файл. Да и просто удобно.

matumba ★★★★★ ()
Ответ на: комментарий от constin

Это «полезно» можно прочесть в описании, а не выпячивать в каждом названии. Ну это как примерно «BMWstainlesssteel» - кому-то интересно знать материал кузова??

matumba ★★★★★ ()
Ответ на: комментарий от InterVi

Даже разбираться не буду.

Раз уж в теме - какие фичи из SFTPGo покрывают старые инструменты?

В этом. Мне и близко ненужны облачные хранилища. Я смысла не вижу в этом инструменте. Честно.

Для того, что ты предлагаешь, нужно забурится в маны на пару часов и много раз всё проверить, чтобы потом не утекло.

Раз разбираемся и дальше с этим живём. Я даже больше скажу – под заказ делал небольшой сервер ssh с весьма ограниченным функционалом (некая управлялка), примерно такой, но с большим уклоном именно в практическое использование. Ну или вот примерно такой. Но эти оба примера чисто так… Для примера и не более и это не sftp, это чисто ssh. Пример сервера sftp для старта вот.

Не у всех такой опыт, какой есть у тебя, и не у всех есть время/желание ковыряться.

Нравится-не нравится, а приходится. Куда ж деваться?

Moisha_Liberman ()
Ответ на: комментарий от vromanov

Какие-то комплексы у пишушщих на языке Go - в название продукта пихать название языка разработки

Выходит, у людей, пихающих свою фамилию в никнеймы тоже какие-то комплексы 🤔

На мой взгляд, это вполне обычная и весьма распространенная практика. Софт, написанный для gnome или с использованием gtk обычно именуется с первой буквы g. Для kde - то же самое. Для софта на яве - именуют с буквы j. Это просто некий паттерн нейминга. Нет повода для зуда в заднем проходе.

ergo ()
Последнее исправление: ergo (всего исправлений: 3)
Ответ на: Re: Даже разбираться не буду. от anonymous

Да всё дырявое.

на libssh ? он же дырявый как губка боб

В каждой избушке свои погремушки, куда ни глянь. Чёж теперь, не жить совсем? Ну пока в этом продукте, который обсуждаем, дыр не нашли. И о чём это говорит, что их там нет?

Последняя дыра более-менее в libssh – 2018г. и да, я в курсе. Сейчас вышла уже libssh 0.9.5, где прикрыта CVE-2020-16135 (как раз null-pointer dereference in sftpserver), но я согласен с написанным на их сайте:

however we do not see how this would be exploitable at all

Так что…

Moisha_Liberman ()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: комментарий от InterVi

А что не покрывает фтп сервер типа pure-ftpd? И нафига нужно шифрование трафика, если задача фтп сервера обслужить максимальное число клиентов?

anonymous ()
Ответ на: Re: Да всё дырявое. от anonymous

Блин...

офигеть более-менее - дыра размером с луну

Ну Вы б ещё «Мурзилку» порекомендовали почитать… Автор с хабра где-то на год задержался в развитии со своим описанием существовавшей к тому времени уже год как CVE-2018-10933. Молодец, чё, оперативно среагировал. =)))

Куда как более оперативно среагировали в GitHub, где сразу сказали

Но для простоты пусть будет у людей радость. «Дыра с Луну размером жи!» =)))

Moisha_Liberman ()
Ответ на: Блин... от Moisha_Liberman

Re: Блин...

Ну Вы б ещё «Мурзилку» порекомендовали почитат

я бы порекомендовал не пороть чушь, на гитхабе ему сказали, а если там завтра скажут что закрываются - где истину будешь черпать ?

anonymous ()
Ответ на: Re: Блин... от anonymous

Ну так и не порите. Чушь.

Или мне надо ещё больше намекнуть на то, что у нормальных заказчиков CVE слабо распространены?

на гитхабе ему сказали, а если там завтра скажут что закрываются - где истину будешь черпать ?

На Вашем месте я бы за порнхаб больше волновался… =)))

Moisha_Liberman ()
Ответ на: В любом вопросе содержится примерно... от Moisha_Liberman

не делался под дятлов с отсыхающим по непонятным причинам Wi-Fi

Ненавижу веб инсталлеры и считаю, что в линуксе их не должно быть. Ставил Студию 2019 веб инсталлером (другого нет, спасибо MS, но если не считая плясок с кэшем), 2 Гб качалось, через полчаса отвалился интернет. Это мне повезло. При том, что веб инсталлер не обязательно означает отсутствие докачки (но об этом можно только догадываться, ведь он не пишет успокаивающие сообщения). Так что твой вариант еще хуже и поэтому советую тебе забаниться…

А лучше съезди в какую-нибудь Пердь.

anonymous ()

Вот эта привычка включать в имя программы имя языка на котором она написана, верх тупизны и подхватили это многие. Блевать хочется. Это тасколько ущербные умом писали его что не могли придумать адекватное название? Больные ублюдки.

anonymous ()
Ответ на: комментарий от ergo

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

ПОРОЧНАЯ практика. Как подвороты и гироскутеры.

Софт, написанный для gnome или с использованием gtk обычно именуется с первой буквы g...
Нет повода для зуда в заднем проходе.

Ну вот представь, гном загнулся, все перешли на «венда-под-линукс», а твоё поделие всё ещё так и называется с «Гы»! :) «Всё преходяще», надо думать не только о том, какой язык ты выучил на этой неделе, но и слегка в перспективу. В продукте может поменяться всё - фронтэнд, технологии, библиотеки, а он у тебя всё ещё называется «гЧатДвузвенкаТурбоСокет», хотя ни гнома, ни звеньев, ни сокетов давно уже нет (гипотетически). Смешно, согласись? :)

matumba ★★★★★ ()
Ответ на: комментарий от matumba

Если гном загнётся, а твой софт под гном => предстоит большой рефакторинг под новую среду. Смешной у тебя аргумент, согласись? 😄. Ещё смешнее он от того, что тысячи софта используют такой паттерн нейминга и это привычная практика. И уж совсем смешно, что в принципе у кого-то жопы горят от названия, куда включают какую-то принадлежность либо к среде применения, либо используемой технологии под капотом.

ergo ()
Последнее исправление: ergo (всего исправлений: 2)
Ответ на: комментарий от anonymous

Да откуда же все вы?!?

Серьёзно, вот где вас таких берут? Впрочем, не говорите, я и так знаю…

Ненавижу веб инсталлеры и считаю, что в линуксе их не должно быть. Ставил Студию 2019 веб инсталлером (другого нет, спасибо MS, но если не считая плясок с кэшем), 2 Гб качалось, через полчаса отвалился интернет. Это мне повезло. При том, что веб инсталлер не обязательно означает отсутствие докачки (но об этом можно только догадываться, ведь он не пишет успокаивающие сообщения).

Какой на фиг «докачки»? Если Вы ставили студию с выкачкой по http(s), то да будет Вам известно что в http(s) нет никакой докачки на уровне протокола. Это stateless протокол. Клиент зашёл, запросил документ (без разницы – html, json, xml, бинарь) и сервер ему его отдал и забыл об этом. Не смог клиент получить – нет в клиенте никаких retransmitions как они есть в ftp. ftp в данном случае это stateful протокол. Разницу между stateless и stateful гуглите сами.

В приведённом Вами примере нет никакой магии. Клиент установщика просто закешировал какое-то число данных и Вы умудрились восстановить соединение до того, как эта сессия стухла. Если бы она успела стухнуть, то перезагружался бы весь файл. С начала. Причём, неизвестно где закешировалось – могло на самом клиенте, могло на транзитном кеширующем proxy (хотя, скорее всего, и там и там). В M$ всё таки, дураков пренебрежительно малое число среди «технарей», зарплаты там не те, чтоб хронических дятлов держать.

Именно поэтому всяких современных дол… ээээ… SEO, web-дизигнеров и прочих разрушителей интернета, сующих и к месту и не к месту в свои говностранички Pragma: no-cache или Cache-Control: no-cache нужно прилюдно на центральных площадях городов и весей вешать. Тем самым они блокируют работу и кеширующих проксей и кеша клиентов (браузеров), заставляя перекачивать одну и ту же говнину при каждом запросе клиента.

Если не поняли что Вам написано выше, то просто примите на веру – в http(s) докачек не было, нет и не будет.

разрыв

А лучше съезди в какую-нибудь Пердь.

Погодите, дайте угадаю – Антон Уральский? Это Вы? Что ж Вы не залогинитесь-то? =)))

Moisha_Liberman ()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: комментарий от ergo

такой паттерн нейминга и это привычная практика

У тупой хипстоты. Солидные люди называют свой продукт коротко и изящно, например sendmail, а не «СерверПередачиПочтыНаписанныйПидорамиИзБерклиНаС».

anonymous ()
Ответ на: Да откуда же все вы?!? от Moisha_Liberman

Re: Да откуда же все вы?!?

да будет Вам известно что в http(s) нет никакой докачки на уровне протокола.

да, но есть заголовок Range. Так что докачка есть, если клиент умеет им пользоваться

anonymous ()
Ответ на: Re: Да откуда же все вы?!? от anonymous

Формально есть range, да

да, но есть заголовок Range. Так что докачка есть, если клиент умеет им пользоваться

Но называть это докачкой я бы не стал. Назначение абсолютно разное. И не только клиент, а и сервер, кстати. Этот заголовок из спеки на http/1.1, не все сервера понимают что именно у них запрашивают и что именно они должны вернуть в ответе на запрос.

Так что, не делает это всё range докачкой.

Moisha_Liberman ()
Ответ на: Формально есть range, да от Moisha_Liberman

Re: Формально есть range, да

Но называть это докачкой я бы не стал

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

И не только клиент, а и сервер, кстати

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

не все сервера понимают что именно у них запрашивают и что именно они должны вернуть в ответе на запрос.

Вообще-то клиент должен получить от сервера список поддерживаемых опций, если сервер не понимает range, то он и не должен отвечать, что понимает range. Если клиент все равно пытается использовать range, то это как минимум странно

Не знаю что там в http2, но ставить на раздачу то, что не в силах даже изобразить возможность докачки как-то странно

anonymous ()
Ответ на: Формально есть range, да от Moisha_Liberman

Re: Формально есть range, да

Но называть это докачкой я бы не стал

Ребе Либерман, я таки спасу от позора ваши седые муди. Докачка файла - это свойство протокола http. Если http-сервер поддерживает докачку, то он отдаёт заголовок Accept-ranges. Скачивая файл вы можете прервать загрузку, а когда решите докачать - отправить запрос на скачивание этого же файла, но уже с заголовокм Range: bytes=<count_loaded_bytes>-, тогда сервер начнёт отдавать файл с указанного места.

anonymous ()
Ответ на: Re: Формально есть range, да от anonymous

Оггадааа... =)))

За попытку спасибо (мои седые муди оценили), но покажите какой именно метод http отвечает за «докачку»? GET? PUT? POST?

Докачка файла - это свойство протокола http.

Берём RFC на http, открываем и цитируем какой именно метод обязывает http поддерживать «докачку»? Не сложно будет? Ну, вперёд… Вперёд… =)))

Пока же я замечу что приведённый Вами accept-ranges, это ни фига не метод http. И он может быть, а может и не быть реализован, так что, будь Вы регистрантом, я был бы за бан. За что? Да за безграмотность, хе-хе… =)))

А вот в том же ftp retransmission это как раз средство самого протокола. Так что, может, лучше сразу летом с зачёткой на пересдачу? Ну либо показывайте метод http, поддерживающий докачку.

Moisha_Liberman ()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: Re: Формально есть range, да от anonymous

Да пользователя ни фига ничего не волнует.

Мы же тут не просто «пользователи»?

Вообще-то клиент должен получить от сервера список поддерживаемых опций, если сервер не понимает range, то он и не должен отвечать, что понимает range. Если клиент все равно пытается использовать range, то это как минимум странно

Клиент может запросить типа так – OPTIONS * /1.1. В ответ сервер ему вернёт возможные для данного сервера allow. Но проблема в том, что на уровне протокола не было и нет никаких упоминаний о методах http, обеспечивающих поддержку «докачки» или её эмуляцию.

Проблема в том, что говоря о «файлах», докачка или retransmission имеют смысл. Для «документов», с которыми работает http, такого смысла нет. И говорить о том, что accept-ranges это обязательная фича, нельзя. Она может быть, а может и не быть реализована сервером. В отличие, кстати, от «методов http».

Moisha_Liberman ()
Ответ на: Оггадааа... =))) от Moisha_Liberman

Re: Оггадааа... =)))

Шмуль, я таки написал «свойство протокола».

См. RFC 7233 HTTP/1.1 Range Requests

The «Accept-Ranges» header field allows a server to indicate that it supports range requests for the target resource.

A server that does not support any kind of range request for the target resource MAY send

Accept-Ranges: none

to advise the client not to attempt a range request.

anonymous ()
Ответ на: Вообще-то, я не знаю зачем в наши времена... от Moisha_Liberman

нафейхоа мне этот ваш SSL если я заведомо много кому доступное передаю и у мну есть md5 для проверки? или заведомо шифрованное и не дырявым SSL?

почему за меня это решают?

mumpster ★★★★★ ()
Ответ на: Да пользователя ни фига ничего не волнует. от Moisha_Liberman

Re: Да пользователя ни фига ничего не волнует.

Мы же тут не просто «пользователи»?

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

Вы так давите на обязательность фичи, то, что RFC не обязывает http поддерживать докачку и то, что метод может быть не реализован, что мне стало интересно: а ftp что-то обязывает поддерживать докачку? Ну, ranges тоже есть в RFC, но их типа не все поддерживают.

Что делать с серверами, которые не знают о докачке или их собрали без поддержки данной фичи/отключили в конфиге?

anonymous ()

Re: Да пользователя ни фига ничего не волнует.

да будет Вам известно что в http(s) нет никакой докачки на уровне протокола. Это stateless протокол.

Этот поц вообще такое написал. А про докачку узнал уже здесь.

anonymous ()
Ответ на: Re: Оггадааа... =))) от anonymous

Вам не RFC, рано ещё туда. =)))

Вам бы для начала английский подтянуть (эвона как Вас «техническим английским-то изуродовало»). =)))

Вы сами читали что именно я у Вас просил? Повторяю – для какого метода http accept-ranges является обязательным к реализации? Правильный ответ – ни для какого. Просто потому, что у Вас написано английским по цвету фона (да-да, именно в разделе 2.3 RFC 7233):

An origin server that supports byte-range requests for a given target resource MAY send

A client MAY generate range requests

A server that does not support any kind of range request for the target resource MAY send

Если Вы заметили вот это вот самое MAY, то Вы должны понимать что это означает что клиент или сервер может делать что-либо. Но это не означает что он должен это делать. Если там вместо MAY было бы SHOULD или MUST, то это было явным указанием на обязательность данного действия. А в случае, на который Вы ссылаетесь, это возможное, но не обязательное действие. Почему я и ржал, когда просил Вас показать обязательность такого рода действий.

Ну и вишенкой на торте рекомендую всё таки сделать над собой усилие и прочесть (я-то эти ваши RFC читаю, чего о Вас не скажешь) что написано в самом начале данного RFC 7233:

The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.

Что такое stateless и чем оно отличается от stateful это Вам в качестве домашнего задания. =)))

Поздравляю! Вам неслыханными усилиями удалось сделать две вещи:

  • Сделать мой вечер, т.е., развлечь меня (да, давненько я так не ржал, не скрою).

  • Объявить http stateful протоколом, невзирая на прямое указание в RFC на то, что это stateless протокол…

Понимаю. Вы старались. Спасибо! =)))

Moisha_Liberman ()
Ответ на: Вам не RFC, рано ещё туда. =))) от Moisha_Liberman

Re: Вам не RFC, рано ещё туда. =)))

Чем меньше вещества остается в мисочке, тем больше смайликов, да, мань? Давай-ка еще что-нибудь попробуй поведать саркастично и как бы свысока, только не утирайся, так веселее.

anonymous ()
Ответ на: Вам не RFC, рано ещё туда. =))) от Moisha_Liberman

Re: Вам не RFC, рано ещё туда. =)))

нет никакой докачки на уровне протокола. Это stateless протокол

Ты писал? А докачка по факту есть, и стейт хранит клиент в виде числа скачанных байт. А рекомендательный характер это дело десятое. Это как сказать, что в С++ нет лямбд, потому что мой компилятор Borland TurboC++ их не поддерживает.

anonymous ()

Да.

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

Ну извините если я был (или Вам показалось что я был) резковат. Просто, вы, анонимусы, все на одно лицо и тут такие фееричные индивидуумы попадаются, что я боюсь на ЛОР с кружкой кофе заходить – поперхнусь и от хохота сдохну на фиг. =)

а ftp что-то обязывает поддерживать докачку?

В ftp хранится информация о состоянии клиента на сервере. Это сразу свойство протокола.

Что делать с серверами, которые не знают о докачке или их собрали без поддержки данной фичи/отключили в конфиге?

Да ничего не делать. если пересобрать не получается. Как пользовались, так и пользуйтесь. =) Документы отдаёт, да и ладно.

Moisha_Liberman ()
Ответ на: Re: Вам не RFC, рано ещё туда. =))) от anonymous

Говорить можно всё что угодно. =)))

Рекомендую Вам перечитать RFC и потом, в качестве домашнего упражнения, сказать 1000 раз слово «халва» и описать ощущения – станет ли во рту слаще.

в С++ нет лямбд

О! Ну вот и началось любимое соревнование анонимусов – натягивание совы на глобус. Lambda expressions появились в C++11. Однако, ни кто и не где не говорит обязательны они к использованию или нет.

Вы же мне тут в уши гадить прилаживаетесь что accept-ranges обязателен к реализации, а я Вас носом ткнул в RFC, где прямо сказано что http за протокол и что нет, accept-ranges не обязателен в принципе.

Moisha_Liberman ()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: Да. от Moisha_Liberman

Re: Да.

В ftp хранится информация о состоянии клиента на сервере. Это сразу свойство протокола.

а в случае http клиентов — на стороне клиента (вычисляется динамически или как еще).

И заголовок range и restart маркеры описаны в RFC (не буду использовать «свойство протокола»). И то и другое никто не обязывает ни реализовывать, ни включать в конфигах. По моему и в случае ftp и в случае http степень соответствия RFC и поддержки «обязательных» фич объясняется возрастом проекта и активностью разработки

включился режим буквоедства. из вашего ответа другому анонимусу:

Lambda expressions появились в C++11. Однако, ни кто и не где не говорит обязательны они к использованию или нет.

можете ткнуть, где сказано про обязательность использования restart маркеров в ftp?

anonymous ()
Ответ на: Re: Да. от anonymous

Нет.

а в случае http клиентов — на стороне клиента (вычисляется динамически или как еще).

Это не свойство протокола. Сервер не имеет никакой информации о текущем соединении. Сервер вернул документ в ответ на GET и забыл на фиг о клиенте на совершенно законных основаниях. В ftp это не так. Пока клиент не разорвёт соединение или не отвалится по тайм-ауту, он так и будет висеть на сервере.

можете ткнуть, где сказано про обязательность использования restart маркеров в ftp?

В разных ftp-серверах докачка файлов включается по-разному, реализована она, ессно, тоже по-разному. Как правило, это что-то типа AllowStoreRestart on. Т.е., при рестарте соединения и получении команды от клиента, сервер и клиент должны проверить в каком статусе их состояния.

ЕМНИП, это описано в RFC 959 «File Transfer Protocol», а команда на докачку выглядит как:

REST [byte_counter] (с какого байта продолжать)

RESTART (REST) The argument field represents the server marker at which file transfer is to be restarted. This command does not cause file transfer but skips over the file to the specified data checkpoint. This command shall be immediately followed by the appropriate FTP service command which shall cause file transfer to resume.

Подчеркну ещё раз – это прямо и явно прописанная в RFC часть протокола FTP. Это – команда ftp, аналогом которой в http является метод http(s) (GET, PUT, POST, HEAD, …). Нет, в http(s), даже если Вы расширите свой http(s)-сервер дополнительными методами из WebDAV, аналогов REST не появится.

P.S.

включился режим буквоедства.

Правильный подход. Всё нормально.

Moisha_Liberman ()
Последнее исправление: Moisha_Liberman (всего исправлений: 2)
Ответ на: Нет. от Moisha_Liberman

Re: Нет.

Мань, а ведь это очень смешно. Люди десятилетиями пользуются докачкой в браузерах, а ты в 2021 году при помощи браузера же пытаешься обосновать ее невозможность. Потом, доев где-то до середины мисочки, начинаешь обосновывать ее нестандартность. Потом тебя ненадолго вынимают из мисочки и тычут в стандарт, но ты почему-то начинаешь аппелировать уже к «необязательности».

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

Однако ж наблюдаемый факт есть наблюдаемый факт.

Так понятнее, мань?

anonymous ()