Скройтесь вывод оболочки управляют только на успехе?

Любой базе данных, названной тестом или чье имя снабжается префиксом тест, предоставили бы, полный доступ предоставил его для анонимных учетных записей. Согласно Учебнику Сертификации MySQL 5.0 (ISBN 0-672-32812-7), страница 498 рекомендует удаление анонимных учетных записей и тестовой базы данных.

Начиная с той записи MySQL 5.1 имеет mysql.db, заполненный с теми двумя строками. Я не видел, что это зарегистрировало где угодно. Просто выполненный

DELETE FROM mysql.db;
FLUSH PRIVILEGES;
DROP DATABASE test;

и все Ваши заботы закончатся!!!

Воздержитесь от именования любого тестового теста баз данных или test_ <что-либо>

ОБНОВЛЕНИЕ

Нормально совершенно иметь ясный mysql.db, особенно с тестовыми базами данных. MySQL включал тест и тест _ % в mysql.db по умолчанию со всеми полномочиями. Анонимные логины могли поэтому получить доступ к любой тестовой базе данных. Просто дисковое нападение могло повредить mysql установку. Вот пример:

USE test
CREATE TABLE rolando_tb (a int);
INSERT INTO rolando_tb VALUES (1);
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;

Выполненный вставляют 30 раз, и Вы получаете таблицу 7GB

Предположите составлять несколько из этих таблиц в тестовой базе данных

Предположите создавать Хранимую процедуру в тестовой базе данных

Возможности бесконечны пока тест и тест _, % существует в mysql.db

Это не документируется. Это должно быть!!!

Это - действительно ошибка в документации в области безопасности Installtion. +1 для ловли этого!!!!!

12
задан 13 April 2017 в 15:14
6 ответов

Я бы установил функцию bash следующим образом:

function suppress { /bin/rm --force /tmp/suppress.out 2> /dev/null; ${1+"$@"} > /tmp/suppress.out 2>&1 || cat /tmp/suppress.out; /bin/rm /tmp/suppress.out; }

Затем вы могли бы просто запустить команду:

suppress foo -a bar
3
ответ дан 2 December 2019 в 21:35

Должно быть достаточно легко написать сценарий для этой цели.

Что-то вроде этого полностью непроверенного сценария.

OUTPUT=`tempfile`
program_we_want_to_capture &2>1 > $OUTPUT
[ $? -ne 0 ]; then
    cat $OUTPUT
    exit 1
fi
rm $OUTPUT

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

#!/bin/bash

the_command 2>&1 | awk '
BEGIN \
{
  # Initialize our error-detection flag.
  ErrorDetected = 0
}
# Following are regex that will simply skip all lines
# which are good and we never want to see
/ Added UserList source/ || \
/ Added User/ || \
/ init domainlist / || \
/ init iplist / || \
/ init urllist / || \
/ loading dbfile / || \
/^$/ {next} # Uninteresting message.  Skip it.

# Following are lines that we good and we always want to see
/ INFO: ready for requests / \
{
  print "  " $0 # Expected message we want to see.
  next
}

# any remaining lines are unexpected, and probably error messages.  These will be printed out and highlighted.
{
  print "->" $0 # Unexpected message.  Print it
  ErrorDetected=1
}

END \
{
  if (ErrorDetected == 1) {
    print "Unexpected messages (\"->\") detected in execution."
    exit 2
  }
}
'
exit $?
7
ответ дан 2 December 2019 в 21:35

Я не думаю, что есть чистый способ сделать это, единственное, что я могу придумать, это

  • Захватить вывод команды.
  • Проверьте возвращаемое значение команды и проверьте, не удалось ли она
    • отображают захваченный вывод.

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

5
ответ дан 2 December 2019 в 21:35

короткая позиция с чем-то вроде tehcommand &> / tmp / $$ || cat / tmp / $$

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

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

1
ответ дан 2 December 2019 в 21:35

Попробуйте так:

out=`command args...` || echo $out
1
ответ дан 2 December 2019 в 21:35

Не изобретайте велосипед. Это распространенная проблема, особенно с заданиями cron, поэтому были созданы хронические/хронические. Скорее всего, вы можете установить его из своего менеджера пакетов, и его использование так же просто, как это:

cronic noisy_command --param paramval

Он будет подавлять вывод, если шумная команда не имеет ненулевой статус выхода.

0
ответ дан 11 June 2021 в 02:24

Теги

Похожие вопросы