Я занимаюсь переустановкой ОС на машине, которая будет использоваться для размещения нескольких приложений для нашего бизнеса. Приложения будут только локальными; доступ от внешних клиентов будет только через VPN.
Предыдущая установка использовала панель управления хостингом (Plesk) для большей части администратора, и я рассматривал возможность использования другого аналогичного программного обеспечения для переустановки, но я решил, что наконец-то должен узнать, как все это работает. Я могу делать большую часть того, что могло бы сделать программное обеспечение для меня, но мне неясен симбиоз всего этого. Все это попытка еще больше дистанцироваться от страны Программист-конфигуратор / программист, если вообще возможно.
Я нигде не могу найти полное пошаговое руководство для того, что я ищу, поэтому я подумал, что поставлю этот вопрос, и если люди могут помочь мне в пути, я отредактирую его с ответами и задокументирую свой прогресс / подводные камни. Надеюсь, когда-нибудь это поможет кому-нибудь в будущем.
Добавить репозиторий IUS в наш менеджер пакетов
cd /tmp
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/epel-release-1-1.ius.el5.noarch.rpm
rpm -Uvh epel-release-1-1.ius.el5.noarch.rpm
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/ius-release-1-4.ius.el5.noarch.rpm
rpm -Uvh ius-release-1-4.ius.el5.noarch.rpm
yum list | grep -w \.ius\. # list all the packages in the IUS repository; use this to find PHP/MySQL version and libraries you want to install
Удалите старую версию PHP и установите новую версию из IUS
rpm -qa | grep php # to list all of the installed php packages we want to remove
yum shell # open an interactive yum shell
remove php-common php-mysql php-cli #remove installed PHP components
install php53 php53-mysql php53-cli php53-common #add packages you want
transaction solve #important!! checks for dependencies
transaction run #important!! does the actual installation of packages.
[control+d] #exit yum shell
php -v
PHP 5.3.2 (cli) (built: Apr 6 2010 18:13:45)
Обновите MySQL из репозитория IUS
/etc/init.d/mysqld stop
rpm -qa | grep mysql # to see installed mysql packages
yum shell
remove mysql mysql-server #remove installed MySQL components
install mysql51 mysql51-server mysql51-devel
transaction solve #important!! checks for dependencies
transaction run #important!! does the actual installation of packages.
[control+d] #exit yum shell
service mysqld start
mysql -v
Server version: 5.1.42-ius Distributed by The IUS Community Project
Инструкции по обновлению любезно предоставлены IUS wiki: http://wiki.iuscommunity.org/Doc/ClientUsageGuide.
scp
и sftp
доступ, без разрешения ssh
авторизоватьсяcd /tmp
wget http://dag.wieers.com/rpm/packages/rssh/rssh-2.3.2-1.2.el5.rf.x86_64.rpm
rpm -ivh rssh-2.3.2-1.2.el5.rf.x86_64.rpm
useradd -m -d /home/dev -s /usr/bin/rssh dev
passwd dev
редактировать /etc/rssh.conf
для предоставления доступа к SFTP пользователям rssh.
vi /etc/rssh.conf
Раскомментируйте или добавьте:
allowscp
allowsftp
Это позволяет мне подключаться к машине через протокол SFTP в Transmit (моя любимая программа FTP; я уверен, что она похожа на другие приложения FTP).
rssh инструкции, присвоенные (с признательностью!) от http://www.cyberciti.biz/tips/linux-unix-restrict-shell-access-with-rssh.html.
ifconfig eth1:1 192.168.1.3 up #start up the virtual interface
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth1 ifcfg-eth1:1 #copy default script and match name to our virtual interface
vi ifcfg-eth1:1 #modify eth1:1 script
# ifcfg-eth1: 1 | измените так, чтобы он выглядел так:
УСТРОЙСТВО = eth1: 1
IPADDR = 192.168.1.3
NETMASK = 255.255.255.0
СЕТЬ = 192.168.1.0
ONBOOT = да
ИМЯ = eth1: 1
При необходимости добавьте больше виртуальных интерфейсов, повторив. Из-за ONBOOT=yes
в файле ifcfg-eth1: 1, этот интерфейс будет запущен при загрузке системы или при запуске / перезапуске сети.
service network restart
Завершение работы интерфейса eth0: [OK]
Выключение интерфейса eth1: [OK]
Завершение работы интерфейса обратной петли: [OK]
Запуск интерфейса обратной связи: [OK]
Вызов интерфейса eth0: [OK]
Вызов интерфейса eth1: [OK]
ping 192.168.1.3
64 байта из 192.168.1.3: icmp_seq = 1 ttl = 64 time = 0.105 мс
В разделе rssh выше я добавил пользователя, который будет использовать SFTP. В домашнем каталоге этого пользователя я создал папку с названием «https». Здесь будут находиться документы для этого сайта, поэтому мне нужно добавить виртуальный хост, который будет указывать на него. Я буду использовать указанный выше виртуальный интерфейс для этого сайта (здесь он называется dev.site.local).
vi /etc/http/conf/httpd.conf
Добавьте в конец httpd.conf следующее:
<VirtualHost 192.168.1.3:80>
ServerAdmin dev@site.local
DocumentRoot /home/dev/https
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Я помещаю фиктивный файл index.html в каталог https, чтобы все проверить. Я попытался перейти к нему и был встречен с ошибками с отказом в разрешении. Журналы давали лишь непонятную ссылку на то, что происходило:
[Пн 17 мая, 14:57:11 2010] [ошибка] [клиент 192.168.1.100] (13) В доступе отказано: доступ к /index.html запрещен
Пробовал chmod 777 et. др., но безуспешно. Оказывается, мне нужно было выполнить команду chmod + x для каталога https и его родительских каталогов.
chmod +x /home
chmod +x /home/dev
chmod +x /home/dev/https
Это решило эту проблему.
Я обрабатываю DNS через наш локальный сервер Windows Server 2003. Однако документацию CentOS для BIND можно найти здесь: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html
Чтобы SSL работал, я изменил следующее в httpd.conf:
NameVirtualHost 192.168.1.3:443 #make sure this line is in httpd.conf
<VirtualHost 192.168.1.3:443> #change port to 443
ServerAdmin dev@site.local
DocumentRoot /home/dev/https
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
К сожалению, я продолжаю получать ошибки (код ошибки: ssl_error_rx_record_too_long) при попытке доступа к странице с помощью SSL. Как Джеймс Ханна изящно указано ниже, Я не устанавливал расположение сертификатов в httpd.conf и, таким образом, получал страницу, брошенную браузеру, как сертификат, заставляющий браузер блокироваться.
Итак, сначала мне нужно было настроить CA и сделать файлы сертификатов. Я нашел отличное (если и старое) пошаговое руководство по процессу здесь: http://www.debian-administration.org/articles/284.
Вот соответствующие шаги, которые я сделал из этой статьи:
mkdir /home/CA
cd /home/CA/
mkdir newcerts private
echo '01' > serial
touch index.txt #this and the above command are for the database that will keep track of certs
Создать openssl.cnf
файл в /home/CA/
dir и отредактируйте его в соответствии с пошаговым руководством, указанным выше. (Для справки, мой готовый файл openssl.cnf выглядел так: http://pastebin.com/raw.php?i=hnZDij4T)
openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days 3650 -config ./openssl.cnf #this creates the cacert.pem which gets distributed and imported to the browser(s)
Изменено openssl.cnf
снова в соответствии с инструкциями по прохождению.
#generates certificate request, and key.pem which I renamed dev.key.pem.
openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf
Изменено openssl.cnf
снова в соответствии с инструкциями по прохождению.
#create and sign certificate.
openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem
cp dev.cert.pem /home/dev/certs/cert.pem
cp dev.key.pem /home/certs/key.pem
Я обновил httpd.conf, чтобы отразить сертификаты и включить SSLEngine:
NameVirtualHost 192.168.1.3:443
<VirtualHost 192.168.1.3:443>
ServerAdmin dev@site.local
DocumentRoot /home/dev/https
SSLEngine on
SSLCertificateFile /home/dev/certs/cert.pem
SSLCertificateKeyFile /home/dev/certs/key.pem
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Поместите CA cert.pem в доступное в Интернете место и загрузите / импортируйте его в свой браузер. Теперь я могу посетить https: //dev.site.local без ошибок и предупреждений.
И вот где я нахожусь. Я буду редактировать это по мере продвижения. Любые советы о том, как настроить электронную почту SSL и / или настроить безопасное соединение с другим Box, который будет сервером MySQL, будут оценены.
В этом руководстве есть много ответов об использовании SSL с Apache, рассказывается, как создать самозаверяющий сертификат, как получить правильный сертификат от признанного центра сертификации (ЦС) и как создать свой собственный ненадежный ЦС для создания полный сертификат. http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html
Что касается виртуальных хостов и SSL, каждому хосту потребуется свой собственный IP-адрес, или более грязное решение - разместить их на разных портах, чем стандартные. :443
из-за природы SSL-сертификатов виртуальный хостинг на основе имен не работает с SSL; вот почему вам нужен другой метод, чтобы различать; разные порты / IP-адреса.
Настроить SSH довольно просто, он уже должен быть запущен на вашем сервере. Вам нужно будет сделать несколько вещей, чтобы заблокировать его.
PermitRootLogin no
AllowGroups admins
PubkeyAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication no
Его можно добавить в свой /etc/ssh/sshd_config
для ограничения удаленного корневого доступа и удаления аутентификации по паролю, вместо этого для входа в систему используются общедоступные / закрытые пары ключей.
Чтобы создать свою пару ключей SSH, вы можете использовать puttygen
в Windows; http://putty.very.rulez.org/download.html или вы можете создать пару ключей в среде Linux следующим образом: ssh-keygen -b 2048 -t RSA -f my_keypair
. Это создаст my_keypair
файл и my_keypair.pub
файл (назван только для этого примера, я мог бы предложить назвать ваше имя пользователя или оставить -f
, и позволяя ему генерировать ~/.ssh/id_rsa
).
Надежно передать my_keypair
на вашу рабочую станцию, для будущего доступа по SSH, это закрытый ключ, вы не должны никому его передавать. Затем на сервере создайте $HOME/.ssh
если он еще не существует, mkdir ~/.ssh
, затем скопируйте открытый ключ (my_keypair.pub
) к ~/.ssh/
, если у вас уже есть authorized_keys
в ~/.ssh
потому что вы сделали это для других вещей, вы можете сделать cat my_keypair.pub >> authorized_keys
чтобы добавить свой открытый ключ, или cp my_keypair.pub authorized_keys
если его не существует.
Теперь беги chmod 700 ~/.ssh
и chmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keys
установить разрешения. Вы можете сохранить копию my_keypair
в ~/.ssh/
для использования при подключении к другим хостам, но вы должны сделать chmod 600 ~/.ssh/my_keypair
чтобы убедиться, что никто другой не может получить к нему доступ.
Вы захотите добавить для себя обычную учетную запись пользователя и добавить себя в группу, отличную от users
, лайк admins
в моем примере.
Возможно, вы также захотите добавить своего пользователя или группу в /etc/sudoers
включить sudo
использование, если вы еще этого не сделали. Это выполняется с помощью команды visudo
это единственный способ отредактировать этот файл. visudo
выполняет проверку ошибок и синтаксиса в вашей конфигурации перед записью, предотвращая потерю sudo
использование.
username ALL=(ALL) ALL
добавлен к /etc/sudoers
позволит username
бежать sudo yum install blah
и запросит у вас собственный пароль. Это удобно, если у вас есть другие администраторы или временные администраторы, вам не нужно сообщать пароль root.
MySQL из исходного пакета поддерживает SSL. Чтобы проверить свою сборку MySQL, запустите
mysqladmin variables | grep ssl
Вы должны найти что-то вроде have_ssl yes
. Параметры настройки ssl-ca
, ssl-key
и ssl-cert
.
Создайте учетные записи пользователей с требованиями SSL:
create user@host identified by 'password'
grant privilegelist on database.tables to user@host require ssl
Проблема с вашей конфигурацией SSL в том, что вы на самом деле не включен SSL, для этого вам понадобятся директивы Apache:
SSLEngine on
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem
Без этого вы получите слишком длинные записи с ошибками, потому что вместо заголовков SSL, которые ожидал ваш браузер, вместо этого он получает просто незашифрованную веб-страницу в большом фрагменте.