Monthly Archives: October 2008

Handling Filenames with Spaces in Bash

http://www.macgeekery.com/tips/cli/handling_filenames_with_spaces_in_bash

If you set IFS to $’n’ then it will only split on newlines, not spaces. And you can enclose the entire thing in a subshell using ( foo ) to scope IFS to just that for loop.

Example:

(
IFS=$’n’
for file in $files
do
echo “$file” rocks.
done
)

wget download manager script

http://www.mtdev.com/2002/05/linux-wget

#!/usr/local/bin/bash

cd /shared/archive/downloads/
PATH=/bin:/usr/bin

line=1
max_proc=5
list_file=”/shared/archive/downloads/todo.txt”
prog=”/usr/local/bin/wget”

while true
do
while true
do
proc=`ps -f -U $USER | grep -c $prog`
# grep is in the list too
let proc–

lines=`grep -c “” $list_file`
echo “Proc: $proc / $max_proc Line: $line / $lines”

[[ $proc -ge $max_proc || $line -gt $lines ]] && break

params=`grep -n “” $list_file | grep “^$line:” | sed -e “s/^$line://”`
echo $params | tee -a done.txt archive.txt

# ignore empty lines
if [ “$params” ]; then
$prog -b $params
sleep 3
fi
let line++
done

echo “Waiting…”
sleep 10
done

Некоторые полезные sysctl переменные для FreeBSD

security.bsd.* – управление моделью безопасности

* security.bsd.see_other_uids, security.bsd.see_other_gids – если 1, то пользователи (группы) могут видеть чужие процессы, сокеты и т.д. через ps, netstat, procfs;
* security.bsd.conservative_signals – если 1, то некоторые сигналы запрещается посылать setuid/setgid процессам;
* security.bsd.unprivileged_proc_debug – если 1, то пользовательский процесс можно отлаживать через ptrace, procfs, ktrace и т.д..
* security.bsd.unprivileged_read_msgbuf – если 1, то пользовательский процесс может читать из системного консольного буфера сообщений;
* security.bsd.hardlink_check_uid, security.bsd.hardlink_check_gid – если 1, то пользователи могут делать hardlink только на собственные файлы;
* security.bsd.unprivileged_get_quota – если 1, пользователи могут просматривать информацию по установленным для них квотам.
* vfs.usermount – если 1, то непривилегированный пользователь может монтировать и размонтировать FS, если для устройства выставлены “rw” права и пользователь является владельцем точки монтирования;

security.jail.* – ограничения для jail

* security.jail.set_hostname_allowed – если 1, то внутри jail можно поменять имя хоста;
* security.jail.socket_unixiproute_only – если 1 , то сокет в jail можно создать только для доменов PF_LOCAL, PF_INET или PF_ROUTE, иначе, возвращается ошибка;
* security.jail.sysvipc_allowed – если 1, то то в jail можно получить доступ к глобальному System V IPC;
* security.jail.getfsstatroot_only – если 1, то в jail можно получить информацию (df)только о той файловой системе на которой создан jail;
* security.jail.allow_raw_sockets – если 1, то в jail можно создавать raw sockets;
* security.jail.chflags_allow – если 1, то процессы в jail могут модифицировать флаги ФС.

IPFW

* net.link.ether.bridge_ipfw – если 1 и ядро собрано с опциями IPFIREWALL и BRIDGE, то позволяет использовать ipfw для трафика внутри бриджа;
* net.link.ether.ipfw – если 1, то ipfw2 позволяет фильтровать по MAC адресам;
* net.inet.ip.fw.autoinc_step – задается число на которое увеличивается счетчик при добавления нового ipfw правила, когда явно не указан его номер;
* net.inet.ip.fw.debug – если 1, то в логи помещается дополнительная отладочная информация по работе ipfw;
* net.inet.ip.fw.verbose – если 0, то не отображать работу “log” правил в syslog;
* net.inet.ip.fw.one_pass – если 1, то просмотр правил ipfw прекращается сразу после подпадание под queue или pipe правило. Если 0, то продолжается обработка далее идущих правил;

ICMP, соединение.

