Добавление пользователей SSH

Для того, чтобы быстро добавить пользователя на сервер, с возможностью sudo bash, нужно выполнить команду:

useradd -g root -p'$6$VXsVOZ06$WMZ9gdRR4Yj7GbLaq9iOpLvFdsTYFMA34B05RWnHk65lpr577swAVC.' sshuser1

Пароль можно взять из файла /etc/shadow
Удачного доступа!

Nginx rewrite: remove .html from URL with arguments

Если вам требуется удалять .html из вашего URL с помощью 301-го редиректа, можно выполнить следующую настройку в nginx:

# rewrite html extensions
rewrite ^(/.+)\.html$ $scheme://$host$1 permanent;

location / {
    ...
}

В результате, при открытии http://mydomain.ru/flag.html, у вас откроется http://mydomain.ru/flag

ASA 8.x : AnyConnect VPN доступ к ресурсам локальной сети

В данной статье речь пойдет о МЭ Cisco ASA, о том как можно сравнительно недорого и удобно организовать удаленный доступ в локальную сеть вашего офиса.

Почему же все-таки Cisco? Думаю этот вопрос не встанет у тех, кто хоть раз использовал оборудование данного вендора в своем бизнесе. Я не стану описывать преимущества или недостатки, это слишком личное, каждый видит по-своему. Мой выбор пал на Anyconnect VPN, как на самое оптимальное решение для удаленного подключения в корпоративную сеть, потому что VPN подключение устанавливается через HTTPS. На данный момент Anyconnect VPN поддерживает ОС Windows (иногда работает даже на Windows Server, хотя поддержка такового у циски явно не указана), Linux, MacOS.

Мы заказываем себе Cisco ASA5505 и покупаем лицензии Anyconnect Essential = 25 VPN подключений за 100$, что может быть доступнее из качественного оборудования? При чем, обратите внимание, что если у вас Cisco ASA 5510, то там вы получаете 250 VPN подключений за те же 100$, я думаю что это очень удобно!

Переходим к настройке:

Поиск больших файлов в linux

Один из вариантов быстро найти большие файлы, скажем размером больше 1GB:

find / -size +1G | awk '{system("ls -al "$1)}'

httpd dead but subsys locked

Если apache мертв и никак не поднимается:

httpd dead but pid file exists
+
httpd dead but subsys locked

Для запуска вручную можно сделать так:

rm -f /var/run/httpd.pid
ipcs -s | grep apache | perl -e 'while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}'
rm -f /var/lock/subsys/httpd
/etc/init.d/httpd restart

Cisco: логирование через rsyslog CentOS

Добавляем ключ «-x», чтобы rsyslog писал в логи IP адрес, а не имя железки:
/etc/sysconfig/rsyslog

+SYSLOGD_OPTIONS=-c 5 -x

Включаем логирование в файл (предпочтительнее добавлять через /etc/rsyslog.d/):
/etc/rsyslog.conf

# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514

<p># Provides TCP syslog reception
$ModLoad imtcp.so
$InputTCPServerRun 514

<p># Cisco ASA5510 FW01 Logging
:fromhost-ip,isequal, 172.28.28.194                  /var/log/cisco/cisco-asa5510.log

Перезагружаем rsyslog:

/etc/init.d/rsyslog restart

Включаем ротацию логов, с помощью logrotate:
/etc/logrotate.d/cisco-log

/var/log/cisco/*.log
{
daily
rotate 10
missingok
notifempty
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

dmesg: вывод времени событий в читаемом виде

Иногда в dmesg содержится очень полезная информация, только вот незадача, совсем непонятно в какое время происходили данные события, в этом нам поможет команда (в некоторых случаях время может быть отображено некорректно):

wget http://nagg.ru/wp-content/uploads/2013/01/dmesg.pl
chmod +x dmesg.pl
./dmesg.pl

Сам скрипт ниже:

#!/usr/bin/perl

use strict;
use warnings;

my @dmesg_new = ();
my $dmesg = "/bin/dmesg";
my @dmesg_old = `$dmesg`;
my $now = time();
my $uptime = `cat /proc/uptime | cut -d"." -f1`;
my $t_now = $now - $uptime;

sub format_time {
 my @time = localtime $_[0];
 $time[4]+=1;    # Adjust Month
 $time[5]+=1900;    # Adjust Year
 return sprintf '%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5];
}

foreach my $line ( @dmesg_old )
{
 chomp( $line );
 if( $line =~ m/\[\s*(\d+)\.(\d+)\](.*)/i )
 {
 # now - uptime + sekunden
 my $t_time = format_time( $t_now + $1 );
 push( @dmesg_new , "[$t_time] $3" );
 }
}

print join( "\n", @dmesg_new );
print "\n";

Теперь вывод выглядит так:

[Mon Dec 17 16:37:51 2012] pci 0000:00:1f.2: reg 10: [io  0xf0b0-0xf0b7]
[Mon Dec 17 16:37:51 2012] pci 0000:00:1f.2: reg 14: [io  0xf0a0-0xf0a3]
[Mon Dec 17 16:37:51 2012] pci 0000:00:1f.2: reg 18: [io  0xf090-0xf097]
[Mon Dec 17 16:37:51 2012] pci 0000:00:1f.2: reg 1c: [io  0xf080-0xf083]

Вариант №2, менее надежный – не всегда корректно отображает время dmesg:

dmesg|perl -pE '/\[\s*(\d+\.\d+)\]/; $t=scalar localtime time-$1/100; s/\[\s*(\d+\.\d+)\]/[$t]/;'

Какие процессы используют больше всего памяти и CPU

Выведем список ТОП 15 самых прожорливых до памяти Linux сервера процессов следующей командой:

ps -eo user,pcpu,pmem,pid,cmd | sort -r -n -k3 | head -15

Сортировка процессов по потребляемой памяти, довольно наглядно:

ps -eo rss,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | egrep -v 0.00

Выведем список ТОП 10 процессов, которые более всего нагружают CPU:

ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10

Еще один вариант просмотреть самых требовательных до процессора сервисов (процессов):

ps -eo pcpu,pid,user,args | sort -r -k1 | less

Mysql: обновление timezone

Чтобы проверить текущую временную зону, нужно выполнить команду:

SHOW VARIABLES LIKE '%zone%';
SELECT @@global.time_zone, @@session.time_zone;

Чтобы посмотреть текущее время сервера MySQL:

select current_timestamp();

Прописать в конфигурационном файле timezone можно следующим способом (в таком случае потребуется перезагрузка):

/etc/my.cnf

default-time-zone = "Europe/Moscow"

Можно поменять время и без перезагрузки, для этого сначала перенесем системные тайм зоны в MySQL следующим способом:

mysql_tzinfo_to_sql /usr/share/zoneinfo |mysql -u root mysql -p

Далее, мы уже можем обновить временную зону без появления ошибок типа:

ERROR 1298 (HY000): Unknown or incorrect time zone:

Выполним обновление time_zone:

SET GLOBAL time_zone = 'Europe/Moscow';
SET time_zone = 'Europe/Moscow';