正在筛选分类:菜鸟Linux笔记 下的文章 清除筛选 ✕
2012
09
11
17:29

购买VPS后简单测试

一、CPU信息及性能查看

cat /proc/cpuinfo

二、硬盘IO性能测试

root@h:~# dd if=/dev/zero of=test bs=64k count=4k oflag=dsync && rm test

4096+0 records in

4096+0 records out

268435456 bytes (268 MB) copied, 6.19022 s, 43.4 MB/s

root@h:~# dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync && rm test

16384+0 records in

16384+0 records out

1073741824 bytes (1.1 GB) copied, 6.32504 s, 170 MB/s

测试结果,如果超过10M,对正常建站就无影响。超过50M,就是非常给力状态。

2012
09
10
15:59

ssh只允许指定的用户登陆

方法1:在/etc/pam.d/sshd文件第一行加入

auth required pam_listfile.so item=user sense=allow file=/etc/sshusers

onerr=fail

然后在/etc下建立sshusers文件,编辑这个文件,加入你允许使用ssh服务的用户名,不用重新启动sshd服务。

 

方法2:pam规则也可以写成deny的

auth required pam_listfile.so item=user sense=deny file=/etc/sshusers

onerr=succeed

 

方法3:在sshd_config中设置AllowUsers,格式如

AllowUsers a,b,c

重启sshd服务,则只有a/b/c3个用户可以登陆

2012
09
10
15:57

linux 限制root用户SSH登录

1、修改SSHD服务的配置文件/etc/ssh/sshd_config

将#PermitRootLogin yes 改为PermitRootLogin no

2、重启sshd服务使配置生效

/etc/rc.d/init.d/sshd restart

 

为了增强linux的安全性,应该限制只有wheel组的用户可以使用su命令切换到root和其他用户:

 

1、修改su命令的认证配置文件/etc/pam.d/su

 

去掉以下两行前的#号注释

#auth sufficient pam_wheel.so trust use_uid (去年注释后ROOT组成员使用su切换到root不需要密码)

#auth required pam_wheel.so use_uid  (去年注释后只允许ROOT组成员使用su切换到root)

2、创建一个普通用户,然后将这个用户加入到wheel组即可!以后就只有这个普通用户和root可以使用su命令了

usermod -G 组 用户

 

su命令使用简介:

 

su 直接切换到root用户,但保持原用户的环境变量;

su – 切换到root用户,并使用root用户的环境变量;

 

su -l test 切换到test用户,并使用test的环境变量;

2012
09
10
15:16

nginx 禁止ip访问及未绑定的域名跳转

ngixn 禁止ip访问和未绑定ip的访问

 

server {

listen 80 default;

server_name _;

return 500;

}

 

 

 

nginx 将未绑定的域名跳转

 

server {

listen 80 default;

rewrite ^(.*) http://www.kogoogle.com permanent;

}

2012
09
09
10:03

优化 MySQL 效能

最理想是在安装时已做好优化,但如果已经安装好 MySQL 后才需要做优化的话,可以通过设定 /etc/my.cnf 来做。如果不熟悉 my.cnf 内的设定也没关係,可以直接使用 MySQL 的范例档,在 /usr/share/mysql/ 下会有 my-huge.cnf, my-large.cnf, my-medium.cnf 及 my-small.cnf 几个档案,根据伺服器的硬件而选择适合的档案:

 

my-huge.cnf: 适合 1GB – 2GB RAM的主机使用。

my-large.cnf: 适合 512MB RAM的主机使用。

my-medium.cnf: 只有 32MB – 64MB RAM 的主机使用,或者有 128MB RAM 但需要运行其他伺服器,例如 web server。

my-small.cnf: 记忆体少於 64MB 时适用这个,MySQL 会佔用较少资源。

我选用了 my-large.cnf,只要执行以下指令便完成了,但如果你原先已经有 my.cnf,请先备份起来及自行调整:

 

shell> cp /usr/share/mysql/my-large.cnf /etc/my.cnf

shell> /etc/init.d/mysqld restart

2012
09
06
23:41

nginx报错nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx报错nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

仔细参考nginx中文文档发现,发送信号USR2时,自动启动新的可执行文件,再手动启动的话就会报错

本质上也算是一种地址冲突吧

 

如果平时安装时遇见该错误,就是80端口被占用,

找出占用80端口的程序杀掉即可

代码如下:

shell>netstat -tunlp

