配置安全的 OpenSSH 的 FTP 服务

服务需求

  1. 用户可以使用 FTP 服务
  2. 用户不能使用 Shell 服务
  3. 用户只能访问指定的目录

版本需求
需要 OpenSSH 20080518 或之后版本

配置方法

sudo vim /etc/ssh/sshd_config
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftp
	ChrootDirectory %h
	ForceCommand internal-sftp
	X11Forwarding no
	AllowTcpForwarding no
sudo groupadd sftp
sudo /etc/init.d/ssh restart

增加用户

sudo useradd -d /home/sftp -m -g sftp -s /bin/false sftp
sudo chown root:root /home/sftp
sudo chmod 755 /home/sftp
sudo mkdir /home/sftp/vroot
sudo chown sftp:sftp /home/sftp/vroot
sudo passwd sftp

由于只能 chroot 到属于 root 的,权限是 755 的目录,所以用户需要在主目录中新建一个目录并设置正确的属性用于上传。

Over!

Linux 系统中使用 SSH 代理

SSH 是一款功能强大的软件,这个不用我再多说了,这次我们使用它的通道功能实现一个 socks 5 代理。

你需要一个可用的 ssh 账号,网络上很多的哦,不知道可以联系我。

我们以 Debian 系统为例,讲解一下如何连接SSH服务器并创建代理服务和在 Firefox 中使用它。

创建代理服务

ssh -N -D 6000 username@server_address

设置 Firefox 使用代理
1. 在地址栏里输入 about:config
2. 设置 network.proxy.socks_remote_dns = True
3. 选择菜单中 [编辑]->[选项]
4. 转到 [高级]
5. 转到 [网络],点击 [设置]
6. 选择 [手动设置代理]
7. 在 SOCKS 主机里输入 localhost 端口输入 6000
8. 选择 SOCKS v5
9. 确定保存

下面就浏览你的自由世界吧!

Over!

网址转发到没有备案的域名

不知又接到什么破通知了,现在的 DNS 服务里网址转发全部校验转发域名和被转发域名是否进行 ICP 备案了,没有备案的域名不能转发。严重影响正常的网络应用!!

既然 DNS 提供的网址转发已经不能再使用了,那我们就不用它了!我们使用自己的空间进行网址的转发!方法有两个:
1. 使用 PHP 的 header 函数修改 HTTP 响应消息的 header 部分,下面是例程。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	<meta http-equiv="Content-language" value="en" />
	<title>Domain name forward</title>
</head>
<body>
<?php
	header("Location: http://www.google.com");
?>
</body>
</html>

将程序保存为 index.php 存放在空间的相应目录中既可。

2. 使用 .htaccess 修改 HTTP 响应消息的 header 部分,下面是实例。

Redirect permanent / http://www.google.com/

将上交保存为 .htaccess 存放在空间的相应目录中既可。

两个方法都是可以的,但我的空间已经禁止了PHP程序修改 header 了,但 .htaccess 是可以的。

Over!

ndd – 支持网络的 dd 工具

支持网络传输的 dd 程序,目前实现了网络传输和 dd 的部分功能。

使用案例
1. 创建一个 4GB 大小的空文件

./ndd if=/dev/zero of=hd.img bs=4096 count=1048576

2. 复制映像文件中的第一个分区

./ndd if=hd.img of=p0.img bs=512 skip=63 count=1975995

3. 从主机(192.168.0.1)复制硬盘的我一个分区到本地(192.168.0.2)的第二个分区
主机(192.168.0.1)

./ndd if=/dev/sda nof=192.168.0.1:9000 bs=512 skip=63 count=1975995

主机(192.168.0.2)

./ndd nif=192.168.0.1:9000 of=/dev/sda bs=512 seek=74220300

注意:用于网络传输时,建议双方 bs 相同。

源代码:http://www.heiher.info/service/projects/ndd/

Over!

解决 Android 同步连接问题

这几天遇到这么一个奇怪的问题,06:00 – 09:00 可以正常连接到 Google 的服务器,Gmail、Market、Contacts、Calendar 同步才能正常使用,其它时间都显示“No Connection!” 除了 Gtalk ,其它所有的服务都不能正常使用。

我在不正常的时间段里 ping 了一下 android.clients.google.com,发现这些服务器是可以 ping 通的,综合上面的情况,问题多数不在GFW上。

我又在正常的时间段内 ping 了一个地址: 216.239.61.100,并在 /etc/hosts 中设置了一个静态的解析。测试发现在不正常的时间段内可以正常使用。

设置方法(需要有 root 权限):

su
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
echo "216.239.61.100 android.clients.google.com" >> /etc/hosts
mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system

Over!

