Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 16.12.2013
Сообщений: 108

Полное перенаправление ввода-вывода

14.10.2017, 03:20. Показов 3125. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Имеется проблема с полноценным перехватом ввода-вывода в командной строке. А именно, я хочу, чтоб запускающий процесс не имел доступа к данным, полученным потомком. Для примера я решил в собственной программе выполнить, допустим
Bash
1
sudo dir
ну или точнее там скриптом получится что-то типа
Bash
1
echo myPass | sudo -S dir
. Для того, чтоб скрыть информацию полученную командой использовал такой синтаксис
Bash
1
echo myPass | sudo -S dir 1> log.txt
. Однако заметил, что при такой конструкции информация
Bash
1
[sudo] пароль для user:
отправляется не в log.txt а в терминал. Скорее всего в него же отправился и пароль, его просто не видно. Хотелось бы знать, как сделать так, чтоб все эти данные, то есть команда, запрос пароля, сам пароль ну и вывод(его я допустим смог сам) оказались именно в моей программе и не были доступны вызывающему? На всякий случай, пытался скрыть пароль такими конструкциями
Bash
1
echo myPass 1> passfile.txt | sudo -S dir 1> log.txt
и ещё что-то с "0<" но оно всё либо вообще не работало, либо выдавало тот же результат.

На всякий случай пример, где это работает так как нужно, допустим стандартным терминалом ubuntu запустить для чистоты эксперимента другой терминал, допустим xterm. Вот выполнив вручную в них те же действия, получим именно то что нужно, ничего сделанное xterm дефолтный терминал не узнает. (скрин этого примера приложил)
Миниатюры
Полное перенаправление ввода-вывода  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2017, 03:20
Ответы с готовыми решениями:

Перенаправление ввода/вывода в несколько терминалов
Всем привет. Был на презентации одной коммерческой программки под nix. В общем эта программка запускается из консоли, открывается...

Перенаправление ввода
time ./myexec &lt; file.txt &gt; res.txt &gt;&gt; result.txt Насчет .. &gt;&gt; result.txt не уверен , да оно и в принципе не...

Перенаправление потока ввода
Что делают команды в строке терминала 1&lt;2 2&lt;&lt;1

