Linux入门攻坚——24、BIND编译安装、Telnet和OpenSSH
BIND编译安装
对于没有rpm包,需要源代码编译安装。
1、下载源代码:bind-9.12.2-P1.tar.gz,解压:tar -xf bind-9.12.2-P1.tar.gz
2、完善环境:
1)增加用户组named:groupadd -g 53 named
2)增加用户named(系统用户):useradd -r -u 53 -g named named
3、执行configure:进入加压后的目录,执行
./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --disable-ipv6 --disable-chroot --enable-threads
make
make install
4、编译安装后,没有配置文件,即没有named.conf和named.rfc1912.zones等配置文件;没有rndc相关的配置文件;所以需要手工建立。同时相关命令也不能直接调用,相关库文件、头文件、资料文件需要添加到搜索路径中,即导出这些文件:
1)导出二进制命令路径,需要将路径输出到PATH环境变量中:在/etc/profile.d/下建立named.sh文件,内容如下: export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH
然后重读一下文件:. /etc/profile.d/named.sh ,然后就可以直接调用这些命令了。
2)导出库文件,其他程序用到这些开发库,如果不导出,也无法使用,即找不到,所以要导出:
在/etc/ld.so.conf.d/下新建named.conf文件,内容是bind的库文件位置:
/usr/local/bind9/lib
然后要通知系统重读此配置文件,生成库文件搜索路径:ldconfig -v
3)导出头文件:ln -sv /usr/local/bind9/include/ /usr/include/named
4)导出帮助手册,即man目录,即将安装的man目录加入到搜索路径中,编辑/etc/man.config文件:添加MANPATH路径:
5)创建bind的配置文件/etc/named/named.conf,因为我们编译安装是配置了配置文件路径是/etc/named。
options {directory "/var/named"; //全局配置只配置这一项就可以运行了,其他采用默认配置
};zone "." IN {type hint;file "named.ca";
};zone "localhost" IN {type master;file "localhost.zone";allow-update { none; };
};zone "0.0.127.in-addr.arpa" IN {type master;file "named.local";allow-update { none; };
};
然后这些库文件也需要我们自己创建:/var/named/named.ca、/var/named/localhost.zone、/var/named/named.local
根节点库文件,可以通过:dig -t NS . @ip获得,这里ip是可以连接互联网的机器:
将结果拷贝到named.ca中:dig -t NS . @192.168.138.2 > /var/named/named.ca
创建解析库文件:/var/named/localhost.zone:
$TTL 1d
@ IN SOA localhost. admin.localhost. (20240524011h5m7d1d )IN NS localhost.
localhost. IN A 127.0.0.1
解析库文件:/var/named/named.local
$TTL 1d
@ IN SOA localhost. admin.localhost. (20240524011h5m7d1d )IN NS localhost.
1 IN PTR localhost.
6)修改文件权限:
/var/named/下的所有文件:chmod 640 ./* ; chown :named *
chmod 640 /etc/named/named.conf ; chown :named /etc/named/named.conf
5、启动服务,成为缓存名称服务器:
named -u named -f -g -d 3,运行于前台
named -u named,运行于后台
启动过程中多次出现某目录或文件权限不够的提示,即permission denied,修改其属组权限后,系统运行正常
6、配置rndc,使用rndc工具时,提示
[root@study610-f2 named]# rndc reload
rndc: neither /etc/named/rndc.conf nor /etc/named/rndc.key was found
使用rndc-confgen产生:
按照提示分别拷贝相关内容到rndc.conf和named.conf中
# 以下为named.conf文件内容
options {directory "/var/named";
};zone "." IN {type hint;file "named.ca";
};zone "localhost" IN {type master;file "localhost.zone";allow-update { none; };
};zone "0.0.127.in-addr.arpa" IN {type master;file "named.local";allow-update { none; };
};zone "mytestcc.com" IN {type master;file "mytestcc.com.zone";allow-update { none; };
};# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {algorithm hmac-sha256;secret "JS3jsXcMavvFVDGsjokYVhvml8h5dhwnvvrZJElW0F0=";
};controls {inet 127.0.0.1 port 953allow { 127.0.0.1; } keys { "rndc-key"; };
};
# End of named.conf# 以下为rndc.conf文件内容
# Start of rndc.conf
key "rndc-key" {algorithm hmac-sha256;secret "JS3jsXcMavvFVDGsjokYVhvml8h5dhwnvvrZJElW0F0=";
};options {default-key "rndc-key";default-server 127.0.0.1;default-port 953;
};
# End of rndc.conf
重新启动named进程,即可使用rndc进行管理。
远程登录:
登录到主机中,经历了 本地终端——>远程终端——>安全远程终端 几个阶段,最开始,主机提供相应的硬件接口,在此接口上连接VGA和键盘,实现登录主机,即本地终端登录,此时主机不需要额外的进程来处理与终端的通讯,随着网络的发展,出现在远端通过网络登录主机的需求,要实现的是同本地终端类似的功能,因为需要通过网络连接,并且要把网络包内容并在主机上解包并并运行其中的内容,就需要额外进程来负责,分为服务器端和客户端,服务器端实现接收客户端的输入内容,与主机交互将内容交给主机执行,将主机执行结果打包反馈给客户端,客户端要实现模拟本地终端的功能,实现内容输入和接收返回内容的展示,这需要双方遵守相同的规则,即需要终端通信协议,此时交互内容是明文在网络上传递;随着网络安全威胁越来越高,上述交互很容易被窃取,于是要求安全的网络交互,就出现了安全的远程终端,随之也就有安全终端协议。
Telnet:
一种不安全的远程终端协议telnet协议的实现,C/S架构,监听端口23/tcp。
telnet的使用:
1)安装:yum install telnet-server
安装后有telnet-server.x86_64 和telnet.x86_64 两个程序包,一个是服务器端程序包,一个是客户端程序包。telnet server是一个独特的服务,工作于基于超级守护进程管理的瞬时守护进程模式。
2)telnet server的启动:
chkconfig telnet on
service xinetd restart
查看:
xinetd叫超级守护进程,下面的没有运行级别的,像telnet叫瞬时守护进程。xinetd代瞬时守护进程监听,在有用户访问时,唤醒瞬时守护进程。像telnet进程使用的频度不高,不需要时刻监听。
3)登录,因为telnet是明文传输,禁止使用管理员账户登录,使用普通用户登录:
在windows上:
OpenSSH:
ssh:secure shell ,Protocol,即是一种协议。监听在tcp的22号端口,实现安全的远程登录。
OpenSSH:ssh协议的开源实现。dropbear是另一种实现。
Telnet:实现远程登录,但是没有安全保护,早期的远程登录。端口23/tcp
SSH协议版本:
v1:基于CRC-32做MAC,不安全:易遭到man-in-middle攻击
v2:双方主机协商选择安全的MAC方式。基于DH算法做密钥交换,基于RSA或DSA算法实现身份认证。
两种方式的用户登录认证: 基于password、基于key
通过ssh host登录服务器,客户端必须认证一下这台主机是不是就是要连接的那台主机,一般使用密钥对方式验证,客户端用主机的公钥解密主机发送的内容验证通过,即证明是需要的主机。关于客户端中主机的公钥,在第一次登录时,主机会发送这个公钥,在客户端会提醒是否保存这个公钥,就是让客户端使用者确定主机,接受保存后下一次访问,就会直接使用这个公钥。
基于密钥登录:客户端生成密钥对,将公钥发送给远程主机中对应登录用户的家目录下的某个文件中,以后此用户再登录时,主机用此公钥解密客户端的信息,依此来判断客户端的合法性,而不需要输入口令。此公钥是不允许公开的。
具体保存在~/.ssh/known_hosts中。
OpenSSH是C/S架构,客户端(C端)有ssh,(scp,sftp),windows客户端有xshell,putty,securecrt;对于Linux下的ssh客户端,配置文件为/etc/ssh/ssh_config;服务器端(S端):sshd,配置文件为/etc/ssh/sshd_config;
客户端工具:ssh命令
ssh [user]@host [command]:没有user,默认使用linux当前登录用户,指定了user,以指定的特定user登录。
ssh [ -l user ] host [command]:
参数 -p port:远程服务器监听的端口;
-X :支持X11转发
-Y:支持信任的x11转发;
客户端配置文件格式,/etc/ssh/ssh_config:
Host PATTERN
PARAMETER VALUE
# Host * # *号代表所有主机
# ForwardAgent no
# ForwardX11 no
# RhostsRSAAuthentication no
# RSAAuthentication yes
# PasswordAuthentication yes
# HostbasedAuthentication no
# GSSAPIAuthentication no
# GSSAPIDelegateCredentials no
# GSSAPIKeyExchange no
# GSSAPITrustDNS no
# BatchMode no
# CheckHostIP yes
# AddressFamily any
# ConnectTimeout 0
# StrictHostKeyChecking ask # 第一次登录时,会提示是否接受密钥,设置no不提问
# IdentityFile ~/.ssh/identity
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
# Port 22
# Protocol 2,1
# Cipher 3des
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
Host *GSSAPIAuthentication yes
# If this option is set to yes then remote X11 clients will have full access
# to the original X11 display. As virtually no X11 client supports the untrusted
# mode correctly we set this to yes.ForwardX11Trusted yes
# Send locale-related environment variablesSendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT SendEnv LC_IDENTIFICATION LC_ALL LANGUAGESendEnv XMODIFIERS
基于密钥的认证(不需要密码进行登录):
(1)在客户端生成密钥对
ssh-keygen -t rsa [-P ''] [-f "~/.ssh/id_rsa"]
(2) 把公钥传输至远程服务器对应用户的家目录
ssh-copy-id [ -i [ identity_file] ] [ user@] machine
(3)登录验证:ssh
(4)安全提醒:不要使用root,可以登录后切换至root
实操:
1)客户端生成密钥对:
2)把公钥传输至远程服务器端对应用户的家目录
在服务器中查看:
注意,authorized_keys文件的权限为:-rw-------,即600,这是为了确保安全。
3)测试:
结果直接登录,没有提示输入密码。
scp命令:
scp [options] SRC ... DEST/
存在两种情形:
PULL:scp [options] [user@]host:/PATH/FROM/SOMEFILE /PATH/TO/SOMEWHERE
把远程文件拉到本地来,以哪个用户登录到哪台远程主机上去拉文件,即远程主机的用户
PUSH:scp [options] /PATH/FROM/SOMEFILE [user@]host:/PATH/TO/SOMEWHERE
把本地文件推送给(复制给)远程主机。也是远程主机用户。
常用选项:
-r :递归复制
-p :保持源文件的属性信息
-q :静默模式
-P PORT:指明remote host的监听的端口;
scp也基于ssh,因为在上一步设置了基于密钥的认证,所以复制过程也不需要输入密码。
sftp命令:
sftp [user@]host
同scp,也是基于ssh
服务器端:sshd
配置文件/etc/ssh/sshd_config
# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.
# 以#加空格开头的是注释,以#开头后无空格的是配置项,去掉#就是配置#Port 22 # sshd服务监听的端口,默认22
#AddressFamily any # IP家族,any表示IPv4和IPv6
#ListenAddress 0.0.0.0 # 监听本机所有IPv4地址
#ListenAddress ::# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2 # 使用协议的哪个版本# Centos6上sshd的配置
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key# 在7.x版本,即centos7上,配置如下
#HostKey /etc/ssh/ssh_host_rsa_key
##HostKey /etc/ssh/ssh_host_dsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key # 在用户登录时发送给用户的公钥,即保存在客户端用户家目录.ssh下know_hosts中的公钥
#HostKey /etc/ssh/ssh_host_ed25519_key# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h # 对称密钥重新生成时间间隔
#ServerKeyBits 1024# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV # 日志使用AUTHPRIV,保存在/var/log/secure
#LogLevel INFO# Authentication:#LoginGraceTime 2m # 登录的宽限时间(等待输入用户密码时间)
#PermitRootLogin yes # 是否允许root直接登录,默认是可以的
#StrictModes yes # 是否严格检查格式
#MaxAuthTries 6 # 最大认证重试次数
#MaxSessions 10 # 最大会话数#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys # 客户端采用密钥认证时,客户端的公钥在服务器端的保存位置
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes # 允许基于口令认证方式登录# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no # Kerberos options # 实现第三方统一认证的一种认证方式
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes# GSSAPI options
#GSSAPIAuthentication no
GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
#UsePAM no
UsePAM yes# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
X11Forwarding yes # 允许客户端调用服务器端的图形程序
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes # DNS的反向解析功能,默认是开启的,一般设为no,否则,客户端登录时会发生被卡住一会的现象
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none# no default banner path
#Banner none# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server # 支持sftp# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server
在ssh命令中使用 -X选项支持X11转发或-Y选项支持信任的x11转发
ssh服务的最佳实践:
1、不要使用默认端口;
2、禁止使用Protocol version 1;
3、限制可登录用户:配置文件中AllowUsers和AllowGroups,白名单;
实操: 添加两个用户:gentoo和centos,在没配置白名单前都能登录:
在服务器的配置文件/etc/ssh/sshd_config的最后添加:AllowUsers root centos
然后重载服务:service sshd restart
再次测试登录,centos可以登录,但是gentoo无法登录:
也可以使用黑名单:DenyUsers
4、设定空闲会话超时时长;
5、利用防火墙设置ssh访问策略;
6、仅监听特定的IP地址;
7、基于口令认证时,使用强密码策略;
随机密码:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
8、使用基于密钥的认证;
9、禁止使用空密码;
10、禁止root用户直接登录;
11、限制ssh的访问频度和并发在线数;
12、做好日志,经常分析;
ssh协议的另一个实现:dropbear
1)安装:yum install dropbear
2)生成密钥对,启动服务:
dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
dropbear -p [ip:]port -F -E
连接测试:
3)可以作为客户端连接其他远程主机,工具是dbclient
dbclient root@host
OpenSSL-重温:
三个组件:
openssl:多用途的命令行工具;
libcrypto:加密解密库;
libssl:ssl协议的实现
PKI:Public Key Instructure,公钥基础设施
CA、RA、CRL、证书存取库
建立私有CA(一个组织内部使用):两种方式
OpenCA和 openssl,OpenCA比较专业,使用也比较复杂;openssl简单易用
证书申请及签署步骤:
1)生成申请请求;
2)RA核验;
3)CA签署;
4)获取证书;
创建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf
安装上面配置信息创建对应的文件、目录
1)创建所需文件,在/etc/pki/CA目录下
# touch index.txt
# echo 01 > serial
确保certs 、crl、 newcerts、 private子目录存在
2)CA自签证书,要想生存证书,要有密钥对
# (umask 077;openssl genrsa -out private/cakey.pem 2048) # 生成私钥,-out与配置文件一致
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem # 自签证书生成
-new:生成新证书签署请求
-x509:专用于cA生成自签证书
-key:生成请求时用到的私钥文件,证书需要公钥,通过私钥自动生成
-days:证书有效期限
-out:证书的保存路径,与配置文件中的配置保持一致
这个文件发送给需要使用证书的客户机,导入到信任的根证书颁发机构中。
3)发证
(a)用到证书的主机生成证书请求
生成私钥、利用私钥生成证书签署请求文件
(b)把证书签署请求文件传输给CA
(c)CA签署证书,并将证书发还给用户
(d)查看证书中的信息:
openssl x509 in /PATH/FROM/CERT_FILE -noout -text| -subject | -serial
(e)吊销证书:
<1>获取要吊销的证书的serial
<2>CA先根据客户提交的serial与subject,对比检验是否与index.txt中信息一致;
吊销证书:openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
生成吊销证书的编号(第一次吊销一个证书时):echo 01 > /etc/pki/CA/crlnumber
更新证书吊销列表:openssl ca -gencrl -out thisca.crl
查看crl文件:openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
实操:
a)、 (umask 077; openssl genrsa -out httpd.key 2048) # 生成私钥
openssl req -new -key httpd.key -days 365 -out httpd.csr # 生成证书签署请求文件
b)、发送此请求文件至CA:
scp httpd.csr root@192.168.138.139:/tmp
c)、CA签发证书
openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 365
出现错误:
原因分析:在前面安装python时,对openssl进行了编译安装,所以现在的openssl使用的是编译安装后的高版本,其配置文件使用的是/usr/local/openssl/ssl目录下的openssl.cnf
错误排除:修改/usr/local/openssl/ssl/openssl.cnf配置文件,将其中的dir = ./demoCA,修改为dir=/etc/pki/CA应该就可以了。排查前面的操作,除了这个配置文件,其他都是在/etc/pki/CA目录下,所以openssl的配置文件只修改ca的目录配置即可。
再次签发:
证书签发成功。
生成的证书应该保存在/etc/pki/CA/certs下。
d)客户端取回证书:scp /tmp/httpd.crt root@192.168.138.138:/tmp
e)查看证书信息:
f)吊销证书:
至此,证书签发完毕。
相关文章:

Linux入门攻坚——24、BIND编译安装、Telnet和OpenSSH
BIND编译安装 对于没有rpm包,需要源代码编译安装。 1、下载源代码:bind-9.12.2-P1.tar.gz,解压:tar -xf bind-9.12.2-P1.tar.gz 2、完善环境: 1)增加用户组named:groupadd -g 53 named 2&…...

1.5.3 基于Java配置方式使用Spring MVC
本实战教程主要介绍了如何使用Java配置方式来使用Spring MVC框架。相较于XML配置方式,Java配置方式提供了一种更为简洁和灵活的配置方法。 项目创建与配置 创建一个Jakarta EE项目,并设置项目名称和位置。选择Jakarta EE 10版本,不添加依赖&a…...

Artifactory清理二进制文件丢失的制品
一、摘要 当制品上传到 Artifactory 时,Artifactory 会在数据库中记录制品的相关元数据信息,包括文件路径、大小、校验和(如 MD5、SHA1)、上传时间、索引、依赖等。实际的制品二进制文件会存储在指定的存储后端,具体的…...

C#中的数组探索
在C#编程语言中,数组是一种基本的数据结构,用于存储固定大小的同类型元素序列。本文将深入探讨C#数组的各个方面,包括定义、赋值、范围操作、切片、多维数组(矩形与锯齿形)、简化初始化表达式以及边界检查。 数组定义…...

身份认证与口令攻击
身份认证与口令攻击 身份认证身份认证的五种方式口令认证静态口令动态口令(一次性口令)动态口令分类 密码学认证一次性口令认证S/KEY协议改进的S/KEY协议 其于共享密钥的认证 口令行为规律和口令猜测口令规律口令猜测 口令破解操作系统口令破解Windows密码存储机制Windows密码破…...

卷积网络迁移学习:实现思想与TensorFlow实践
摘要:迁移学习是一种利用已有知识来改善新任务学习性能的方法。 在深度学习中,迁移学习通过迁移卷积网络(CNN)的预训练权重,实现了在新领域或任务上的高效学习。 下面我将详细介绍迁移学习的概念、实现思想,…...

Ansible04-Ansible Vars变量详解
目录 写在前面6 Ansible Vars 变量6.1 playbook中的变量6.1.1 playbook中定义变量的格式6.1.2 举例6.1.3 小tip 6.2 共有变量6.2.1 变量文件6.2.1.1 变量文件编写6.2.1.2 playbook编写6.2.1.3 运行测试 6.2.2 根据主机组使用变量6.2.2.1 groups_vars编写6.2.2.2 playbook编写6.…...

Flutter 中的 SliverCrossAxisGroup 小部件:全面指南
Flutter 中的 SliverCrossAxisGroup 小部件:全面指南 Flutter 是一个功能丰富的 UI 开发框架,它允许开发者使用 Dart 语言来构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中,SliverCrossAxisGroup 是一个较少被使用的组…...

开源还是闭源这是一个问题
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

数据结构与算法笔记:基础篇 - 栈:如何实现浏览器的前进和后退功能?
概述 浏览器的前进、后退功能,你肯定很熟悉吧? 当依次访问完一串页面 a-b-c 之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面 b 和 a。当后退到页面 a,点击前进按钮,就可以重新查看页面 b 和 c。但…...

【AIGC】大型语言模型在人工智能规划领域模型生成中的探索
大型语言模型在人工智能规划领域模型生成中的新应用 一、引言二、LLM在规划领域模型生成中的潜力三、实证分析:LLM在规划领域模型生成中的表现四、代码实例:LLM在规划领域模型生成中的应用五、结论与展望 一、引言 随着人工智能技术的迅猛发展࿰…...

从零开始学习Slam-旋转矩阵旋转向量四元组(二)
本文参考:计算机视觉life 仅作笔记用 书接上回,上回不清不楚的介绍了旋转矩阵&旋转向量和四元组 现在回顾一下重点: 本着绕谁谁不变的变则 假设绕z轴旋转θ,旋转矩阵为: 再回顾一下旋转向量的表示以及这个基本记不…...

基于Spring Security添加流控
基于Spring Security添加流控的过程: 步骤1: 添加依赖 确保项目中包含了Spring Security和Sentinel-Core的相关依赖。在Maven项目中,可以在pom.xml中添加如下依赖: <!-- Spring Security --> <dependency><groupId>org.…...

Python | Leetcode Python题解之第119题杨辉三角II
题目: 题解: class Solution:def getRow(self, rowIndex: int) -> List[int]:row [1, 1]if rowIndex < 1:return row[:rowIndex 1]elif rowIndex > 2:for i in range(rowIndex - 1):row [row[j] row[j 1] for j in range(i 1)]row.inser…...

物联网应用系统与网关
一. 传感器底板相关设计 1. 传感器设计 立创EDA传感器设计举例。 2. 传感器实物图 3. 传感器测试举例 测试激光测距传感器 二. 网关相关设计 1. LORA,NBIOT等设计 2. LORA,NBIOT等实物图 3. ZigBee测试 ZigBee测试 4. NBIoT测试 NBIoT自制模块的测试…...

系统稳定性概览
系统稳定性 系统稳定性,包括:监控、 告警、性能优化、慢sql、耗时接口等。 系统的稳定性的治理,可以围绕这几方面展开。 监控 Prometheus 监控并收集数据。监控 qps,tps, rt , cpu使用率,cpu load&#…...

Redis-Cluster模式基操篇
一、场景 1、搞一套6个主节点的Cluster集群 2、模拟数据正常读写 3、模拟单点故障 4、在不停服务的情况下将集群架构改为3主3从 二、环境规划 6台独立的服务器,端口18001~18006 192.169.14.121 192.169.14.122 192.169.14.123 192.169.14.124 192.169.14.125 192…...

Golang | Leetcode Golang题解之第113题路径总和II
题目: 题解: type pair struct {node *TreeNodeleft int }func pathSum(root *TreeNode, targetSum int) (ans [][]int) {if root nil {return}parent : map[*TreeNode]*TreeNode{}getPath : func(node *TreeNode) (path []int) {for ; node ! nil; no…...

云计算与 openstack
文章目录 一、 虚拟化二、云计算2.1 IT系统架构的发展2.2 云计算2.3 云计算的服务类型 三、Openstack3.1 OpenStack核心组件 一、 虚拟化 虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之…...

golang语言的gofly快速开发框架如何设置多样的主题说明
本节教大家如何用gofly快速开发框架后台内置设置参数,配置出合适项目的布局及样式、主题色,让你您的项目在交互上加分,也是能帮你在交付项目时更容易得到客户认可,你的软件使用客户他们一般都是不都技术的,所以当他们拿…...

lynis安全漏洞扫描工具
Lynis是一款Unix系统的安全审计以及加固工具,能够进行深层次的安全扫描,其目的是检测潜在的时间并对未来的系统加固提供建议。这款软件会扫描一般系统信息,脆弱软件包以及潜在的错误配置。 安装 方式1 git下载使用git clone https://github…...

C++ 多重继承的内存布局和指针偏移
在 C 程序里,在有多重继承的类里面。指向派生类对象的基类指针,其实是指向了派生类对象里面,该基类对象的起始位置,该位置相对于派生类对象可能有偏移。偏移的大小,等于派生类的继承顺序表里面,排在该类前面…...

centos时间不对
检查当前时区是否正确 timedatectl status如果时区不正确,使用以下命令设置正确的时区(将Asia/Shanghai替换为您所在的时区): timedatectl set-timezone Asia/Shanghai如果时区正确但时间不准确,使用以下命令同步网络…...

通过Redis实现防止接口重复提交功能
本功能是在切面执行链基础上实现的功能,如果不知道切面执行链的同学,请看一下我之前专门介绍切面执行链的文章。 在SpringBoot项目中实现切面执行链功能-CSDN博客 1.定义防重复提交handler /*** 重复提交handler**/ AspectHandlerOrder public class …...

