分类目录归档:技术文献

CentOS 无线上网设置

CentOS采用的内核通常比较保守,支持的硬件也有一定程度的滞后,比如对无线网卡的支持。如果没有无线网卡的驱动,可以尝试升级内核完成。如果最新内核没有包含你网卡的驱动,就需要手动安装了。

如果要确认是否无线网卡是否被驱动了,可以使用:

[root@vfeelit ~]# iwconfig 安装:yum install -y wireless-tools
lo no wireless extensions.

wlan0 IEEE 802.11bgn ESSID:"ap_283303695"
Mode:Managed Frequency:2.462 GHz Access Point: 6C:E8:73:46:EF:7A
Bit Rate=121.5 Mb/s Tx-Power=14 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=70/70 Signal level=-18 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:68 Missed beacon:0
必须出现wlan这样的接口(也可能是其它名字),如果没有说明没有无线网卡,或无线网卡没有被驱动(就是没有驱动程序)。

先关闭NetworkManager,它和手动设置冲突:

[root@vfeelit ~]# service NetworkManager stop
[root@vfeelit ~]# chkconfig --list | grep Net
NetworkManager 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
[root@vfeelit ~]# chkconfig --level 2345 NetworkManager off
建立配置文件

#/etc/sysconfig/network-scripts/ifcfg-wlan0

DEVICE=wlan0
ESSID="ap_283303695"
TYPE=Wireless
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
IPV6INIT=no
ONBOOT=yes
这里跟配置有线网卡差不多,不过要注意DEVICE要指定iwconfig显示的无线网卡名,TYPE要设置为Wireless,用ESSID指定接入名称。如果采用WEP密码验证,这里还要使用KEY指定密码(当前采用WPA-PSK/WPA2-PSK验证,所以这里不需要指定KEY)。

之后重启网络:

[root@vfeelit network-scripts]# ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 00:26:C7:32:CE:D2
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::226:c7ff:fe32:ced2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3306 errors:0 dropped:0 overruns:0 frame:0
TX packets:396 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:312460 (305.1 KiB) TX bytes:54709 (53.4 KiB)
IP地址等信息已经分配,不过这时还没有连接上无线网络,那是因为无线接入需要密码验证。由于这里采用了WPA-PSK/WPA2-PSK验证,所以需要使用另一个工具。

[root@vfeelit network-scripts]# yum install wpa_supplicant

wpa_supplicant-0.7.3-4.el6_3.x86_64
wpa_supplicant可能已经安装。接下来:

wpa_passphrase [ESSID] [密码] >> /etc/wpa_supplicant/wpa_supplicant.conf

## vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
ssid="ap_283303695"
#psk="s15889660090"
psk=c0f293f6e1c21bd99d5764a565f9708e187da6972bc96dc5f1c69a35211a3116
}
实际上往/etc/wpa_supplicant/wpa_supplicant.conf添加了network块。然后运行wpa_supplicant:

wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf
如果希望这个程序在后台显示,需要用以下命令:

wpa_supplicant -B -Dwext -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf #B表示后台运行

#可以用wpa_supplicant -h查看基本用法:
drivers:
wext = Linux wireless extensions (generic)
nl80211 = Linux nl80211/cfg80211
wired = Wired Ethernet driver
options:
-B = run daemon in the background
-D = driver name (can be multiple drivers: nl80211,wext)
-c = Configuration file
-f = log output to debug file instead of stdout
之后应该就可以连接上无线网络了。

iwconfig命令可以用来设置网线网卡的信息,比如essid,key等,参考:

