內核編譯丶sed丶awk Linux:單內核 模塊化:動態 /lib/modules lsmod,modinfo,modprobe,insmod,,modprobe -r ,rmmod dep文件:模塊的依賴關係 sysbols:符號映射 depmod:用來生成模塊依賴關係 kernel文件夾下 a ...
內核編譯丶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無法捕捉
信號捕捉用於:在中途中止時做一些清理操