CentOS 6配置SFTP

现在的客户还真聪明,知道FTP不安全,非要配置个SFTP,于是便有了本文。其实俺特别想说,身在天朝,还谈啥安全?

由于SFTP是SSH的一部分(与传统的FTP没有任何关系),因此,配置SFTP不需要传统的FTP服务器软件。仅需要OpenSSH服务器即可。

$ yum install openssh-server openssl

$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
$ vim +132 /etc/ssh/sshd_config 
注释掉下面这行
Subsystem      sftp    /usr/libexec/openssh/sftp-server

添加如下几行
Subsystem       sftp    internal-sftp
Match Group sftp
        ChrootDirectory /data/sftp/%u
        ForceCommand    internal-sftp
        AllowTcpForwarding no
        X11Forwarding no

解释一下每一行的意思

Subsystem       sftp    internal-sftp  
这行指定使用sftp服务使用系统自带的internal-sftp

Match Group sftp  
匹配sftp组的用户,如果有多个组用逗号分割
也可以使用“Match User mysftp”匹配用户,多个用户之间也是用逗号分割

ChrootDirectory /data/ftp/%u  
用chroot将用户的根目录指定到/data/ftp/%u,%u代表用户名,%h表示用户根目录
另一种写法: ChrootDirectory %h
chroot可以参考:http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/

ForceCommand    internal-sftp  
指定sftp命令

AllowTcpForwarding no  
X11Forwarding no  
禁止用户使用端口转发

建立用户和组

$ mkdir -p /data/sftp/
$ groupadd sftp
$ useradd -m -d /data/sftp/user1 -g sftp -s /sbin/nologin user1
#通过上面这条命令建立的用户,其家目录权限是700,需要改成755才可以正常登陆
$ chmod -R 755 /data/sftp/
$ chown root:sftp /data/sftp/
$ chown root:sftp /data/sftp/user1    #重要

错误的目录权限设定会导致在log中出现”fatal: bad ownership or modes for chroot directory XXXXXX”的内容

目录的权限设定有两个要点:
1、由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限755)

因为用了chroot,所以/data/sftp/user1属主一定要是root,并且所属组不能有写入权限,如果上传需要写入在/data/sftp/user1下建立可写属主的文件夹供上传使用。

$ mkdir /data/sftp/user1/upload
$ chown -R user1:sftp /data/sftp/user1/upload

===========================================
2015.01.12补充
在Ubuntu 12.04 64bit系统部按如上方法部署好了SFTP,发现无法登陆,后来在/var/log/auth.log中发现了日志:fatal: bad ownership or modes for chroot directory component “/ftpdata/ftp/”;
于是查看了一下/ftpdata/ftp/的权限,发现该目录的属主是ftp。于是立即将属主修改为root,再次登陆就没问题了
请注意,在Ubuntu系统下,“Match Group sftp”及以后的配置项要写在“UsePAM yes”之后,否则同样无法登陆

===========================================
2015.02.03补充
在Ubuntu 12.04 64bit系统部按如上方法部署好了SFTP,发现无法登陆,FileZilla提示:Received unexpected end-of-file from SFTP server;执行/etc/init.d/ssh restart也不行;
经过百度,发现执行一下initctl restart ssh就OK了

Read More

CentOS6系统openssl生成证书和自签证书

CentOS6系统openssl生成证书和自签证书的过程,记录一下,本文基于CentOS 6 64bit。

$ yum install openssl openssl-devel

1,生成服务器端的私钥(key文件)

$ openssl genrsa -des3 -out server.key 1024

此时会提示输入密码(PEM pass phrase,必须输入),此密码用于加密key文件(参数des3便是指加密算法)。
以后每当需读取此文件(通过openssl提供的命令或API)都需输入密码(PEM pass phrase)。例如把key文件引入Nginx等第三方软件配置https,在启动Nginx的时候同样会要求输入密码。
如果觉得不方便,也可以去除这个密码,但一定要采取其他的保护措施

去除key文件的密码:openssl rsa -in server.key -out server.key

2,生成Certificate Signing Request(CSR)

$ openssl req -new -key server.key -out server.csr -config /etc/pki/tls/openssl.cnf

生成的csr文件交给CA签名后形成服务端自己的证书。屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可 (more…)

Read More

CentOS 6安装配置LDAP

一,什么是LDAP

