LINUX.ORG.RU

Избранные сообщения teod0r

Linux sandboxing

 , ,

Тут недавно был тред про песочницы, но там обсуждалась реализация (что-то в духе, почему в бсд так, а в линуксе не так).

У меня практический вопрос: что сейчас используется для sandboxing'а? Задача проста: есть недовереннные приложения (бинарники из левых источников). Надо запустить их, обеспечивая максимальную безопасность с минимальными затратами. Вариант - не запускать левые бинариники не подходит.

maverik
()

Удалить все совпадающие линии в файле

 

Есть файл с содержимым

9
7
1
8
2
1
3
2
4
2
5
2
6
6

из него нужно сделать файл

9
7
1
8
2
3
4
5
6
 — то есть оставить только по одному экземпляру каждой совпадающей строки.

Продолжение тем Сравнение двух списков в bash Как в Arch Linux вывести список всех дополнительных зависимостей для каждого установленного пакета?

Vsevolod-linuxoid
()

Примочки для терминала

 , ,

Иногда делаю для себя маленькие открытия типа таких:

autojump: https://github.com/wting/autojump/

hstr: https://github.com/dvorka/hstr

О каких ещё полезных при работе в терминале штуках я не знаю?

P.S. Использую zsh без oh-my-zsh.

aquadon
()

Облагородить логику bash-скрипта

 

Привет, ЛОР!

Обучаясь bash велосипедю такое нечто. И вот в case 3 у меня цикл, который ждёт подходящий $ANSWER.

Если отрабатывается case 1 и case 2 то всё корректно - или заново проигрывается скрипт или выход из него.

А в случае case 3 получается, что при выходе из цикла и выходе из case скрипт попадает в старший цикл и поскольку переменная $TIME_LAST пустая, то срабатывает условие и ожидается ввод от пользователя.

Данное поведение подходит, если пользователь хочет повторно завести таймер и не подходит, если он хочет закончить работу.

Т.е. если пользователь ответил Y или ответил N, то всё ок. А если он ответил «qwerty», его переспросили, он ответил N, то всё равно скрипт будет продолжать работу.

Как это организовать по-человечески?

#!/bin/bash
# timer.sh
# Таймер с интерактивным вводом. 
# Умеет звенеть колокольчиком на старых терминалах. 
# На некоторых современных может посылать уведомления

TIME_LAST="$1" # Время таймера
FLAG=TRUE # Флажок
INTEGER=^[0-9]+$ # Шаблон проверки числа. В данном случае целое положительное число, не строка

while [[ "$FLAG" = "TRUE" ]]; do

if [[ -z "$TIME_LAST" ]]; then

	echo -e "\nИспользование: \"`basename $0` время_в_минутах\" или введите в интерактивном режиме"
	echo -e "Введите время в минутах (для отмены нажмите Ctrl+C)\n"
	read TIME_LAST

                until [[ "$TIME_LAST" =~ $INTEGER ]]; do
                echo -e "\nОшибка ввода. \"$TIME_LAST\" не является целым положительным числом.\nПовторите ввод\n"
                read TIME_LAST
                done
                
echo -e "\nОтсчёт $TIME_LAST мин. пошёл!"

fi


sleep $(( $TIME_LAST * 1 )) && echo -e "\nВремя вышло!\a" # ДЛЯ ТЕСТА ТУТ УКАЗАНО УМНОЖЕНИЕ МИНУТ НА 5, А НАДО НА 60!!!

TIME_LAST="" # Подметаем за собой

echo -e "\nХотите завести новый таймер? y / n\n"

read ANSWER

case "$ANSWER" in

#1 case
"Y" | "y" )
;;

#2 case
"N" | "n" )
FLAG=FALSE # Переключается флажок и выход из цикла
;;

#3 case
* )
echo -e "\nВведите \"y\" или \"n\"\n"
# Пока не будет получен нужный ответ переспрашивать
until [ "$ANSWER" = "y" -o "$ANSWER" = "Y" -o "$ANSWER" = "n" -o "$ANSWER" = "N" ]; do 
    read ANSWER
done
;;

esac

done

echo -e "\nBye-bye"

exit 0
kma21
()

Bash смена заголовка терминала

 

Подскажите можно ли на «лету» менять заголовок скрипта

Например при запуске скрипта будет заголовок


printf '\033]2;Test\a'

