﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-无法递归的五点半-随笔分类-开发环境</title><link>http://www.cppblog.com/lambdacpp/category/1787.html</link><description>for_each(day.begin(),day.end(),bind2nd(Add(),me))</description><language>zh-cn</language><lastBuildDate>Thu, 03 Dec 2009 20:08:19 GMT</lastBuildDate><pubDate>Thu, 03 Dec 2009 20:08:19 GMT</pubDate><ttl>60</ttl><item><title>OpenSSH下SFTP的配置</title><link>http://www.cppblog.com/lambdacpp/archive/2009/12/02/102409.html</link><dc:creator>五点半</dc:creator><author>五点半</author><pubDate>Wed, 02 Dec 2009 13:04:00 GMT</pubDate><guid>http://www.cppblog.com/lambdacpp/archive/2009/12/02/102409.html</guid><wfw:comment>http://www.cppblog.com/lambdacpp/comments/102409.html</wfw:comment><comments>http://www.cppblog.com/lambdacpp/archive/2009/12/02/102409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lambdacpp/comments/commentRss/102409.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lambdacpp/services/trackbacks/102409.html</trackback:ping><description><![CDATA[<div style="text-align: right; font-style: italic;">OpenSSH网站上那只SSH刺河豚将FTP埋葬<br></div>
<br>有关sftp有人推荐www.ssh.com的实现，不过我更喜欢开源的产品，特别是Open系列的安全产品。<br><br>
<h1>需求</h1>
首先我们明确我们的目标，我们是希望通过SFTP代替FTP，需求是这样的:<br>
<ol>
    <li>这些用户<span style="font-weight: bold;">只能通过SFT</span>访问服务器</li>
    <li>用户要<span style="font-weight: bold;">锁定</span>在相应的目录下</li>
</ol>
我想通常的思路是这样的:<br>
<ol>
    <li>打开OpenSSH的SFTP</li>
    <li>将这些用户设置在一个<span style="font-style: italic;">组</span>中</li>
    <li>让OpenSSH识别这个组，只允许这些用户使用SFTP</li>
    <li>最后系统要自动的将用户<span style="font-style: italic;">chroot</span>在用户目录下</li>