随着全国信息化建设的不断深入,各企事业单位都陆续开发出了针对本单位实际应用的多个管理信息系统。但各应用系统的开发大多沿袭传统的开发模式,即每个应用系统都有各自独立的用户认证模块,并使用独立的认证机制在各自的数据库中进行用户认证。这种用户认证模式有很多弊端:
1,传统的开发模式大多是基于关系数据库的用户认证信息管理模型,读取速度慢,可移植性差;
2,用户在每个应用系统中都必须存储用户名和密码等认证信息,这样会使用户认证信息在多个应用系统的数据库中重复放置,造成大量的数据冗余;
3,这种认证模式给用户认证信息的维护管理和用户的使用造成诸多不便。例如,用户需要更改自己的认证信息时,就必须逐个在所有的应用系统中进行更改,若有遗漏,就会造成数据的不一致;
4,每个应用系统都必须有各自独立的用户认证模块,这将造成重复开发;
5,由于没有单点登录功能,用户在使用不同的应用系统之时,必须重复登录。
基于以上几点,不难发现,传统开发模式的诸多弊端已经严重影响了WEB应用系统的性能和使用的方便性。

二,LDAP目录服务简介

目录服务是一种专门的数据库,可以用来保存描述性的、基于属性的信息,就像大多数人熟悉的各种各样的目录,像电话簿、黄页,电视指南、购物目录和图书馆卡片目录。听起来像是数据库一样,但“目录”与数据库并不相同,目录的大部分操作为读操作,可以针对大量的查找或者搜索操作进行快速的响应。它们可以具有大范围复制信息的功能,以便提高可用性和可靠性,同时缩短响应时间。

假如你的应用程序要写入大量的数据,你应该考虑选择使用数据库来实现。目录仅支持相对简单的事务处理。相反,数据库被设计成处理大量的各种各样的事务处理。假如你的应用要求这种重负荷的事务支持,你该选择数据库而不是目录。在另一方面,假如你的应用不要求这样的大负荷事务处理,而是偶尔的写一些简单的事务信息。这时,目录是理想的选择。它会更有效,更简单。 (more…)

Read More

CentOS 6安装lnmp+pptp+freeradius+daloradius

本文记录了在CentOS 6系统上安装lnmp + pptp + freeradius + daloradius的过程,已在原生CentOS 6、Linode、digitalocen等VPS上测试过均无问题。

一,安装LNMP
地址见http://lnmp.org/install.html,发布本文时,博主本人安装的是lnmp1.0版

安装完成需要作一些简单的优化,DaloRADIUS需要PEAR的DB插件,原生的LNMP并未安装pear,故这里也需要安装

编辑/usr/local/php/etc/php.ini,找到disable_functions,去掉scandir、fsockopen函数
ln -s /usr/local/php/etc/php.ini /etc/php.ini
wget http://pear.php.net/go-pear.phar
php -f go-pear.phar
按1(修改Installation base),输入/usr/local/pear
按5(修改PHP code directory),输入/usr/local/php/share/pear
按9(修改Public Web Files directory),输入/home/wwwroot
然后回车,提示alter php.ini,选择Y,一路回车

检查一下/usr/local/php/etc/php.ini,检查如下一行,如果没有就加上
include_path=".:/usr/local/php/share/pear"

ln -s /usr/local/pear/bin/pear /usr/bin/pear
pear install DB
/etc/init.d/php-fpm reload

二,安装pptp vpn

wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
yum install pptpd ppp dkms

mknod /dev/ppp c 108 0
echo "mknod /dev/ppp c 108 0" >> /etc/rc.local

编辑/etc/sysctl.conf
修改net.ipv4.ip_forward = 1
sysctl -p
echo "echo 1 > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.local

echo "localip 172.16.36.1" >> /etc/pptpd.conf
echo "remoteip 172.16.36.2-254" >> /etc/pptpd.conf
echo "ms-dns 8.8.8.8" >> /etc/ppp/options.pptpd
echo "ms-dns 8.8.4.4" >> /etc/ppp/options.pptpd

iptables -F
iptables -X
iptables -Z
iptables -t nat -A POSTROUTING -s 172.16.36.0/24 -j SNAT --to-source `ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk 'NR==1 { print $1}'`
iptables -A FORWARD -p tcp --syn -s 172.16.36.0/24 -j TCPMSS --set-mss 1356
/etc/init.d/iptables save
/etc/init.d/iptables restart

