Рубрики
Блокнот

Права доступа к файлам и папкам

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

Если нужно изменить права для уже существующих файлов при помощи chmod:

 find /catalog -type f -print | xargs chmod 640 

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

Подобное проделаем и с каталогами, при этом, установим для пользователей группы права на исполнение, а для владельца на полный доступ:

 find /catalog -type d -print | xargs chmod 750 

И для вновь создаваемых файлов и папок будем устанавливать те же права. Для этого нужно отредактировать значение umask по-умолчанию. Создайте в корневой папке пользователя файл .bashrc и .profile (или отредактируйте существующий), пропишите в нём строку:

 umask 027 

P.S. Также может понадобиться добавление пользователя, от имени которого работает веб-сервер, в группу пользователя — владельца файлов. Например, adduser www-data somegroup.

Рубрики
Блокнот

Неправильное отображение цветов htop в putty

В старой версии putty 0.62 все цвета htop отображались, как следует. В последней версии 0.63 некоторые цвета не отображаются. Или отображаются, но только когда выделяешь процесс стрелочками на клавиатуре или мышкой. В общем, выглядит всё вот так:

Исправляется эта проблема довольно просто. Нужно выбрать пункт Colors в putty, в категории Indicate bolded text by changing выбрать пункт The colour, сохранить изменения глобально или для конкретного хоста.

После внесённых изменений на экране будет отображаться нормальный читаемый монитор процессов.

P.S. Как-то не особо заметил разницы для других приложений, может, просто подзабыл, но такая проблема актуальная только для htop. :/

Рубрики
Блокнот

Ошибка MySQL: [Warning] user entry root@

После установки сервера mysql в логе daemon.log появляется такая ошибка:

 Jul 24 15:29:08 srv mysqld: 140724 15:29:08 [Warning] 'user' entry 'root@example.com' ignored in --skip-name-resolve mode. Jul 24 15:29:08 srv mysqld: 140724 15:29:08 [Warning] 'proxies_priv' entry '@ root@example.com' ignored in --skip-name-resolve mode. 

Всему виной отключённый DNS резольвинг: определение доменного имени для ip-адресов подключённых к mysql серверу клиентов. Мне на сервере эта функция не нужна, поэтому отключена параметром skip-name-resolve в файле my.cnf.

Исправляется возникающая ошибка подобным образом. Подключаемся к mysql серверу и выбираем базу mysql.

mysql> use mysql;

Затем выбираем таблицу user.

mysql> select Host, User from user;

Отобразится результат, в котором будут видны пользователи и хосты, для которых доступна авторизация этих пользователей.

 +---------------------+------------------+ | Host                | User             | +---------------------+------------------+ | 127.0.0.1           | root             | | ::1                 | root             | | example.com         | root             | +---------------------+------------------+ 13 rows in set (0.00 sec) 

Затем выбираем следующую таблицу — proxies_priv.

mysql> select Host, User from proxies_priv;

Её содержимое будет примерно таким:

+---------------------+------+ | Host                | User | +---------------------+------+ | localhost           | root | | example.com         | root | +---------------------+------+ 2 rows in set (0.00 sec) 

Как видим, здесь есть «лишний» root с доступом для домена example.com. Также может быть указано и просто имя хоста, например, root@example. Именно этот пользователь вызывает ошибку. Удаляем его:

mysql> deluser 'root'@'example.com';

В довершение обновляем привилегии.

mysql> flush privileges;

Повторю, что этот способ подходит только если вам не нужны внешние подключения к серверу mysql от имени root. В остальных случаях следует включать резольвинг ДНС.

Рубрики
Блокнот

Как создать самоподписанный сертификат

Создание самоподписанного сертификата двумя командами. Может пригодиться для администрирования сайта по https, например.

1. Создаём ключ.

# openssl genrsa -out server.key 2048

2. Создаём сертификат. Домен example.com следует заменить на ваш.

# openssl req -new -x509 -key server.key -out server.crt -days 3650 -subj /CN=example.com
Рубрики
Блокнот

Перенос баз данных mysql в другую папку или раздел