а позже в работе скрипта вызывается функция которая меняет заголовок на Test2
vbox
()

Маскировка OpenVPN под HTTPS

 , , маскировка

Вот здесь умный человек пишет как настроить OpenVPN так, чтобы при обращении к серверу браузером получать вебовую страницу, а если обратиться OpenVPN'овым клиентом, то устанавливается соединение.

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

Так вот, возможно ли надёжно замаскировать VPN под HTTPS, да так чтобы при обращении браузером получать странички? Что для этого требуется кроме nginx'а, OpenVPN'а и сертификата (хотя бы) от LetsEncrypt? Shadowsocks, stunnel, obfsproxy? Есть ссылка на пример такой настройки?

Camel
()

Как сделать cat file | grep text > file?

 

Знаю, что нельзя, но очень хочется.

crutch_master
()

Сглаживание шрифтов. Debian 9.

 , ,

Шрифты ужасные! Как можно сгладить шрифты в этом дистрибутиве? .fonts.conf - не помогает.

jek04
()

Как сделать регулярное выражение регистро-независимым?

 ,

В конфиге Metricbeat есть список регулярных выражений (по правилам Lucene), по которым фильтруются добавляемые в поисковик данные. В моём случае это — просто список слов в ASCII. Требуется, чтобы эти слова искались вне зависимости от регистра.

Пока обрабатываю файл-список командой

sed 's/[Aa]/[Aa]/g; s/[Bb]/[Bb]/g; s/[Cc]/[Cc]/g; s/[Dd]/[Dd]/g; s/[Ee]/[Ee]/g; s/[Ff]/[Ff]/g; s/[Gg]/[Gg]/g; s/[Hh]/[Hh]/g; s/[Ii]/[Ii]/g; s/[Jj]/[Jj]/g; s/[Kk]/[Kk]/g; s/[Ll]/[Ll]/g; s/[Mm]/[Mm]/g; s/[Nn]/[Nn]/g; s/[Oo]/[Oo]/g; s/[Pp]/[Pp]/g; s/[Qq]/[Qq]/g; s/[Rr]/[Rr]/g; s/[Ss]/[Ss]/g; s/[Tt]/[Tt]/g; s/[Uu]/[Uu]/g; s/[Vv]/[Vv]/g; s/[Ww]/[Ww]/g; s/[Xx]/[Xx]/g; s/[Yy]/[Yy]/g; s/[Zz]/[Zz]/g'
и вставляю в конфиг. Некрасиво. Громоздко. Можно улучшить?

------------------------------------------------------------

Ответ:

Команду для sed можно записать короче:

sed 's/\([A-Za-z]\)/[\u\1\l\1]/g'

А в самом списке вместо имён можно поставить

'(?i:firefox)'

olegd
()

tar убрать полный путь

 

исходная команда tar cf - /home/user/Pictures/|pigz>Pictures.tar.gz
в архиве получаю путь /home/user/Pictures
как убрать путь? в идеале пусть файлы будут сразу в корне архива
пробовал пихать параметр -С но не получилось

kommersant
()

Этот стон у нас песней зовется (видео в браузере)

 ,