/etc/init.d/pptpd start
chkconfig --level 2345 pptpd on

(more…)

Read More

CentOS 6安装gearman

CentOS 6 64bit安装gearman的过程。

1,安装gearman

yum install uuid-devel libuuid libuuid-devel uuid \
boost-devel libevent libevent-devel boost boost-devel \
gcc-c++ mysql-libs mysql libmemcached-devel libmemcached \
make curl libcurl-devel mysql-devel gperf

wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz

CFLAGS=-std=c99 ./configure
make
make install

启动Gearman服务端
/usr/local/sbin/gearmand -d -u root --log-file=/var/loggearmand.log

-b,--backlog= 储备的监听连接数量
-d, --daemon 后台运行
-f, --file-descriptors= 文件描述符的数量
-h, --help 帮助
-j, --job-retries= 在ob server移除不可用job之前运行的次数,防止不断运行导致其他可用worker崩溃。默认没有限制
-l, -log-file= 日志文件存放位置(默认记录最简单日志)
-L, --listen= 监听的IP,默认全部接受
-p, --port= 指定监听端口
-P, --pid-file= 指定进程ID写入位置
-r, --protocol= 加载协议模块
-q, --queue-type= 指定持久化队列
-t, --threads= 使用的I/9线程数量。默认为0
-u, --user= 启动后,切换到指定用户
-v, --verbose 增加一级详细程度
-V, --version 显示版本信息

(more…)

Read More

CentOS安装Mldonkey实现离线下载

这两天使用迅雷离线下载岛国动作片时,被提示”该资源被举报,无法添加到离线空间”,等了好一会,下载进度条一动不动。于是尝试使用百度网盘的离线下载,倒是立刻就下载完了,只是播放时出现了“温馨提示,百度积极响应净网行动号召……”的标识,下载时候也被“偷梁换柱”(原本1G的视频,下载回来的是一个1.6M的视频文件,打开时播放的是“温馨提示,净网行动XXX”)……

博主本人已经在CentOS 5.10系统上测试通过,ed2k的链接均可成功下载,也可以下载BT(.torrent文件,下载方法请见下方)。

CentOS/Redhat系统

yum install mldonkey-server         #centOS/redhat系统, 如果找不到请安装epel源

/etc/init.d/mldonkey start  #必须启动一次才能生成/var/lib/mldonkey/downloads.ini配置文件
/etc/init.d/mldonkey stop   #必须停止服务,才能修改上面的配置文件,否则重启服务后又会变回去

#改此配置文件前请先停止服务,否则修改无效
vim /var/lib/mldonkey/downloads.ini
找到allowed_ips,添加本机的外网IP(可通过ip138.com查询)

/etc/init.d/mldonkey start

Ubuntu系统

sudo apt install mldonkey-server    #ubuntu系统

sudo systemctl stop mldonkey-server    #必须启动一次才能生成/var/lib/mldonkey/downloads.ini配置文件
sudo systemctl start mldonkey-server   #必须停止服务,才能修改上面的配置文件,否则重启服务后又会变回去

#改此配置文件前请先停止服务,否则修改无效
vim /var/lib/mldonkey/downloads.ini
找到allowed_ips,添加本机的外网IP(可通过ip138.com查询)

sudo systemctl start mldonkey-server

然后用浏览器打开http://IP:4080即可看到界面。

下载方法:

web界面右上角有个长条(命令栏),后面有个按钮叫Input,填入地址然后点Input就添加入自动下载了(电驴地址和http),bt的话就输入dllink /root/mulu/test.torrent,然后Input即可。

下载后的文件默认存放为位置:
如果你是使用yum/apt方式安装的, 则存放于/var/lib/mldonkey/incoming/里面
如果你是自编译方式安装的, 则存放于~/.mldonkey/incoming/files/里面

incoming存放的是单个文件, 如果是下载的一个文件夹(bt类),就放在directories里面,当然,这些都是可以修改的。

访问时提示:
SECURITY WARNING: user admin has an empty password, use command: useradd admin password
意思是MLDonkey有个默认用户admin密码为空需要设置一个密码。(PS:删除了这个admin用户MLDonkey会启动不了)

为admin设置一个复杂的密码,在Webgui页面的命令栏输入:
useradd admin xxxxxx
点击后面的input按钮。

使用admin用户登陆,可以再添加一个自己的用户,比如:
useradd zhang3 123456
添加一个zhang3用户,密码是123456。