shell>pkill 占用80端口的程序

即可消除该错误

2012
09
02
10:04

samba搭建

安装samba

#yum install samba

 

配置samba

#vi /etc/samba/smb.conf

添加修改如下内容

workgroup = MYGROUP //更改为你所在的工作组

server string = Samba Server %U %G //更改显示信息,会在windows访问时最上方显示相关信息

设定机器的描述,当我们通过网络邻居访问的时候可以在备注里面看见这个内容,而且还可以使用samba设定的变量。这里说一下samba定义的变量:

%S = 当前服务名(如果有的话)

%P = 当前服务的根目录(如果有的话)

%u = 当前服务的用户名(如果有的话)

%g = 当前用户说在的主工作组

%U = 当前对话的用户名

%G = 当前对话的用户的主工作组

%H = 当前服务的用户的Home目录

%v = Samba服务的版本号。

%h = 运行Samba服务机器的主机名

%m = 客户机的NETBIOS名称

%L = 服务器的NETBIOS名称

%M = 客户机的主机名

%N = NIS服务器名

%p = NIS服务的Home目录

%R = 说采用的协议等级(值可以是CORE, COREPLUS, LANMAN1, LANMAN2,NT1)

%d = 当前服务进程的ID

%a = 客户机的结构(只能识别几项:Samba,WfWg,WinNT,Win95)

%I = 客户机的IP

%T = 当前日期和时间

灰色信息不添加

#interfaces = 192.168.0.0/24 //可使用samba的网段,注释掉为全部

[share] //显示的共享名

path = /var/share //共享路径

valid users = @test1,@test2 //共享文件属主,可以是用户也可以是组,组前加@

browseable = no //非本共享用户是否可以看到,no为看不到,yes或注释掉就可看到

writable = no //缺省是否可写

read list = @test1 //只读用户组也可以加用户

write list = @test2 //可写用户组也可以加用户

create mode = 0755 //创建的文件权限

directory mode = 0755 //创建的文件夹权限

保存以上信息

#mkdir /var/share //创建share目录

#chmod 777 /var/share //将share目录权限设为777

#groupadd test1 //添加test1组

#groupadd test2

#useradd -M -g test1 -s /sbin/nologin test1 //新建系统用户,无home,无shell,添加到test1组

#useradd -M -g test2 -s /sbin/nologin test2

#smbpasswd -a test1 //添加samba用户必添加密码,修改密码不用加-a

#smbpasswd -a test2

好了,重启samba就可以用windows登录了

—————————————————————–

以下是一些相关说明

comment指的是对改共享的备注。

path 指定共享的路径,其中可以配合samba变量使用。比如你可以指定path=/data/%m,这样如果一台机器的NETBIOS名字是

grind,它访问MyShare这个共享的时候就是进入/data/grind目录,而对于NETBIOS名是glass的机器,则进入/data/

glass目录。

allow hosts和deny hosts和前面的全局设置的方法一样这里不再提及。

writeable指定了这个目录缺省是否可写,也可以用readonly = no来设置可写。

user设置所有可能使用该共享资源的用户,也可以用@group代表group这个组的所有成员,不同的项目之间用空格或者逗号隔开。

valid users指定能够使用该共享资源的用户和组。

invalid users指定不能够使用该共享资源的用户和组。

read list 指定只能读取该共享资源的用户和组。

write list指定能读取和写该共享资源的用户和组。

admin list指定能管理该共享资源(包括读写和权限赋予等)的用户和组。

public指明该共享资源是否能给游客帐号访问,这个开关有时候也叫guest ok,所以有的配置文件中出现guest ok = yes其实和

public = yes是一样的。

hide dot files指明是不是像unix那样隐藏以”.”号开头的文件。

create mode指明新建立的文件的属性,一般是0755。

directory mode指明新建立的目录的属性,一般是0755。

sync always指明对该共享资源进行写操作后是否进行同步操作。

short preserve case指明不管文件名大小写。

preserve case指明保持大小写。

case sensitive指明是否对大小写敏感,一般选no,不然可能引起错误。

mangle case指明混合大小写。

default case指明缺省的文件名是全部大写还是小写。

force user强制把建立文件的属主是谁。如果我有一个目录,让guest可以写,那么guest就可以删除,如果我用force user=

grind强制建立文件的属主是grind,同时限制create mask = 0755,这样guest就不能删除了。

wide links指明是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或者目录,如果设置wide links =