[root@vfeelit network-scripts]# iwconfig -h
Usage: iwconfig [interface]
interface essid {NNN|any|on|off}
interface mode {managed|ad-hoc|master|...}
interface freq N.NNN[k|M|G]
interface channel N
interface bit {N[k|M|G]|auto|fixed}
interface rate {N[k|M|G]|auto|fixed}
interface enc {NNNN-NNNN|off}
interface key {NNNN-NNNN|off}
interface power {period N|timeout N|saving N|off}
interface nickname NNN
interface nwid {NN|on|off}
interface ap {N|off|auto}
interface txpower {NmW|NdBm|off|auto}
interface sens N
interface retry {limit N|lifetime N}
interface rts {N|auto|fixed|off}
interface frag {N|auto|fixed|off}
interface modulation {11g|11a|CCK|OFDMg|...}
interface commit
Check man pages for more details.
一般,直接运行iwconfig查看是否有无线网卡(比如wlan0),然后启动这个网卡:

ifconfig wlan0 up
然后可以用这个无线网卡搜索无线网络:

[root@vfeelit network-scripts]# iwlist wlan0 scan
wlan0 Scan completed :
Cell 01 - Address: 6C:E8:73:46:EF:7A
Channel:11
Frequency:2.462 GHz (Channel 11)
Quality=70/70 Signal level=-19 dBm
Encryption key:on
ESSID:"ap_283303695"
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
9 Mb/s; 12 Mb/s; 18 Mb/s
Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
Extra:tsf=00000001a5e4b17c
Extra: Last beacon: 95ms ago
IE: WPA Version 1
Group Cipher : TKIP
Pairwise Ciphers (2) : TKIP CCMP
Authentication Suites (1) : PSK
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher : TKIP
Pairwise Ciphers (2) : TKIP CCMP
Authentication Suites (1) : PSK
找到需要接入的无线网络,获取Address、Channel、Frequency、Encryption key、ESSID、Mode和加密方式(以上是使用wpa)。

然后可以使用iwconfig设置相关参数(也可以写入配置文件中去),比如:

iwconfig wlan0 essid "ap_283303695"
iwconfig wlan0 key s15889660090 ##使用wep验证时有效
iwconfig wlan0 ap auto

##用ifconfig设置IP
ifconfig wlan0 192.168.1.100 netmask 255.255.255.0 gw 192.168.1.1

##确认已经添加了默认路由
route -n
这些信息可以保持到ifcfg-wlan0中去。

如果采用wpa验证,还需要运行wpa命令来管理无线密码。

在CentOS 中支持exFAT与NTFS

exFAT:

1、下载fuse-exfat支持软件:
exfat支持是通过fuse模块的方式支持的,其项目地址是: https://code.google.com/p/exfat/ ,当前版本是:1.0.1。
目前exfat的支持已经是全功能支持,支持读写。
可以下载源代码包,并自行使用scons和gcc编译,也可以在rpmfusion下载源代码RPM,然后通过构建RPM来安装。这里采用构建RPM的方式(这样安装卸载都很方便)。
下载地址:http://download1.rpmfusion.org/free/el/updates/6/SRPMS/repoview/index.html
分别下载:fuse-exfat-1.0.1-1-el6.src.rpm 和 exfat-utils-1.0.1-1.el6.src.rpm

2、编译安装:

编译前,请先检查系统,如果系统中没有scons和gcc,请通过yum安装:
$ sudo yum install scons gcc
这个软件是fuse模块,编译需要fuse-devel包支持:
$ sudo yum install fuse-devel

下载后,安装源代码RPM:
$ rpm -ivh fuse-exfat-1.0.1-1-el6.src.rpm exfat-utils-1.0.1-1.el6.src.rpm
在主目录下,会出现rpmbuild目录:
$ cd ~/rpmbuild/SPECS
$ rpmbuild -ba fuse-exfat.spec
$ rpmbuild -ba exfat-utils.spec
构建完成后,即可在 ~/rpmbuild/RPMS里面找到生成的RPM(根据系统架构,分别在x86_64或i386目录下,其中名字中带有debuginfo的包不必安装):
$ cd ~/rpmbuild/RPMS/x86_64
$ sudo rpm -ivh fuse-exfat-1.0.1-1.el6.x86_64.rpm exfat-utils-1.0.1-1.el6.x86_64.rpm
这样就安装完成了。

