独立的进程和独立的启动脚本
启动方式
/etc/init.d/xxx start
或者/etc/rc.d/init.d/xxx start
或者service xxx start
注意:RHEL7/Centos7服务的管理方式不一样.
没有独立的启动脚本,依赖于xinetd服务(xinetd服务本身是一个独立服务)
启动方式
必须启动xinetd服务
Extended internet daemon(扩展的网络守护进程),又叫超级Internet服务,常用来管理多种轻量级Internet服务;
作用:唤醒在睡觉的服务,由xinetd管理的服务只有在用到的时候才被唤醒,平时不占用系统资源;支持Tcp_Wrappers一种安全策略机制。
TCP_Wrappers是一个工作在应用层的安全工具,它只能针对某些具体的应用或者服务起到一定的防护作用。比如说ssh、FTP等服务的请求,都会先受到TCP_Wrappers的拦截。
TCP_Wrappers有一个守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件/etc/hosts.allow和/etc/hosts.deny;合乎要求,则会把这次连接原封不动的转给真正的sshd进程,sshd完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
des 对称的公钥加密算法,安全低,数据传输速度快;使用同一个秘钥进行加密或解密
rsa 非对称的公钥加密算法,安全,数据传输速度慢 ,SSH默认的加密算法
补充了解:
DSA数字签名,非对称加密的另一种实现。
[root@client ~]# ssh 192.168.10.171
The authenticity of host '192.168.10.171 (192.168.10.171)' can't be established.
RSA key fingerprint is 9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
Are you sure you want to continue connecting (yes/no)?
提示信息:无法确认主机192.168.10.171的真实性,指纹是9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
,你确定想要继续吗?
说明: 理论上应该是对公钥的确认,由于公钥通过RSA算法加密,太长,不好直接比较,所以给公钥生成一个hash的指纹,方便比较。
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.171' (RSA) to the list of known hosts.
root@192.168.10.171's password:
说明:
当客户端输入yes确认对方的公钥指纹后,server端的公钥就会被存放到客户机的用户家目录里~/.ssh/known_hosts
文件中,下次再访问就直接通过密码登录,不需要再确认公钥。
[stu1@client ~]$ ssh [email protected] //方式一 用@
root@192.168.10.171's password:
Last login: Mon Apr 16 15:12:45 2018 from 192.168.10.171
[root@client ~]# exit
logout
Connection to 192.168.10.171 closed.
[stu1@client ~]$ ssh -l root 192.168.10.171 //方式二 用-l
root@192.168.10.171's password:
Last login: Mon Apr 16 15:18:59 2018 from 192.168.10.171
[root@client ~]# exit
logout
Connection to 192.168.10.171 closed.
[stu1@client ~]$ ssh -lstu2 192.168.10.171 //方式三 -l用户名
stu2@192.168.10.171's password:
重点:公钥和私钥在客户端,服务端得到客户端的公钥后生成随机数给客户端,客户端验证后建立连接。不用账号、密码验证。
相关文件解读:
步骤:
[root@client ~]# useradd user01
[root@client ~]# su - user01
[user01@client ~]$ ls -a
. .. .bash_logout .bash_profile .bashrc .emacs .gnome2 .mozilla
[user01@client ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user01/.ssh/id_rsa):
Created directory '/home/user01/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user01/.ssh/id_rsa.
Your public key has been saved in /home/user01/.ssh/id_rsa.pub.
The key fingerprint is:
df:5b:4f:f8:26:38:0f:5f:f0:df:4c:78:54:bd:94:9e user01@client
The key's randomart image is:
+--[ RSA 2048]----+
| |
| o|
| oo|
| o +|
| S .E.|
| . . * |
| . o.+ *|
| o=.O+|
| .ooo*|
+-----------------+
[user01@client ~]$
[user01@client ~]$ ls .ssh/
id_rsa(私钥) id_rsa.pub(公钥)
2 . 将刚刚生成的公钥远程拷贝到server端的root家目录里指定位置
[user01@client ~]$ scp .ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys
或者
[user01@client ~]$ ssh-copy-id -i .ssh/id_rsa.pub [email protected] (推荐)//会自动帮助拷贝到目的地并且重命名,所以推荐
The authenticity of host '192.168.10.171(192.168.10.171)' can't be established.
RSA key fingerprint is 9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.10.171' (RSA) to the list of known hosts.
[email protected]'s password:
Now try logging into the machine, with "ssh '[email protected]'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
补充:如果拷贝出错可以关闭selinux
[root@server ~]# getenforce
Enforcing //强制模式
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive //警告模式
server端查看:
[root@server .ssh]# ls
authorized_keys
[root@server .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAssRLeKnKiLRZ2NbGi/uIZD1IpTnvMqFdKXEUlLH+Eli2PkxamDAszQVf7dsn2FHxCptzL04tDEdqWJ1Nr3zTDyjha9gfHWu6AuXAzaX9gWVIt8qza+yJSxpuoam3OwC6y88HMxvTuYy3jkL/6aCk6b5wzhKUYXwvTKwRctb/dO/9GC22CsmPvLHyFH+CpzmdcG2BzlOkg05CVshDIJSJ2Xmaj7G6m+N2cN4m/NV61rXPHn93wwdFcdNQLlRjDvZ6s7UIgmD04497PKUxJ/hTgkm6p3kAGxESEc0JxYHTGnhVE5D6byfRd0Aa/ydBiSov1x5a6vniGQeUh2+NP6omUQ== user01@client
3.测试验证
[user01@client ~]$ ssh root@192.168.10.171
Last login: Mon Apr 16 16:00:55 2018 from 192.168.10.171
[root@server ~]#
注意:是客户端将秘钥复制给服务端,然后客户端登录服务端。
[root@server ~]# rpm -ql openssh-server
/etc/rc.d/init.d/sshd //启动脚本
/etc/ssh/sshd_config //配置文件
/usr/sbin/sshd //二进制命令
[root@server ~]# rpm -ql openssh-clients
/etc/ssh/ssh_config
/usr/bin/scp
/usr/bin/sftp
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
[root@server ~]# rpm -qf /usr/bin/ssh-keygen
openssh-5.3p1-94.el6.x86_64
[root@server ~]# vim /etc/ssh/sshd_config
。。。
PermitRootLogin no
重启服务:
[root@server ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
测试验证:
[root@client ~]# ssh 192.168.10.171
root@192.168.10.171's password:
Permission denied, please try again.
[email protected]'s password:
[root@server ~]# vim /etc/ssh/sshd_config
。。。
Port 10022
测试验证:
[root@client Desktop]# ssh -p10022 [email protected]
ssh: connect to host 192.168.10.171 port 10022: No route to host //路由无法到达
原因:
1、 网络问题
2、 防火墙
解决:
关闭防火墙
注意: /etc/services
中也记录了一些协议的端口信息,可能会与配置文件中信息冲突,但是以配置文件为主,如果端口信息更改失效,可以尝试修改此文件,或删除此文件中冲突信息。
ssh
服务的远程访问控制可以使用tcp_wrappers
工具做网络控制
/etc/hosts.allow
和/etc/hosts.deny
如何判断一个服务支持TCP_wrappers功能
rpm包安装的服务:
[root@server ~]# ldd /usr/sbin/sshd |grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fbb65b57000)
//有以上模块说明支持
源码包:
./configuer --enable-libxxxx
//配置的时候开启功能
需求:
不允许192.168.10.170服务器来远程访问
vim /etc/hosts.deny
sshd:192.168.10.170
//该文件写法如下:更多参考man文档
sshd:192.168.10.0/255.255.255.0 EXCEPT 192.168.10.170
sshd,vsftpd:.yu.net EXCEPT review.yu.net
测试验证:
[root@client ~]# ssh [email protected] -p 10022
ssh_exchange_identification: Connection closed by remote host
过程分析:
[root@review1 ~]# yum -y install dhcp
[root@review1 ~]# rpm -ql dhcp
/etc/dhcp
/etc/dhcp/dhcpd.conf //主配置文件
/etc/rc.d/init.d/dhcpd //启动脚本
/usr/sbin/dhcpd //二进制命令
vim /etc/dhcp/dhcpd.conf
option domain-name "yu.net"; //域名
option domain-name-servers 192.168.10.11, 8.8.8.8; //DNS(可以写多个)
default-lease-time 3600; //缺省租约
max-lease-time 7200; //客户端最大租约
log-facility local7; //定义日志设备载体 (/var/log/boot.log输出)
subnet 192.168.10.0 netmask 255.255.255.0 { //子网<网段>
range 192.168.10.20 192.168.10.50; //地址范围<地址池>
option routers 192.168.10.11; //网关
option broadcast-address 192.168.10.255 //广播地址
}
//注意:地址池中的IP要与DHCP服务器的IP在同一个网段,不然客户机在求取IP时找不到DHCP服务器
[root@review1 ~]# service dhcpd start
Starting dhcpd: [OK]
[root@review1 xinetd.d]# yum -y install telnet-server xinetd //安装telnet-server(注意这是服务端,客户端安装telnet) 和xinetd
# cat /etc/xinetd.conf //主配置文件,轻易不修改,改变后会影响所有托管于xinetd的服务。
defaults
{
log_type = SYSLOG daemon info //--日志类型,表示使用syslog进行服务登记。
log_on_failure = HOST //--失败日志,失败后记录客户机的IP地址。
log_on_success = PID HOST DURATION EXIT //--成功日志,记录客户机的IP地址和进程ID
cps = 50 10 //表示每秒50个连接,如果超过限制,则等待10秒。主要用于对付拒绝服务攻击。
instances = 50 //最大连接数
per_source = 10 //每个IP地址最大连接数
v6only = no //不使用ipv6
groups = yes //确定该服务的进程组ID,/etc/group
umask = 002 //文件生成码反掩码 666(664) 777(775)
}
includedir /etc/xinetd.d //外部调用的目录
# cat /etc/xinetd.d/telnet //子配置文件
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no //默认开启服务,=yes表示关闭
flags = REUSE //标记
socket_type = stream //tcp协议
wait = no //表示不需等待,即服务将以多线程的方式运行,并发连接;yes表示单线程
user = root //以root身份启动该进程
server = /usr/sbin/in.telnetd //二进制命令
log_on_failure += USERID //表示设置失败时,UID添加到系统登记表
}
注:不能用root登录,telnet连接不加密,telnet服务自己拒绝root连接
[root@review2 ~]# telnet 192.168.10.11
Trying 192.168.10.11...
Connected to 192.168.10.11.
Escape character is '^]'.
CentOS release 6.5 (Final)
Kernel 2.6.32-431.el6.x86_64 on an x86_64
login: root
Password:
Login incorrect
login: test1
Password:
[test1@review1 ~]$