如何构建最小堆?
方式1:上浮调整 /*** 上浮调整(小的上浮)*/ public static void smallUp1(int[] arr, int child) {int parent (child - 1) / 2;while (0 < child && arr[child] < arr[parent]) { // 0 < child说明这个节点还是叶子arr[child] arr[child] ^ ar…...

基于Netty实现安全认证的WebSocket(wss)客户端
1.Netty服务端 服务端代码参考【基于Netty实现安全认证的WebSocket(wss)服务端-CSDN博客】 2.Netty客户端 客户端代码参考【基于Netty实现WebSocket客户端-CSDN博客】中两种都可以;这里用的是第一种。 新增SslHandler的代码: …...

代码随想录算法训练营第四十四天 | 01背包问题 二维、 01背包问题 一维、416. 分割等和子集
01背包问题 二维 代码随想录 视频讲解:带你学透0-1背包问题!| 关于背包问题,你不清楚的地方,这里都讲了!| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili 1.dp数组定义 dp[i][j] 下标为[0,i]之间的物品&…...

redis常见使用场景
文章目录 redis常见使用场景全局ID位统计购物车用户消息时间线timeline抽奖商品筛选分布式锁限流redis实现计数器排行榜消息队列redis 如何实现延时队列 redis生产常用的场景 redis常见使用场景 Redis 是一种高性能的内存数据库,广泛应用于各种场景中。以下是 Redi…...

模糊C均值(FCM)算法更新公式推导
模糊C均值(FCM)算法更新公式推导 目标函数 FCM的目标函数为: J m ∑ i 1 n ∑ j 1 k u i j m ∥ x i − c j ∥ 2 J_m \sum_{i1}^n \sum_{j1}^k u_{ij}^m \|x_i - c_j\|^2 Jmi1∑nj1∑kuijm∥xi−cj∥2 其中: …...

金融创新浪潮下的拆分盘投资探索
随着数字化时代的步伐加速,金融领域正经历着前所未有的变革。在众多金融创新中,拆分盘作为一种新兴的投资模式,以其独特的增长机制,吸引了投资者的广泛关注。本文将对拆分盘的投资逻辑进行深入剖析,并结合具体案例&…...