15
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
14.10.2017, 10:18
Цитата Сообщение от Dimofey Посмотреть сообщение
я хочу, чтоб запускающий процесс не имел доступа к данным, полученным потомком
Какой-то бред… Постарайтесь объяснить что Вы задумали и зачем Вам это надо.
0
1 / 1 / 1
Регистрация: 16.12.2013
Сообщений: 108
15.10.2017, 01:33  [ТС]
Marinero, я имею ввиду, что если мою программу запустить на "чужом" компьютере, с неизвестными мне возможностями к прослушке, их, допустим, эмулятор терминала имеет возможность сохранить пароль, который я ввёл. То есть, я хочу иметь удалённый доступ к собственному хосту так, чтобы из локального после моих действий и выхода посторонний юзер гарантированно не смог вытащить мои данные с помощью, например, history. То есть, после запуска моей программы и выхода из неё в терминале из которого я его запустил должен быть примерно такой отчёт
Bash
1
2
[dmitry@dmitry-desktop ~]$ myProgramm
[dmitry@dmitry-desktop ~]$
Но у меня вместо этого, если программа запускала sudo вывод примерно такой:
Bash
1
2
3
[dmitry@dmitry-desktop ~]$ myProgramm
[sudo] пароль для dmitry:    //плохая строчка,её хочу убрать
[dmitry@dmitry-desktop ~]$
я хочу, чтоб запускающий процесс не имел доступа к данным, полученным потомком
Я имею ввиду что "чужой" эмулятор терминала, он с фиолетовым фоном на примере запускает мою программу, и в нём не выводятся никакие данные посылаемые моей программой. Пока мне приходится на чужих машинах вместе с моей программой таскать и использовать дополнительный эмулятор терминала.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
15.10.2017, 10:41
Цитата Сообщение от Dimofey Посмотреть сообщение
удалённый доступ к собственному хосту
настраивается не на логин-пасс, а через RSA-ключ.
Цитата Сообщение от Dimofey Посмотреть сообщение
[sudo] пароль для dmitry:
ввод этих паролей в терминале не только НЕ сохраняется, но даже и НЕ отображается.
Цитата Сообщение от Dimofey Посмотреть сообщение
echo myPass
гораздо более серьезная «дыра» в безопасности, чем ввод пароля в терминале
Но на всякий случай: стоит помнить что есть не только stdout (стандартный вывод), который Вы перенаправляете 1>, но и stderr (вывод ошибок), который перенаправляется 2>. Или все вместе &>. Кроме того, для выполнения скрипта можно вызывать отдельный терминал с запретом записи истории либо ее очисткой.
Однако, еще раз повторю, не там Вы ищите проблему с безопасностью.
0
1 / 1 / 1
Регистрация: 16.12.2013
Сообщений: 108
15.10.2017, 16:59  [ТС]
Marinero, про отдельный терминал я уже писал, так и делается,, но это костыльно, очень не профессионально. Дело в том, не единственный способ работы приложения, там есть иная ситуация, работодателю может понадобиться, чтоб работники на локальном устройстве выполняли все sudo и ей подобные операции через эту программу, сам пароль в неё вшит, и знает его только работодатель и админ. Это прога, по сути псевдотерминал и она журналирует все root действия, допустим по сети в главный комп. Работник может оказаться халявщиком, и запустит прогу не через безпамятный терминал, а через всепомнящий. Сделав самое безобидное sudo apt update, программа легко и без проблем выдаст запрос пароля и пароль терминалу халявщика. С паролем он может выполнить через sudo всё что угодно минуя программу и журнал. Портя системные файлы и имея чистый журнал он может спокойно заставить админа чинить комп, при этом ничего не делать. Там конечно есть ещё проблемы, но от доп. терминала надо избавиться всё равно. Про &> я знаю, но он проблему не решает.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
15.10.2017, 17:12
Цитата Сообщение от Dimofey Посмотреть сообщение
сам пароль в неё вшит
Я Вам в том числе про это и писал:
Цитата Сообщение от Marinero Посмотреть сообщение
гораздо более серьезная «дыра» в безопасности
Данную проблему решают не «зашивая» пароли, а разрешая безпарольный запуск необходимых рядовым пользователям программ через sudoerr
0
1 / 1 / 1
Регистрация: 16.12.2013
Сообщений: 108
15.10.2017, 18:56  [ТС]
Marinero,
гораздо более серьезная «дыра» в безопасности
не, ну по этой логике и любая ручная работа в терминале с sudo тоже дыра в безопасности... Я не видел ни одной системы, которая требовала бы перед вводом пароля какой-то ручной генерации RSA и передачу в через него шифрованных паролей. Обычный прямой ввод пароля.
Данную проблему решают не «зашивая» пароли, а разрешая безпарольный запуск необходимых рядовым пользователям программ через sudoerr
не совсем, даже безобидный apt update должен журналироваться. Админ должен знать про любое изменение дальше каталога ./home
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
15.10.2017, 19:19
У Вас, простите, какое-то искривленное понятие о безопасности. И исходя из неверных предпосылок Вы строите какую-то совершенно вывернутую логику. Простым пользователям явно запрещено
Цитата Сообщение от Dimofey Посмотреть сообщение
любое изменение дальше каталога ./home
поэтому и «журналировать» нечего, за исключением того что ВСЕ системные действия журналируются по умолчанию.
Цитата Сообщение от Dimofey Посмотреть сообщение
перед вводом пароля какой-то ручной генерации RSA и передачу в через него шифрованных паролей
Что за бред? Системы связываются асинхронными RSA-ключами что обеспечивает безопасное соединение без ввода логин/пароля.
Думаю проблема заключается в том, что при отсутствии знаний по вопросу, Вы пытаетесь изобрести свой собственный велосипед, который совершенно не вяжется с логикой системы…
0
1 / 1 / 1
Регистрация: 16.12.2013
Сообщений: 108
15.10.2017, 19:37  [ТС]
Marinero, возможно я где-то не прав, я может потом дополнительно спрошу или почитаю литературу по безопасности и т.д. Пока мой вопрос значительно скромнее, я просто хочу чтоб моя программа могла как любой эмулятор терминала не выдавать ввод/вывод программе, которая вызвала мою программу (скрин для пример был). Получится и будет ли это эффективно на практике ещё посмотрю. В крайнем случае, если я захочу написать собственный эмулятор терминала "DimofeyTerm", то эта информация однозначно пригодится
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
15.10.2017, 20:03
Цитата Сообщение от Dimofey Посмотреть сообщение
не выдавать ввод/вывод
Ответ был дан
Цитата Сообщение от Marinero Посмотреть сообщение
перенаправляете 1>, но и stderr (вывод ошибок), который перенаправляется 2>. Или все вместе &>
0
7 / 6 / 4
Регистрация: 21.05.2017
Сообщений: 60
15.10.2017, 20:32
Цитата Сообщение от Dimofey Посмотреть сообщение
Marinero, я имею ввиду, что если мою программу запустить на "чужом" компьютере, с неизвестными мне возможностями к прослушке
То в любом случае все ваши данные будут перехвачены так или иначе.