3、挂载:
可以通过以下命令来挂载exfat的U盘了:
$ sudo mount.exfat /dev/sdXn /mnt
其中sdXn中的X代表你的U盘设备名,n代表分区号,比如:/dev/sdb1这样。
此外,为了方便,你可以将以上安装在/usr/sbin下的命令在/sbin下做个符号链接:
$ sudo ln -s /usr/sbin/mount.exfat /sbin/mount.exfat
便于直接使用mount来安装:
$ sudo mount -t exfat /dev/sdXn /mnt

 

NTFS:

一、安装ntfs-3g模块

1. 使用yum的安装方法:

请确定你已经安装了rpmforge软件库的源。请参考:RHEL/CentOS 5.5使用第三方软件库

然后安装下列组件。

yum install fuse ntfs-3g -y

注:如果你在使用 CentOS 5.3 或更旧版本,那么你需要安装来自 ELRepo 的 kmod-fuse。

2. 使用ntfs-3g官方源码编译安装的方法:

ntfs-3g下载页面:http://www.tuxera.com/community/ntfs-3g-download/

安装步骤:

wget http://tuxera.com/opensource/ntfs-3g_ntfsprogs-2011.4.12.tgz

tar zxvf ntfs-3g_ntfsprogs-2011.4.12.tgz

cdntfs-3g_ntfsprogs-2011.4.12

./configure

make

make install

以上两种方法二选一,yum只适用于Redhat系,编译安装适用于所有Linux发行版

二、挂载NTFS文件系统

假设你的NTFS文件系统是 /dev/sda1 而你将会把它挂载在 /mnt/windows/c,请执行以下步骤。

1. 创建挂载点。(一般建议挂在mnt目录里)

mkdir /mnt/windows/c

2. 挂载NTFS分区:

mount -t ntfs-3g /dev/sda1 /mnt/windows/c

注:这里的sda1是指SATA或SCSI硬盘的第一个分区,如果是老式的IDE硬盘,会是hda1,具体请用fdisk -l查看。如偶的一台机:

[root@CentOS ~]# fdisk -l

Disk /dev/sda: 164.6 GB, 164696555520 bytes
255 heads, 63 sectors/track, 20023 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 2550 20482843+ 7 HPFS/NTFS
/dev/sda2 2551 20022 140343840 f W95 Ext’d (LBA)
/dev/sda5 5101 8924 30716248+ 7 HPFS/NTFS
/dev/sda6 8925 12748 30716248+ 7 HPFS/NTFS
/dev/sda7 12749 16572 30716248+ 7 HPFS/NTFS
/dev/sda8 16573 20022 27712093+ 7 HPFS/NTFS
/dev/sda9 2551 2584 273042 83 Linux
/dev/sda10 2585 4928 18828148+ 83 Linux
/dev/sda11 4929 5016 706828+ 82 Linux swap / Solaris

Partition table entries are not in disk order

3. 如果想开机系统启动时自动挂载NTFS分区,编辑vim /etc/fstab文件,加入类似如下内容:

只读式挂载:/dev/sda1 /mnt/windows/c ntfs-3g ro,umask=0222,defaults 0 0

读写式挂载:/dev/sda1 /mnt/windows/c ntfs-3g rw,umask=0000,defaults 0 0
或者: /dev/sda1 /mnt/windows/c ntfs-3g defaults 0 0

如偶的/etc/fstab文件如下:

LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda11 swap swap defaults 0 0

/dev/sda1 /mnt/windows/c ntfs-3g ro,umask=0222,defaults 0 0
/dev/sda5 /mnt/windows/e ntfs-3g defaults 0 0
/dev/sda6 /mnt/windows/f ntfs-3g defaults 0 0
/dev/sda7 /mnt/windows/g ntfs-3g defaults 0 0
/dev/sda8 /mnt/windows/h ntfs-3g defaults 0 0

其他注意问题:

