通过SSH实现端口映射

可以将远端服务器一个端口remote_port绑定到本地端口port,其中-C是进行数据压缩,-f是后台操作,只有当提示用户名密码的时候才转向前台。-N是不执行远端命令,在只是端口转发时这条命令很有用处。-g 是允许远端主机连接本地转发端口。-R表明是将远端主机端口映射到本地端口。如果是-L,则是将本地端口映射到远端主机端口。

ssh的三个强大的端口转发命令:

转发到远端:ssh -C -f -N -g -L 本地端口:目标IP:目标端口 用户名@目标IP

转发到本地:ssh -C -f -N -g –R 本地端口:目标IP:目标端口 用户名@目标IP

ssh -C -f -N -g -D listen_port user@Tunnel_Host

 

-C:压缩数据传输。

-f :后台认证用户/密码,通常和-N连用,不用登录到远程主机。

-N :不执行脚本或命令,通常与-f连用。

-g :在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。

-L 本地端口:目标IP:目标端口

将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R本地端口:目标IP:目标端口

将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-p :被登录的ssd服务器的sshd服务端口。

-D port

指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

应用举例

1.将发往本机的80端口访问转发到174.139.9.66的8080端口

ssh -C -f -N -g -L 80:174.139.9.66:8080 master@174.139.9.66

2.将发往174.139.9.66的8080访问转发到本机的80端口

ssh -C -f -N -g -R 80:174.139.9.66:8080 master@174.139.9.66

 

VPS常用安全设置

一、修改SSH端口

vi /etc/ssh/sshd_config

找到其中的#Port 22(第13行),去掉#,修改成Port 3333

使用如下命令,重启SSH服务,注:以后用新端口登陆。

service sshd restart

二、禁止ROOT登陆

先添加一个新帐号80st ,可以自定义:

useradd 80st

给weidao 帐号设置密码:

passwd 80st

仍旧是修改/etc/ssh/sshd_config文件,第39行:#PermitRootLogin yes,去掉前面的#,并把yes改成no,然后,重启SSH服务。以后,先使用weidao 登陆,再su root即可得到ROOT管理权限。

login as: 80st
weidao@ip password:*****
Last login: Tue Nov 22 15:18:18 2011 from 1.2.3.4
su root
Password:*********** #注这里输入ROOT的密码

三、使用DDos deflate简单防落CC和DDOS攻击

使用netstat命令,查看VPS当前链接确认是否受到攻击:

netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n

IP前面的数字,即为连接数,如果说正常网站,几十到一百都属于正常连接,但出现几百,或上千的就可以垦定这个IP与你的VPS之间可能存在可疑连接现象。

可以使用iptables直接BAN了这个IP的永久访问:

iptables -A INPUT -s 12.34.56.78 -j DROP

使用软件DDos deflate来自动检测并直接BAN掉的方法,首先要确认一下iptables服务状态,默认CENTOS就安装的,不看也行。

service iptables status

安装DDos deflat:

wget http://www.inetbase.com/scripts/ddos/install.sh
chmod +x install.sh
./install.sh

安装后需要修改/usr/local/ddos/ddos.conf,主要是APF_BAN=1要设置成0,因为要使用iptables来封某些可疑连接,注意EMAIL_TO=”root”,这样BAN哪个IP会有邮件提示:

##### Paths of the script and other files
PROGDIR=”/usr/local/ddos”
PROG=”/usr/local/ddos/ddos.sh”
IGNORE_IP_LIST=”/usr/local/ddos/ignore.ip.list” //IP地址白名单
CRON=”/etc/cron.d/ddos.cron”//定时执行程序
APF=”/etc/apf/apf”
IPT=”/sbin/iptables”
##### frequency in minutes for running the script
##### Caution: Every time this setting is changed, run the script with –cron
##### option so that the new frequency takes effect
FREQ=1 //检查时间间隔,默认1分钟
##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=150 //最大连接数,超过这个数IP就会被屏蔽,一般默认即可
##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=1 //使用APF还是iptables。推荐使用iptables,将APF_BAN的值改为0即可。
##### KILL=0 (Bad IPs are’nt banned, good for interactive execution of script)
##### KILL=1 (Recommended setting)
KILL=1 //是否屏蔽IP,默认即可
##### An email is sent to the following address when an IP is banned.
##### Blank would suppress sending of mails
EMAIL_TO=”root”//当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可
##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=600 //禁用IP时间,默认600秒,可根据情况调整

