Как администратор системы может запретить себе доступ к файлу на 24 часа?

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

aq() { sh -c 'for a do
       alias "$((i=$i+1))=$a"
       done; alias' -- "$@"
}

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

Здесь это с несколькими аргументами:

aq \
"here's an
ugly one" \
"this one is \$PATHpretty bad, too" \
'this one```****```; totally sucks'

OUTPUT

1='here'"'"'s an
ugly one'
2='this one is $PATHpretty bad, too'
3='this one```****```; totally sucks'

Этот выход из тире , который, как правило, безопасно кавычки в одной кавычке, как '«'» '. bash будет выполнять '\" .

В любой оболочке POSIX с $ IFS и $ * можно быстрее всего заменить набор байтов, отличных от пустых и пустых.

set -f; IFS=\"\'\`; set -- $var; printf %s "$*"

OUTPUT

"some ""crazy """"""""string ""here

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

var="$*"

..., а не printf команда $ var значение будет то, что вы видите на выходе там.

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

#!/usr/bin/sh -f

И затем явно включить глоббинг с установить + f на любой линии, которую я мог бы захотеть.

Разделение полей выполняется на основе символов в $ IFS .

Существует два вида значений $ IFS - $ IFS пробел и $ IFS пробел. $ IFS пробел (космос, табуляция, новая строка) разделенные поля определяются как разделяемые последовательностью на одно поле (или вообще отсутствуют, если они не предшествуют чему-либо другому) - так что...

IFS=\ ; var='      '; printf '<%s>' $var
<>

Но все остальные указаны для вычисления одного поля для каждого вхождения - они не усечены.

IFS=/; var='/////'; printf '<%s>' $var
<><><><><>

Все расширения переменных по умолчанию представляют собой массивы данных с разделителями $ IFS - они разделены на отдельные поля в соответствии с $ IFS . Когда вы " - цитируете одно из них, вы переопределяете это свойство массива и оцениваете его как один ряд.

Так что, когда я это делаю...

IFS=\"\'\`; set -- $var

Я настройкой массив аргументов оболочки к множеству полей $ IFS , разделенных расширением $ var . При расширении его составляющих значений для символов, содержащихся в $ IFS , теряется - теперь они являются только разделителями полей - \0NUL .

«$ *» - как и другие переменные расширения с двойными кавычками - также переопределяет качества разделения поля $ IFS . Но, в дополнение ,он заменяет первый байт в $ IFS для каждого разделенного поля в «$ @» . Так как « было первым значением в $ IFS все последующие разделители становятся » в «$ *» . И " не обязательно находиться в $ IFS при разделении. Можно полностью изменить $ IFS после наборов -- $ args на другое значение, и его новый первый байт появится для разделителей полей в «$ *» . Более того, вы можете удалить все следы их полностью как:

set -- $var; IFS=; printf %s "$*"

OUTPUT

some crazy string here
-121--24039-

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

getopt -aql 'Dapp.name:' $(\
    ps -af -u sas | grep java | grep -v grep | tr -s ' ' | cut -d' ' -f8-\
) | cut -d"'" -f2
  1. ваша команда: пикосекунда - AF-u SAS | grep Ява | grep-v grep
  2. tr-s '' «сжимает» несколько мест в одинарный интервал при подготовке к , сокращается
  3. , сокращается,-d' '-f8- разделяет линию местами и захватывает все поля после того, как 8 содержащих, результат /usr/lib/jvm/java-1.7.0-oracle-1.7.0.25.x86_64/jre/bin/java-denv=dev-dapp.name=myapp-xms512m-xmx1g-dlog.dir =/apps/java/logs
  4. getopts-aql 'Dapp.name:$ (...) анализирует параметры команды и выводит только длинное имя, соответствующее Dapp.name , которое имеет значение (обозначается как :), результатом является --Dapp.name 'myApp' --
  5. cut -d «'» -f2 захватов материал в одиночных кавычках
  6. Результат: myApp
-121--39436-

Каждый раз, когда вы используете ps... | grep... и должны исключить grep из результатов, вы делаете это неправильно.

Нулевое правило анализа выходных данных ps заключается в использовании более надежных инструментов, таких как pgrep , если они доступны. Если имеется pgrep, то pgrep -f java перечисляет все процессы, выполняющие команду java . Параметр -l добавляет командную строку для каждого процесса.

Для извлечения аргумента -Dapp.name можно использовать sed. Сопоставьте всю линию, организуйте ввод интересной части в группе и распечатайте эту группу.

pgrep -lf java | sed -n 's/^.*-Dapp\.name=\([^ ]*\).*$/\1/p'

Первое правило анализа выходных данных ps заключается в использовании опции -o для выбора необходимых полей. Здесь вас интересуют только аргументы команды, поэтому напечатайте только это.

ps -e -o args= | sed -n 's/^.*-Dapp\.name=\([^ ]*\).*$/\1/p'
0
04.09.2015, 02:05
3 ответа

Я думаю, что, если возможно, это должно включать шифрование - для root ничего не запрещается (ни доступ к памяти, ни доступ к диску на любом уровне, ни возможность возиться с часами, чтобы они выглядели так, как будто время прошло, когда это не так).

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

Решение 1. Самое простое / самое надежное решение: Зашифруйте файл, поместите ключ / пароль на сервер в Интернете, который не выдаст его до указанного времени.

Решение 2: модуль ядра может скрывать файл; также потребуется заблокировать доступ к памяти, диску, и администратору также необходимо заблокировать физический доступ (чтобы предотвратить их перезагрузку на флэш-накопитель).

Решение 3: буквально так, как вы это сформулировали: Перезаписать данные. У администратора не будет доступа к нему в течение следующих 24 часов (или в любое время после этого, если на то пошло). Не перемещает и не переименовывает его

4
28.01.2020, 02:15
  1. Измерьте вычислительную мощность компьютера
  2. Вычислите длину асимметричного ключа шифрования, необходимую для того, чтобы компьютер мог более или менее 24 часов
  3. Найдите способ найти число, которое удовлетворяет свойству открытого ключа, не зная закрытого ключа (или, что еще хуже, сгенерируйте пару ключей, а затем выбросьте закрытые части)
  4. Зашифруйте файл, который вы хотите скрыть с помощью открытого ключа
  5. Начать перебор файла

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

1
28.01.2020, 02:15

Ограничьте их учетную запись root с помощью SELinux (например, semanage user ... ) и установите политику, запрещающую доступ к файлу для назначенного пользователя SELinux. Затем через cron снова снимите ограничения с их аккаунта. Без шифрования, просто, у них будет учетная запись root, но они не смогут ничего делать с файлом.

1
28.01.2020, 02:15

Теги

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