- 独立守护进程(自我管理):httpd
- 瞬时守护进程:平常不会启动,有超级守护进程管理唤醒telent进程,该进程处理完成之后响应给客户端并继续睡眠,有超级守护进程监听服务
- CentOS 5/6: 服务托管给超级守护进程,xinetd
- 配置文件:
/etc/xinetd.conf, /etc/xinetd.d/*
- 启用某瞬时守护进程的方式
# vim /etc/xinetd.conf
disable = no
不禁用- chkconfig命令
# chkconfig NAME on|off
- 重启超级守护进程
- 启用某瞬时守护进程的方式
# service xinetd start|stop|status|reload|restart
- 配置文件:
- CentOS 5/6: 服务托管给超级守护进程,xinetd
C/S结构,
23/tcp
明文协议:认证等均为非加密
- Linux发行版默认禁用telnet服务
- Linux:禁止管理员直接登录
- 支持su切换
- Server: telnet-server
- Client: telent
-
Server:
# yum -y install telnet-server
-
服务程序:
/usr/sbin/in.telnetd
-
systemd 用户监听端口
/usr/lib/systemd/system/telnet.socket
-
# systemctl start telnet.socket
-
# ss -tln
23端口, systemd用户
-
-
Client: telnet(账号和密码都是明文传送的)
- 使用普通用户登录,不能使用管理员登录
# telnet [host [port]]
-
抓包操作:
tcpdump
-
nc命令的安装
# yum -y install nmap-ncat
# nc -l IP PORT
# nc -ul IP PORT
-
C/S:
22/tcp
,安全地远程登录 -
协议
ssh v1
:中间人攻击(man-in-middle)ssh v2
:使用此版本
-
ssh 是持久连接类型:会话机制,空闲超时会退出(设置)
-
非对称加密,传送数据很慢
- 解决:使用定期对称密钥传送数据
-
主机认证:需要用到主机认证密钥;由服务器端维护和提供
-
用户远程登录:两种方式
- 1.基于口令的认证;passsword
- 2.基于密钥的认证;signature
- 用户提供一对儿密钥,私钥保留在客户端,公钥保留于远程服务器端的某用户家目录的特定文件中
-
Linux发行版默认使用
-
sshd服务程序:
ssh daemon
- 配置文件:
/etc/ssh/sshd_config
- 配置文件:
-
ssh客户端工具:
ssh client
- 配置文件:
/etc/ssh/ssh_config
- 工具:scp, sftp
- 配置文件:
-
# rpm -qa | grep -i ssh
-
公共库:
openssh,libssh,ksshaskpass
# rpm -ql | grep -i ssh
# rpm -ql openssh-clients
-
openssh-clients-VERSION
-
ssh [options] [user@]host ['COMMAND']
-
ssh [opitons] -l user host ['COMMAND']
不同登录直接执行command -
省略用户名:使用本地用户名作为远程登录的用户名
# ssh 172.10.100.67
# ssh 172.18.100.67 'ifconfig'
-1 : ssh v1
-2 : ssh v2
-4 : ipv4
-6 : ipv6
-l login_name:以指定的用户的身份进行远程登录
-p port:远程服务器的端口
-o option:覆盖远程服务器sshd服务配置选项
`StrictHostKeyChecking` 严格检查主机密钥(第一次要不要接受提示信息)
`ForwardX11`
-X:支持X11转发(把本地服务当作图形服务器(图形转发))
xshell:
-Y:支持授信任的X11转发
-b bind_address:本地的源地址(本地有多个接口地址时指定连接地址)
-i identity_file:基于密钥的认证执行认证操作时使用的本地密钥文件
~/.ssh/{identity(v1), id_dsa,id_ecdsa, id_ed25519, id_rsa(v2)}其中某一个文件
连接远程并打开远程firefox
# ssh -X root@172.10.100.67
# firefox
# /etc/ssh/ssh_config
HOST host1.wovert.com
HOST host2.wovert.com
HOST *.lingyima.com
HOST * 连接任意主机
特殊的放在前面
Host * # 默认配置
option value
...
Host PATTERN # 匹配模式
option value
...
Host host1.lingyima.com # 指定唯一主机模式
StrictHostKeyChecking no
...
# vim /etc/ssh/ssh_config
Host 172.18.100.67
StrictHostKeyChecking no
- secrecrt, xmanager(xshell), sshsecureshellclient,putty
只能单项登录
- 远程主机:172.18.100.67
- 本地主机:172.18.100.68
- 生成一个密钥对儿; 非对称密钥
# ssh-keygen [-b bits] [-t type] [-f output_keyfile] [-N new_passphrase]
-t type
rsa: 默认算法,密钥默认长度为2048bits
dsa: 密钥长度固定位1024),
ecdsa: 椭圆曲线算法,密钥长度256/384/521bits
ed255519
-b bits 密钥长度 (RSA: 最短768), 默认2048 bits
-f out_keyfile 指明私钥文件保存位置
-N new_passphrase 私钥加密
[172.18.100.68~]# ssh-keygen -t rsa -b 2048
~/.ssh/id_rsa: 私钥文件路径
passphrase: 私钥加密密令
[RSA 2048] 二维码
id_rsa.pub 公钥文件
[172.18.100.68~]# rm -rf ~/.ssh
[172.18.100.68~]# ssh-key -t rsa -f ~/.ssh/id_rsa -N ''
id_rsa文件必须是600权限
[172.18.100.68~]# ls ~/.ssh
id_rsa
id_rsa.pub
- 将生成的密钥对儿中的公钥
rd_rsa.pub
的内容复制到远程主机用户的家目录下.ssh
目录下的文件authorized_keys
(644)文件当中追加
# ssh-copy-id [-i [identity_file]] [-p port] [user@host]
-p port: 远程主机的监听的端口号
user@host: 远程主机的用户名主机号
可以使用不同的用户名登陆
[172.18.100.68~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.18.100.67
[172.18.100.68~]# ssh-copy-id -i .ssh/id_rsa.pub centos@172.18.100.67
- 测试
[172.18.100.68]# ssh user@hostname
[172.18.100.67]# cat .ssh/id_rsa.pub
secure cp,跨主机进行安全文件的传输工具
scp [options] SRC... DEST/
scp [options] SRC DEST
# scp [options] /path/from/somefile ... [user@hostname]:/path/to/somewhere
本地文件(一个或多个)复制到远程主机的目录下
# scp [options] [user@hostname]:/path/from/somefile ... /path/to/somewhere
远程主机的目录下复制文件到本地的目录下
-r : recursive
-p : 保存源文件的权限及从属关系
-q : 静默模式
-p PORT: 指明远程主机ssh协议监听的端口
- 不够灵活
OpenSSH 服务自带
-
sftp:C/S架构
-
S: 由sshd服务进程实现,是ssh的一个子系统;在CentOS上默认启用
-
C: sftp命令
-
客户端命令
# sftp root@远程主机` 密钥认证不需要输入密码
# sftp root@172.18.100.67
sftp> help
sftp> get destfile srcfile 下载文件destfile到本地重命名为srcfile
基于vsftpd+pam+mysql架设ftp并实现虚拟用户登录
file transfer proctocol
-
明文协议
-
安全传输机制:
- ftps: ftp over ssl
- sftp: ftp over ssh
-
ftp协议不适应现在,而是使用云存储
- 程序包文件:
openssh-server-VERSION
- 配置文件:
/etc/ssh/sshd_config
- 格式:
directive value
常用指令
Port 22
AddressFamily any|ipv4|ipv6 any两者都有
# ListenAddress 0.0.0.0 监听的地址,0.0.0.0本机的所有有效地址
私网地址:建议使用私网地址
公网地址:不建议使用
解决方案:
1. 建立vpn主机(跳板机),vpn分配给私网地址,然后通过私网连接sshd服务。
2. 使用公网地址,密钥认证保存在U盘上,使用时插入电脑。密钥文件一定要加密,防止丢失U盘。并且保留手写密钥数据。
# Protocol 1 协议版本
# HostKey /etc/ssh/ssh_host_key 主机密钥(私钥),对应的公钥在ssh_host_key.pub
客户端连接时发给主机发给客户端公钥,如果客户端有公钥不用发送,而且主机认证直接通过,不同yes|no提示
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
# HostKey /etc/ssh/ssh_host_dsa_key 禁用dsa算法,因为不安全
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
## version 1
# KeyRegenerationInterval 1h v1 每隔一个小时换密钥
# ServerKeyBit 1024 密钥长度
## loging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV 日志记录方式,AUTHPRIV表示日志记录与/var/log/secure 登录信息(成功,失败等)
**运维技巧**:分析/var/log/secure日志文件,并且定期执行。发送给邮件,第二日查看邮件
# LogLevel INFO 日志事件级别(事件重要程度)
## Authentication 认证相关
# LoginGraceTime 2m 登录宽限期
登录远程主机
# ssh 172.15.100.56 一直不填账号和密码的宽限期
每一个连接多需要子进程运行,2m之后登录断开
PermitRootLogin no 是否允许管理员直接登录
StrictModes yes 是否使用严格模式
MaxAuthTries 6 最大尝试认证次数(6次输入密码错误)
**运维技巧**:尝试次数达到很多次,在一定时间禁止访问主机(iptables防火墙过滤)
MaxSessions 10 最大并发连接数
RSAAuthentication yes 是否支持rsa加密方式完成密钥认证
PubkeyAuthentication yes 基于公钥认证方式
AuthorizedKeysFile .ssh/authorized_keys 密钥存放路径文件
#AuthorizedPrincipalsFile none 定义密钥规则文件
PasswordAuthentication yes 基于是否口令认证
PermitEmptyPasswords no 是否空密码认证
ChallengeResponseAuthentication no 是否挑战式响应认证方式,不安全
## Kerberos options. 集中式认证,kerberos协议
多个服务都有各自的用户和密码
解决方案:集中认证
多个服务器
一个kerberos认证服务器
多个服务器各自认证时不再本机认证,而是到kerberos主机认证
用户名认证、密码认证都在kerboros主机认证
- NIS: 账号集中存储,明文发送
UsePM yes 可插入式认证模块
X11Forwarding yes 是否支持x11转发
useDNS no 是否反解IP地址
Subsystem stp /usr/libexec/openssh/sftp-server ssh子系统
## 限制可登陆的用户
AllowUsers user user2 user3 允许使用ssh服务的用户白名单
AllowGroups group1 grup2 允许使用ssh服务的用户组白名单
DenyUsers user user2 拒绝使用ssh服务的用户黑名单
DenyGroups group1 grup2 拒绝使用ssh服务的用户组白名单
**运维技巧**: AllowUsers与DenyUsers不能同时使用,建议使用AllowUsers
- CentOS 6:
/etc/rc.d/init.d/sshd
- CentOS 7:
/usr/lib/systemd/system/sshd.service
# rpm -ql openssh-server
sshd.service
sshd.socket 访问时启动,systemd来监听启动sshd服务
- 服务器
# man sshd_config
# man sshd
- 客户端
# man ssh_config
# man ssh
- 不要使用默认端口,设置成随机端口
Port 22022
- 不要使用第一版协议
Protocol 2
- 限制可登陆的用户
AllowUsers usr1 use2 ...
AllowGroups grp1 grp2 ...
- 设定空闲会话超时时长
ClientAliveCountMax 2m
- 利用防火墙设定ssh的远程访问策略; 仅允许来自于指定网络中的主机访问
- 仅监听与指定的IP地址
ListenAddress ipv4|ipv6|any(default)
- 基于口令认证时,使用强密码策略
# openssl rand -base64 30
# tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
密码管理工具:一定要加密
- 基于密钥的认证
- 禁止使用空密码
- 禁止管理员直接登录
- 限制ssh的访问频度和并发在线
- 做好日志分析(保存于远程服务器)
# yum -y install dropbear
- 实现目标:busybox + dropbear + nginx
- 服务器端程序:dropbear
- 客户端程序:dbclient
- 密钥管理工具:dropbearkey
- 生成密钥:手动生成密钥
# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key`
dss:Digest Signature Standard, -s 1024 bit固定长度
# dropbearkey -t rsa -s 2048 -f /etc/dropbear/dropbear_rsa_host_key
-s 是8的整数倍
# dropbearkey -t ecdsa -s 384 -f /etc/dropbear/dropbear_ecdsa_host_key
-s 256|384|521
运行服务:
# dropbear -h`
- 手动启动(前台)
# dropbear -F -E -p 22022
守护进程
# systemctl start dropbear.service
-E:error,将日志发往标注错误输出,而非syslog
-F:front,让进程运行于前台
-p:port,指明监听的地址和端口
-w : 进制root登录
- 测试登录
# ssh -p 22022 username@host
- 将其运行为守护进程
CentOS 7: systemd unit file的环境配置文件
# vim /usr/lib/systemd/sytem/dropbear.service
[Service]
EnvironmentFile=-/etc/systemconfig/dropbear
ExecStart=/usr/sbin/dropbear -E -F $OPTIONS
# vim /etc/sysconfig/dropbear
OPTIONS="-p 23332"
# systemctl start dropbear.service
# dbclient -h`
dbclient [options] [user @]host[/port] [command]`
选项:
-l <username>
- 提供scp功能, 与ssh的scp功能冲突
github地址:https://github.com/openssl/openssl/blob/master/INSTALL 这个是需要自己编译的,推荐直接利用window版的安装包:https://www.mls-software.com/opensshd.html