SSH TCP 转发之反向连接

当你需要连接一台子网或防火墙内的且没有做端口映射的SSH服务器,又刚好你的客户端是有公网地址的,你是怎么怎么做的呢?现在我有一个比较不错的办法,就是SSH的TCP转发功能。

SSH 客户端可以将本地机器上的一个端口M与远程主机上的一个端口N映射起来,这样我们在本地机器访问这个端口M就和在远程主机访问端口N一样了。

对了,这里地要想实现我们的反向连接还有一个条件,就是你的本地机器也得安装 SSH 服务器程序。下面我们说一下具体的操作。

子网主机执行

$ ssh -f -N -R 8000:localhost:22 username@remote_ip

这是是将本地的 22 号端口与远程主机的 8000 号端口(SSH服务)映射起来。

公网主机执行

$ ssh username@localhost -p 8000

Over!

Linux 系统中使用 TL-WN422G+无线网卡

在 Linux 操作系统中使用这款无线上网卡需要如下程序:

  • ZD1211RW 驱动
  • ZD1211 Firmware

ZD1211RW 驱动
重新编译内核增加这个驱动,可以编译为模块或直接编译进内核。

ZD1211 Firmware
没有这个固件不能正常驱动设备,第一次我就是这样的问题。
如果你有包管理系统,那么安装一下 zd1211-firmware,或去 http://sourceforge.net/projects/zd1211/ 下载。解压后保存成 /lib/firmware/zd1211/ 目录中。

Over!

将 G1 手机打造成无线路由器+无线上网卡

本文所有内容都以 T-Mobile G1 美版(US)为例。

需要的软件
1. 可以拥有 root 权限的 Android 1.6 操作系统
2. Android Wireless Tether

可以拥有 root 权限的 Android 1.6 操作系统
如果你在你的系统中已经可以拥有 root 权限,就可以略过这段。
1. 下载 RC29 的 DreaIMG.nbh 映像文件,自己 Google,如果找不到可以联系我。
2. 下载 http://www.heiher.info/service/android/recovery-RA-dream-v1.6.2.img
3. 将前面下载的两个文件保存到手机的 SD 卡根目录中,按 [照相]+[电源] 开机,当加载 DreaIMG.nbh 成功后,按 [电源] 开始写,当成功后按 [滚球],然后按 [通话]+[菜单]+[电源] 重启。
4. 开机进入系统,去 Market 安装 terminal 和 telnet 程序并运行 terminal,在这个程序中进行 telnetd ,然后进行 telnet,连接 localhost 主机。
5. 进行如下指令

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
flash_image recovery /sdcard/recovery.img
cat /sdcard/recovery.img > /system/recovery.img

6. 下载 http://www.androidspin.com/downloads.php?dir=enomther/ROM/&file=HTC_ADP_1.6_DRC83_rooted_base.zip 并保存在手机 SD 卡的根目录中,文件名为 update.zip
7. 以 [屋子]+[电源] 开机,按 [Alt]+[S] 开始写文件,完成后按 [屋子]+[返回] 重启。
8. 在 http://developer.htc.com/adp.html 下载 ota-radio-2_22_19_26I.zip 并保存在手机 SD 卡的根目录中,文件名为 update.zip
7. 以 [屋子]+[电源] 开机,按 [Alt]+[S] 开始写文件,完成后按 [屋子]+[返回] 重启。
9. 下载 http://android-wifi-tether.googlecode.com/files/adp-1_6-kernel-update_r2.zip 并保存在手机 SD 卡的根目录中,文件名为 update.zip
7. 以 [屋子]+[电源] 开机,按 [Alt]+[S] 开始写文件,完成后按 [屋子]+[返回] 重启。

Android Wireless Tether
1. 下载 http://android-wifi-tether.googlecode.com/files/wireless_tether_1_60-pre3_htc.apk 并保存在手机 SD 卡中。
2. 去 Market 安装 AppInstaller
3. 运行 AppInstaller 安装 wireless tether.
4. 设置 wireless tether 就完成了。

Over!

FastDog – 轻量级的 Web 服务器

最近在学习 Web 开发,在学习过程中我觉得认真的研究一下 HTTP 协议还是有一定必要的。就试着写一个 Web 服务器玩玩吧,好久没有用C语言写过程序了,也当作一个练习吧。

FastDog 大致的架构如下:
* HTTP 1.1 协议
* 支持静态和动态页面
* 高性能I/O
* 多工作线程
* 基于共享库的模块化站点框架

目前在看最重要的东西 RFC2616(HTTP 1.1 协议),看完准备实现 HTTP 部分和站点框架。

项目网站:http://github.com/heihaier/fastdog/

Over!fastdog/