从 CentOS 5.4 起(2.6.18-164 或更新的内核),fuse 模块已经包含在内核里。因此,已不再需要 dkms 及dkms-fuse。如果你先前安装了 dkms-fuse,请用 yum remove dkms-fuse 命令把它卸装。请注意 CentOS4.x 的用户需要这两个组件。

使用 centosplus 内核的用户

由CentOS-5.3开始,centoplus内核没有启用NTFS模块。这是由于5.3内的 NTFS 是不能运行的。详情请参阅https://bugzilla.redhat.com/show_bug.cgi?id=481495。如果你想使用来自 CentOS内核的NTFS模块,你可以安装来自ELRepo的kmod-ntfs。但这个模块没有ntfs-3g好,只提供极度有限的写入功能。

CentOS配置samba服务

第一步,安装samba服务,命令:yum install samba
第二步,修改配置文件:vim /etc/samba/smb.conf;(提醒下修改某个文件时最好先备份下,这是个不错的习惯)把[homes]和[privnters]等都注释掉(也就是把======Share Definitions========下面的的 语句全注释掉)然后添加下面几行:

#============================ Share Definitions ==============================
[share]
comment = share // 共享的文件夹
path = /home/share // 共享文件的目录
public = yes // 是否公共属性
writable = yes
browseable=yes
available=yes
guest ok=yes
上面是设置共享目录,接下来设置下登录用户和权限。 也可以不用上面的代码,直接用自带的案例[public];

# security = user // 注释掉原来的user
security = share // 变成共享的

第三步,启动服务。关闭防火墙:service iptables stop;设置SELinux:setenforce 0;重启smb服务:service smb restart;
第四步,测试:win+r ==>> \\192.168.10.150

ssh反向连接和简单实现

SSH反向连接的使用

1、什么是反向连接?
反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连
接主机B可以主动的向主机A发送一些请求。

2、为什么需要主机A主动去连接主机B呢?
这是因为主机A在局域网内,如果没有对主机A进行端口映射,对于主机B来说主机A是不可见的,如果在主机B这
边向主机A发送连接请求,这个请求是不可达的。而主机B有自己独立的IP,对于主机A来说是可见的,可以直接向
主机B请求连接。

3、SSH反向连接的过程
方法就是主机A主动去连接主机B,主机B响应主机A的连接请求,它们之间就建立了一个远程连接。然后主机B在
本地再创建一个本地连接,重定向到主机A和主机B刚才建立的远程连接上,之后对这个本地连接的操作都会反馈到
远程连接上去。整个过程类似于文件的DUP,这就在主机A和主机B之间建立了连接通道,此时对于主机B来说,主
机A已经是可见了。

连接流程如下:
3.1、主机A ssh客户端向主机B sshd服务端发送请求,建立远程连接。
3.2、主机B sshd服务端创建本地连接很远程连接的映射(反向连接通道)。
3.3、主机B ssh客户端向主机B sshd服务端的连接通道发送请求, 建立主机B ssh和主机A sshd的连接。

完成连接后,主机A对于主机B可见的形式就是存在于主机B的那个本地连接。

4、为什么需要在主机B对远程连接映射一个本地连接?
反向连接就是CS架构,不过是受控端主动向控制端请求连接,让它们之间的连接建立。传统的CS方式是可以解决
主机A和主机B之间的连接问题,但是那样主机A和主机B的连接方式并不灵活,两者之间能做的事情,只能是CS之际
协议规定的事情。在主机B上建立了主机A的连接映射后, 对于主机B来说主机A已经不是局域网内那台不可见的主
机,主机A已经是存在主机B的一台可见主机,这样就消除了局域网和广域网的阻碍。 主机A和主机B之间建立的那
个远程连接就是主机A和主机B的通道-“网线”。

5、SSH反向连接的使用
要建立反向连接,首先在主机A上运行:

ssh -f -N -R 10000:localhost:22 lyb@3322.org

