openssh服务优化及sudo授权
1 openssh服务优化
1.1 sshpass工具
非交互式输入用户密码,默认没安装,在epel源中
sshpass -p xxx 直接跟密码
sshpass -f pass.txt 跟存放密码的文件
1.2 rsync和scp的区别
#均是远程拷贝工具,可结合基于key验证
scp:全都拷贝 适用于小文件
rsync:如已拷贝过的文件有所更改,则只拷贝有所更改的文件,适用于大文件
1.3 ssh的优化
服务器端:配置文件路径在/etc/ssh/sshd_config下
#改端口号
Port 22
#提升连接速度
ChallengeResponseAuthentication no yes改成no
UseDNS no 避免dns反向解析
#文件格式详解
Port 22 #端口号,生产中建议更改
ListenAddress ip #监听的ip地址,指向内网ip地址可安全
LoginGraceTime 2m
PermitRootLogin yes #默认ubuntu不允许root远程ssh登录
StrictModes yes #检查.ssh/文件的所有者,权限等
MaxAuthTries 6
MaxSessions 10 #同一个连接最大会话
PubkeyAuthentication yes #基于key验证
PermitEmptyPasswords no #空密码连接
PasswordAuthentication yes #基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10 #单位:秒,空闲多久自动注销登录
ClientAliveCountMax 3 #默认3
UseDNS yes #提高速度可改为no
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups #未认证连接最大值,默认值10
Banner /path/file
#以下可以限制可登录用户的办法:黑白名单
AllowUsers user1 user2 user3 #允许登录
DenyUsers #不允许登录
AllowGroups #组
DenyGroups
客户端:/etc/ssh/ssh_config
#第一次连接不用按yes
StrictHostKeyChecking no
改完重启sshd服务
systemctl restart sshd
1.4 ssh服务的最佳实践
- 建议使用非默认端口
- 禁止使用protocol version 1 #早期版本协议
- 限制可登录用户
- 设定空闲会话超时时长
- 利用防火墙设置ssh访问策略仅监听特定的IP地址
- 基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
- 使用基于密钥的认证
- 禁止使用空密码
- 禁止root用户直接登录
- 限制ssh的访问频度和并发在线数
- 经常分析日志
2 sudo授权
sudo常用命令
-i #切换root权限
-u wei #指定切换wei用户
- wei #也是指定切换wei用户,也可不用-切换,完全切换和不完全切换的区别
路径
/etc/sudoers #单个或少量可房于该文件中,格式也在这文件里,是个文件
/etc/sudoers.d #多个时可在路径下建文件单独存放,是个文件夹
## Syntax:
##
## user MACHINE=(runas)COMMANDS
##用户或组(组授权要加%在前) 可登录的主机(单个写ip,全部写all)=(代表用户,代表谁) 可执行命令,写绝对路径(用which查看)
root ALL=(ALL) ALL
#实际使用格式要和授权格式相同
#指定用户wei可登录所有主机代表tom和jerry,默认情况为tom,可执行所有命令
wwei ALL=(tom,jerry) ALL
[wei@centos8 ~]$sudo cat /var/log/messages #使用时需输入密码
编辑工具可用visudo,会检查语法是否错误,visudo -c
授权操作日志记录文件路径在/var/log/secure下
使用sudo得输入自己的密码,确认身份,五分钟内不用再次输密码
User和runas:
username
#uid
%group_name #授权组,记得加%
%#gid
user_alias|runas_alias #别名
host:
ip或hostname
network(/netmask) #10.0.0.0/24
host_alias #别名
command:
command name #完整命令
directory #文件夹,文件夹里的所有指令都授权
sudoedit
Cmnd_Alias
#别名,格式可为大写字母、数字、下划线
Alias_Type NAME1 = item1,item2,item3 : NAME2 = item4, item5
#1
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD = /usr/sbin/ip
NETADMIN ALL=(root) NETCMD
#2
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*, !/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
#!排除选项
#3
Defaults:wei runas_default=tom #两个账号下指定默认账号tom,如需指定其他用户加-u
wei ALL=(tom,jerry) ALL
wei$ sudo -u jerry cmd
%wheel ALL=(ALL) NOPASSWD: ALL #NOPASSWD不用输密码,授权程序时可用