ssh、rsync、sudo实现授权
实现基于密钥的登录方式
在客户端生成密钥对
1ssh-keygen -t rsa [-P 'password'] [-f "~/.ssh/id_rsa"]
2
3ssh-keygen #一直敲回撤,就是密码为空 即可
把公钥文件传输至远程服务器对应用户的家目录
1ssh-copy-id [-i [identity_file]] [user@]host
2# 把客户端公钥放到 远程的 authorized_keys
重设私钥口令
1ssh-keygen -p
sshpass
输入密码登录
1yum -y install sshpass
2
3sshpass -pxxxxx123 ssh -o StrictHostKeyChecking=no root@www.crblog.cc "df -h"
ssh服务器配置
服务器端:sshd
服务器端的配置文件: /etc/ssh/sshd_config
服务器端的配置文件帮助:man 5 sshd_config
常用参数:
1Port 22 #生产建议修改
2ListenAddress ip
3LoginGraceTime 2m
4PermitRootLogin yes #默认ubuntu不允许root远程ssh登录
5StrictModes yes #检查.ssh/文件的所有者,权限等
6MaxAuthTries 6 #pecifies the maximum number of authentication
7attempts permitted per connection. Once the number of failures reaches half this
8value, additional failures are logged. The default is 6.
9MaxSessions 10 #同一个连接最大会话
10PubkeyAuthentication yes #基于key验证
11PermitEmptyPasswords no #空密码连接
12PasswordAuthentication yes #基于用户名和密码连接
13GatewayPorts no
14ClientAliveInterval 10 #单位:秒
15ClientAliveCountMax 3 #默认3
16UseDNS yes #提高速度可改为no
17GSSAPIAuthentication yes #提高速度可改为no
18MaxStartups #未认证连接最大值,默认值10
19Banner /path/file
20#以下可以限制可登录用户的办法:
21AllowUsers user1 user2 user3
22DenyUsers user1 user2 user3
23AllowGroups g1 g2
24DenyGroups g1 g2
设置 ssh 空闲 60s 自动注销
1Vim /etc/ssh/sshd_config
2ClientAliveInterval 60
3ClientAliveCountMax 0
4Service sshd restart
5#注意:新开一个连接才有效
解决ssh登录缓慢的问题
1vim /etc/ssh/sshd_config
2UseDNS no
3GSSAPIAuthentication no
4systemctl restart sshd
在 ubuntu 上启用 root 远程ssh登录
1修改sshd服务配置文件
2vim /etc/ssh/sshd_config
3#PermitRootLogin prohibit-password 注释掉此行
4PermitRootLogin yes 修改为下面形式
5systemctl restart sshd
rsync
rsync工具可以基于ssh和rsync协议实现高效率的远程系统之间复制文件,使用安全的shell连接做为传 输方式,比scp更快,基于增量数据同步,即只复制两方不同的文件,此工具来自于rsync包
注意:通信两端主机都需要安装 rsync 软件
1rsync -av /etc server1:/tmp/ #复制目录和目录下文件
2rsync -av /etc/ server1:/tmp/ #只复制目录下文件
3rsync -av hugo-blog root@xxxx:/opt/
4rsync -auv --delete /data/test 10.0.0.7:/data
5rsync -auv --progress --bwlimit=5120 --delete /data/test
6rsync -e "ssh -p 2221" blhy-230411.sql ubuntu@xxx: # ssh 端口非21
常用选项:
1-n 模拟复制过程
2-v 显示详细过程
3-r 递归复制目录树
4-p 保留权限
5-t 保留修改时间戳
6-g 保留组信息
7-o 保留所有者信息
8-l 将软链接文件本身进行复制(默认)
9-L 将软链接文件指向的文件复制
10-z 压缩,节约网络带宽
11-a 存档,相当于-rlptgoD,但不保留ACL(-A)和SELinux属性(-X)
12--delete 源数据删除,目标数据也自动同步删除
13--progress 显示进度
14--bwlimit=5120 #限速以KB为单位,5120表示5MB
sudo实现授权
sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性
在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先 告知超级用户的密码。sudo于1980年前后推出,sudo使一般用户不需要知道超级用户的密码即可获得 权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信 息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为 “sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自 己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运 行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。 由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如 Ubuntu、Mac OS X等
sudo特性:
- sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
- sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
- sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
- sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
授权规则配置文件:
1/etc/sudoers
2/etc/sudoers.d
安全编辑授权规则文件和语法检查工具
1#检查语法
2sudo visudo -c
3#检查指定配置文件语法
4sudo visudo -f /etc/sudoers.d/test
sudo命令
1ls -l /usr/bin/sudo
2sudo -i -u wang 切换身份功能和 su 相似,但不一样,sudo必须提前授权,而且要输入自已的密码
3sudo [-u user] COMMAND
4-V 显示版本信息等配置信息
5-u user 指定代表的用户,默认为root
6-l,ll 列出用户在主机上可用的和被禁止的命令
7-v 再延长密码有效期限5分钟,更新时间戳
8-k 清除时间戳(1970-01-01),下次需要重新输密码
9-K 与-k类似,还要删除时间戳文件
10-b 在后台执行指令
11-p 改变询问密码的提示符号
12示例:-p "password on %h for user %p: "
sudo 授权规则配置
配置文件格式说明:/etc/sudoers, /etc/sudoers.d/
配置文件中支持使用通配符 glob
1? 任意单一字符
2* 匹配任意长度字符
3[wxc] 匹配其中一个字符
4[!wxc] 除了这三个字符的其它字符
5\x 转义
6[[alpha]] 字母
配置文件规则有两类
- 1、别名定义:不是必须的
- 2、授权规则:必须的
sudoers 授权规则格式:
1用户 登入主机=(代表用户) 命令
2user host=(runas) command
1user: 运行命令者的身份
2host: 通过哪些主机
3(runas):以哪个用户的身份
4command: 运行哪些命令
示例
1root ALL=(ALL) ALL
vagrant 中vagrant 用户 sudo 文件
1Defaults:vagrant !fqdn
2Defaults:vagrant !requiretty
3vagrant ALL=(ALL) NOPASSWD: ALL
sudoers的别名
1User和runas:
2 username
3 #uid
4 %group_name
5 %#gid
6 user_alias|runas_alias
7host:
8 ip或hostname
9 network(/netmask)
10 host_alias
11command:
12 command name
13 directory /sbin/
14 sudoedit
15 Cmnd_Alias
sudo别名有四种类型:
- User_Alias
- Runas_Alias
- Host_Alias
- Cmnd_Alias
别名定义:
1Alias_Type NAME1 = item1,item2,item3 : NAME2 = item4, item5
实战案例
1Student ALL=(ALL) ALL
2%wheel ALL=(ALL) ALL
3
4student ALL=(root) /sbin/pidof,/sbin/ifconfig
5%wheel ALL=(ALL) NOPASSWD: ALL
案例
1[root@centos7 ~]#groupmems -a wang -g wheel
2[root@centos7 ~]#id wang
3uid=1000(wang) gid=1000(wang) groups=1000(wang),10(wheel)
4[root@centos7 ~]#su - wang
5Last login: Fri Jan 29 19:32:37 CST 2021 on pts/0
6#下面方式失败
7[wang@centos7 ~]$sudo echo 1.2.3.4 www.test.com >> /etc/hosts
8-bash: /etc/hosts: Permission denied
9#用下面方式可以实现
10#bash -c 将后面所有信字符串作为整体进行sudo
11#注意""必须加,否则只授权 >> 前面的命令sudo
12[wang@centos7 ~]$sudo bash -c "echo 1.2.3.4 www.test.com >> /etc/hosts"
13[wang@centos7 ~]$cat /etc/hosts
14127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
15::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
161.2.3.4 www.test.com
案例
1User_Alias NETADMIN= netuser1,netuser2
2Cmnd_Alias NETCMD = /usr/sbin/ip,/usr/sbin/ifconfig
3NETADMIN ALL=(root) NETCMD
案例
1User_Alias SYSADER=wang,mage,%admins
2User_Alias DISKADER=tom
3Host_Alias SERS=www.xxx.com,172.16.0.0/24
4Runas_Alias OP=root
5Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
6Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
7SYSADER SERS= SYDCMD,DSKCMD
8DISKADER ALL=(OP) DSKCMD
1User_Alias ADMINUSER = adminuser1,adminuser2
2Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*, !/usr/bin/passwd root
3ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
1Defaults:wang runas_default=tom
2wang ALL=(tom,jerry) ALL
3
4
5wang$ sudo cmd #默认代表tom执行cmd
6wang$ sudo -u jerry cmd