Корневой каталог пользователя не существует. usermod
изменяет поле корневого каталога в /etc/passwd
но не создает каталог. Необходимо создать его вручную.
cp -a /etc/skel /link/to/directory # or mkdir /link/to/directory to create an empty home directory
chown ginny:ginnygroup /link/to/directory # where ginnygroup is ginny's primary group
chmod 755 /link/to/directory # or 711 or 700 or 751 or 750 as desired
Они служат той же цели (передайте данную env vars к команде). Однако несколько заметных различий:
A=B command
- это конструкция оболочки (Bourne / Posix / RC).
Например, вы можете сделать:
A=B find . -exec cmd '{}' +
или:
find . -exec env A=B cmd '{}' +
, но вы не можете сделать:
find . -exec A=B cmd '{}' +
, потому что Найти
, не вызывает оболочки для запуска этой команды.
С другой стороны, ENV
Быть внешней командой, вы не можете сделать:
f() { ...; }
env A=B f
или:
env A=B eval '...'
также:
A=B cmd
работает только с Env vars, которые действительны Shell имена переменных. Вам нужно ENV
Для любого другого имени Var Var:
env 'my var=foo' cmd...
Bash
сбрасывает переменную _
:
bash-4.3$ _=xxx env | grep '^_='
_=/usr/bin/env
bash-4.3$ env _=xxx env | grep '^_='
_=xxx
в ZSH
, ARGV0
и stty
имеют специальные значения в этом контексте:
STTY=-echo cat
Run Cat
с терминалом Echo
отключено. И:
ARGV0=foo cmd
работает CMD
с Foo
, как его ARGV [0]
.
Если вы не хотите, чтобы эта специальная обработка вы должны использовать ENV
.
Обратите внимание, что Sudo
поддерживает:
sudo A=B cmd
Он не использует оболочку или ENV
для этого. Это делает это сам по себе.
Он может пропускать переменные с любым именем, кроме тех, которые начинаются с -
.
Назначение - это конструкция оболочки, тогда как равный знак в аргументе env
не имеет особого значения для оболочки, поэтому A = $ B CMD
безопасен, тогда как A = "$ b" cmd
(или sudo a = "$ b" cmd
) требуют двойных кавычек.
Синтаксис A = B CMD
, поддерживаемый только в оболочках Bourne и RC
семейств (не
, хотя). В раковинах CSH
или рыбы
, например, для семей , вы должны прибегнуть к ENV
.
Решение было редактировать /etc/init.d/fail2ban.
Это начальный скрипт:
start() {
echo -n $"Starting fail2ban: "
ulimit -s 256
${FAIL2BAN} -x start > /dev/null
RETVAL=$?
if [ $RETVAL = 0 ]; then
touch ${lockfile}
echo_success
else
echo_failure
fi
echo
return $RETVAL
}
К сожалению, это только спасает меня 50 МБ
Если на вашей машине есть обычные sysvinit-скрипты, вы можете сделать это в /etc/init.d/fail2ban
(достаточно рано, т.е. до того, как дамон запустится).
Если ваша машина использует systemd, вы можете сделать это через fail2ban.service
. Например, вместо
ExecStart=/usr/bin/fail2ban-client -x start
do
ExecStart=/bin/sh -c 'ulimit -s 256; /usr/bin/fail2ban-client -x start'
Каталог /etc/default
никогда не используется ни на одном из дистрибутивов, работающих на базе Red Hat. Это Debian/Ubuntu-ism. Для Centos 7 вы можете посмотреть на пакеты, которые были установлены и которые относятся к fail2ban
следующим образом:
$ rpm -aq|grep fail
fail2ban-server-0.9-9.el7.noarch
fail2ban-sendmail-0.9-9.el7.noarch
fail2ban-firewalld-0.9-9.el7.noarch
fail2ban-systemd-0.9-9.el7.noarch
fail2ban-0.9-9.el7.noarch
В файле fail2ban-server
содержится файл службы для Systemd.
$ rpm -ql fail2ban-server-0.9-9.el7.noarch | grep systemd
/usr/lib/python2.7/site-packages/fail2ban/server/filtersystemd.py
/usr/lib/python2.7/site-packages/fail2ban/server/filtersystemd.pyc
/usr/lib/python2.7/site-packages/fail2ban/server/filtersystemd.pyo
/usr/lib/systemd/system/fail2ban.service
Содержимое Systemd service file:
$ more /usr/lib/systemd/system/fail2ban.service
[Unit]
Description=Fail2ban Service
After=syslog.target network.target firewalld.service
[Service]
Type=forking
ExecStart=/usr/bin/fail2ban-client -x start
ExecStop=/usr/bin/fail2ban-client stop
ExecReload=/usr/bin/fail2ban-client reload
PIDFile=/var/run/fail2ban/fail2ban.pid
Restart=always
[Install]
WantedBy=multi-user.target
Таким образом, можно добавить дополнительные опции к этому файлу, чтобы быстро и грязно подтвердить, что они работают.
Чтобы сделать их постоянными, я бы добавил опции более "официальным" способом, чтобы обновления пакета fail2ban
не перезаписывали изменения в этом файле. Это можно сделать, добавив специальную версию файла fail2ban.service
в этот каталог:
/etc/systemd/system/fail2ban.service
NOTE: Файл в этом каталоге, /etc/systemd/system
всегда перезаписывает файл по умолчанию .service
.
Однако, делая это таким образом, есть некоторые предостережения, одно из которых заключается в том, что если бы файл службы присутствовал здесь, когда fail2ban
должен был бы обновляться через yum
, это привело бы к тому, что служба была бы отключена, до тех пор, пока вы вручную не включите ее. Поэтому вместо этого можно переопределить фрагменты файла .service
, добавив их в этот каталог в разделе /etc
.
Для редактирования файла модуля, предоставляемого пакетом, можно создать каталог называемый, например, /etc/systemd/system/unit.d/ /etc/systemd/system/httpd.service.d/ и поместите туда *.conf файлы чтобы переопределить или добавить новые опции. systemd разберет эти *.conf файлы. и нанести их на оригинальное устройство. Например, если вы просто если вы хотите добавить дополнительную зависимость к устройству, вы можете создать следующий файл:
/etc/systemd/system/unit.d/customdependency.conf
[Единица измерения] Требуется=новая зависимость После=новая зависимость
В качестве другого примера, чтобы заменить директиву ExecStart на a единицу, не являющуюся типичной единицей, создайте следующий файл:
/etc/systemd/system/unit.d/customexec.conf
[Служба] ЭкзСтарт= команда ExecStart=new
, чтобы можно было создать каталог, /etc/systemd/system/fail2ban.service.d
и добавить в него файлы *.conf
с содержимым, подобным этому:
[Service]
ExecStart=
ExecStart=new command
Добавив туда свои опции.
Если вы пытаетесь установить ulimit
для конкретной службы, посмотрите страницу man для systemd.exec
.
LimitCPU=, LimitFSIZE=, LimitDATA=, LimitSTACK=, LimitCORE=, LimitRSS=,
LimitNOFILE=, LimitAS=, LimitNPROC=, LimitMEMLOCK=, LimitLOCKS=,
LimitSIGPENDING=, LimitMSGQUEUE=, LimitNICE=, LimitRTPRIO=, LimitRTTIME=
These settings control various resource limits for executed processes. See
setrlimit(2) for details. Use the string infinity to configure no limit
on a specific resource.
Поэтому простое добавление LimitSTACK=256
в файл настроек .conf
, который я описываю выше, должно дать вам тот же эффект, что и установка ulimit -s 256
.
Если вы посмотрите на man page setrlimit(2)
, вы увидите, как переключатель ulimit
выравнивается с системными ограничениями.
RLIMIT_STACK
The maximum size of the process stack, in bytes. Upon reaching
this limit, a SIGSEGV signal is generated. To handle this signal,
a process must employ an alternate signal stack (sigaltstack(2)).
Since Linux 2.6.23, this limit also determines the amount of space
used for the process's command-line arguments and environment
variables; for details, see execve(2).
Увысимит также влияет на детей процессы, включая программы электронной почты уведомления, такие как SendMail, которые могут не допускать такого предела Stacksize. Это в случае случая SendMail exim4, который, с использованием предлагаемого настраивания памяти будет SegFault вместо по электронной почте, как следует, когда включен «рецидивирующий» Jail.
Обычно я настраиваю что-то подобное вfail2ban.local
[Definition]
dbfile =
dbpurgeage = 0
Это заставляет fail2ban создавать новую базу данных sqlite (в памяти? )при каждом перезапуске, потому что происходит то, что постоянная база данных содержит все исходные строки журнала, которые были обработаны, и это обычно взрывается, когда машина подвергается атаке, до сотен МБ бесполезных журналов в базе данных sqlite.
Этот dbfile
, первоначально указывающий на /var/lib/fail2ban/fail2ban.sqlite3
, является постоянным, поэтому перезапуск fail2ban без необходимости перезагружает эти сотни МБ журналов из базы данных (без обработки )только для того, чтобы выяснить несколько различных IP-адресов из некоторых другие таблицы --разберитесь!