В некоторых случаях бывает необходимо перенести базы данных mysql из каталога по-умолчанию (/var/lib/mysql) в другой каталог или даже на отдельный раздел. Например, для защиты баз данных от повреждения, в случае, если файловая система на основном разделе будет повреждена.

Тема создания новых разделов в этой заметке затронута не будет. Опишу лишь то, что необходимо сделать, когда раздел для нового размещения баз данных будет готов.

Первым делом нужно остановить сервер mysql.

# service mysql stop

Затем скопируйте содержимое /var/lib/mysql в новое местоназначение. К примеру, это будет раздел /databases.

# cp -pR /var/lib/mysql /databases

Ключ -p сохраняет исходные параметры файлов: владелец, группа, права доступа и т.д.

Ключ -R отвечает за рекурсивное копирование каталогов.

Завершающим действием будет редактирование конфигурационного файла mysql. Открываем файл /etc/my.cnf и находим переменную datadir. Её значение по-умолчанию:

datadir = /var/lib/mysql

Указываем новое местоположение баз данных:

datadir = /databases/mysql

Запускаем mysql командой service mysql start. Старый каталог можно удалить. Какие-либо ошибки можно найти в лог-файле /var/log/daemon.log, или в файле /var/log/syslog.

Рубрики
Блокнот

Как установить i386 библиотеки на системе amd64

Как здорово, что в Дебиан есть поддержка мультиархитектур. Допустим, какое-то приложение работает только на 32-двух разрядных системах, а на сервере установлена 64-х разрядная. Просто устанавливаем необходимые библиотеки для архитектуры i386 и дальше работаем с приложением.

Делается это так:

# dpkg --add-architecture i386  # aptitude update # aptitude install libc6:i386 

И далее, если понадобится пакет другой архитектуры, то нужно при установке указать требуемую архитектуру: aptitude install nginx:i386.

Рубрики
Блокнот

Примеры правил rewrite для nginx

Содержание статьи:

  • 1 Перенаправление на url со слэшем
  • 2 Rewrite для WordPress
  • 3 Rewrite для MODx
  • 4 301-й редирект с index.php, index.html в любой папке
  • 5 Прочие

Перенаправление на url со слэшем

У некоторых CMS для сайтов страницы могут открываться как со слэшем на конце, так и без, если движок сам не выполняет редирект. Например, страница http://example.net/page и http://example.net/page/ с точки зрения посетителя будет одной. Но для поисковиков это — две разные страницы, и во всём виноват слэш. Получается, дублирование контента, что плохо.

Для перенаправления на страницу со слэшем следует добавить в конфигурационный файл nginx для вашего сайта строку:

rewrite ^([^.]*[^/])$ $1/ permanent;

Теперь страница без слэша будет перенаправляться 301-м редиректом на страницу со слэшем. На страницы с расширениями (.html, .php и т.д.) данное правило не окажет влияние. К тому же, оно универсально и, чтобы движок не обрабатывал редиректы посредством php, это правило следует прописывать для большинства сайтов, где используются человеко-понятные адреса.

Rewrite для WordPress

В документации WordPress есть неплохой пример правил rewrite. Я лишь выделю самое основное, что требуется для работы в связке с php-fpm.