Товарищи! Киньте кто-нибудь рецепт, как привинтить хотя бы внешний плеер к современным версиям лисы или хрома, чтобы иметь аппаратное ускорение, причем не только на ютубе, а и на всяких онлайн-кинотеатрах. В браузерах на это положен, похоже, болт, менять железо пока не вариант :(

olegkrutov
()

Вечные закладки

 

Дело такое: я живу, закладки накапливаются, сайты закрываются, закладки становятся недействительными. Подумалось мне исправить это, чтобы я мог не волноваться о доступности своих закладок. Но вот беда: не могу найти способ как этого добиться. Пробовал onenote clipper — лишь скриншоты он делает; попробовал evernote clipper — какие-то непонятные баги с отображением изображений, частично едет заметка — лучше, но всё равно не то, ибо надо каждый раз проверять корректность заметки, и фиксить ручками, если что не так.

Было бы прекрасно, если бы был способ получить страницу «как есть». Было бы еще лучше, чтобы это делалось с моей стороны, чтобы таким образом можно было бы сохранять какие-нибудь приватные данные, к которым доступ извне невозможен.
Ну так вот, эти сохраненные страницы имели бы свой уникальный URL и фавикон(соответствующий оригиналу), чтобы я добавить этот URL в закладки и не замечать разницы с оригиналом.

Есть ли что-то близкое к запрошенному? Возможно тут XY problem. Мне просто надо чтобы под рукой были вечные закладки, скорость доступа к которым и удобство как минимум не ниже дефолтных браузерных.

P.S. Не стесняйтесь, если о чем-то знаете — расскажите. Повторы — не так страшно, как пропуск чего-то интересного. Я обязательно проверю все варианты и выберу лучший. Если нет возможности сделать это тут, можете написать мне на почту letni@imap.cc

letni
()

установка плагинов firefox из консоли

 ,

Приветствую! Есть ли возможность установить на голый firefox плагины и записать значения в about:config не через браузер вручную, а из консоли линукса баш скриптом? Хочется автоматизировать процесс заточки браузера.

Просто скопировать чистый профиль из ~/.mozilla/firefox/ как-то не уверен что правильно...

hikikomori
()

Написание свободной(Free as in Freedom) книги-самоучителя по программированию: планы, цели, задачи

 , , ,

Итак, я решил написать(или как вариант, собрать из кусочков) книгу-самоучилель по программированию, в которой бы не было глупых и нелепых ограничений на распространение. Однако копилефт я все же считаю приемлемым в данном случае. Общественным достоянием это не будет т.к. вполне могут найтись желающие использовать результат в своих проприетарных книгах, а проприетарные книги — плохо. Лицензия самого текста книги-учебника будет или Creative Commons Attribution-ShareAlike (что позволит без каких-либо проблем переиспользовать текст из википедии) или что-то вроде GNU Free Documentation License (без неизменяемых разделов естественно).

Лицензии всяких примитивных программок, написанных мной лично, будут вообще выложены под общественным достоянием, WTFPL или аналогичной лицензией т.к. являются тривиальными. Примерно вот так. Если я буду использовать чужие исходные тексты, они будут как включения, лицензируемые отдельно от всего остального. Проблем тут быть не должно.

Теперь к теме того, на кого книга ориентирована, какие начальные знания предполагаются, чему книга будет учить, какой первый ЯП взять и каков будет авторский самысел: С этим моментом я пока что не определился окончательно, и тут есть что обсудить. В частности, я не вижу особого смысла объяснять какие-то базовые понятия комбинаторики, об этом можно доступным языком прочитать из школьных учебников. Системы счисления(СС), перевод из одной СС в другую - вот это еще можно. One's и two's complement представления знаковых чисел — про это тоже можно написать. Если же человек не понимает комбинаторику, он ее быстро поймет на примере кода, который будет достаточно наглядно это показывать, и который всенепременно будет.
Пока что в качестве первого языка я склоняюсь к Си, и тому есть причины. Все прочие распространенные языки (кроме ассемблера, хотя его трудно назвать распространенным) не настолько близки к аппаратному уровню. Про нужность понимания на низком уровне написано тут http://russian.joelonsoftware.com/Articles/BacktoBasics.html https://habrahabr.ru/company/piter/blog/271347/ , не вижу смысла повторяться. Приведу лишь цитату:

«Просто плохой воркшоп попался», — скажете вы. Но на этом примере я хочу подчеркнуть более масштабную проблему: не изучив для начала C, программист оказывается лишен необходимых орудий, позволяющих понять, что именно происходит в используемой системе. Если вы — умный и пытливый питонщик, то вскоре докопаетесь до плотных пород языка C. Под этими горизонтами, скажут вам, «бойся драконов, костей и отладчиков». Соответственно, если вы не будете достаточно отважны и не проигнорируете предупреждений «да не берись ты за этот C», вы никогда не исследуете глубин, на которые можно забраться просто из любопытства.

Притом еще один важный момент: Си будет изучаться параллельно с ассемблером. Если речь идет об изучении ассемблера, необходимо четко зафиксировать то, на какой архитектуре это все происходит и в какой ОС. Так вот, ОС будет GNU/Linux а архитектура x86-64. Будут постоянно проводиться параллели между тем, что из себя представляет код на Си в текстовом виде, и тем, в какой текст на ассемблере его превращает компилятор. В связи с этим, первым делом будет рассказано о goto и конструкции if(условие) goto метка;. Про конструкции вида

if(условие)
{
  что-то_делаем;
}
else
{
  что-то_другое_делаем;
}
Будет рассказано немного позже, притом это будет рассказано и словами, и через написание эквивалентного кода через if(условие) goto метка;. Циклы, for(){} while{}, do{}while(), конструкция switch-case и break continue внутри них будут так же объясняться через все тот же if(условие) goto метка; притом будет делаться явный акцент на том, что намного лучше использовать нормальные циклы, чем лепить всюду этот условный goto. Кроме того, будет так же рассказано про Labels as Values. Почему так важна эта странная штука, if(условие) goto метка;? Потому что она имеет наипрямейшее отношение к тому, как работают ЭВМ, а всякие циклы СКРЫВАЮТ это. Рекурсия в Си будет объясняться только после того, как будет объяснено, что такое стекфрейм и соглашения вызова, будет сказано про оптимизацию хвостовой рекурсии, и о проблеме забивания стека, если такая оптимизация не происходит, притом это будет наглядно показано в ассемблере. Учиться отлаживать код надо будет тоже «с пеленок», притом отлаживать и ассемблер, и всякие там Си. Будет и про асм-вставки в Си, clobber list. В качестве ассемблера будет рассматриваться GAS, а никакой не NASM т.к. GCC умеет выплевывать ассемблер именно в GAS синтаксисе. Насчет выбора Intel или AT&T синтаксиса - тут я склонюсь пожалуй к тому, что надо ЗНАТЬ И УМЕТЬ ПОНИМАТЬ ОБА. Кроме того, GAS давно уже умеет в оба синтаксиса, так что проблем с этим не будет. Единственная проблема с GAS в том, что это однопроходной ассемблер, так что можно освоить и какой-нибудь NASM, YASM.

Первые хеллоуворды будут написаны вообще в особом стиле, без использования printf() и вообще без библиотеки Си; Будут использованы куски на ассемблере, которые делают системный вызов write и read, и с ними можно(нужно) будет линковаться, чтоб что-то вывести на экран. Будет рассказано и про printf естественно, но только когда будет совершенно четко ясно, что такое вообще va_list. Будет куча отсылок к драфту стандарта Си (недрафт почему-то платный). Будет так же рассказано про устройство ОС. В конце скорее всего будет дано задание сделать свою игрушечную ОС так что предполагается что человек к тому моменту должен уже отлично понимать всякие там связные списки, графы, очереди, спинлоки-аллокаторы свои уметь делать на асме при желании. Алгоритмы сортировки, обхода графов, хеш-таблицы, все это будет объяснено на языке Си, и плюсов вообще касаться я не буду.

Насчет графики: работу с протоколом иксов тоже можно будет рассказать, обработку нажатий клавиши. Правда там надо дофига писать про кучу всего, например что есть сокеты, есть AF_LOCAL... Тогда это можно еще и сетевому программированию учить на каких-нибудь беркли-сокетах.

Кроме того, после моей книги предполагается, что человек должен уметь заниматься такими ненужными (в GNU/Linux) на первый взгляд вещами, как крякинг, реверсинг, исправление ошибок в бинарниках, не обладая исходным текстом. Восстановление логики работы программы по дизасму. Ну и программирование в машинных кодах (без ассемблера, одним HEX редактором).

Как-то уж слишком дофига, не находите? Может быть не надо так глубоко во все это нырять? Жду предложений и критики по поводу того, что нужно, а чего не нужно писать. Возможно что я слишком много хочу.

cast ASM be_nt_all mister_VA

UPD: Программирование и отладка на C/ASM - Первые программы. Знакомство с C и ассемблером. Компиляция, линковка, код возврата. Вывод текста.

SZT
()

Выбор ЯП для системного программирования.

 ,

Добрый день, задумался я тут о том чтоб начать учить один из низкоуровневых ЯП для развития и разработки. До этого писал только на Python, но он на роль языка разработки системных инструментов не подходит. Так как тут народ опытный хотел бы узнать что в данный момент лучше начинать учить? Пока выделил следующие ЯП. C,C++,JAVA,RUST.

vgbnd
()

Есть ли возможность отключить питание на USB?

 , ,

Добрый день, есть устройство (Атол) - pos терминал, на борту ubuntu 16.04. Есть сканер ШК - Haneywell 1250g. Суть проблемы: сканер при выключении, включении системы не включается сам, если его передернуть из USB то все хорошо.

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

Причем в системе он не определяется (пока не передернешь его). Есть ли возможность отключить питание на USB порты?

vsafonin
()

noisesocket

 , , ,

Всем привет! Наткнулся на такую вот штуку https://github.com/noisesocket/spec (https://habrahabr.ru/company/virgilsecurity/blog/334506/)

NoiseSocket - это расширение Noise Protocol Framework, которое позволяет быстро и без проблем защищать соединения с минимальным размером кода, небольшими ключами, современными шифрами и хэш-функциями, и чрезвычайно быстрой скоростью. Он может использоваться с необработанными открытыми ключами вместо инфраструктуры X.509 и целевыми устройствами IoT, микросервисами и внутренними приложениями, такими как обмен данными между центрами данных.

Интересно ваше мнение стоит ли его использовать «в продакшене». Ну и вообще интересно кто что думает насчет него.

Перемещено leave из talks

dnb
()

Русский в консоли Gentoo

 

Как сделать вывод текста в консоли с поддержкой русских символов?
Сейчас ls — ????, ls -l — цифры.
Пробовал по найденным гуглом рецептам — не помогает.

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

И как сделать переключение по Caps'у?

teod0r
()

Документация к языкам программирования

 , , , ,

Всевозможные учебники и книги - это хорошо, но обычно их предлагают купить и часто не совсем дёшево, даже если они описывают базовый уровень. Бесплатным решением, очевидно, является официальная документация. Когда я открыл документацию к python, я был приятно удивлён, что она написана практически как учебник. Для Java вроде бы тоже всё относительно неплохо в этом плане, хотя хотелось бы отдельный оффлайновый pdf.

Мне захотелось скачать себе документацию в подобном виде для C и C++. Зашёл на их официальные сайты, там описание стандарта предлагают получить на сайте ISO за немалые суммы денег. Да и само описание стандарта далеко не для обучения. Хорошо, подумал я, попробую тогда посмотреть документацию к одной из реализаций языка - GCC-CPP, и вижу, что описанное там тоже вовсе не подходит для обучения. Даже описания типов и примеров объявления нет (может плохо искал, но в заголовках не заметил).

Нет, это не тред «подскажите книгу по Сям», таких для начинающих я и сам могу гору насоветовать.

Вопрос следующий: существует ли нормальная доступная бесплатная документация по которой можно изучать C, C++? Официальная документация по другим языкам была бы тоже интересна.


Update

C, C++
Online-ресурсы и учебные пособия для начинающих:

Как дополнение: Рабочая версия стандарта C++14 от 19 ноября 2014 г. (с официального сайта стандарта)


Fortran


Python
В дополнение к официальной документациипереводу руководства Python 3.1):


