Я нахожусь в процессе переустановки ОС на компьютере, который будет использоваться для размещения нескольких приложений для нашего бизнеса. Приложения будут только локальными; доступ от внешних клиентов будет только через VPN.
В предыдущей настройке для большинства администраторов использовалась панель управления хостингом (Plesk), и я рассматривал возможность использования другого подобного программного обеспечения для переустановки - но я решил, что наконец должен изучить, как все это работает. Я могу сделать большинство вещей, которые программное обеспечение сделало бы для меня, но я не уверен в симбиозе всего этого. Это все попытка отдалиться от земли Программиста / Программиста , если это вообще возможно.
Я нигде не могу найти полное прохождение для того, что я ищу, поэтому я подумал, что поставлю этот вопрос, и если люди смогут мне помочь, я отредактирую это с ответами и задокументирую свой прогресс / подводные камни. Надеюсь, когда-нибудь это поможет кому-то в дальнейшем.
Детали:
- CentOS 5.5 x86_64
- httpd: Apache / 2.2.3
- MySQL: 5.0.77 (подлежит обновлению)
- PHP: 5.1 (будет обновлено)
Требования:
- БЕЗОПАСНОСТЬ!!
- Безопасная передача файлов
- Безопасный клиентский доступ (SSL-сертификаты и CA)
- Безопасное хранение данных
- Безопасное соединение с другим локальным компьютером (MySQL)
- Виртуальные хосты / несколько поддоменов
- Локальная электронная почта была бы хороша, но не критична
Шаги:
во время установки я проверил опцию «Компоненты сервера», думая, что собираюсь использовать другого администратора, похожего на Plesk. Оглядываясь назад, учитывая, что я решил попытаться пойти своим путем, это, вероятно, не лучшая идея.
настройка пользователей, сети / IP-адреса и т. Д. Yum update / upgrade.
чтобы обновить PHP и MySQL до последних версий, мне пришлось искать другое хранилище вне CentOS. ВМС выглядит великолепно, и я счастлив, что нашел его!
Добавьте репозиторий 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 | изменить так, чтобы это выглядело так:
DEVICE = eth1: 1
IPADDR = 192.168.1.3
NETMASK = 255.255.255.0
NETWORK = 192.168.1.0
ONBOOT = yes
NAME = 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 время = 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. al., но безрезультатно. Оказывается, мне нужно было 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/
директории и отредактируйте его в соответствии с пошаговым описанием, указанным выше. (Для справки мой готовый файл 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
ВАЖНЫЙ!
Переместите файлы и ссылки на них из httpd.conf в новом месте
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, рассказывается, как создать самозаверяющий сертификат, как получить надлежащий сертификат из признанного центра сертификации (CA) и как создать собственный ненадежный CA для создания полный сертификат. http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html
Что касается виртуальных хостов и SSL, каждому хосту потребуется собственный IP-адрес, или более грязное решение заключается в размещении их на разных портах, чем стандартные,
:443
из-за природы сертификатов SSL, виртуальный хостинг на основе имен не уживается с SSL; вот почему вам нужен другой метод для дифференциации; разные порты / IP.Настроить SSH довольно просто, он уже должен быть запущен на вашем сервере. Вы хотите сделать несколько вещей, чтобы заблокировать его.
Его можно добавить к вашему,
/etc/ssh/sshd_config
чтобы ограничить удаленный root-доступ и удалить аутентификацию по паролю, вместо этого используя открытые / закрытые пары ключей для входа в систему.Чтобы создать вашу пару ключей 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
использования.добавленный в
/etc/sudoers
позволитusername
запуститьsudo yum install blah
и запросит ваш собственный пароль. Это удобно, если у вас есть другие администраторы или временные администраторы, вам не нужно сообщать пароль root.источник
Проблема с вашей конфигурацией SSL в том, что вы на самом деле не включили SSL, для этого вам понадобятся директивы Apache:
Без этого вы получите эти слишком длинные ошибки записи, потому что вместо заголовков SSL, ожидаемых вашим браузером, вместо этого он получает просто незашифрованную веб-страницу в виде большого фрагмента.
источник
MySQL из оригинального пакета поддерживает SSL. Чтобы проверить сборку MySQL, запустите
Вы должны найти что-то вроде
have_ssl yes
. Настройка параметровssl-ca
,ssl-key
иssl-cert
.Создайте учетные записи пользователей с требованиями SSL:
источник