Уважаемый, если машина скомпрометирована значит всё. Крышка. Ничего туда вводить нельзя. И никакие программные методы вам не помогут. Элементарно ставится кейлоггер хардварный между клавой и системником. Это самое простое. Да и программно вы тоже никак не проверите. Есть методы подстраховаться но это из области ИБ, здесь баш вообще непричём.
Цитата Сообщение от Dimofey Посмотреть сообщение
//плохая строчка,её хочу убрать
пробел поставьте

Dimofey чтобы следов не оставлять за собой есть целые утилиты хакерские.
Цитата Сообщение от Dimofey Посмотреть сообщение
я просто хочу чтоб моя программа могла как любой эмулятор терминала не выдавать ввод/вывод программе
не знаю что вы хотите - перенаправляйте весь вывод ошибок и стандартный в /dev/null, вводя данные ставьте пробелы чтоб не шло в историю. или вообще затрите историю с помощью srm например а ещё своп...
может это вам придаст спокойствия

Хотя как по мне такой фрагментарный подход к безопасности, не имеющий целостной логики - смысла не имеет.
0
1 / 1 / 1
Регистрация: 16.12.2013
Сообщений: 108
15.10.2017, 22:53  [ТС]
Marinero, Ну вот я так и сделал, ничего не работает, вот даже тестовый код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- coding: utf-8 -*-
from Tkinter import *
import ttk
import subprocess
import os.path
import os
 
def closeWindow():
    root.destroy()
def _callOsProcess():
    _command='echo myPassword | sudo -S touch /etc/atest.file &> log.txt'
    pipe=subprocess.PIPE
    result=subprocess.Popen(_command, shell=True, stdin=pipe, stdout=pipe)
    result.wait()
    return  result.communicate()[0]
    
root = Tk()
root.title(u'Защищаем ввод/вывод')
root.geometry("760x390+200+100")
root.resizable(False, False)
root.protocol('WM_DELETE_WINDOW', lambda : closeWindow())
add_repository = Button(root, text=u'Вызвать команду', width=19, command=_callOsProcess)
add_repository.place(x=10, y=10)
root.mainloop()
ниже скрин с результатом, ничего не убралось
Миниатюры
Полное перенаправление ввода-вывода  
0
1 / 1 / 1
Регистрация: 16.12.2013
Сообщений: 108
15.10.2017, 23:02  [ТС]
Hermod,
Цитата Сообщение от Hermod Посмотреть сообщение
То в любом случае все ваши данные будут перехвачены так или иначе.
Уважаемый, если машина скомпрометирована значит всё. Крышка. Ничего туда вводить нельзя. И никакие программные методы вам не помогут. Элементарно ставится кейлоггер хардварный между клавой и системником. Это самое простое. Да и программно вы тоже никак не проверите. Есть методы подстраховаться но это из области ИБ, здесь баш вообще непричём.
Я знаю несколько способов, чтоб даже прилюдно введённые пароли нельзя было повторить. С этим я сам справлюсь, вопрос был изначально в другом.
Цитата Сообщение от Hermod Посмотреть сообщение
Сообщение от Dimofey
//плохая строчка,её хочу убрать
пробел поставьте
Dimofey чтобы следов не оставлять за собой есть целые утилиты хакерские.
Возможно, но устранение этой, по идее элементарной проблемы избавляет от лишних телодвижений и риском почистить не все следы.
Цитата Сообщение от Hermod Посмотреть сообщение
не знаю что вы хотите - перенаправляйте весь вывод ошибок и стандартный в /dev/null
Вот, буквально чуть выше кинул скрин и код, не сработало!
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
16.10.2017, 00:02
Лучший ответ Сообщение было отмечено Dimofey как решение