* net.inet.icmp.icmplim – задается максимальное число ICMP “Unreachable” и TCP RST пакетов, которое может быть отправлено в секунду, net.inet.icmp.icmplim_output=0 позволяет не отражать в логах факты превышения лимита;
* net.inet.tcp.icmp_may_rst, если 1, то TCP соединения со статусом SYN_SENT, могут быть оборваны посредством сообщения “ICMP unreachable”;
* net.inet.ip.redirect – если 0, то нет реакции на ICMP REDIRECT пакеты;
* net.inet.icmp.log_redirect – если 1, то все ICMP REDIRECT пакеты отражаются в логе;
* net.inet.icmp.drop_redirect – если 1, то ICMP REDIRECT пакеты игнорируются;
* net.inet.tcp.icmp_may_rst – если 1, то игнорируются ICMP сообщения от блокировки пакета по пути;
* net.inet.icmp.bmcastecho – для защиты от SMURF атак (ICMP echo request на broadcast адрес) нудно поставить 0;

Тюнинг сетевой подсистемы, борьба с DoS атаками

* net.inet.tcp.log_in_vain, net.inet.udp.log_in_vain – если 1, отражаем в логе попытки соединения к портам, для которых нет активных сервисов;
* net.inet.tcp.blackhole – если 1, то SYN пакеты пришедшие на порты для которых нет активных сервисов, остаются без RST ответа, если 2, то на любые пакеты нет ответа (затрудняет сканирования портов);
* kern.ipc.nmbclusters – если по “netstat -m” mbufs в “peak” приближается к “max”, то число сетевых буферов нужно увеличить (kern.ipc.nmbclusters=N в /boot/locader.conf);
* net.inet.ip.forwarding – если 1, то машина может форвадить пакеты между интерфейсами;
* net.inet.tcp.sack.enable – если 1, то включен TCP Selective Acknowledgements (SACK, RFC 2018) позволяющий увеличить производительность системы в ситуации большой потери пакетов;
* net.link.ether.inet.max_age – время жизни записи в IP route кэше, рекомендуется уменьшить для ослабления эффекта от DoS атак через ARP флуд;

Оборудование и системная информация

* dev.cpu.0.freq_levels – выдает список поддерживаемых частот, на которые можно переключить CPU, путем указание нужной частоты через dev.cpu.0.freq;
* hw.snd.maxautovchans, hw.snd.pcm0.vchans – задается число виртуальных звуковых каналов, для каждого из которых может быть отдельный источник звука (на выходе они будут смикшированы);
* kern.boottime – время последней загрузки системы;
* kern.disks – список дисков в системе;
* kern.geom.debugflags, для работы boot0cfg и подобных утилит нужно установить в 16;

Изменение и тюнинг системных ограничений

* kern.coredump – если 0, то при крахе приложения не будут создаваться core файлы, формат имени и путь для которых задается через kern.corefile (например: /tmp/%U.%N.core). kern.sugid_coredump=0 позволяет запретить генерацию core suid/sgid процесс

Таблица сетевых масок. ( cheat-sheet:) )

IV. Таблица сетевых масок. Bit Boundary Chart
Historically, IP addresses have been assigned in the form of network numbers of class A, B, or C. With the introduction of CIDR (Classless Inter-Domain Routing) classful restrictions are no longer valid. Address space is now allocated and assigned on bit boundaries. The following table illustrates this:

+———————————————-+
|addrs bits pref mask |
+———————————————-+
| 1 0 /32 255.255.255.255 |
| 2 1 /31 255.255.255.254 |
| 4 2 /30 255.255.255.252 |
| 8 3 /29 255.255.255.248 |
| 16 4 /28 255.255.255.240 |
| 32 5 /27 255.255.255.224 |
| 64 6 /26 255.255.255.192 |
| 128 7 /25 255.255.255.128 |
| 256 8 /24 255.255.255 |
| 512 9 /23 255.255.254 |
| 1K 10 /22 255.255.252 |
| 2K 11 /21 255.255.248 |
| 4K 12 /20 255.255.240 |
| 8K 13 /19 255.255.224 |
| 16K 14 /18 255.255.192 |
| 32K 15 /17 255.255.128 |
| 64K 16 /16 255.255 |
| 128K 17 /15 255.254 |
| 256K 18 /14 255.252 |
| 512K 19 /13 255.248 |
| 1M 20 /12 255.240 |
| 2M 21 /11 255.224 |
| 4M 22 /10 255.192 |
| 8M 23 /9 255.128 |
| 16M 24 /8 255 |
| 32M 25 /7 254 |
| 64M 26 /6 252 |
| 128M 27 /5 248 |
| 256M 28 /4 240 |
| 512M 29 /3 224 |
|1024M 30 /2 192 |