10000是主机B上的本地连接端口, 22是主机B上远程连接的那个端口, lyb@3322.org是主机B的地址
连接上后,会需要输入密码。连接成功后,SSH反向连接就建立起来了。要连接到主机A,在主机B上运行:

ssh lyb@localhost -p 10000

即可。

使用的过程中碰到一个问题, 就是在主机A上发起请求的时候, 需要输入密码。 如果我在家里, 不可能跑到公司了去输入密码。于是用ssh public key的方法和写一个脚本来解决。脚本如下:

#!/bin/bash
while true;do
RET=ps ax | grep "ssh -f -N -R 10000:localhost:22" | grep -v "grep"
if [ "$RET" = "" ]; then
echo "restart ssh server"
ssh -f -N -R 10000:localhost:22 lyb@hahalee.3322.org
fi
sleep 10
done

脚本的作用就是监控反向连接的服务, 在被异常中断的时候重启, 使用了SSH公钥后, 也不必跑到公司输入密码了。

使用ssh公钥实现免密码登录

ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例。

有机器A(192.168.1.155),B(192.168.1.181)。现想A通过ssh免密码登录到B。
首先以root账户登陆为例。

1.在A机下生成公钥/私钥对。

[root@A ~]# ssh-keygen -t rsa -P ''

-P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
该命令将在/root/.ssh目录下面产生一对密钥id_rsa和id_rsa.pub。

一般采用的ssh的rsa密钥:
id_rsa     私钥
id_rsa.pub 公钥
下述命令产生不同类型的密钥
ssh-keygen -t dsa
ssh-keygen -t rsa
ssh-keygen -t rsa1

2.把A机下的/root/.ssh/id_rsa.pub 复制到B机的 /root/.ssh/authorized_keys文件里,先要在B机上创建好 /root/.ssh 这个目录,用scp复制。

[root@A ~]# scp /root/.ssh/id_rsa.pub root@192.168.1.181:/root/.ssh/authorized_keys
 root@192.168.1.181's password:
id_rsa.pub                                    100%  223     0.2KB/s   00:00

由于还没有免密码登录的,所以要输入一次B机的root密码。

或者 ssh-copy-id -i .ssh/id_rsa.pub user@外网主机A

3.authorized_keys的权限要是600!!!  .ssh目录的权限为 700

[root@B ~]# chmod 600 /root/.ssh/authorized_keys

4.A机登录B机。

[root@A ~]# ssh -l root 192.168.1.181
The authenticity of host '192.168.1.181 (192.168.1.181)' can't be established.
RSA key fingerprint is 00:a6:a8:87:eb:c7:40:10:39:cc:a0:eb:50:d9:6a:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.181' (RSA) to the list of known hosts.
Last login: Thu Jul  09:53:18 2008 from root
[root@B ~]#

第一次登录是时要你输入yes。

现在A机可以无密码登录B机了。

小结:登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法的公钥/私钥对,当然也可以用dsa(对应的文件是id_dsa,id_dsa.pub)

想让A,B机无密码互登录,那B机以上面同样的方式配置即可。

SSH-KeyGen 的用法

假设 A 为客户机器,B为目标机;

要达到的目的:
A机器ssh登录B机器无需输入密码;
加密方式选 rsa|dsa均可以,默认dsa

做法:
1、登录A机器
2、ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub
3、将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_dsa.pub >> ~/.ssh/authorized_keys
4、大功告成,从A机器登录B机器的目标账户,不再需要密码了;

ssh-keygen做密码验证可以使在向对方机器上ssh ,scp不用使用密码.
具体方法如下:
ssh-keygen -t rsa
然后全部回车,采用默认值.

这样生成了一对密钥,存放在用户目录的~/.ssh下。
将公钥考到对方机器的用户目录下,并拷到~/.ssh/authorized_keys中。

要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。(今天就是遇到这个问题,找了好久问题所在),其实仔细想想,这样做是为了不会出现系统漏洞。