</ol>
<h1>配置</h1>
我开始都觉得是不是要求太高，不过OpenSSH可以解决以上所有问题。话说回来，如果不能解决怎么可以把FTP埋葬呢。<br>
<h4>SSHD_CONFIG</h4>
sshd通常是打开了sftp的，不过我们应该使用<span style="font-weight: bold;">internal-sftp</span>在sshd_conf中作如下配置:<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">#&nbsp;Subsystem&nbsp;sftp&nbsp;/usr/lib/openssh/sftp-server&nbsp;#&nbsp;注释掉<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">Subsystem&nbsp;sftp&nbsp;internal-sftp<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">##<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">Match&nbsp;group&nbsp;sftponly<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ChrootDirectory&nbsp;/sftphome/%u<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;X11Forwarding&nbsp;no<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;AllowTcpForwarding&nbsp;no<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ForceCommand&nbsp;internal-sftp<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;"></span></div>
解释一下：当sshd匹配到sftponly组中的用户，就会强制使用sftp(ForceCommand的作用)，并将用户限定在/sftphome/下相应用户的目录下(ChrootDirectory的作用)。<br>
<h3>创建用户</h3>
我们需要创建相应的用户了：<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#useradd&nbsp;-G&nbsp;sftponly&nbsp;-d&nbsp;/sftphome/sftpuser&nbsp;&nbsp;-s&nbsp;/usr/sbin/nologin&nbsp;sftpuser<br>#tail&nbsp;/etc/password<br><img src="http://www.cppblog.com/Images/dot.gif"><br>sftpuser:x:</span><span style="color: #000000;">1000</span><span style="color: #000000;">:</span><span style="color: #000000;">1000</span><span style="color: #000000;">::/sftphome/sftpuser:/usr/sbin/nologin<br>#passwd sftpuser<br></span></div>
你可以在其他机器上用sftp登录试试了。你的连接将会被reset!去看看sshd的日志，你会发现pam.d的认证是通过了的，但是chroot失败了。按网络上的说法<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#chown&nbsp;root&nbsp;/sftphome/sftpuser<br>#chmod&nbsp;</span><span style="color: #000000;">755</span><span style="color: #000000;">&nbsp;/sftphome/sftpuser<br></span></div>
再试，可以登录。新的问题是不能在此目录下写入。对的嘛，755对于组用户是不能写啊。再试试775，刚才的问题就来又了，chroot失败。<br><br><span style="font-weight: bold;">以上内容网络上一google一大把。</span><br><br>可以登录不能写这个问题真让人困惑!后来我想可能应该这样理解：既然要chroot，那个目录不属于root肯定是不行的(说错了，猛拍砖)。那我们就不能为用户提供完整的sftp服务了吗？我想可以这样<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#mkdir&nbsp;/sftphome/sftpuser/space<br>#chown&nbsp;sftpuser.sftpuser&nbsp;/sftphome/sftpuser/space<br></span></div>
由系统管理员为sftp用户提供一个目录，并设置其用户属性，用户在这个目录下用户是可写的。当然可以创建很多个。<br><br>这样算不算解决这个问题呢？暂且如此吧。如果您有好方法，一定告知哦。<br><br><br> <img src ="http://www.cppblog.com/lambdacpp/aggbug/102409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lambdacpp/" target="_blank">五点半</a> 2009-12-02 21:04 <a href="http://www.cppblog.com/lambdacpp/archive/2009/12/02/102409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用中的MySQL服务器部署Replication</title><link>http://www.cppblog.com/lambdacpp/archive/2009/08/14/93378.html</link><dc:creator>五点半</dc:creator><author>五点半</author><pubDate>Fri, 14 Aug 2009 14:39:00 GMT</pubDate><guid>http://www.cppblog.com/lambdacpp/archive/2009/08/14/93378.html</guid><wfw:comment>http://www.cppblog.com/lambdacpp/comments/93378.html</wfw:comment><comments>http://www.cppblog.com/lambdacpp/archive/2009/08/14/93378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lambdacpp/comments/commentRss/93378.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lambdacpp/services/trackbacks/93378.html</trackback:ping><description><![CDATA[<p>本文记录如何给一台应用中的MySQL服务器部署Replication。</p>
<h4 id="安装环境">安装环境</h4>
<h5 id="现有MySQL">现有MySQL</h5>
现有MySQL服务器的特点：
<ol>
    <li>没有专门为Replication环境配置</li>
    <li>MySQL为编译安装</li>
    <li>MySQL处于运行状态，不可长时间停机</li>
</ol>
<h5 id="目的">目的</h5>
<p>将现有服务器作为Master服务器，配置并运行一台新的MySQL服务器作为Slave服务器</p>
<h5 id="准备">准备</h5>
<ol>
    <li>服务器硬件</li>
    <li>现有主服务器的安装代码包(mysql-5.x.xxx.tar.gz)</li>