no将使该连接不可用。

max connections = n设定同时连接数是n。

delete readonly指明能否删除共享资源里面已经被定义为只读的文件。

2012
08
28
10:03

解决phpmyadmin使用链接表的额外特性尚未激活的方法

解决方案:

libraries/config.default.php,将$cfg[‘PmaNoRelation_DisableWarning’]的值改为ture。

分别修改:

$cfg[‘Servers’][$i][‘pmadb’] = ”; // ‘phpmyadmin’ – see scripts/create_tables.sql

$cfg[‘Servers’][$i][‘bookmarktable’] = ”; // ‘pma_bookmark’

$cfg[‘Servers’][$i][‘relation’] = ”; // ‘pma_relation’

$cfg[‘Servers’][$i][‘table_info’] = ”; // ‘pma_table_info’

$cfg[‘Servers’][$i][‘table_coords’] = ”; // ‘pma_table_coords’

$cfg[‘Servers’][$i][‘pdf_pages’] = ”; // ‘pma_pdf_pages’

$cfg[‘Servers’][$i][‘column_info’] = ”; // ‘pma_column_info’

$cfg[‘Servers’][$i][‘history’] = ”; // ‘pma_history’

$cfg[‘Servers’][$i][‘designer_coords’] = ”;

修改为:

$cfg[‘Servers’][$i][‘pmadb’] = ‘phpmyadmin’; // ‘phpmyadmin’ – see scripts/create_tables.sql

$cfg[‘Servers’][$i][‘bookmarktable’] = ‘pma_bookmark’; // ‘pma_bookmark’

$cfg[‘Servers’][$i][‘relation’] = ‘pma_relation’; // ‘pma_relation’

$cfg[‘Servers’][$i][‘table_info’] = ‘pma_table_info’; // ‘pma_table_info’

$cfg[‘Servers’][$i][‘table_coords’] = ‘pma_table_coords’; // ‘pma_table_coords’

$cfg[‘Servers’][$i][‘pdf_pages’] = ‘pma_pdf_pages’; // ‘pma_pdf_pages’

$cfg[‘Servers’][$i][‘column_info’] = ‘pma_column_info’; // ‘pma_column_info’

$cfg[‘Servers’][$i][‘history’] = ‘pma_history’; // ‘pma_history’

$cfg[‘Servers’][$i][‘designer_coords’] = ‘pma_designer_coords’;

2012
08
24
15:07

利用iptables来配置linux禁止所有端口登陆和开放指定端口

1、关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放。

下面是命令实现:

 

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT DROP

 

再用命令 iptables -L -n 查看 是否设置好, 好看到全部 DROP 了

这样的设置好了,我们只是临时的, 重启服务器还是会恢复原来没有设置的状态

还要使用 service iptables save 进行保存

看到信息 firewall rules 防火墙的规则 其实就是保存在 /etc/sysconfig/iptables

可以打开文件查看 vi /etc/sysconfig/iptables

2、

下面我只打开22端口,看我是如何操作的,就是下面2个语句

 

iptables -A INPUT -p tcp –dport 22 -j ACCEPT

iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT

 

再查看下 iptables -L -n 是否添加上去, 看到添加了

 

Chain INPUT (policy DROP)

target prot opt source destination

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

 

Chain FORWARD (policy DROP)

target prot opt source destination

 

Chain OUTPUT (policy DROP)

target prot opt source destination

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp spt:22

 

现在Linux服务器只打开了22端口,用putty.exe测试一下是否可以链接上去。

可以链接上去了,说明没有问题。

 

最后别忘记了保存 对防火墙的设置

通过命令:service iptables save 进行保存

 

iptables -A INPUT -p tcp –dport 22 -j ACCEPT

iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT

针对这2条命令进行一些讲解吧

-A 参数就看成是添加一条 INPUT 的规则

-p 指定是什么协议 我们常用的tcp 协议,当然也有udp 例如53端口的DNS

到时我们要配置DNS用到53端口 大家就会发现使用udp协议的

 

而 –dport 就是目标端口 当数据从外部进入服务器为目标端口

反之 数据从服务器出去 则为数据源端口 使用 –sport

 

-j 就是指定是 ACCEPT 接收 或者 DROP 不接收

3、禁止某个IP访问

1台Linux服务器,2台windows xp 操作系统进行访问

Linux服务器ip 192.168.1.99

xp1 ip: 192.168.1.2