location / {   try_files $uri $uri/ /index.php$args;  }  location ~ .php$ {   try_files $uri =404;   fastcgi_pass unix:/run/php-www.sock;   fastcgi_index index.php;   include fastcgi_params;   fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;   fastcgi_param PHP_VALUE "sendmail_path=/usr/sbin/sendmail -t -i -fmail@example.com";   fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/example.com/:/var/save_path/:/var/tmp_dir/";  }

Rewrite для MODx

Для сайтов на этой CMS у меня используются следующие правила:

location / {   try_files $uri $uri/ @rewrite; } location @rewrite {   rewrite ^/(.*)$ /index.php?q=$1; } location ~ .php$ {  try_files $uri =404;  fastcgi_pass unix:/run/php-www.sock;  fastcgi_index index.php;  include fastcgi_params;  fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;  fastcgi_param PHP_VALUE "sendmail_path=/usr/sbin/sendmail -t -i -fmail@example.com";  fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/example.com/:/var/save_path/:/var/tmp_dir/"; }

301-й редирект с index.php, index.html в любой папке

Ещё бывает так, что CMS самостоятельно не перенаправляет с индексных файлов на url без них. Например, сайт становится доступен как по адресу http://example.com/ так и по http://example.com/index.php. Это правило исправляет ошибку.

if ($request_uri ~* index.(php|html)) {   rewrite ^(.+)index.php $scheme://$host$1 permanent; }

При этом, не важно, лежит индексный файл в корневой папке или во вложенной, редирект будет работать всегда.

Прочие

У одного своего блога решил изменить структуру ссылок. Если раньше все посты были доступны по ссылкам, типа /postname.html, то теперь они переехали на другой адрес: /fotojournal/postname/. Изначально в качестве решения подумал об использовании плагина redirection для wordpress, но потом захотелось попробовать реализовать на nginx. И задумка получилась. :)

Правда, правило получилось простым, благодаря тому, что все страницы /%postname%.html были перенесены в одну категорию — fotojournal. Это правило выглядит следующим образом:

location ~* .(html)$ {   try_files $uri $uri/ @fotojournal; }  location @fotojournal {   rewrite ^/(.*).html$ /fotojournal/$1/ permanent; } 

Рассматриваем детально. Когда поступает запрос от пользователя, сначала любой файл с расширением .html ищется в папке с сайтом. Это нужно для реально существующих html-страничек на сайте, которые не должны быть перенесены в новую категорию.

Если запрашиваемая страница не была найдена, запрос перенаправляется во второй location — @fotojournal. Здесь производится перенаправление (редирект 301) на новый адрес. Например, страница /page.html откроется по адресу /fotojournal/page/.

Рубрики
Блокнот

Как отключить InnoDB в MySQL

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

Открываем файл /etc/mysql/my.cnf и добавляем следующие строки:

innodb=OFF default-storage-engine = MyISAM

После чего сохраняем изменения и перезапускаем mysql сервер.

service mysql restart

Далее смотрим лог /var/log/syslog на наличие ошибок.

tail -200 /var/log/syslog | grep mysql

Ошибки ищем, подобно этой:

[Warning] Failed to load slave replication state from table mysql.gtid_slave_pos: 1286: Unknown storage engine 'InnoDB'

Если такие ошибки есть, то включаем InnoDB обратно. Заходим на mysql сервер, выбираем базу mysql> use mysql;, и меняем хранилище для неё на myisam mysql> ALTER TABLE `mysql.gtid_slave_pos` ENGINE=MyISAM;.

Аналогично поступаем со всеми. После изменения типа хранилища можно отключить innodb и снова перезапустить mysql.

Рубрики
Блокнот

Как удалить базу данных и пользователя mysql

Отказавшись от удобной панели для управления сервером, я столкнулся с необходимостью удаления баз и пользователей mysql. Ведь раньше-то делалось это через панельку, а — вручную.

Так вот, чтобы удалить базу данных и пользователя этой базы, нужно сначала подключиться к серверу mysql:

# mysql -uroot -pMyPassword

Затем удалить базу:

mysql> DROP DATABASE basename;

И удалить пользователя:

mysql> DROP USER 'username'@'localhost';

Вместо basename указать имя удаляемой базы данных.

Вместо username указать имя удаляемого пользователя. localhost, в некоторых случаях, может быть заменён доменным именем сервера, ip адресом.

Рубрики
Блокнот

Полезные флаги netstat

Буквально недавно узнал о некоторых полезных флагах netstat. До этого было лень разбираться с ней, читать мануал. :) Поэтому редко пользовался.

И так, вот список некоторых полезных, по моему усмотрению, флагов. Их можно указывать как раздельно, так и сгруппированно (-atunp), при запуске нетстат в консоли.

-t и -u флаги отвечают за отображение tcp и udp соединений соответственно. По-умолчанию нетстат отображает и tcp, и udp, и активные сокеты.

Флаг -n отключает определение доменных имён для ip-адресов. Например, если соединений очень много, то во избежание долгого ожидания ответов от медленных dns-серверов можно использовать этот флаг.

Запуск netstat с флагом -a отобразит все соединения, а не только активные.

А флажок -p отобразит имя программ, открывших соединения.