Я предполагаю, что пользователи 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 руководство для получения дополнительной информации).
Не анализируйте вывод 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 … {} +
который работает на команде как можно больше файлов в одном пакете.
Используйте basename
встроенный. Это работает как это:
$ basename "/abc/def/ghi.jkl"
ghi.jkl