xp2 ip: 192.168.1.8

 

下面看看我2台xp 都可以访问的

 

192.168.1.2 这是 xp1 可以访问的,

192.168.1.8 xp2 也是可以正常访问的。

 

那么现在我要禁止 192.168.1.2 xp1 访问, xp2 正常访问,

下面看看演示

 

通过命令 iptables -A INPUT -p tcp -s 192.168.1.2 -j DROP

这里意思就是 -A 就是添加新的规则, 怎样的规则呢? 由于我们访问网站使用tcp的,

我们就用 -p tcp , 如果是 udp 就写udp,这里就用tcp了, -s就是 来源的意思,

ip来源于 192.168.1.2 ,-j 怎么做 我们拒绝它 这里应该是 DROP

 

好,看看效果。好添加成功。下面进行验证 一下是否生效

 

一直出现等待状态 最后 该页无法显示 ,这是 192.168.1.2 xp1 的访问被拒绝了。

 

再看看另外一台 xp 是否可以访问, 是可以正常访问的 192.168.1.8 是可以正常访问的

4、如何删除规则

首先我们要知道 这条规则的编号,每条规则都有一个编号

 

通过 iptables -L -n –line-number 可以显示规则和相对应的编号

num target prot opt source destination

1 DROP tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306

2 DROP tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:21

3 DROP tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

多了 num 这一列, 这样我们就可以 看到刚才的规则对应的是 编号2

 

那么我们就可以进行删除了

iptables -D INPUT 2

删除INPUT链编号为2的规则。

 

再 iptables -L -n 查看一下 已经被清除了。

5、过滤无效的数据包

假设有人进入了服务器,或者有病毒木马程序,它可以通过22,80端口像服务器外传送数据。

它的这种方式就和我们正常访问22,80端口区别。它发向外发的数据不是我们通过访问网页请求

而回应的数据包。

 

下面我们要禁止这些没有通过请求回应的数据包,统统把它们堵住掉。

 

iptables 提供了一个参数 是检查状态的,下面我们来配置下 22 和 80 端口,防止无效的数据包。

 

iptables -A OUTPUT -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

 

可以看到和我们以前使用的:

iptables -A OUTPUT -p tcp –sport 22 -j ACCEPT

多了一个状态判断。

 

同样80端口也一样, 现在删掉原来的2条规则,

iptables -L -n –line-number 这个是查看规则而且带上编号。我们看到编号就可以

删除对应的规则了。

 

iptables -D OUTPUT 1 这里的1表示第一条规则。

 

当你删除了前面的规则, 编号也会随之改变。看到了吧。

 

好,我们删除了前面2个规则,22端口还可以正常使用,说明没问题了

 

下面进行保存,别忘记了,不然的话重启就会还原到原来的样子。

 

service iptables save 进行保存。

 

Saving firewall rules to /etc/sysconfig/iptables: [ OK ]

其实就是把刚才设置的规则写入到 /etc/sysconfig/iptables 文件中。

6、DNS端口53设置

下面我们来看看如何设置iptables来打开DNS端口,DNS端口对应的是53

 

大家看到我现在的情况了吧,只开放22和80端口, 我现在看看能不能解析域名。

 

host www.google.com 输入这个命令后,一直等待,说明DNS不通

 

出现下面提示 :

;; connection timed out; no servers could be reached

 

ping 一下域名也是不通