</ol>
<h4 id="主服务器的配置和数据准备">主服务器的配置和数据准备</h4>
<h5 id="Master服务器的必须配置">Master服务器的必须配置</h5>
要使用Replication必须将Master的binlog打开，并设置服务器ID。最简单的配置如下:<br>
<pre>log-bin     =  mysql-bin<br>server-id   =  1</pre>
当然关于MySQL Bin Log的配置还有很多设置，可以参考相关手册
<h5 id="数据备份">数据备份</h5>
现在需要将Master的数据备份出来要注意的是要记住 <strong>备份点的binlog日志和postion</strong> 。Master数据备份的方式可以是停机冷备份，如果安装了LVM可以使用LVM的Snapshot。下面使用mysqldump 导出数据。在导出数据之前我们应该Flush表，并锁住表，比允许数据写入。<br>
<pre>mysql&gt; FLUASH TABLES WITH READ LOCK;<br>mysql&gt; SHOW MASTER STATUS;<br>+------------------+----------+--------------+------------------+<br>| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |<br>+------------------+----------+--------------+------------------+<br>| mysql-bin.000157 | 18757860 |              |                  |<br>+------------------+----------+--------------+------------------+<br>1 row in set (0.00 sec)</pre>
使用mysqldump导出数据<br>
<pre>mysql:~# mysqldump -uroot -p --all-databases &gt; dump.sql</pre>
解锁<br>
<pre>mysql&gt; UNLOCK TABLES;</pre>
<h5 id="安装参数的提取">安装参数的提取</h5>
需要在Slave主机编译安装MySQL要了解Master安装时的编译参数，可以通过如下方式获得:<br>
<pre>mysql:~# cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE</pre>
<h5 id="repl用户创建">repl用户创建</h5>
在Master服务器中创建repl用户，用于在Slave 数据库中访问Master数据<br>
<pre>mysql&gt; GREANT REPLICATION SLAVE ON *.* to 'repl'@'IP.SLAVE.SERVER' identified by 'repl_passwd';</pre>
<h4 id="Slave服务器的安装">Slave服务器的安装</h4>
<h5 id="MySQL的安装">MySQL的安装</h5>
<ul>
    <li>按前面提取的configure参数对源代码进行编译(<code>./configure; make; make install;</code>)</li>
    <li>安装初始化数据库:</li>
</ul>
<pre>#mysql_install_db --datadir=/data --user=mysql</pre>
<ul>
    <li>参照@{mysql-src}/support-files/<code>目录中my.cnf文件在</code>/etc/<code>下创建@my.cnf</code></li>
    <li>参照@{mysql-src}/support-files/mysql.server@文件在@/etc/init.d/<code>下配置@mysqldb</code></li>
    <li>可尝试启动mysql。 <code>/etc/init.d/mysqldb start</code></li>
