一.控制服务和守护进程
systemd 介绍
systemd daemon管理linux的启动,包括服务的启动和管理。
守护进程 daemon 是在后台运行或等待的进程,以执行不同的任务。通常 daemon 在系统启动时运行,直到关机时才结束运行。 deamon 程序名称一般会有 d 字符。
systemd 中的 service 通常指一个或多个 daemon。
RHEL 中,PID 1 是 systemd,提供以下几项功能:
- 并行化功能(同时启动多个服务),可提高系统的启动速度
- 按需启动守护进程,而不需要单独的服务
- 自动服务依赖关系管理,可以防止 timeouts。例如,只有在网络可用时, 依赖网络的服务才会尝试启动
- 利用 Linux cgoups 追踪相关进程资源占用
列出 service units
# systemctl list-units --type=service 列出所有 active 状态的 service unit
# systemctl list-units --type=service --all 列出所有 service unit
其中:UNIT 是 service unit 名称;LOAD 是 unit 的配置已加载到内存中; ACTIVE 表示 unit 高级激活状态,已经启动;SUB 表示 unit 低级别激活 状态,有更多关于 unit 的状态信息; DESCRIPTION 是 unit 的简短描述
# systemctl 列出所有已经 load 和 active 的 unit
# systemctl list-unit- files 显示所有已经安装的 units 状态
查看 service 状态
systemctl is-active sshd.service 服务是否正在运行
systemctl is-enabled sshd.service 服务是否开机启动
systemctl is-failed sshd.service 服务是否启动失败
systemctl --failed --type=service 列出所有失败的 units
启动和停止服务
# systemctl start name.service 启动服务
# systemctl start name 如果不指明 unit 类型,默认使用 .service
# systemctl stop name.service 停止服务
重新启动和加载服务
# systemctl restart name.service 重启服务
# systemctl reload name.service 重新加载服务,而无需重启
# systemctl reload-or-restart name.service 优先重新加载,不行则重启
屏蔽未屏蔽的服务
系统中的不同服务可能会彼此冲突,比如 postfix 和 sendmail
systemctl mask 命令屏蔽服务,可防止管理员意外启动与其他服务冲突的 服务。屏蔽操作会创建指向 /dev/null 文件的链接,这可阻止服务的启动
systemctl unmask 命令可取消屏蔽
注:disable 的服务可以手动启动,或通过其他单元文件启动,但不会在 系统引导时自动启动。mask 的服务无法手动启动,也不会自动启动
开机启动或不启动服务
systemctl enable 命令设置服务开机启动
systemctl disable 命令设置服务开机不启动
systemctl is-enabled 验证服务开机是否启动
二.配置和保护SSH
什么是 OpenSSH
OpenSSH 为 Linux 提供了 Secure Shell 和 SSH 协议
SSH 协议为不安全的网络实现了通信加密
可以使用 ssh 命令连接远程系统,也可以在远程系统上直接运行命令
Secure Shell 实例
登录远程系统
ssh user01@remotehost hostname
在远程系统上运行命令
ssh user01@remotehost
识别远程用户
ssh user01@remotehost
w
SSH 主机秘钥
SSH 通过公钥加密的方式保持通信安全。在客戶端登录之前, 服务器会 向其发送公钥副本,用于设置通信渠道的安全加密,并验证客戶端服务器
用户连接服务器时,会检查客户机本地 /etc/ssh/ssh_known_hosts 或 ~/.ssh/known_hosts 中是否含有服务器公钥,并与从服务器获得公钥进行 匹配,以验证服务器的身份(防止服务器被假冒,或者需要编辑此文件替 换新的服务器秘钥)
服务器的公钥存放在:/etc/ssh/*key.pub 中
基于 SSH 秘钥的身份验证
基于私钥-公钥对,可以配置 SSH 服务器,不输入密码就能登录服务器
用户必须生成公私秘钥对,私钥用于身份验证,必须妥善保管,公钥复制到希望连接的系统,用于验证私钥,公钥不需要保密
生成 SSH 秘钥
ssh-keygen 命令创建用户的公钥和私钥,默认保存在~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub 文件中
私钥还可以以密码加以保护,登录时,需要输入私钥保护密码
使用 ssh-agent 配合 ssh-add 命令可将此私钥保护密码存入内存,协助登录时输入
ssh-copy-id 命令可以将用户的 SSH 公钥(/home/user/.ssh/id_rsa.pub) 复制到目标系统中
配置 OpenSSH 服务器
OpenSSH 的守护进程名为 sshd,主配置文件为 /etc/ssh/sshd_config
推荐禁用 root 用户远程登录和基于密码的身份验证(而使用公私钥验证 方式替代)
禁用 root 用户通过 ssh 登录
root 具有最高权限
建议普通用户进行登录,在有需要时提权成为 root
编辑 /etc/ssh/sshd_config,设置 PermitRootLogin yes
修改配置后,记得 systemctl reload sshd
黑客喜欢猜测 root 的密码
禁止对 SSH 进行基于密码的身份验证
黑客无法通过猜测用户密码攻击已知用户
密码相对于公私钥保密性差
编辑 /etc/ssh/sshd_config,设置 PasswordAuthentication no
修改配置后,记得 systemctl reload sshd