[root@localhost ~ping www.google.com

ping: unknown host www.google.com

 

我这里的原因就是 iptables 限制了53端口。

 

有些服务器,特别是Web服务器减慢,DNS其实也有关系的,无法发送包到DNS服务器导致的。

 

下面演示下如何使用 iptables 来设置DNS 53这个端口,如果你不知道 域名服务端口号,你

可以用命令 : grep domain /etc/services

[root@localhost ~grep domain /etc/services

domain 53/tcp # name-domain server

domain 53/udp

domaintime 9909/tcp # domaintime

domaintime 9909/udp # domaintime

 

看到了吧, 我们一般使用 udp 协议。

好了, 开始设置。。。

iptables -A OUTPUT -p udp –dport 53 -j ACCEPT

这是我们 ping 一个域名,数据就是从本机出去,所以我们先设置 OUTPUT,

我们按照ping这个流程来设置。

然后 DNS 服务器收到我们发出去的包,就回应一个回来

iptables -A INPUT -p udp –sport 53 -j ACCEPT

同时还要设置

iptables -A INPUT -p udp –dport 53 -j ACCEPT

iptables -A OUTPUT -p udp –sport 53 -j ACCEPT

好了, 下面开始测试下, 可以用 iptables -L -n 查看设置情况,确定没有问题就可以测试了

[root@localhost ~iptables -L -n

Chain INPUT (policy DROP)

target prot opt source destination

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp spt:53

ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp dpt:53

Chain FORWARD (policy DROP)

target prot opt source destination

Chain OUTPUT (policy DROP)

target prot opt source destination

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp spt:22 state ESTABLISHED

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp spt:80 state ESTABLISHED

ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp dpt:53

ACCEPT udp — 0.0.0.0/0 0.0.0.0/0 udp spt:53

可以测试一下 是否 DNS 可以通过iptables 了。

[root@localhost ~host www.google.com

www.google.com is an alias for www.l.google.com.

www.l.google.com is an alias for www-china.l.google.com.

www-china.l.google.com has address 64.233.189.104

www-china.l.google.com has address 64.233.189.147

www-china.l.google.com has address 64.233.189.99

正常可以解析 google 域名。

ping 方面可能还要设置些东西。

用 nslookup 看看吧

[root@localhost ~nslookup

> www.google.com

Server: 192.168.1.1

Address: 192.168.1.1#53

 

Non-authoritative answer:

www.google.com canonical name = www.l.google.com.

www.l.google.com canonical name = www-china.l.google.com.

Name: www-china.l.google.com

Address: 64.233.189.147

Name: www-china.l.google.com

Address: 64.233.189.99

Name: www-china.l.google.com

Address: 64.233.189.104

 

说明本机DNS正常, iptables 允许53这个端口的访问。

7、iptables对ftp的设置

现在我开始对ftp端口的设置,按照我们以前的视频,添加需要开放的端口

ftp连接端口有2个 21 和 20 端口,我现在添加对应的规则。

[root@localhost rootiptables -A INPUT -p tcp –dport 21 -j ACCEPT

[root@localhost rootiptables -A INPUT -p tcp –dport 20 -j ACCEPT

[root@localhost rootiptables -A OUTPUT -p tcp –sport 21 -j ACCEPT

[root@localhost rootiptables -A OUTPUT -p tcp –sport 20 -j ACCEPT

好,这样就添加完了,我们用浏览器访问一下ftp,出现超时。

所以我刚才说 ftp 是比较特殊的端口,它还有一些端口是 数据传输端口,

例如目录列表, 上传 ,下载 文件都要用到这些端口。

而这些端口是 任意 端口。。。 这个 任意 真的比较特殊。

如果不指定什么一个端口范围, iptables 很难对任意端口开放的,

如果iptables允许任意端口访问, 那和不设置防火墙没什么区别,所以不现实的。

那么我们的解决办法就是 指定这个数据传输端口的一个范围。

下面我们修改一下ftp配置文件。

我这里使用vsftpd来修改演示,其他ftp我不知道哪里修改,大家可以找找资料。

[root@localhost rootvi /etc/vsftpd.conf

在配置文件的最下面 加入

pasv_min_port=30001

pasv_max_port=31000

然后保存退出。

这两句话的意思告诉vsftpd, 要传输数据的端口范围就在30001到31000 这个范围内传送。

这样我们使用 iptables 就好办多了,我们就打开 30001到31000 这些端口。

[root@localhost rootiptables -A INPUT -p tcp –dport 30001:31000 -j ACCEPT

[root@localhost rootiptables -A OUTPUT -p tcp –sport 30001:31000 -j ACCEPT

[root@localhost rootservice iptables save

最后进行保存, 然后我们再用浏览器范围下 ftp。可以正常访问

用个账号登陆上去,也没有问题,上传一些文件上去看看。

看到了吧,上传和下载都正常。。 再查看下 iptables 的设置

[root@localhost rootiptables -L -n

Chain INPUT (policy DROP)

target prot opt source destination

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:21

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:20

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpts:30001:31000

 

Chain FORWARD (policy DROP)

target prot opt source destination

 

Chain OUTPUT (policy DROP)

target prot opt source destination

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp spt:22

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp spt:21

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp spt:20

ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp spts:30001:31000

 

这是我为了演示ftp特殊端口做的简单规则,大家可以添加一些对数据包的验证

例如 -m state –state ESTABLISHED,RELATED 等等要求更加高的验证