</ul>
<h5 id="数据的导入">数据的导入</h5>
<pre>mysql# mysql -uroot -p &lt; dump.sql</pre>
<p>如果导入出现超出最大数据包错误可以尝试修改my.cnf中的max_allow_packet</p>
<h5 id="在mycnf中配置slave">在my.cnf中配置slave</h5>
在my.cnf中配置：<br>
<pre>server-id       =  2<br>master-host     =  master_ip<br>master-user     =  repl<br>master-password =  repl_passwd</pre>
<h5 id="在Slave服务器上启动Slave">在Slave服务器上启动Slave</h5>
<pre>mysql&gt; STOP SLAVE;<br>mysql&gt; CHANGE MASTER TO     <br>       MASTER_HOST='masterip',<br>      &nbsp;MASTER_USER='repl',<br>      &nbsp;MASTER_PASSWORD='repl_passwd',<br>      &nbsp;MASTER_LOG_FILE='mysql-bin.000157',<br>       MASTER_LOG_POS=18757860 ;<br>mysql&gt; START SLAVE;<br><br></pre><img src ="http://www.cppblog.com/lambdacpp/aggbug/93378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lambdacpp/" target="_blank">五点半</a> 2009-08-14 22:39 <a href="http://www.cppblog.com/lambdacpp/archive/2009/08/14/93378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Debian下安装Oracle 10 XE</title><link>http://www.cppblog.com/lambdacpp/archive/2006/11/03/14643.html</link><dc:creator>五点半</dc:creator><author>五点半</author><pubDate>Fri, 03 Nov 2006 15:17:00 GMT</pubDate><guid>http://www.cppblog.com/lambdacpp/archive/2006/11/03/14643.html</guid><wfw:comment>http://www.cppblog.com/lambdacpp/comments/14643.html</wfw:comment><comments>http://www.cppblog.com/lambdacpp/archive/2006/11/03/14643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/lambdacpp/comments/commentRss/14643.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lambdacpp/services/trackbacks/14643.html</trackback:ping><description><![CDATA[现在安装Oracle已经很简单了，看来有官方的支持。记录下备忘：<br /><ol><li>在source.list中加入deb http://oss.oracle.com/debian/ unstable main non-free</li><li>aptitude update</li><li>aptitude oracle-xe-client oracle-xe-universal  包有点大200多兆</li><li>通过/etc/init.d/oracle-xe configure配置基本参数</li><li>通过http://127.0.0.1:8080/apex/进行管理</li></ol>Oracle 10 XE 需要1G的交换分区，如果没有可以建一个交换文件<br /><ol><li>dd if=/dev/zero of=/mnt/swapfile bs=1024 count=1048576</li><li>mkswap /mnt/swapfile</li><li>swapon /mnt/swapfile</li></ol>参考了一下：<a href="http://my.donews.com/xiaoqiang/">疯狂小强</a> （没有使用aptitude,不过很详细）<br /><br /><img src ="http://www.cppblog.com/lambdacpp/aggbug/14643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lambdacpp/" target="_blank">五点半</a> 2006-11-03 23:17 <a href="http://www.cppblog.com/lambdacpp/archive/2006/11/03/14643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Debian下mrtg的配置</title><link>http://www.cppblog.com/lambdacpp/archive/2006/06/02/8090.html</link><dc:creator>五点半</dc:creator><author>五点半</author><pubDate>Fri, 02 Jun 2006 10:44:00 GMT</pubDate><guid>http://www.cppblog.com/lambdacpp/archive/2006/06/02/8090.html</guid><wfw:comment>http://www.cppblog.com/lambdacpp/comments/8090.html</wfw:comment><comments>http://www.cppblog.com/lambdacpp/archive/2006/06/02/8090.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/lambdacpp/comments/commentRss/8090.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lambdacpp/services/trackbacks/8090.html</trackback:ping><description><![CDATA[先要保证已经安装了Apache.创建一个mrtg的工作目录,通常是/var/www/mrtg/.<br /><ol><li>安装</li><ul><li>aptitude install mrtg mrtgutils</li></ul><li>生成mrtg.cfg文件</li><ul><li>要保证管理的设备开启了snmp的读操作;</li><li>/usr/bin/cfgmaker  --global WorkDir:/var/www/mrtg  --global 'Options[_]: growright,bits'   --ifref=ip public@192.168.100.1</li><li>其中public是设备的 community名,192.168,100.1是设备的ip</li><li>如果上面的命令产生了正确的结果，就可以将其输出到一个文件中,如/etc/mrtg.cfg.</li><li>可以编辑这个文件，将一些东西汉化<br /></li></ul><li>生成网页</li><ul><li>运行mrtg /etc/mrtg.cfg即可在/var/www/mrtg下看见一些html文件和图像文件,这些就是mrtg生成的.</li><li>应为产生日志的原因,可能需要多运行几次mrtg /etc/mrtg.cfg直到没有输出为止<br /></li></ul><li>生成index.html</li><ul><li>运行  indexmaker --output=index.html /etc/mrtg.cfg 生成index.html文件</li><li> 将index.html拷贝到/var/www/mrtg</li></ul><li>在cron配置定时运行mrtg</li><ul><li>mrtg是通过读入mrtg.cfg来生成图像的,它不会只动运行.要实现流量监控可在cron配置，使mrtg定时执行</li><li>每5分钟执行一下mrtg，在cron添加记录:0,5,10,15,20,25,30,35,40,45,50,55 * * * * mrtg /etc/mrtg.cfg</li></ul></ol>详细的文档要参考:http://oss.oetiker.ch/mrtg/doc/indexmaker.en.html<br /><blockquote><br /></blockquote><br /><img src ="http://www.cppblog.com/lambdacpp/aggbug/8090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lambdacpp/" target="_blank">五点半</a> 2006-06-02 18:44 <a href="http://www.cppblog.com/lambdacpp/archive/2006/06/02/8090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>