======================================================
2017.01.25补充一下CentOS 6系统下安装Mldonkey的方法

yum install gcc gcc-c++ make zlib zlib-devel
wget https://sourceforge.net/projects/mldonkey/files/mldonkey/3.1.5/mldonkey-3.1.5.tar.bz2
tar jxvf mldonkey-3.1.5.tar.bz2
cd mldonkey-3.1.5

cat distrib/Install.txt   #查看安装方法
./configure  #中途如果询问是否就按y并回车
gmake        #根据distrib/Install.txt介绍的安装方法, 这里无需make install
cp mlnet /usr/bin/

/usr/bin/mlnet > /dev/null 2>&1 &   #启动程序

netstat -antp | grep :4080    #确保程序运行正常

这样MLDonkey就已经运行起来了。此时会在用户目录下生成.mldonkey隐藏文件夹,里面有很多配置文件。我这里目录是/root/.mldonkey/。主要有这几个:
~/.mldonkey/downloads.ini 基本配置文件
~/.mldonkey/users.ini 用户配置文件
~/.mldonkey/servers.ini 服务器列表文件
~/.mldonkey/files.ini 当前已经完成的和未完成的文件列表
~/.mldonkey/friends.ini 好友列表
~/.mldonkey/mlnet.log 日志文件
~/.mldonkey/incoming/files/ 下载完成以后的文件存放位置

killall /usr/bin/mlnet    #先暂停程序

vim ~/.mldonkey/downloads.ini    #编辑配置文件
找到allowed_ips, 添加允许访问的客户端IP, 然后这些客户端里才可以使用http://IP:4080访问页面

/usr/bin/mlnet > /dev/null 2>&1 &   #启动程序

优化Mldonkey
点击在最上方的”Options”菜单
“Client”选项里
max_hard_upload_rate设置为10 # 如果低于此值, 软件将会强行限制max_hard_download_rate
max_hard_download_rate设置为20480
“Net”选项里
enable_kademlia设置为true
“Files”选项里
“pause_new_downloads”设置为true
“release_new_downloads”设置为true

webserver反代mldonkey
参考这篇文章.

参考文档:
Linux电驴:mldonkey初体验

#########################################

2020.01.26补充
推荐几个mldonkey的docker:
https://hub.docker.com/r/logicwar/mldonkey/
https://github.com/AngeleToR/docker-mldonkey
https://github.com/logicwar/mldonkey

#########################################

2022.10.14补充:

2022.10.14当日发现mldonkey在github主要有2个维护版本
https://github.com/logicwar/mldonkey # 截止2022.10.14的最新版本为3.1.6, 版本发布日期为2021.06.13
https://github.com/ygrek/mldonkey # 截止2022.10.14的最新版本为3.1.7-2,版本发布日期为2020.07.05
这个版本号和时间实在是令人困惑.

不过考虑到, MLDonkey作者之前是在sourceforge更新的, 现在其sourceforge页面(https://sourceforge.net/projects/mldonkey/)已经挂出了notice, 指示此项目现已迁移到https://github.com/ygrek/mldonkey, 所以理论上https://github.com/ygrek/mldonkey才是官方版本.

Read More

CentOS系统下中文文件名乱码

从windows上传到linux的文件或者目录,在Linux系统中显示为乱码。虽然将Linux的env设置了LANG=en_US.UTF-8,并且本地的Shell客户端编码也设置成UTF-8,但在Shell中(或通过http访问),仍是乱码……

原因在于,Windows 的文件名中文编码默认为GBK,压缩或者上传后,文件名还会是GBK编码,而Linux中默认文件名编码为UTF8,由于编码不一致所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。

wget http://pkgs.repoforge.org/convmv/convmv-1.15-1.el6.rf.noarch.rpm
rpm -ivh convmv-1.15-1.el6.rf.noarch.rpm

/usr/bin/convmv -f gbk -t utf-8 -r --notest /home/wwwroot

常用参数:
-r 递归处理子文件夹
–notest 真正进行操作,默认情况下是不对文件进行真实操作
–list 显示所有支持的编码
–unescap 可以做一下转义,比如把%20变成空格
-i 交互模式(询问每一个转换,防止误操作)

linux下有许多方便的小工具来转换编码:
文本内容转换 iconv
文件名转换 convmv
mp3标签转换 python-mutagen

Read More