我正在重新安装操作系统在一台机器上,将被用来为我们的业务主持几个应用程序。 申请将只在本地; 来自外部客户端的访问将仅通过VPN。
之前的设置对于大部分pipe理员都使用了托pipe控制面板(Plesk),而我正在考虑使用另一个类似的软件来重新安装 – 但我想我应该终于学习如何工作。 我可以做的大部分软件会为我做的事情,但我不清楚这一切的共生。 如果可能的话,这些都是为了进一步将自己从configuration程序员/程序员的土地上解放出来。
我找不到任何地方的完整演练,所以我想我会提出这个问题,如果人们可以帮助我的方式,我将编辑这个答案,并logging我的进展/陷阱。 希望有一天这会帮助某个人。
将IUS存储库添加到我们的包pipe理器
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)
从IUS存储库升级MySQL
/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维基提供升级说明: http : //wiki.iuscommunity.org/Doc/ClientUsageGuide 。
scp
和sftp
访问权限,而不允许ssh
login 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用户的访问权限。
vi /etc/rssh.conf
取消注释或添加:
allowscp allowsftp
这允许我通过传输中的SFTP协议(我select的FTP程序;我相信它与其他FTP应用程序类似)连接到本机。
从http://www.cyberciti.biz/tips/linux-unix-restrict-shell-access-with-rssh.html获取(赞赏!)rssh指令。
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
networking= 192.168.1.0
ONBOOT = YES
NAME = ETH1:1
通过重复添加更多的虚拟接口。 由于ifcfg-eth1:1文件中的ONBOOT=yes
行,当系统引导或networking启动/重新启动时,此接口将会启动。
service network restart
closureseth0接口:[OK]
closureseth1接口:[OK]
closures回送界面:[确定]
打开回送界面:[OK]
调出接口eth0:[OK]
调出接口eth1:[OK]
ping 192.168.1.3
来自192.168.1.3的64字节:icmp_seq = 1 ttl = 64时间= 0.105ms
在上面的rssh部分中,我添加了一个用于SFTP的用户。 在这个用户的主目录中,我创build了一个名为“https”的文件夹。 这是这个网站的文档将会存在的地方,所以我需要添加一个指向它的虚拟主机。 我将使用上面的这个网站的虚拟接口(这里称为dev.site.local)。
vi /etc/http/conf/httpd.conf
将以下内容添加到httpd.conf的末尾:
<VirtualHost 192.168.1.3:80> ServerAdmin [email protected] DocumentRoot /home/dev/https ServerName dev.site.local ErrorLog /home/dev/logs/error_log TransferLog /home/dev/logs/access_log </VirtualHost>
我在https目录中放置了一个虚拟的index.html文件来检查一切。 我尝试浏览它,并遇到拒绝错误的权限。 日志只是给了一个模糊的参考:
[2010年5月17日星期一14:57:11] [error] [client 192.168.1.100](13)Permission denied:access to /index.html denied
我试过chmod 777 et。 等,但无济于事。 原来,我需要chmod + x https目录及其“父目录”。
chmod +x /home chmod +x /home/dev chmod +x /home/dev/https
这解决了这个问题。
我通过我们的本地Windows Server 2003框来处理DNS。 不过,有关BIND的CentOS文档可以在这里find: 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 [email protected] DocumentRoot /home/dev/https ServerName dev.site.local ErrorLog /home/dev/logs/error_log TransferLog /home/dev/logs/access_log </VirtualHost>
不幸的是,当尝试访问使用SSL的页面时,我不断收到(错误代码:ssl_error_rx_record_too_long)错误。 正如JamesHannah 在下文中所指出的那样 ,我没有在httpd.conf中设置证书的位置,从而导致浏览器不能正常访问浏览器的页面。
所以首先,我需要build立一个CA并创build证书文件。 我在这里find了一个伟大的(如果是旧的)演练: 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
在/home/CA/
dir中创build一个openssl.cnf
文件,并根据上面链接的演练进行编辑。 (作为参考,我完成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 [email protected] 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放在一个可以通过networking访问的地方,然后下载/导入到我的浏览器中。 现在我可以访问https://dev.site.local ,没有任何错误或警告。
这就是我所在的地方。 我将继续编辑,因为我进步。 有关如何configurationSSL电子邮件和/或configuration安全连接到另一个将成为MySQL服务器的Box的任何提示将不胜感激。
本指南提供了有关在Apache中使用SSL的很多答案,告诉您如何创build自签名证书,如何从authentication证书颁发机构(CA)获取适当的证书以及如何创build自己的不可信CA以创build完整的证书。 http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html
对于虚拟主机和SSL,由于SSL证书的性质,每个主机都需要自己的IP地址,或者一个比较脏的解决scheme就是把它们放在不同的端口上,而不是标准:443
,基于名字的虚拟主机不会相处SSL; 这就是为什么你需要另一种方法来区分; 不同的端口/ IP。
设置SSH非常简单,它应该已经在你的服务器上运行了。 你会想要做一些事情来locking它。
PermitRootLogin no AllowGroups admins PubkeyAuthentication yes PermitEmptyPasswords no PasswordAuthentication no
可以将它添加到/etc/ssh/sshd_config
以限制远程root访问权限,并删除密码validation,而使用公钥/私钥对login。
要创build您的SSH密钥对,您可以在Windows中使用puttygen
; http://putty.very.rulez.org/download.html,或者您可以在Linux环境中创build密钥对,如下所示: ssh-keygen -b 2048 -t RSA -f my_keypair
。 这将创build一个my_keypair
文件和一个my_keypair.pub
文件(只为这个例子命名,我可能会build议命名为你的用户名或离开-f
,并让它生成~/.ssh/id_rsa
)。
将my_keypair
安全地转移到您的工作站,以便将来进行SSH访问,这是私钥,不应该与任何人共享。 然后,在服务器上创build$HOME/.ssh
如果它尚不存在) my_keypair.pub
mkdir ~/.ssh
,然后将公共密钥( my_keypair.pub
)复制到~/.ssh/
,如果您已经在~/.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
chmod 700 ~/.ssh
和chmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keys
来设置权限。 您可以在~/.ssh/
保留一个my_keypair
的副本, my_keypair
在连接到其他主机时使用,但是您应该执行chmod 600 ~/.ssh/my_keypair
以确保其他人无法访问它。
您将需要为自己添加一个普通的用户帐户,并将自己添加到除users
其他users
组,如我的示例中的admins
。
如果您尚未使用sudo
,则可能还需要将您的用户或组添加到/etc/sudoers
中。 这是用visudo
命令完成的,这是你编辑这个文件的唯一方法。 在写出之前, visudo
在configuration上运行错误和语法检查,从而防止丢失sudo
使用。
username ALL=(ALL) ALL
添加到/etc/sudoers
将允许username
运行sudo yum install blah
并且会提示你input你自己的密码。 如果您有其他pipe理员或临时pipe理员,这很方便,您不需要共享root密码。
你的SSLconfiguration的问题是你没有真正启用 SSL,你需要Apache的指令:
SSLEngine on SSLCertificateFile /path/to/cert.pem SSLCertificateKeyFile /path/to/key.pem
没有这个,你会得到这些logging太长的错误,这是因为,而不是你的浏览器期望的SSL头,它只是取决于大块未encryption的网页。
原始软件包中的MySQL支持SSL。 要检查你的MySQL构build,运行
mysqladmin variables | grep ssl
你应该find像have_ssl yes
东西。 设置选项ssl-ca
, ssl-key
和ssl-cert
。
创build具有SSL要求的用户帐户:
create user@host identified by 'password' grant privilegelist on database.tables to user@host require ssl