Если вам не нужна настоящая chroot-тюрьма, вам придется изолировать сеансы пользователя в отдельное пространство имен монтирования , а затем смонтировать/var/test
привязку к /root
внутри только это пространство имен. Для этого потребуется настроить создание сеанса пользователя. Возможно, это может сделать пользовательская библиотека PAM?
(Реализация оставлена читателю в качестве упражнения. :На самом деле я не знаю никаких готовых -инструментов, пригодных для реализации этого, поэтому для этого может потребоваться программирование пользовательской библиотеки PAM. Тем не менее, технология контейнеризации привела к быстрому развитию пространств имен Linux -. Возможно, на самом деле уже реализовано что-то полезное для этого, но я просто не знаю об этом?)
Однако:если бы я столкнулся с системой, в которой не -root-пользователь, такой как test123
, имел права на запись в /root
, не говоря уже о том, что он был домашним каталогом, я бы немедленно предположил, что это какая-то хитрость, поскольку это было бы крайне ненормальной и небезопасной конфигурацией, если бы она была реальной.Если бы я заметил это и не имел доступа root, я бы попытался уведомить фактического системного администратора как можно скорее. Если бы я был системным администратором и у меня не было другого объяснения, я бы настоятельно предпочел отключить эту систему от сети (, сначала сделав криминалистические дампы памяти, если это возможно ), выключив ее и забрав ее диск (s )на другой компьютер для анализа, что побочным эффектом опровергнет ваш обман.
Таким образом, я действительно не вижу, что можно было бы достижимо с этой установкой -, кроме упражнения в диагностике и криминалистике.
В 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:]]
Попробуйте это,
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
запись