第四周LINUX 学习笔记
内核编译丶sed丶awk
linux:单内核
模块化:动态
/lib/modules
lsmod,modinfo,modprobe,insmod,,modprobe -r ,rmmod
dep文件:模块的依赖关系
sysbols:符号映射
depmod:用来生成模块依赖关系
kernel文件夹下
arch:架构
crypto:加密模块
drivers:驱动
fs:文件系统
有两部分组成
kernel:内核调试模块
lib:内核本身通用库
mm:
net:网络协议的实现
netfilter:软件防火墙
openvswith:虚拟机
sunrpc:
sound:声音
centos6:
与官方kernel可能不一样
src.rpm
源码rpm包+specs文件
步骤:
1.创建mockbuild用户
2.切换至mockbuild用户,而后安装src.rpm包
3.rpmbuild -bb|-ba ~/rpmbuild/specs/package_name.spec
4.制作完成的rpm包:位于/root/rpmbuild/rpms/x86_64中
/usr/src,/usr/local/src
编译内核:
可能需要的模块不多,红帽或者centos为了使版本更通用,
y:编译进核心
m:编译成模块
make config
make allyesconfig
make allnoconfig
make menuconfig
建议将/boot/下的config文件拷贝到当前目录下,叫.config
make kconfig(kde桌面环境,并且安装了qt开发环境)
make gconfig(gnome桌面环境,并且安装gtk开发环境)
第二步:编译
make -j #
第三步:安装模块
make modules_install
第四步:安装内核
make install
第五步:检查。测试
grub.conf中是否已经有新内核配置项
重启系统并启用新内核
安装一个新桌面:
screen命令:
screen:打开一个新的screen
隐藏:ctrl+a,d
重新打开隐藏的screen:
显示个screen id: screen -ls
重新打开 screen -r screen_id
查看硬件信息:
lspci
hal-device
lspcmcia
lscpu
lsdiff
lsusb
lsdlk
dmidecode:查看bios,
rhel src.rpm
补充:http://ftp.redhat.com/pub/redhat/linux/enterprise
编译安装新内核:
1.获取内核编码,解压至/usr/src
tar xf linux-3.13.5.tar.xz -c /usr/src
ln -sv /usr/src/linux-3.13.5 /usr/src/linux-
2.配置内核特性
cp /boot/config-* /usr/src/linux/.config
make menuconfig
3.编译内核
make [-j #]
最多为cpu物理核心总数的两倍
4.安装内核模块
make modules_install
5.安装内核
make install
6.验证并测试
cat /boot/grub/grub.conf
重启系统并应用新系统
二次编译如何做清理操作:
make clean:只清理编译生成的文件,但不删除配置文件.config
make mrproper:删除编译生成的文件和.config
make distclean:重置源代码树
将编译的文件放置于源码不同的路径:
mkdir /path/to/somewhere
cd /path/to/somewhere
./configure --ksource=/usr/src/linux
如何实现内核的部分编译:
1.只编译某子目录下的相关代码:
cd /usr/src/linux
make 子目录文件
make subdir=arch/
make drivers/net/
2.只编译部分模块
make m=path/to/dir/
make m=drivers/net/
3.只编译某一个模块
make path/to/dir/module_name.ko
make drivers/net/e1000/e1000.ko
4.将编译后的结果放置于别的目录中
make o=/path/to/somewhere
如何实现交叉编译
make arch=架构
以arm为例:
make arch=arm 默认编译文件
树莓派
内核参数的查看与配置:
/proc/sys/
kernel net vm fs
配置参数:
echo "string" > /proc/sys/path/to/some_parameter
echo 1 > /proc/sys/net.ipv4/icmp_echo_ignore_all
sysctl -w
上面也可写成
sysctl -w net.ipv4.icmp_echo_ignore_all=1
查看参数:
sysctl -a
配置文件:
/etc/sysctl.conf
net.ipv4.ip_forward ip转发
kernel.hostname 主机名
net.ipv4.icmp_echo_ignore_all ping功能
vm.drop_caches 清除缓存
sysctl -p 重读配置文件
硬件设备:设备文件
2.4-:2w+
udev:用户空间程序
kenrel硬件探测过程在根文件系统挂载前就已经结束,启动udev daemon程序,要求内核重新探测硬件信息,并输出/sys目录,
由此udevadmin工具就可以根据/sys目录中硬件信息给每个硬件创建设备文件了
udev rules:udev规则文件,用于定义udev如何创建设备文件的
/etc/udev/rules.d/
kernel+initramfs(根文件系统所在设备的设备驱动模块)-->devtmps(用于在内核初始化时为基本设备创建设备文件的临时文件系统)
如何手动创建设备文件
mknod
mknod [option] ...name ytpe [major minor]
major:主设备号,表示设备类型
minor:同一设备的不同文件
选项:
-m mode:指定权限
例子
mknod -m 660 /dev/testdev b 100 0
sed初级使用
stream editor
一次只读一行,只处理一行,不对源文件做处理,至输出到屏幕上
模式空间
是一个行编辑器
格式
sed[options] "script" file....
选项:
-n:静默模式,不输出模式空间内的内容;默认打印空间模式的内容
-r:扩展的正则表达式
-f 文件:指定sed脚本文件
-e 'script' -e 'script' :指定多个编辑指令
-i : 直接编辑原文件
编辑命令:
d:删除
p: 打印
i \:在被指定到的行前面插入文本
a \:在被指定的行的下面插入文本
\n:换行
r 文件:在指定位置把另外一个文件的内容插入
w 文件:将符合条件的所有行保存至指定文件中
=:显示符号条件的行的行号
s///:查找条件可以使用模式,但是要替换的内容不行
地址定界:自定义的起始行到结束行
startline,endline
1,3
/pat1/,/pat2/
/pattern/
用法:sed [options] 'addr1[,addr2]编辑命令' file...
sed [options] "addr1[,addr2]编辑命令" file... 变量替换使用双引号
正则表达式:
基本的
字符:
.
[]
[^]
次数
*
\?
\{m,n\}
锚定:
^
$
\<,\b
\>,\b
分组:
\(\)
引用:
\1,\2,……
扩展:
字符:
.
[]
[^]
次数
*
?
{m,n}
+
锚定:
^
$
\<,\b
\>,\b
或:
a|b
分组:
\(\)
引用:
\1,\2,……
sed '地址定界s@查找条件@替换文件@'
修饰符:
g:global,全局替换
i:ignore-case,不区分字符大小写
awk命令:
awk:报告生成工具
把文件中读取带的每一行的每个字段分别进行格式化,而后进行显示:
支持使用变量、条件判断、循环、数组
awk --> new awk --> nawk
gnu awk --> gawk
选项:
-f:切割符
$0:整行
$1,$2.....:位置参数
用法格式:
awk [options] 'script' file...
awk [options] '/pattern/{action}' file...
action: print $1,$2
模式:
地址定界:/pat1/,/pat2/ 一个范围
/pattern/ 被匹配到的行
experssion 表达式
>,>=,<,<=,==,!=,~(模式匹配)
begin:执行前操作
end:执行后的收尾 操作
awk的常用四种分隔符:
输入:
行分隔符
字段分隔符
输出:
行分隔符
字段分隔符
awk的内置变量
nf:最后一个字段
fs: 指定输入分隔符 在begin中定义,指定时要使用""
默认为空白
ofs:输出时指定的分隔符,在begin中定义,指定时要使用"",默认为空白
安装丶bash丢失丶dhcp丶pxelinux
anaconda:fedora,linux的安装程序
anaconda:将安装分成两个阶段
安装前配置阶段
键盘类型
安装过程中的语言
支持的语言
时区
选择要使用的磁盘设备
分区格式化
选择要安装的程序包
管理员密码
是否使用iptables
是否启用selinux
安装阶段
在目标磁盘上根文件系统
将选定的程序包安装至目标磁盘
如何启动安装过程
mbr:bootloader,本身可启动的安装光盘
网络启动安装过程
可移动设备,便携式设备
简装光盘:只有isolinux,能够启动安装过程的
anaconda的配置文件称为kickstat
安装前配置阶段:
配置的选项:
必选项:
可选项:
kickstart文件的组成部分:
命令段:用于配置系统
install
firewall
part
lvm
软件包:指定要安装的程序包及程序包组
%packages 标识
@base:使用@指定包组
lftp:直接写程序包名
tree:
每行一个
注意:在程序包前加-,不安装相关包
%end :软件包结束
脚本段:
%pre:安装过程开始前的预备脚本
所能执行的操作较小,它是一个首先得环境,因为其是仅有简装版的shell环境
%post:所有的软件完成之后执行的脚本
此时,具有完整意义上的shell环境,但并非所有命令都安装,先确保所有的程序包已经安装
以光盘为例:
mbr-->bootloader,isolinux/
安装树:
noparport:不探测硬件
启动安装界面时,boot提示符后,可以向安装内核传递许多的配置参数,用于指定安装过程的特性
boot:
test:文本安装界面
graphical:图形安装界面
askmethod:提示用户指定安装方法,让用户选择使用的安装树
asknetword:提示用户在安装过程中使用网络功能,并提示用户配置网络地址
dd:提示用户指定一个驱动程序所在的设备
ks=:指定一个安装过程使用的kickstart文件
ks={http|https}://<sevrer>/<path>
ks=cdrom:/<path>
ks=nfs:<server>:/<path>
repo=:指定安装树位置
repo=ftp://<path>
repo={http|https}://<path>
repo=nfs:<path>
ip:
netmask:
gateway:
dns:
noipv6:
http://172.16.0.1/centos6.x86_64.cfg
成长是用来发现自己的过去是多么的操蛋
centos:
kickstart文件:命令段、软件包段、脚本段
selinux限制进程的访问,
permissive 记录到日志
创建光盘映像
mkisofs:-r -j -t -v --no-emul-boot --boot-load-size 4 --boot-info-table -v "centos 6.5 x86_64 boot(可改)" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos6.5.boot.iso(可改) linuxiso/
光盘中的背景图片
640*480
dhcp server:告诉客户端到某一位置找一tftp server,向此tftp server要一个文件
pxe:安装方式
创建kickstart文件的方式:
1,复制模板/root/anaconda-ks.cfg。而后使用vim编辑配置
2.使用system-config-kiskstart来生成,建议使用/root/anaconda-ks.cfg 模板生成
ksvalidator 检查kiskstart文件的配置是否存在问题
系统故障排除之:bash程序文件损坏
1.启动紧急救援模式
2.获取到bash的rpm包:
mkdir /media
mount -r /dev/dvd /media
rpm -ivh bash-*.rpm --replacepkgs --root=/mnt/sysimage/
紧急救援模式:启动了一个工作于光盘上的linux
arp
dhcp和pxe
dhcp:动态地址配置协议
前身bootp:分配出去以后,将绑定
leases,地址租约,地址池
dynamic host configuration protocol
c/s 模式
server:dhcp server(运行dhcp服务)
udp服务:67
client:dhcp client(运行dhcp程序)
udp服务:68
udp:适合发送较小的数据报文,且对时效性要求较高
a:dhcp discover
s:dhcp offer(ip/netmask)
a:dhcp request(确认使用)
s:dhcp ack
50%:dhcp request
75%:dhcp request
87.5%:dhcp request
dhcp discover
dhcp :
ip,netmask,gateway,dns,ntp server,wins server,file
dhcp client:
169.254.x.x
本地地址
有两个进程
一个dhcpd
一个dhcrelay,中继
dhcpd.conf大致可以分为四个区域:
定义dhcpd自身的工作属性:
log-facilify:日志facilify
全局地址跟拍属性:options打头
option router
子网配置:
通常每个作用域通过一个subnet定义
subnet network_addr netmask netmask {
}
主机配置:
通常为某特定mac地址固定的分配一个地址
host ‘host id’ {
hardware ethernet 08:00:07:26:c0:a5; mac地址
fixed-address ip; ip地址
}
日志服务的配置文件:/etc/rsyslog.conf
文件详解:
ption domain-name "example.org"; 搜索域
option domain-name-servers ns1.example.org, ns2.example.org; 全局默认网关
default-lease-time 600;默认租约期限
max-lease-time 7200;最长租约期限
#ddns-update-style none;动态dns
og-facility local7;日志反动地址
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20; 地址池
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org; 提供的网关
}
subnet 10.254.239.32 netmask 255.255.255.224 {
range dynamic-bootp 10.254.239.40 10.254.239.60;向bootp提供服务
option broadcast-address 10.254.239.31;广播地址
option routers rtr-239-32-1.example.org;
}
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers 10.5.5.1;默认网关
option broadcast-address 10.5.5.31;广播地址
default-lease-time 600;
max-lease-time 7200;
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5; mac地址
fixed-address fantasia.fugue.com; ip地址
}
class "foo" {
match if substring (option vendor-class-identifier, 0, 4) = "sunw";
}定义函数,用来定义特定系统分配特定的地址
/var/lib/dhcpd有配置文件
dhcilent -d etho:/客户端重新获取dhcp地址
总结:dhcp dhcpd /etc/dhcp/dhcpd.conf /etc/rc.d/init/dhcpd /var/lib/dhcp,udp:67,68
pxe:preboot execution environment,启动前的执行环境
client:网卡要支持网络引导
tftp trivial ftp:简单文件传输协议,高效传输小文件(udp:69)
瞬时(非独立)守护进程:他们无需定义在运行级别下,只需要一次性的定义xinetd的运行级别
独立(standalone)守护进程:能自我管理,无需xinted提供箭头服务的进程
超级守护进程:xinetd
为那些极少接收用户请求的服务,专门提供监听功能
tftp:udp:69
瞬时守护进程基于xinetd的配置文件:/etc/xinted.d/service_name
独立守护进程:能自我管理,无须xinetd提供监听服务的进程
chkconfig xinetd on
service xinetd start
chkconfig service_name on
service xinetd restart
linux上的tftp:
服务器:tftp-server
客户端:tftp
在dhcp添加
next-server ip地址
filename="pxelinux.0"
配置步骤:
前提:需要安装apache服务器,并启动httpd服务!
mkdir /media/cdrom
mount -r /dev/dvd /media/cdrom
vi /etc/yum.repo.d/
1.配置dhcp服务器
yum -y install dhcp
vim /etc/dhcp/dhcpd.conf
自定义subnet{
...
next-server
filename ""
}
service dhcpd restart
tail -f /var/log/boot.log
2配置tftp-server
yum -y install xinetd tftp-server tftp
chkconfig xinetd on
chkconfig tftp on
service xinetd start
3准备安装树
mkdir /var/www/html/centos6
mount --bind /media/cdrom /var/www/html/centos6
service httpd start
4.准备tftpboot下的文件
yum -y install syslinux
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
5.提供kickstart文件
注意:url及repo后的路径要修改为可用安装树的路径;
url --url=http://192.168.48.128/centos6
repo --name="centos-6.5" --baseurl=http://192.168.48.128/centos6
编辑好kickstart文件后保存至/var/www/html目录下;假设为ks.cfg
6)配置引导程序能自动加载kickstart文件。
编辑/var/lib/tftpboot/pxelinux.cfg/default
在label为linux项的append一行后附加:
ks=http://192.168.48.128/ks.cfg
selinxu:secure enhenced linux
获取selinux的当前状态:
getenforce
临时启用或禁用
setenfoce 0|1
永久启用:/etc/sysconfig/selinux
/etc/selinux/config
selinux={enforcing|permissove|disabled}
ls -z:查看
mac:强制访问控制
openssl丶ssh丶脚本信息捕获
passwd:
加密方式:
对称加密、公钥加密、单向加密
加密、解密
明文:plaintext,cleartext -->密文 -->
对称加密:
加密算法+口令
明文 --> 密文
字典攻击
加密方,解密方使用同一个口令
des(56bits):数据加密标准
3des
aes(128bits):高级加密标准
blowfish
twofish
idea
rc6
cast5
serpent
特性:
1.加密/解密使用统一口令
2.将原文分割成固定大小的数据块,对这些块进行加密
ecb,cbc
1.口令传输
2.密钥太多
密钥交换:
用户认证:
数据完整性:
密钥交换(ike:inernet key exchange):dh算法
非对称加密:公开公钥,私钥私有,只有一组密钥对(公钥和私钥组成)才能对消息进行加密和解密,公钥和私钥都能进行加密或者解密。公钥一般来加密数据,私钥一般来签名数据。
加密算法:rsa,eigmal,dsa
1.密钥交换
2.用户身份认证
单向加密:
抽取数据特征码:
md5,sha1,sha512,crc-32(循环冗余校验码)
1.完整性,
消息认证算法:mac(message authenntication codes)
cbc-mac
hmac
雪崩效应
定长输出:
使用私钥钥来加密特征码(保留数据的完整性)和数据(保证数据的来源)再将两者进行对称加密(速度快),接着再用对方的公钥来加密密码(保证安全性)
pki:pubile key infrastucture 公钥基础设施
openssl gpg
openssl:套件,开源程序
libcrypto:通用功能的加密库
libssl:用于实现tlx/ssl的功能
openssl:多功能命令工具
生成密钥,创建数字证书,手动加密解密数据
加密解密技术常用的功能及算法:
对称加密:
工具:gpg openssl enc
加密:openssl enc -des3 -a -salt -in /ets/fstab -out /tmp/fstab.cipher
解密:openssl enc -d -dec3 -a -salt -in /tmp/fstab.cipher -out 文件
单向加密:
特性:one-way
collision-free:
算法
md5:128bits
sha1:160bits
sha512:512bits
工具:sha1sum,md5sum,openssl dgst
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile
mac:信息摘要码,单向加密的延伸应用
应用:用于实现在网络通信中保证所传输的数据完整性
机制:
cbc-mac
hmac:使用md5和sha1算法
用户认证:每一个用户的密码即使是相同的,他们的加密方式也不同,因为是不同用户。可以指定-salt string 即可生成相同的加密
工具:passwd openssl passwd
公钥加密:公钥加密,私钥解密
密钥对:
公钥:pkey
私钥:skey
算法:rsa,eigamal
工具:gpg openssl rsautl
数字签名:私钥加密,公钥解密
算法:rsa,eigamal,dsa
dsa:digital signature algorithm
dss: digital signature standard
密钥交换:ike
算法:dh(diffie-hellman),公钥加密
数字证书:
第三方机构使用一种安全的方式把公钥分发出去
证书格式:x509,pkcs家族
x509格式:
公钥和有效期限:
持有者的个人合法身份信息;(主机名),所以输入主机名所对应的ip地址,有可能会访问不到。
证书的使用方式
ca的信息
ca的数字签名
谁给ca发证:自签署证书
用户
1.生成一对密钥
2.把所需信息和公钥按固定格式制作成证书申请
ca机构
1.自签证书
2.签署证书
3.传给用户
4.维护吊销列表
openca
用openssl实现是有ca
配置文件/etc/pki/tls/openssl.cnf
命令:
谁给ca发证:自签署证书
用openssl实现私有ca:
配置文件:/etc/pki/tls/openssl.cnf
生成密钥对儿:
# (umask 077; openssl genrsa -out private/cakey.pem 2048)
如果想查看公钥:
# openssl rsa -in private/cakey.pem -pubout -text -noout
生成自签证书:
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
用openssl实现证书申请:
在主机上生成密钥,保存至应用此证书的服务的配置文件目录下, 例如:
# mkdir /etc/httpd/ssl
# cd /etc/httpd/ssl
# (umask 077; openssl genrsa -out httpd.key 1024)
生成证书签署请求:
# openssl req -new -key httpd.key -out httpd.csr
将请求文件发往ca;
# scp httpd.csr 192.168.48.128:/tmp/
ca签署证书:
签署:
# openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days days
将证书传回请求者
吊销证书:
# openssl ca -revoke /path/to/somefile.crt
speed 测试当前系统上的加密算法的性能
version: 版本
s_client ssl/tls client program 测试连接性的
rand:用来生成伪随机数字
openssl rand -hex #
openssl:私有ca
证书格式
公钥和有效期限:
持有者的个人合法身份信息;(主机名)
证书的使用方式
ca的信息
ca的数字签名
对称加密:数据私密性
公钥加密:密钥交换(对方的公钥)、数据加密(对方的公钥)、身份认证(自己的私钥)
单向加密:hash码,only-way hash
openssl补充材料:
openssl中有如下后缀名的文件
.key格式:私有的密钥
.crt格式:证书文件,certificate的缩写
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crl格式:证书吊销列表,certificate revocation list的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
常用证书协议
x509v3: ietf的证书标准
x.500:目录的标准
scep: 简单证书申请协议,用http来进行申请,数据有pkcs#7封装,数据其实格式也是pkcs#10的
pkcs#7: 是封装数据的标准,可以放置证书和一些请求信息
pkcs#10: 用于离线证书申请的证书申请的数据格式,注意数据包是使用pkcs#7封装这个数据
pkcs#12: 用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,cisco放在nvram中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx
ssl:网景公司开发
secure scocket layer
安全的套接字层
tls:transport layer security
安全的传输层
远程登录:
telnet
telnet服务:明文传输
监听tcp协议的23号端口
ss -tan |grep 23
禁止管理员直接登陆
使用普通用户登录。而后su到管理员
ssh:secure shell
监听tcp协议的22号端口
/etc/services 解析库,进程<->端口
ssh文本协议:字符通信
sshv1,sshv2
由于sshv1是居于crc-32做mac,因此,不安全,建议勿用
sshv2 基于双发主机协商选择最安全的mac实现机制
加密机制和mac机制是双方协商选定
基于dh实现密钥交换,基于rsa或das实现身份认证
客户端通过检查服务端的主机密钥来判断是否与其进一步通信
openssh(c/s)
server:监听tcp22
client:程序
windows客户端:xmanager(xshell)、securecrt、putty、sshshellcilent
openssh客户端组件:
ssh
ssh username@host [command]
ssh -l username host [command]
-p port:指定要连入端口
ssh认证机制:
基于口令
基于密钥
客户端在本地生成一对密钥
客户端将公钥复制到服务器,要登陆的用户的家目录下的隐藏目录.ssh中的一个名为authorized_keys或authorized_keys2中
配置过程:
1.生成密钥对,客户端
ssh-key -t rsa
生成的密钥默认保存至当前家目录下的.ssh下的id_rsa,公钥在id_rsa.pub
文件中
2.复制密钥至远程主机:
ssh-copy-id -i 公钥文件 登陆用户@远程ip地址
scp:类cp命令,基于ssh协议跨主机复制
scp src1 src2 .... dest
分两种情况:
1.源文件在本机,目标为远程
scp /path/to/somefile .... username@host:/path/to/somewhere
2.源文件在远程,目标在本机
scp username@host:/path/to/somefile /path/to/somewhere
-r当源文件为目录,以实现递归复制
-p:保留源文件的复制及修改时间戳,以及权限
-q:静默模式
-p port:指定服务器端口
sftp:是基于ssh的ftp协议
只要openssh的服务器端有以下项,则代表支持sftp
subsystem sftp /usr/libexec/openssh/sftp-server
用法: sftp[username@]host
服务器端:sshd
配置文件 /etc/ssh/sshd_config
服务脚本 /etc/rc.d/init.d/sshd
脚本配置文件:/etc/sysconfig/sshd
查看config文件的帮助
man sshd_config
listernaddress 当前主机的监听地址
protocol 协议版本
# hostkeys for protocol version 2
#hostkey /etc/ssh/ssh_host_rsa_key
#hostkey /etc/ssh/ssh_host_dsa_key
验证主机的公钥
#keyregenerationinterval 1h 密钥的使用时间
#serverkeybits 1024 密钥长度
#loglevel info 日志级别
#logingracetime 2m 登陆宽限期
#permitrootlogin yes root是否可以登录
#strictmodes yes 严格模式,家目录 属主 属组
#maxauthtries 6 最多可以承受的次数
#maxsessions 10
最大的连接数
passwordauthentication yes 是否使用用户名和密码的方式
kerberos集中认证管理
x11forwarding yes 是否转发图形窗口
allowusers user1 user2
用户白名单
allowgroups 组白名单
denyuser 用户黑名单
用户登录信息获取
lastlog:显示用户最近一次的登录信息,成功的 /var/log/wtmp
lastb:显示用户登录的信息,并尝试失败的 /var/log/btmp
用户成功登陆的日志信息
last
使用ssh的最佳方式
1)only use ssh protocol 2
2)limit users ssh access
allowusers root vivek jerry
白名单
denyuser saroj anjali foo
黑名单
3)configure idle log out timeout interval 配置空闲超时长。
clientalivecountmax 300
clientaliveinterval 0
4)firwall ssh port # 22
使用iptables设置ssh服务安全访问策略
5)change ssh port and limit ip binding
port 300
listaddress 192.168.1.5
listenaddress 202.54.1.5
勿使用默认22端口
6)use strong ssh passwords and passphrase
genpasswd(){
local 1=$1
[ "$1" == "" ]&& 1=20
tr -dc a-za-z0-9_</dev/urandom | head -c ${1} | xargs
}
使用足够长足够复杂的密码,且定期更换。
7)use public key based authentication
使用公钥认证。
8)disable empty password
9)thwart ssh crakers (brute force attack)
google:ssh best practice
10)rate-limit incoming port # 22 connections
限制ssh访问频度
11)use log analyzer
记录好日志,经常做日志分析。
总结:ssh,scp.sftp,sshd
ssh /etc/ssh/ssh_config
sshd /etc/ssh/sshd_config
bash编程的信号捕获
trap 陷阱
trap ‘command’ signal
kill -l
kill无法捕捉
信号捕捉用于:在中途中止时做一些清理操