фильтрация строк на основе набора слов в определенном столбце

Если вам не нужна настоящая chroot-тюрьма, вам придется изолировать сеансы пользователя в отдельное пространство имен монтирования , а затем смонтировать/var/testпривязку к /rootвнутри только это пространство имен. Для этого потребуется настроить создание сеанса пользователя. Возможно, это может сделать пользовательская библиотека PAM?

(Реализация оставлена ​​читателю в качестве упражнения. :На самом деле я не знаю никаких готовых -инструментов, пригодных для реализации этого, поэтому для этого может потребоваться программирование пользовательской библиотеки PAM. Тем не менее, технология контейнеризации привела к быстрому развитию пространств имен Linux -. Возможно, на самом деле уже реализовано что-то полезное для этого, но я просто не знаю об этом?)

Однако:если бы я столкнулся с системой, в которой не -root-пользователь, такой как test123, имел права на запись в /root, не говоря уже о том, что он был домашним каталогом, я бы немедленно предположил, что это какая-то хитрость, поскольку это было бы крайне ненормальной и небезопасной конфигурацией, если бы она была реальной.Если бы я заметил это и не имел доступа root, я бы попытался уведомить фактического системного администратора как можно скорее. Если бы я был системным администратором и у меня не было другого объяснения, я бы настоятельно предпочел отключить эту систему от сети (, сначала сделав криминалистические дампы памяти, если это возможно ), выключив ее и забрав ее диск (s )на другой компьютер для анализа, что побочным эффектом опровергнет ваш обман.

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

4
19.06.2020, 10:29
2 ответа

В GNU awk, gensubможно было использовать для удаления всех этих слов, напечатать, если пусто:

awk -F, -v OFS=, 'gensub(/last|lst|name|nm|[0-9_-]*/,"","g",tolower($1))=="" {
    $2="found";
    print $1, $2
}' file

В отличие от sub/ gsub, gensubоставляет исходную запись нетронутой и вместо этого возвращает результирующую строку. Тот же подход можно использовать со стандартом awkпутем копирования поля в переменную.

Чтобы включить больше символов, чем [0-9_-], вы можете использовать [^[:alpha:]](, т.е.anything that isn't a letter):

last|lst|name|nm|[^[:alpha:]]
6
18.03.2021, 23:26

Попробуйте это,

awk -F, -v OFS=, '
{
split($1,w,/[^[:alnum:]]/);
for (i in w) {
    if (!(match(tolower(w[i]),/\<([0-9]*|last|nm|name|lastnm|lastname)\>/))) next;
}
$2="Found"; print; 
}' file

Выход:

LastNm,Found
last_nm,Found
4-LastNm,Found

Пояснение:

  • splitполе $1всех не([^.])буквенно-цифровых([:alnum:])символов для получения списка слов.
  • forцикл по этим словам.
  • если слово не соответствует заданному регулярному выражению, содержащему разрешенные слова, перейти к nextзаписи.
  • если этого не произошло, мы можем окончательно присвоить $2="Found"и printзапись
4
18.03.2021, 23:26

Теги

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