四、使用iftop查看详细网络状况

安装IFTOP软件:

yum -y install flex byacc libpcap ncurses ncurses-devel libpcap-devel
wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
tar zxvf iftop-0.17.tar.gz
cd iftop-0.17
./configure
make && make install

安装后,使用iftop运行,查看网络情况。TX,发送流量;RX,接收流量;TOTAL,总流量;Cumm,运行iftop期间流量;peak,流量峰值;rates,分别代表2秒、10秒、40秒的平均流量。

快捷键:h帮助,n切换显示IP主机名,s是否显示本机信息,d是否显示远端信息,N切换端口服务名称,b切换是否时数流量图形条。

五、升级LNMP中的NGINX到最新版

现在最新版是0.8.53,如果以后出新版,只要更新版本号就可以,在SSH里运行:

wget http://www.nginx.org/download/nginx-0.8.53.tar.gz
tar zxvf nginx-0.8.53.tar.gz
cd nginx-0.8.53
./configure –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_sub_module
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
cd objs/
cp nginx /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginx -t
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
/usr/local/nginx/sbin/nginx -v
cd ..
cd ..
rm -rf nginx-0.8.53
rm -rf nginx-0.8.53.tar.gz

六、常用netstat命令:

1.查看所有80端口的连接数

netstat -nat|grep -i “80″|wc -l

2.对连接的IP按连接数量进行排序

netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n

3.查看TCP连接状态

netstat -nat |awk ‘{print $6}’|sort|uniq -c|sort -rn
netstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}’
netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,”\t”,state[key]}’
netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,”\t”,arr[k]}’
netstat -n |awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn
netstat -ant | awk ‘{print $NF}’ | grep -v ‘[a-z]’ | sort | uniq -c

4.查看80端口连接数最多的20个IP

netstat -anlp|grep 80|grep tcp|awk ‘{print $5}’|awk -F: ‘{print $1}’|sort|uniq -c|sort -nr|head -n20
netstat -ant |awk ‘/:80/{split($5,ip,”:”);++A[ip[1]]}END{for(i in A) print A,i}’ |sort -rn|head -n20

5.用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4}’| sort | uniq -c | sort -nr |head -20

6.查找较多time_wait连接

netstat -n|grep TIME_WAIT|awk ‘{print $5}’|sort|uniq -c|sort -rn|head -n20

7.找查较多的SYN连接

netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more

生成Certificate Signing Request(CSR)

众所周知,申请SSL证书前需要先生成证书注册请求,这里一般使用

openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr

这条命令来生成。生成过程中会填写一些信息,随便写就好。当然最好按实际的填。

Country Name (2 letter code) [AU]: GB
State or Province Name (full name) [Some-State]: Yorks
Locality Name (eg, city) []: York
Organization Name (eg, company) [Internet Widgits Pty Ltd]: MyCompany Ltd
Organizational Unit Name (eg, section) []: IT
Common Name (eg, YOUR name) []: mysubdomain.mydomain.com
Email Address []:

Please enter the following ‘extra’ attributes to be sent with your certificate request

A challenge password []:
An optional company name []:

需要注意的是,CN(Common Name)这一项需要写你要申请的SSL证书所使用的域名。如果是通配符证书,则需要填写*.mydomain.com

生成结束之后,’server.csr’就是你的Certificate Signing Request(CSR),用文本编辑器打开,粘贴到申请证书的地方即可。

‘myserver.key’文件是我们的私钥,这个文件一定要妥善保存不能泄露,否则任何人都可以使用我们的证书了。

在生成的时候,去掉’-nodes’选项会将私钥加密,但是需要一个额外的密码。虽然这样更安全,但是在你将证书部署到Apache或者Nginx的时候你会发现,每次启动服务你都需要输入密码。所以建议还是使用为加密的私钥,方便服务器管理。

Nginx限制每个IP或虚拟机的并发连接数

摘自http://nginx.org/cn/docs/http/ngx_http_limit_conn_module.html

ngx_http_limit_conn_module 模块可以按照定义的键限定每个键值的连接数。特别的,可以设定单一 IP 来源的连接数。

并不是所有的连接都会被模块计数;只有那些正在被处理的请求(这些请求的头信息已被完全读入)所在的连接才会被计数。

配置范例