Решение

Знаете, первый раз задумался как прокомментировать… То ли просто послать по известному адресу… Это как: распрашивать про строительство корабля, а потом построить самолет и возмущаться что он плохо плывет… Номально вопросы задавать про bash, а зафигачить код на python?
И кроме всего
Цитата Сообщение от Dimofey Посмотреть сообщение
stdin=pipe, stdout=pipe
ни на какие мысли не натолкнуло? Подсказываю
Цитата Сообщение от Marinero Посмотреть сообщение
не только stdout (стандартный вывод), который Вы перенаправляете
Добавлено через 4 минуты
И еще раз спрашиваю, если надо питоновый скрипт выполнять с повышенными привелегиями почему не поставить безпарольный доступ к нему через sudoers?
1
1 / 1 / 1
Регистрация: 16.12.2013
Сообщений: 108
16.10.2017, 04:30  [ТС]
Marinero,
Цитата Сообщение от Marinero Посмотреть сообщение
Сообщение от Dimofey
stdin=pipe, stdout=pipe
ни на какие мысли не натолкнуло? Подсказываю
Спасибо, намёк понял. там stderr.
Цитата Сообщение от Marinero Посмотреть сообщение
Номально вопросы задавать про bash, а зафигачить код на python?
Вообще ничего на питоне не собирался делать. Честно. Просто на моём компе это был самый быстрый способ сделать приложение с кнопкой. Lazarus поломан, плюсы долго на графику настраивать. До последнего делал всё напрямую в bash. Там до сих пор не работает, но ладно, в питоне работает уже хорошо.
Цитата Сообщение от Marinero Посмотреть сообщение
И еще раз спрашиваю, если надо питоновый скрипт выполнять с повышенными привелегиями почему не поставить безпарольный доступ к нему через sudoers?
Это не во всех задачах проканает...
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
16.10.2017, 09:31
Цитата Сообщение от Dimofey Посмотреть сообщение
Это не во всех задачах
На будущее: начинайте лучше с самой задачи. Потому что определив неверно путь её достижения и распрашивая о его реализации Вы только усложняете положение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2017, 09:31
Помогаю со студенческими работами здесь

Перенаправление ввода в скрипт
Есть скрипт, который переданные ему аргументы записывает в файлы. Создал файл t с примерно следующем содержанием: Перенаправляю...

Как работает перенаправление вывода в файл?
Объясните пожалуйста действия команд Echo 0&gt;text.txt и Echo 1&gt;text.txt первая делает файл пустым а вторая пустую строку в файле.......

FreeBSD, перенаправление вывода команды в файл
Пробую вывести результат команды в файл,выводит вместо файла в консоль,в чем проблема? tunefs -p da1s1&gt;&gt;myFile

Как создать текстовый файл, используя перенаправление вывода?
Подскажите пожалуйста, как в командной строке Linux в новом каталоге обpазовать текстовый файл с помощью пеpенапpавления стандаpтного...

Перенаправление ввода/вывода
Здравствуйте, все! Есть несколько exe-файлов, которые надо прогнать через ряд тестов (дети писали олимпиаду). Думал, что напишу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru