Удалите пути наклонных черт/родителя из имен файлов в содержании CSS и JavaScript

Я предполагаю, что пользователи A и B используют ту же машину (машины) Linux, где Вы - администратор. (Это не абсолютно ясно из Вашего вопроса. Если A и B, имеют их собственные компьютеры, на которых они являются администраторами, это - совершенно другая проблема.)

Следующая команда предотвратит пользователя с uid 1234 от передающих пакетов в интерфейсе eth0:

iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP

Я рекомендую читать Ubuntu iptables руководство, чтобы получить основное знакомство с инструментом (и обратиться к странице справочника для усовершенствованных вещей как таблица искажения).

Пользователь все еще сможет выполнить ping (потому что это - корень setuid), но ничто еще. Пользователь все еще сможет соединиться с локальным прокси, если тот прокси был запущен другим пользователем.

Для удаления этого правила добавить -D к команде выше.

Для создания правила постоянным добавьте его к /etc/network/if-up.d/my-user-restrictions (сделайте это исполняемым началом сценария #!/bin/sh). Или используйте iptables-save (см. Ubuntu iptables руководство для получения дополнительной информации).

3
29.07.2015, 03:01
2 ответа

Не анализируйте вывод find тот путь. Это будет работать, если Ваши файлы не будут содержать специальных символов, но вызвать команду на файлы, найденные find, это легче и более устойчиво для создания find назовите команду:

find "$new_directory" -name '*.css' -o -name '*.js' -exec grep … {} +

Затем grep правильный инструмент не должен выполнять текстовую замену; это - только средство поиска. sed потоковый редактор, и его наиболее широко использованной функцией является regexp замена. Принятие GNU sed (такой, как найдено на Linux) и предположение, что regexp в основном корректен, т.е. что Вы хотите соответствовать всем последовательностям letter-or-digit-or-:._- сопровождаемый вероятно выглядящим расширением как имена файлов, вот a sed звоните в замену DIR1/DIR2/FILE.EXT FILE.EXT везде:

sed -e 's![/A-Za-z0-9:._-]*/\([A-Za-z0-9:._-]*\.\(png\|jpg\|gif\|tif\|css\)\)!!g'

Соединяя обе части, если Вы хотите сделать замены на месте, самый легкий путь состоит в том, чтобы использовать sed's GNU -i опция, которая делает просто это.

find "$directory" -name '*.css' -o -name '*.js' \
     -exec sed -e 's![/A-Za-z0-9:._-]*/\([A-Za-z0-9:._-]*\.\(png\|jpg\|gif\|tif\|css\)\)!!g' {} +

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

find "$old_directory" -name '*.css' -o -name '*.js' \
     -exec sh -c 'sed -e '\''s![/A-Za-z0-9:._-]*/\([A-Za-z0-9:._-]*\.\(png\|jpg\|gif\|tif\|css\)\)!!g'\' <"$0" >"/new/directory/$0"' {} \;

Отметьте использование '\'' помещать одинарную кавычку в единственно заключенном в кавычки отрывке оболочки. -exec … {} \; средства выполнить команду однажды на каждом файле, в отличие от -exec … {} + который работает на команде как можно больше файлов в одном пакете.

1
27.01.2020, 21:32

Используйте basename встроенный. Это работает как это:

$ basename "/abc/def/ghi.jkl"
ghi.jkl
0
27.01.2020, 21:32

Теги

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