http {
limit_conn_zone $binary_remote_addr zone=addr:10m;

...

server {

...

location /download/ {
limit_conn addr 1;
}

指令

语法: limit_conn zone number;
默认值: —
上下文: http, server, location
指定一块已经设定的共享内存空间,以及每个给定键值的最大连接数。当连接数超过最大连接数时,服务器将会返回 503 (Service Temporarily Unavailable) 错误。比如,如下配置

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
location /download/ {
limit_conn addr 1;
}

表示,同一 IP 同一时间只允许有一个连接。

当多个 limit_conn 指令被配置时,所有的连接数限制都会生效。比如,下面配置不仅会限制单一IP来源的连接数,同时也会限制单一虚拟服务器的总连接数:

limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

server {
...
limit_conn perip 10;
limit_conn perserver 100;
}

 

如果当前配置层级没有limit_conn指令,将会从更高层级继承连接限制配置。

语法: limit_conn_log_level info | notice | warn | error;
默认值:
limit_conn_log_level error;
上下文: http, server, location
这个指令出现在版本 0.8.18.
指定当连接数超过设定的最大连接数,服务器限制连接时的日志等级。

语法: limit_conn_zone $variable zone=name:size;
默认值: —
上下文: http
设定保存各个键的状态的共享内存空间的参数。键的状态中保存了当前连接数。键的值可以是特定变量的任何非空值(空值将不会被考虑)。 使用范例:

limit_conn_zone $binary_remote_addr zone=addr:10m;
这里,设置客户端的IP地址作为键。注意,这里使用的是$binary_remote_addr变量,而不是$remote_addr变量。$remote_addr变量的长度为7字节到15字节不等,而存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。而$binary_remote_addr变量的长度是固定的4字节,存储状态在32位平台中占用32字节或64字节,在64位平台中占用64字节。一兆字节的共享内存空间可以保存3.2万个32位的状态,1.6万个64位的状态。如果共享内存空间被耗尽,服务器将会对后续所有的请求返回 503 (Service Temporarily Unavailable) 错误。

语法: limit_zone name $variable size;
默认值: —
上下文: http
这条指令在 1.1.8 版本中已经被废弃,应该使用等效的limit_conn_zone指令。该指令的语法也有变化:
limit_conn_zone $variable zone=name:size;

Apache 添加limitipconn模块并限制IP的并发连接数

安装&下载

首先到 http://dominia.org/djao/limitipconn2.html 获取最新版本的下载链接。我这里获取到的是:

http://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2

wget http://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2

bzip2 -d mod_limitipconn-0.24.tar.bz2

tar -xvf mod_limitipconn-0.24.tar

apxs2 -c -i -a mod_limitipconn.c

这里的apxs2是Ubuntu里面的一个可选组件,默认没有安装,需要自行使用apt-get install apache2-dev安装。

如果是CentOS,应该使用yum install httpd-devel来安装,而且安装之后的可执行程序名是apxs。

RH系的可以找httpd-devel的rpm包使用rpm命令安装,在此不再细说。

之后,检查httpd.conf或apache2.conf里面是否有LoadModule limitipconn_module modules/mod_limitipconn.so,如果有则正常,继续向下看:

###下面就是对web目录下的文件下载限制 

 #所限制的目录所在,此处表示主机的根目录
MaxConnPerIP 3 #所限制的每个IP并发连接数为3个
NoIPLimit image/* #对图片不做IP限制

 #所限制的目录所在,此处表示主机的/mp3目录
MaxConnPerIP 1 #所限制的每个IP并发连接数为1个
OnlyIPLimit audio/mpeg video #该限制只对视频和音频格式的文件

重启即可。

linux运维:Linux下添加新硬盘+分区及挂载详细步骤图解

原文地址:Linux下添加新硬盘,分区及挂载 作者:sjhf

挂载好新硬盘后输入fdisk -l命令看当前磁盘信息

200811221227366545284
可以看到除了当前的第一块硬盘外还有一块sdb的第二块硬盘,然后用fdisk /dev/sdb 进行分区
200811221227366641881
进入fdisk命令,输入h可以看到该命令的帮助,按n进行分区
200811221227366718341
这里输入e即分为逻辑分区,按p即分为主分区,我们要将这块盘分为主分区即输入p
200811221227366772225
到这里输入该主分区为第几个主分区,由于是新盘我们输入1来分第一个主分区
200811221227366848997
First Cylinder是选择该分区的起始磁盘数,这里可自定义也可不做选择,默认是1,如无特殊需求强烈建议选择默认,也就是1来分区(直接按回车)
200811221227366906209
接下来是定义该分区的大小,如果按默认(按回车)即是使用全部可用存储额,也可以是用M或m单位结尾的数字(大写M是大B的意思,如果输入1M实际上是X8也就是8m的空间),这里我们先分一个1G的空间,所以输入+1024m
200811221227366953843
之后输入w写入分区,等待结束皆可
200811221227367048972
再输入fdisk -l 可以看到我们刚才分的一个分区,之后用mkfs -t ext3 -c /dev/sdb1进行格式化,如有多个分区可把sdb1改成sdb2 sdb3…以此类推,具体可用fdisk -l看到每个分区的名字
200811221227367365971
上图蓝色部分是写硬盘卷标的,如不想要卷标可直接按回车,现在分区好了我们用mount 挂载一下该分区即可使用了,这里我把它挂载到mnt目录下,也可以自建一个目录挂载
200811221227367426106
来看一下分区大小是否和预定的一样,使用df -TH命令看一下当前挂载的分区和大小,看到我们刚分的分区了吧
200811221227367491115
如果想每次系统重启都能自动挂载该分区可修改/etc/fstab文件,在最后加一段 /dev/sdb1    /www    ext3    defaults 1 2 (格式说明:/dev/sdb1 代表哪个分区  ext3是该分区的格式 defaults 是挂载时所要设定的参数(只读,读写,启用quota等),输入defaults包括的参数有(rw、dev、exec、auto、nouser、async) ,1是使用dump是否要记录,0是不要。 2是开机时检查的顺序,是boot系统文件就为1,其他文件系统都为2,如不要检查就为0)
200811221227367562514

linux一条命令添加一个root级别账户并设置密码

内网机器提权添加账户,无回显,设置密码就不好弄,下面就是添加一个root级别的账户并设置密码的命令

 useradd -p `openssl passwd -1 -salt ‘lsof’ admin` -u 0 -o -g root -G root -s /bin/bash -d /home/lsof lsof

命令解释

useradd 添加用户
-p `openssl passwd -1 -salt ‘lsof’ admin` 这个里面的指的是设置用户的密码,里面的lsof差不多是密钥之类的,可以随便写, admin是明文密码
-u 0 -o 添加一个uid为 0的用户 就相对于root级别的了
-g root -G root 将用户添加到root组
-s /bin/bash 指定新建用户的shell路径
-d /home/lsof 新建用户的主目录,可以自己定义
lsof 新建的用户的用户名

编译安装rtorrent并添加IPv6支持

本文章安裝方式參考下面這篇文章,
http://filesharefreak.com/2010/02/13/how-to-install-rtorrent-rutorrent-using-socket-ssl-authentication-on-ubuntu-or-debian/
其實只能算是該篇文章的部份中譯, 並補上 IPv6 的支援,
IPv6 部份參考
http://libtorrent.rakshasa.no/ticket/1111
http://ihipop.info/2010/08/1363.html
(1) 先連上 SSH 並以 root 的身份開始進行安裝
su root
(2) 更新 apt 資料庫
apt-get update
(3) 安裝相依套件
apt-get install -y build-essential pkg-config libcurl4-openssl-dev libsigc++-2.0-dev libncurses5-dev lighttpd screen subversion libterm-readline-gnu-perl php5-cgi apache2-utils php5-curl curl php5-cli
(3) 安裝 libtorrent
cd ~
wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.12.6.tar.gz
tar zxfv libtorrent-0.12.6.tar.gz
cd libtorrent-0.12.6
wget http://home.samfundet.no/~sesse/libtorrent-0.12.6-ipv6-07.patch
patch -p1 < libtorrent-0.12.6-ipv6-07.patch ======================== 修改 libtorrent 程式碼 libtorrent-0.12.6/rak/string_manip.h 第186行:由 return 'A' + v - 0xA; 改為 return 'a' + v - 0xA; ======================== ./configure --enable-ipv6 make make install (4) 安裝 XMLRPC-C cd ~ svn checkout http://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/stable xmlrpc-c cd xmlrpc-c/ ./configure make make install (5) 安裝 rTorrent: cd ~ wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.8.6.tar.gz tar zxfv rtorrent-0.8.6.tar.gz cd rtorrent-0.8.6 wget http://home.samfundet.no/~sesse/rtorrent-0.8.6-ipv6-07.patch patch -p1 < rtorrent-0.8.6-ipv6-07.patch ./configure --with-xmlrpc-c --enable-ipv6 make make install (6) 接下來為了讓 rtorrent 能夠開機就自動執行,需要作下面的動作 vim /etc/init.d/rtorrent.sh 將下面的文字寫到 /etc/init.d/rtorrent.sh 將 snowwolf725 改成你自己的使用者 ID =========================== #!/bin/sh case "$1" in start) echo -n "Starting rtorrent" su - snowwolf725 -c "screen -A -m -d -S rtorrent /usr/local/bin/rtorrent" & echo "." ;; stop) echo -n "Stopping rtorrent" ppid=`ps ax | grep "/usr/local/bin/rtorrent" | grep -v grep | grep -v screen | awk '{ print $1 }'` kill ${ppid} rm /tmp/rpc.socket echo "." ;; restart) echo -n "Restarting rtorrent" ppid=`ps ax | grep "/usr/local/bin/rtorrent" | grep -v grep | grep -v screen | awk '{ print $1 }'` kill ${ppid} rm /tmp/rpc.socket sleep 1 su - snowwolf725 -c "screen -A -m -d -S rtorrent /usr/local/bin/rtorrent" & echo "." ;; *) echo "Usage: {start|stop|restart}" >&2
exit 1
;;
esac
exit 0

==============================
讓該檔案變成可以執行
chmod +x /etc/init.d/rtorrent.sh
(7)換成一般使用者的身份, 這裡的 snowwolf725 要換成你自己的使用者名稱, 要先更新函式庫 cache
ldconfig
su snowwolf725
cd ~
(8) 設定 rTorrent
vim .rtorrent.rc

依照下面的設定檔改成自己可以用的設定檔#開頭的那幾行是註解可以不用打, vim 有分編輯模式和命令模式,一開始進入是命令模式,按 i 或是 a 可以進入編輯模式打字,按 ESC 可以離開編輯模式回到命令模式,輸入 [:w](不包涵中括號,即冒號和w) 然後按下 Enter 可以寫入檔案,[:q!] 按下Enter 可以離開畫面, 其實檔案可以先打好命名成 .rtorrent.rc 利用 PPutty (不是putty)上傳到主機就可以了(上傳方法是開啟 pputty 並登入然後將檔案拖曳到 pputty,會詢問你帳號密碼傳完預設在家目錄下面)
主要需要修改的是
各個 rtorrent 的目錄
===================================
# 最大最小連接數
min_peers = 50
max_peers = 100

# 最大最小連接數(對於已經完成下載的種子)
min_peers_seed = 10
max_peers_seed = 100

# 最大同時上傳的連接數
max_uploads = 50
# 檔案名稱編碼
encoding_list = UTF-8
# 上下傳 ratio (0表示不限)
download_rate = 0
upload_rate = 0

# 存放下載檔案的路徑
directory = /home/snowwolf725/data
# rtorrent 的工作目錄
session = /home/snowwolf725/session

# 每五分鐘查看特定目錄並下載新的種子
schedule = watch_directory,5,5,load_start=/home/snowwolf725/watch/*.torrent

# Server 的 IP 和 Domain name (IPv6 不能綁 IPv4 的 address)
# ip = 1.2.3.4
# ip = ks00000.kimsufi.com
# bind = 1.2.3.4
# rtoreent 所使用的 port
port_range = 49152-65535
# 是否使用 udp 的 Tracker
use_udp_trackers = yes
# 連線加密(允許加密連線連入,但預設使用未加密連線)
encryption = allow_incoming,enable_retry,prefer_plaintext
# 依照種子設定決定是否開啟 DHT
dht = auto

# DHT 的 port
dht_port = 19000

# 是否開啟 peer exchange 功能(開啟)
peer_exchange = yes
umask = 0000
on_erase = rm_complete,”execute=rm,-rf,$d.get_base_path=”
schedule = low_diskspace,5,5,close_low_diskspace=100M

# 不作 hash 檢查檔案完整性
check_hash = no

==============================
(9) 測試 rtorrent
執行 rtorrent
這樣就完成了, 按 Ctrl+q 可以離開 rtorrent

 

PS,Ubuntu经过这种方式安装启动rtorrent可能会报错说找不到libtorrent这个库。此时将/usr/local/bin/rtorrent复制到/usr/bin/下,将/usr/local/lib/libtorrent.so.11和/usr/local/lib/libtorrent.so.11.0.6复制到/usr/lib/下再启动rtorrent即可。

mysqld Errcode:13 解决方法

当看到错误日志里面如下记录:

mysqld started

[Warning] Can’t create test file xxx.lower-test
[Warning] Can’t create test file xxx.lower-test
/usr/libexec/mysqld: Can’t change dir to ‘/xxx’ (Errcode: 13)

[ERROR] Aborting

首先检查数据目录和日志目录的权限和所属用户,如果权限和所属用户都没问题,那应该是SELINUX的权限限制了。

先查看当前配置信息.

# getenforce

Enforcing

就表明SELinux已经启用.只需要关闭即可。

关闭方法:

#setenforce 0 (0|1 开|关)

对你的数据目录和日志目录执行如下命令:

#chcon -R -t mysqld_db_t /xxx

一切问题迎刃而解

SmartOS 与 Linux 不同点总结

在SmartOS用户中最常见的问题之一就是,既然说SmartOS和Linux类似,那除了那些看不见的技术细节,在使用时到底有什么不同呢?如果已经熟练操作Linux,那SmartOS能快速上手么?答案是当然能,其实常用的不同之处并不多。这篇文章将回答Linux与SmartOS在操作上的不同之处。

原文链接:http://wiki.joyent.com/wiki/display/jpc2/The+Joyent+Linux-to-SmartOS+Cheat+Sheet
原文标题:The Joyent Linux-to-SmartOS Cheat Sheet

SmartMachine和其他类Unix系统不同之处主要在于两类:

  • 命令类似,但在SmartOS中用不同的名字
  • 完成类似的任务,但在SmartOS中有不同的实现过程

这里列出一个命令列表,用来帮助Linux用户找到在SmartOS中与Linux对等的命令。

  • Linux 和 SmartOS 命令对比列表
  • 不同使用语境(Use Context)的例子
    • 检查进程和内存
    • 启动和停止服务

Linux and SmartOS 命令对比列表

任务 / 操作系统 Linux SmartOS
表中某些键值的含义
(rh) = Red Hat, Mandrake, SUSE,…
(deb) = Debian, Libranet,…
(fed) = Fedora
(gen) = Gentoo
(md) = Mandrake/Mandriva
(SUSE) = SUSE
Joyent SmartOS

开源版本可参见链接 http://smartos.org

管理用户
managing users
useradd
usermod
userdel
adduser
chage
getent
useradd
userdel
usermod
getent
logins
/usr/sadm/bin/smuser
groupadd
列举硬件配置信息
list hardware configuration
arch
uname
dmesg (if you’re lucky)
cat /var/log/dmesg
/proc/*
lshw
dmidecode
lspci
lspnp
lsscsi
lsusb
lsmod
(SUSE) hwinfo
/sys/devices/*
prtconf -v
arch -k
psrinfo -v
isainfo -v
dmesg
iostat -En
prtfru
cfgadm -l
/etc/path_to_inst
read a disk label fdisk -l prtvtoc
label a disk cfdisk
fdisk
e2label
format
prtvtoc
磁盘分区
partition a disk
parted (if you have it)
cfdisk
fdisk
pdisk (on a Mac)
(deb) mac-fdisk (on a Mac)_
(md) _diskdrake
format
fmthard
kernel /boot/vmlinuz*
/boot/bootlx
(see /etc/lilo.conf or /boot/grub/menu.lst)
/kernel/genunix
/platform/`uname -m`/
kernel/unix
show/set kernel parameters /proc/*
/proc/sys/*
sysctl
/etc/sysctl.conf
sysdef
getconf
cat /etc/system
ndd
adb -k
loaded kernel modules lsmod modinfo
load module modprobe
insmod
modload
unload module rmmod
modprobe -r
modunload
启动脚本
startup scripts
/etc/rc* (but may vary)
/etc/init.d/
/etc/rc*
/etc/init.d/
svcadm
svcs
启动/停止/配置 服务
start/ stop/ config services
(rh) _service
(rh) _chkconfig
(deb) _sysv-rc-conf
svcs
svcadm
终止或关机
shutdown (& power off if possible)
shutdown -Ph now
shutdown -y -g0 -i0
halt
poweroff
shutdown -y -g0 -i5
run levels
*=normal states 
更多细节可参见
www.phildev.net/runlevels.html
(set in /etc/inittab)
0: halt
s,S,1: vendor-dependent
1: single-user
2-5*: multiuser
6: reboot
0: firmware monitor
s,S: single-user
1: sys admin
2: multiuser
3*: share NFS
4*: user-defined
5: power-down if possible
6: reboot
show runlevel  /sbin/runlevel who -r
时区信息
time zone info
/usr/share/zoneinfo/
/etc/localtime
/usr/share/lib/zoneinfo/
检查交换空间
check swap space
swapon -s
cat /proc/meminfo
cat /proc/swaps
free
swap -s
swap -l
bind process to CPU taskset (sched-utils) pbind
“正常”的文件系统
“normal” filesystem
ext2
ext3
ReiserFS
zfs (OpenSolaris)
文件系统描述
file system description
/etc/fstab /etc/vfstab
创建文件系统
create filesystem
mke2fs
mkreiserfs
mkdosfs
mkfs
zfs
文件系统调试和恢复
file system debugging and recovery
fsck
debugfs
e2undel
fsck
fsdb
clri
create non-0-length empty file dd if=/dev/zero of=filename
bs=1024k count=desired
mkfile
创建/挂载 ISO 镜像
create/mount ISO image
mkisofs
mount -o loop pathToIso
mountPoint
mkisofs;DEVICE=`lofiadm -a /absolute_pathname/image.iso` ; mount -F hsfs -o ro
$DEVICE
ACL management getfacl
setfacl
getfacl
setfacl
NFS share definitions /etc/exports /etc/dfs/dfstab
dfshares
NFS share command /etc/init.d/nfs-server reload_(rh)__ _exportfs -a share
shareall
NFS information cat /proc/mounts showmount
nfsstat
name resolution order /etc/nsswitch.conf
/etc/resolv.conf
/etc/nsswitch.conf
getent
显示网络接口信息
show network interface info
ifconfig
ethtool
dladm
ndd
ifconfig -a
netstat -in
dladm
修改IP
change IP
Joyent 公共云IP地址在云管理平台中设置 Joyent 公共云IP地址在云管理平台中设置
ping one packet ping -c 1 hostname ping hostname  packetsize 1
监听网络
sniff network
etherfind
tcpdump
wireshark (formerly _ethereal)
etherape
snoop
route definitions route
(rh) /etc/sysconfig/network
(rh) /etc/sysconfig/static-routes
(deb) /etc/init.d/network
(deb) /etc/network
/etc/defaultrouter
/etc/notrouter
/etc/gateways
in.routed
netstat -r
route add
telnetd, ftpd banner /etc/issue.net (telnet)
(ftp varies; can use tcp wrappers)
/etc/default/telnetd
/etc/default/ftpd
设置日期/时间
set date/time

(from net: ntp or other)
ntpdate
rdate
netdate
ntpdate
rdate
auditing auditd
/var/log/faillog
audit
auditd
auditreduce
praudit
加密后的密码在
encrypted passwords in
/etc/shadow (may vary) /etc/shadow
最小密码长度
min password length
/etc/pam.d/system-auth /etc/default/passwd
允许/禁止 root 登录
allow/deny root logins
/etc/securetty /etc/default/login
防火墙配置
firewall config
iptables
ipchains
ipfwadm
(rh) redhat-config-
securitylevel
/etc/ipf/ipf.conf
显示已安装的软件
show installed software
(rh) _rpm -a -i
(rh) _rpm -qa
(rh) yum list installed
(deb) dselect
(deb) aptitude
(deb) dpkg -l
(gen) _ls /var/db/pkg/*
(gen) _eix -I
pkgin list
安装/添加软件
add software
(rh) _rpm -hiv
(rh) yum install pkg
(deb) dselect
(deb) _apt-get install _pkg
(deb) dpkg -i
pkgin install
预编译的二进制版本
(GPLware and freeware)
www.linux.org
linux.tucows.com
sourceforge.net
rpmfind.net
(deb) ftp.debian.org
(deb) packages.debian.org
(gen) packages.gentoo.org
(gen) gentoo-portage.com;
(md) easyurpmi.zarb.org
pkgsrc.joyent.com/sdc6/
www.sunfreeware.com
www.blastwave.org
C 编译器
C compiler
cc
gcc
/opt/SUNWspro/
bin/cc
configure/show  runtime linking ldconfig
ldd
lsmod
crle
ldd
pldd
modinfo
LD_PRELOAD
链接库路径
link library path
$LD_LIBRARY_PATH
/etc/ld.so.conf
$LD_LIBRARY_PATH
跟踪工具
tracing utility
strace
ltrace
truss
sotruss
dtrace
定义用户默认配置
define user defaults
/etc/profile
/etc/security/
/etc/skel/
/etc/profile.d/*
/etc/default/login
/etc/profile
/etc/security/
csh global .login /etc/csh.login /etc/.login
默认的 syslog 和 信息
default syslog and messages
/var/log/syslog
/var/log/messages
/usr/adm/messages
/var/log/maillog
/var/adm/messages
/var/log/syslog
softpanorama.org/Logs/solaris_logs.shtml
system error reporting tool dmesg_(deb)_ reportbug prtdiag
性能监测
performance monitoring
vmstat
procinfo -D
top
htop
pstree
prstat
ostat
kstat
mpstat
netstat
nfsstat
trapstat
vmstat
ptree
match process to file or port lsof
netstat -atup
fuser
pfiles
维基百科
Wikipedia
Linux Illumos

 

 

 

不同使用语境(Use Context)的例子

比如,一些常见的Linxu命令的工作过程有些不同。, here are some common Linux commands that work differently.

命令 在SmartMachine上有何不同
df 在大多数SmartOS镜像,它是使用的 GNU 版本。可以用 /usr/bin/df 来运行 native 版本
lsof SmartMachine 使用不同的命令集来检查进程,下面会谈及。
ping 返回host主机是否有响应,使用 ping -s 返回持续的响应
top top 在 /opt/local/bin 里面,但 prstat -Z 提供比 top 有关资源池更多且更准确的信息

Rosetta Stone for Unix 是一个有用的资源,可以帮你看看你经常使用的UNIX版本和其他的UNIX版本(包括Mac)有何不同,并如何对应。

检查进程和内存


在旧的SmartOS镜像中,这些命令提供了端口和相关资源的信息,使用root或sudo可运行它们。
新的镜像使用的是 SmartMachine 工具包(Tools Package)

命令 描述 例子
pcp 显示被进程使用的端口们,或者进程们使用哪个端口 /root/bin/pcp -p 80 显示所有使用80端口的进程
/root/bin/pcp -P 28068 显示进程28068使用的所有端口
/root/bin/pcp -a 显示所有端口的端口及进程信息
jinf 显示你的SmartMachine正如何使用它的资源 /root/bin/jinf -c 显示CPU的使用信息
/root/bin/jinf -m 显示内存使用信息
/root/bin/jinf -s 显示交换空间使用信息

SmartOS 提供了一个工具套件来检查进程,可以在 proc 的 man page 中学习到更多内容。

工具 描述
prstat 这个工具显示活动的进程列表,类似Linux中的 top 命令
prstat -Z 将为提供你的SmartMachine状态的摘要信息
pgrep 根据指定的条件或模式返回进程的进程ID(PID)列表,一般是用来判断程序是否正在运行。
pkill 根据指定的条件或模式中止进程
pfiles 返回属于某个进程的所有打开文件列表
pstack 显示指定进程所有的线程的调用栈
ptree 显示所有进程或指定进程的进程树
ls /proc 列举所有正在运行的进程ID

你可以将 pgrep 的结果和其他 proc 工具合并显示。比如,显示与 http 进程相关的所有文件,可以使用如下命令来替代 lsof:

$ sudo pfiles $(pgrep http)

若要限制 prstat 显示 http 进程,可以使用命令:

$ prstat $(pgrep -d , http)
注意:如果 prstat 显示改变了你的终端设置,可以使用 reset 命令返回到正常状态

对于 vmstatmpstat 和 psrinfo 命令,主要显示物理机中处理器和内存的统计信息。这些输出一般来说对于SmartMachine的管理员才有用。

 

启动和停止服务

在其他系统中,你也许习惯使用命令在 /etc/init.d 来启动或停止服务。
SmartMachines 使用 Service Management Facility 来做到这些。

命令 svcs 和 svcadm 是你经常会使用到的。有些命令把 service identifier 叫做FMRI(Fault Management Resource Identifier)。
你可以使用 svcs 命令列举一个服务所有的 identifier 。

命令 描述
svcs 列举所有已启用的服务
svcs -a 列举所有服务,即使有些已经被禁止或offline
svcadm enable apache 使用apache FMRI 启用所有进程
svcadm disable apache 使用apache FMRI 禁止所有进程
svcadm restart apache 使用apache FMRI 重启所有进程

比如,如果你想更改 /etc/ssh/sshd_config 后重启SSH,可以这样做:

$ sudo svcadm restart ssh