Object Pascal. Lazarus

Перемещено Klymedy из talks

grem
()

Как с помощью sed вытащить IP из /var/log/secure*

 , , ,

Добрый день, коллеги!

Пожалуйста, помогите мне распутаться в задачке с выделением IP адресов неудавшихся интрудеров, которые отметились в /var/log/secure* (CentOS 7.3) при попытке войти по ssh при вЫключенной авторизации по паролю (/etc/ssh/sshd_config: PasswordAuthentification no)

Имеем:

  1. Строки, выбранные из /var/log/secure*, содержащие упоминание о попытке входа:
    grep 'BREAK-IN ATTEMPT' /var/lor/secure* > /tmp/break-in.log
    
  2. Попытку вытащить из квадратных скобок IP с помощью sed (как наиболее лёгкий и быстрый фильтр):
    sed -r 's/.* [^[]*\[([^]]*)\].*/\1/' /tmp/break-in.log > /tmp/break-in_ip.log
    

Беда в том, что там же в логе, в таких же квадратных скобках пишется ещё и порт источника (если я ничего не путаю). Как бы то ни было, первое числовое значение, упоминаемое в строке лога в квадратных скобках, нужно отбросить и забрать только сам IP, т.е. текст из ВТОРОЙ пары квадратых скобок.

Аналогичная задача для вычленения IP горе-интрудеров при включЁнной аутентификации у меня решается аналогично и проблем не вызывает:

grep 'Failed' /var/log/secure* | sed -n 's/.*from \([0-9.]\+\).*/\1/p'
Хотелось бы достичь аналогичного и на этот раз. Заранее благодарен за помощь!

root66
()