ssh: secure shell, protocol, 22/tcp, 安全的遠程登錄
具體的軟件實現:
OpenSSH : ssh 協議的開源實現,CentOS 默認安裝
dropbear :另一個開源實現SSH
協議版本
v1: 基于CRC-32 做MAC ,不安全;man-in-middle
v2 :雙方主機協議選擇安全的MAC 方式
基于DH 算法做密鑰交換,基于RSA 或DSA 實現身份認證
兩種方式的用戶登錄認證:
基于password
基于key
OpenSSH 介紹
相關包:
openssh
openssh-clients
openssh-server
工具:
基于C/S 結構
Client: ssh, scp, sftp
Windows 客戶端:
xshell, putty, securecrt, sshsecureshellclient
Server: sshd
客戶端組件:
ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no 首次登錄不顯示檢查提示
首次登陸公鑰存放位置:/root/.ssh/known_hosts
格式:ssh [user@]host [COMMAND]
ssh root@172.18.12.14 ‘uname -r’ #默認同當前用戶
ssh [-l user] host [COMMAND]
-p port :遠程服務器監聽的端口 #默認22端口
更改端口文件:/etc/ssh/sshd_config 里面的port,
更改后需要重啟服務,需要關閉selinux
-b: 指定連接的源IP
ip addr add 192.168.33.15./24 dev etho #給網卡加別名
ssh -b
-v: 調試模式
-C :壓縮方式
-X: 支持x11 轉發 #使用遠程主機圖形工具
-Y :支持信任x11 轉發 #默認都支持的
ForwardX11Trusted yes
-t: 強制偽tty 分配
ssh -t remoteserver1 ssh remoteserver2
允許實現對遠程系統經驗證地加密安全訪問
當用戶遠程連接ssh 服務器時,會復制ssh 服務器
/etc/ssh/ssh_host*key.pub (centos7 默認是 ssh_host_ecdsa_key.pub )
文件中的公鑰到客戶機的~./ssh/know_hosts 中。
下次連接時,會自動匹配相應私鑰,不能匹配,將拒絕連接
基于密鑰的認證:
(1) 在客戶端生成密鑰對
ssh-keygen -t rsa [-P ”] [-f “~/.ssh/id_rsa”]
#[]都可以省略,直接ssh-keygen,該命令可以補全
(2) 把公鑰文件傳輸至遠程服務器對應用戶的家目錄
ssh-copy-id [-i [identity_file]] [user@]host
#ssh-copy-id -i ~/.ssh/id_rsa shewei@172.18.12.11
默認自動拷貝公鑰,路徑要選擇文件所在目錄
(3) 測試
(4) 在SecureCRT ,Xshell 或實現基于key 驗證
在SecureCRT 工具—> 創建公鑰—> 生成Identity.pub 文件
轉化為openssh 兼容格式(適合SecureCRT ,Xshell 不需要轉化
格式),并復制到需登錄主機上相應文件authorized_keys 中,
注意權限必須為600 ,在需登錄的ssh 主機上執行:
ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5) 重設私鑰口令:#ssh-keygen –p
(6) 驗證 代理(authentication agent )保密解密后的密鑰
? 這樣口令就只需要輸入一次
? 在 在GNOME 中,代理被自動提供給root 用戶
? 否則運行ssh-agent bash
(7) 鑰匙通過命令添加給代理
ssh-add #先用6驗證代理,然后7添加到代理,每次重啟失效
scp 命令:
scp [options] SRC… DEST/
兩種方式:
scp [options] [user@]172.18.12.12 : /sourcefile /destpath
遠程到本地
scp [options] /sourcefile [user@]172.18.12.12:/destpath
本地到遠程
常用選項:
-C: 壓縮數據流
-r: 遞歸復制 #復制目錄需要遞歸
-p: 保持原文件的屬性信息
-q: 靜默模式
-P PORT: 指明remote host 的監聽的端口
rsync 命令:
基于ssh 和rsh 服務實現高效率的遠程系統之間復制文件
使用安全的shell 連接做為傳輸方式
? rsync –av /etc 172.18.12.11:/tmp 復制目錄和目錄下文件
? rsync –av /etc/ 172.18.12.11:/tmp 只復制目錄下文件
目標地址,注意 / 有區別
比scp 更快,只復制不同的文件,
選項:
-n 模擬復制過程
-v 顯示詳細過程
-r 遞歸復制目錄樹
-p 保留權限
-t 保留時間戳
-g 保留組信息
-o 保留所有者信息
-l 把 把 符號鏈接文件做為符號文件 進行復制(默認)
-L 將軟鏈接文件指向文件復制
-a 存檔,相當于–rlptgoD ,但不保留ACL (-A )和SELinux 屬性(-X) )
交互式文件傳輸工具sftp 命令:
用法和 傳統的ftp 工具相似
利用ssh 服務實現安全的文件上傳和下載
使用ls cd mkdir rmdir pwd get put 等指令, 可用?或help獲取幫助信息
sftp [user@]host #sftp 172.18.12.11
sftp> help
什么是SSH 端口轉發?
SSH 會自動加密和解密所有 SSH 客戶端與服務端之間的網絡數據。
但是,SSH 還能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發\
并且自動提供了相應的加密及解密服務。這一過程也 被叫做“隧道”
(tunneling ),這是因為 SSH 為其他 TCP 鏈接提供了一個安全的通
道來進行傳輸而得名。例如,Telnet ,SMTP ,LDAP 些 這些 TCP 應用均
能夠從中得益,避免了用戶名,密碼以及隱私信息的明文傳輸。而與此同時,
如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許
SSH的連接 ,也能夠通過將 TCP 端口轉發來使用 SSH 進行通訊
SSH 端口轉發能夠提供兩大功能:
? 加密 SSH Client 端至 SSH Server 端之間的通訊數據
? 突破防火墻的限制完成一些之前無法建立的 TCP 連接
本地轉發:
-L localport:remotehost:remotehostport sshserver
選項:
-f 后臺啟用
-N 不打開 遠程shell ,處于等待狀態
-g 啟用網關功能
示例 : #需要再客戶端運行
ssh -L 9527:172.18.12.11:23 172.18.12.12
開啟本地9527端口到目標主機23端口,同時開啟本地隨機端口到
跳板機ssh端口22,經過跳板機172.17.12.12
然后訪問本機的9527 的端口時,被加密后轉發到跳板機的ssh 服務,
在本機打開另外客戶端 :訪問 #telnet 127.0.0.1 9527 可到達目標
可這樣理解: Data ——sshsrv:9527 ——–sshsrv:22——-
localhost:XXXXX ——localhost:YYYYY——-telnetsrv:23
遠程轉發:
-R sshserverport:remotehost:remotehostport sshserver
示例:
ssh –R 9527:telnetsrv:23 –N sshsrv
ssh -R 9527:目標主機地址:23 -N 客戶端地址
# ssh -R 9527:172.182.12.11:23 -N 客戶端地址
然后客戶端運行: #telnet 127.0.0.1 9527 可到達目標
讓sshsrv 偵聽9527 端口的訪問,如有訪問,就加密后通過ssh
服務轉發請求到本機ssh 客戶端,再由本機解密后轉發
到telnetsrv:23
Data —–sshsrv:9527 ——–sshsrv:22——-
localhost:XXXXX —–localhost:YYYYY——– telnetsrv:23
動態端口轉發:
當用firefox 訪問internet 時,本機的1080 端口做為代理服務器,
firefox 的訪問請求被轉發到sshserver 上,由sshserver替之訪問internet
在本機firefox 設置代理socket proxy:127.0.0.1:1080
#ssh -D 1080 root@sshserver
ssh -D 9527 172.18.12.12 #打開本地端口9527,指定代理地址
然后在linux瀏覽器中高級設置網絡中填寫127.0.0.1 9527,保存訪問
服務器端:sshd, 配置文件: /etc/ssh/sshd_config
服務器軟件包:openssh-server
常用參數:
Port
ListenAddress ip
PermitRootLogin yes
ClientAliveInterval 和ClientAliveCountMax
UseDNS #反向解析域名 no 不允許
MaxStartups 最大允許保持多少個未認證連接 。默認值10
MaxSessions 同一個連接最大會話最大默認100
限制可登錄用戶的辦法:
AllowUsers user1 user2 user3 #白名單
DenyUsers #黑名單
AllowGroups #組的白名單
DenyGroups #組的黑名單
ssh 服務的最佳實踐
要使用默認端口
禁止使用protocol version 1
限制可登錄用戶
設定空閑會話超時時長
利用防火墻設置ssh 訪問策略
僅監聽特定的IP地址
基于口令認證時,使用強密碼策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
使用 基于密鑰的認證
禁止 使用空密碼
禁止root 用戶直接登錄
限制ssh 的訪問頻度和并發在線數
做好日志,經常分析
ssh 協議的另一個實現:dropbear #拋棄的狗熊..
安裝準備:
? 1 、安裝開發包組:
? 2 、ftp://172.16.0.1/pub/Sources/sources/dropbear
? /dropbear-2013.58.tar.bz2
安裝:
? 3 、tar xf dropbear-2013.58.tar.bz2,
? 4 、less INSTALL #建議查看安裝文件
? 5 、./configure
? 6 、make PROGRAMS=”dropbear dbclient dropbearkey
dropbearconvert scp” #安裝的功能,直接make都安裝
? 7 、make PROGRAMS=”dropbear dbclient dropbearkey
dropbearconvert scp” install
啟動ssh 服務:
? 8 、ls /usr/local/sbin/ /usr/local/bin/
? 9 、/usr/local/sbin/dropbear -h #查看幫助
? 10 、mkdir /etc/dropbear #此文件需要手動生成
? 11 、dropbearkey -t rsa -f #生成秘鑰對,文件名幫助里有
/etc/dropbear/dropbear_rsa_host_key -s 2048
? 12 、dropbearkey -t dss -f #這是另外一種加密
/etc/dropbear/dropbear_dsa_host_key
? 13 、dropbear -p 2222 -FE # 前臺運行
dropbear -p 2222 # 后臺運行
客戶端訪問:
? 14 、ssh -p 2222 root@127.0.0.1
? 15 、dbclient -p 2222 root@127.0.0.1
AIDE: #高級的入侵檢測環境
當一個入侵者進入了你的系統并且種植了木馬,通常會想
辦法來隱蔽這個木馬(除了木馬自身的一些隱蔽特性外,
他會盡量給你檢查系統的過程設置障礙),通常入侵者會
修改一些文件,比如管理員通常用ps -aux 來查看系統進
程,那么入侵者很可能用自己經過修改的ps 程序來替換掉
你系統上的ps 程序,以使用ps 命令查不到正在運行的木馬
程序。如果入侵者發現管理員正在運行crontab 作業,也
有可能替換掉crontab 程序等等。所以由此可以看出對于
系統文件或是關鍵文件的檢查是很必要的。目前就系統完
整性檢查的工具用的比較多的有兩款:Tripwire 和AIDE
,前者是一款商業軟件,后者是一款免費的但功能也很強
大的工具
AIDE(Adevanced Intrusion Detection Environment)
? 高級入侵檢測環境) 是一個入侵檢測工具,主要用途是檢查文件的
完整性,審計計算機上的那些文件被更改過了。
? AIDE 能夠構造一個指定文件的數據庫,它使用aide.conf 作為其配
置文件。AIDE 數據庫能夠保存文件的各種屬性,包括:權限
(permission) 、索引節點序號(inode number) 、所屬用戶(user)、
所屬用戶組(group) 、文件大小、最后修改時間(mtime) 、創建時間
(ctime) 、最后訪問時間(atime) 、增加的大小以及連接數。AIDE
還能夠使用下列算法:sha1 、md5 、rmd160 、tiger ,以密文形式
建立每個文件的校驗碼或散列號.
? 這個數據庫不應該保存那些經常變動的文件信息,例如:日志文件
、郵件、/proc 文件系統、用戶起始目錄以及臨時目錄.
安裝
yum install aide
修改配置文件
vim /etc/aide.conf ( 指定對哪些文件進行檢測)
例如:
# matches. e.g. Put file matches before directories.
/app DATAONLY #監控此目錄 后面是監控的內容
!/app/f1 #這表示不監控此文件
注意:默認 matches下面有很多監控目錄,建議刪除,自己選擇目錄監控
更改完成后生成數據庫:aide –init
然后找到對應的數據庫目錄/var/lib/aide/ 把文件改名,刪除其中的new
使用aide –check 檢測,
中途做了修改可以更新數據庫或者重新生成,使用時需要重命名,刪除new
技巧:export EDITOR=vim #設置模式編輯器vim,
sudo:
sudo 能夠授權指定用戶在指定主機上運行某些命令,
如果未授權用戶用嘗試使用sudo
sudo 可以提供日志,記錄每個用戶使用sudo
sudo 為系統管理員提供配置文件,允許系統管理員集中地
管理用戶的使用權限和使用的主機
sudo 使用時間戳文件來完成類似“檢票”的 系統,默認存
活期為5 分鐘的 “入場券”
通過visudo 命令編輯配置文件,具有語法檢查功能
配置文件:/etc/sudoers, /etc/sudoers.d/
時間戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob: :
?: 任意單一字符
* :匹配任意長度字符
[wxc]: 匹配其中一個字符
[!wxc]: 除了這三個字符的其它字符
\x : 轉義
[[alpha]] : 字母 : 示例: /bin/ls [[alpha]]*
配置文件規則有兩類 ;
1 、別名定義: 不是必須的
2 、授權規則: 必須的
授權規則格式: #使用 :visudo命令,更改規則
用戶 登入主機=( 代表用戶) 命令
示例:
root ALL=(ALL) ALL #其中命令需要絕對匹配,少個/都不行
exam: shewei ALL=/bin/cat /etc/shadow,/bin/mount /dev/sr0/ /mnt/
注意:這里的root是個安全漏洞,如果root是普通用戶,可以代替管理員操作
su -u 管理員 passwd 管理員 #可以直接運行管理員命令
格式說明:
user: 運行命令者的身份
host: 通過哪些主機
(runas) : 以哪個用戶的身份
command: 運行哪些命令 #這里可以直接選擇目錄/bin
用戶和命令都支持別名定義:
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL= (root) ) NETCMD
!/usr/bin/passwd root #排除此命令
注意: %wheel ALL=(ALL) ALL #這個組里的用戶權限也大
sudo 命令:
ls -l /usr/bin/sudo
sudo –i –u wang 切換身份
sudo [-u user] COMMAND
-V 顯示 版本 信息等配置信息
-u user 默認為root
-l 列出用戶在主機上可用的和被禁止的命令
-K 與-k 類似,還要刪除 時間戳文件
-b 在后臺執行指令
原創文章,作者:shewei,如若轉載,請注明出處:http://www.www58058.com/73257