[关闭]
@mrz1 2018-01-11T01:38:41.000000Z 字数 9541 阅读 1796

2018-1-5课程笔记(scp、rsync、sftp、pssh 端口转发 sudo )

笔记


scp命令

  1. scp命令:
  2. scp[options] SRC... DEST/
  3. 两种方式:
  4. scp [options] [user@]host:/sourcefile /destpath
  5. scp [options] /sourcefile [user@]host:/destpath
  6. 常用选项:
  7. -C: 压缩数据流
  8. -r: 递归复制
  9. -p: 保持原文件的属性信息
  10. -q: 静默模式
  11. -P PORT: 指明remote host的监听的端口

rsync命令

  1. 基于sshrsh服务实现高效率的远程系统之间复制文件
  2. 使用安全的shell连接做为传输方式
  3. rsync av /etc server1:/tmp复制目录和目录下文件
  4. rsync av /etc/ server1:/tmp只复制目录下文件
  5. scp更快,只复制不同的文件
  6. 选项:
  7. -n 模拟复制过程
  8. -v 显示详细过程
  9. -r 递归复制目录树
  10. -p 保留权限
  11. -t 保留时间戳
  12. -g 保留组信息
  13. -o 保留所有者信息
  14. -l 将软链接文件本身进行复制(默认)
  15. -L 将软链接文件指向的文件复制
  16. -a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X

sftp命令

  1. 交互式文件传输工具
  2. 用法和传统的ftp工具相似
  3. 利用ssh服务实现安全的文件上传和下载
  4. 使用ls cd mkdir rmdir pwd get(下载) put(上传)等指令,可用?或help
  5. 获取帮助信息
  6. sftp [user@]host
  7. sftp > help

pssh工具

  1. pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制
  2. 选项如下:
  3. --version:查看版本
  4. -h:主机文件列表,内容格式”[user@]host[:port]”
  5. -H:主机字符串,内容格式”[user@]host[:port]”
  6. -l:登录使用的用户名
  7. -p:并发的线程数【可选】
  8. -o:输出的文件目录【可选】
  9. -e:错误输入文件【可选】
  10. -tTIMEOUT 超时时间设置,0无限制【可选】
  11. -OSSH的选项-v:详细模式
  12. -A:手动输入密码模式
  13. -x:额外的命令行参数使用空白符号,引号,反斜线处理
  14. -X:额外的命令行参数,单个参数模式,同-x -i:每个服务器内部处理信息输出
  15. -P:打印出服务器返回信息

Pssh示例(前提是基于key验证)

  1. [root@centos7 ~]#pssh -H 172.18.101.93 getenforce
  2. [1] 21:44:31 [SUCCESS] 172.18.101.93
  3. [root@centos7 ~]#pssh -H 172.18.101.93 -i getenforce
  4. [1] 21:44:34 [SUCCESS] 172.18.101.93
  5. Disabled
  6. [root@centos7 ~]#pssh -H 172.18.101.93 172.18.101.94 -i getenforce
  7. [1] 21:44:34 [SUCCESS] 172.18.101.93
  8. Disabled
  9. [2] 21:44:34 [SUCCESS] 172.18.101.94
  10. Disabled
  11. 更方便ip地址写到文件中(ip.txt放着ip地址)
  12. [root@centos7 ~]#pssh -h ip.txt -i getenforce
  13. 把每个主机的日志放到/app下里面 以每个IP地址为文件名
  14. [root@centos7 ~]#pssh -h ip.txt -o /app -i cat /var/log/secure
  15. [root@centos7 ~]#pssh -h ip.txt -A -i 'rm -rf /app/*' //这里必须加单引号
  16. [root@centos7 ~]#pssh -h ip.txt -A -i 'rm -rf /app/*' 手动输入口令前提是必须一样
  17. 通过pssh批量关闭seLinux
  18. pssh -H root@192.168.1.10 -i "sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config" 批量发送指令
  19. pssh -H root@192.168.1.10 -i setenforce 0
  20. pssh -H xuewb@192.168.1.10 -i hostname
  21. 当不支持sshkey认证时,通过-A选项,使用密码认证批量执行指令
  22. pssh -H xuewb@192.168.1.10 -A -i hostname
  23. 将标准错误和标准正确重定向都保存至/app目录下
  24. pssh -H 192.168.1.10 -o /app -e /app -i "hostname"

PSCP.PSSH命令

  1. pscp.pssh功能是将本地文件批量复制到远程主机
  2. pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote
  3. Pscp-pssh选项
  4. -v 显示复制过程
  5. -a 复制过程中保留常规属性
  6. -r 递归复制目录
  7. 将本地curl.sh 复制到/app/目录
  8. pscp.pssh -H 192.168.1.10 /root/test/curl.sh /app/
  9. pscp.pssh -h host.txt /root/test/curl.sh /app/
  10. 将本地多个文件批量复制到/app/目录
  11. pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/
  12. 将本地目录批量复制到/app/目录
  13. pscp.pssh -H 192.168.1.10 -r /root/test/ /app/

PSLURP.PSSH命令

  1. pslurp.pssh功能是将远程主机的文件批量复制到本地
  2. pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir] remote local(本地名)
  3. Pslurp-pssh选项
  4. -L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称
  5. -r 递归复制目录
  6. 批量下载目标服务器的passwd文件至/app下,并更名为user
  7. pslurp -H 192.168.1.10 -L /app/ /etc/passwd user

SSH端口转发

SSH端口转发:
SSH 会自动加密和解密所有SSH 客户端与服务端之间的网络数据。但是,SSH 还能够将其他TCP 端口的网络数据通过SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为SSH 为其他TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH 的连接,也能够通过将TCP 端口转发来使用SSH 进行通讯
SSH 端口转发能够提供两大功能:
加密SSH Client 端至SSH Server 端之间的通讯数据
突破防火墙的限制完成一些之前无法建立的TCP 连接
本地转发:
-L localport:remotehost:remotehostport sshserver
ssh -L 9527:192.168.27.7:23 192.168.27.6 -Nf

选项:

示例
ssh –L 9527:telnetsrv:23 -N sshsrv telnet 127.0.0.1 9527
当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
data<->localhost:9527<->localhost:XXXXX<->sshsrv:22<->sshsrv:YYYYY<->telnetsrv:23

远程转发:
-R sshserverport:remotehost:remotehostport sshserver

示例:
ssh –R 9527:telnetsrv:23 –N sshsrv
让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
Data<->sshsrv:9527<->sshsrv:22 <->localhost:XXXXX<->localhost:YYYYY<->telnetsrv:23

动态端口转发:
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
ssh-D 1080 root@sshserver
在本机firefox设置代理socket proxy:127.0.0.1:1080
curl --socks5 127.0.0.1:1080 http://www.qq.com
X 协议转发

所有图形化应用程序都是X客户程序
1、能够通过tcp/ip连接远程X服务器
2、数据没有加密机,但是它通过ssh连接隧道安全进行

  • ssh-X user@remotehost gedit
    remotehost主机上的gedit工具,将会显示在本机的X服务器上传输的数据将通过ssh连接加密

ssh服务器

服务器端:sshd, 配置文件: /etc/ssh/sshd_config
semanage port -l查看默认策略的所有端口
semanage port -a -t ssh_port_t -p tcp #端口加入策略

  1. 常用参数:
  2. Port
  3. AddressFamily any 默认ipv4 ipv6
  4. ListenAddress ip 这里指定ip
  5. LoginGraceTime 2m
  6. PermitRootLogin yes
  7. StrictModes yes 检查.ssh/文件的所有者,权限等
  8. MaxAuthTries 6
  9. MaxSessions 10 同一个连接最大会话
  10. PubkeyAuthentication yes
  11. PermitEmptyPasswords no
  12. PasswordAuthentication yes
  13. GatewayPorts no
  14. ClientAliveInterval:单位:秒
  15. ClientAliveCountMax:默认3
  16. UseDNS yes
  17. GSSAPIAuthentication yes 提高速度可改为no
  18. MaxStartups未认证连接最大值,默认值10
  19. Banner /path/file
  20. 限制可登录用户的办法:
  21. AllowUsers user1 user2 user3
  22. DenyUsers
  23. AllowGroups
  24. DenyGroups

ssh服务的最佳实践

编译安装dropbear示例

ssh协议的另一个实现:dropbear
源码编译安装:
1. 安装开发包组:yum group install “Development tools”
2. 下载dropbear-2017.75.tar.bz2
3. tar xf dropbear-2017.75.tar.bz2
4. less INSTALL README
5. ./configure
6. make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
7. make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
8. 启动ssh服务:
9. ls /usr/local/sbin/ /usr/local/bin/
10. /usr/local/sbin/dropbear -h
11. mkdir/etc/dropbear
12. dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key-s 2048
13. dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key
14. dropbear -p :2222 -F –E #前台运行dropbear-p :2222 #后台运行
15. 客户端访问:
16. ssh -p 2222 root@127.0.0.1
17. dbclient -p 2222 root@127.0.0.1

AIDE

  1. 安装yum install aide
  2. 修改配置文件
  3. vim /etc/aide.conf(指定对哪些文件进行检测)
  4. /test/chameleon R
  5. /bin/ps R+a
  6. /usr/bin/crontab R+a
  7. /etc PERMS
  8. !/etc/mtab #“!”表示忽略这个文件的检查R=p+i+n+u+g+s+m+c+md5 权限+索引节点+链接数+用户+组+大小+最后一次修改时间+创建时间+md5校验值NORMAL = R+rmd60+sha256
  9. 初始化默认的AIDE的数据库:aide --init
  10. 生成检查数据库(建议初始数据库存放到安全的地方)
  11. cd /var/lib/aide
  12. mv aide.db.new.gz aide.db.gz
  13. 比较关心检测文件或者目录:/var/lib/aide --check
  14. 更新数据库aide --update //这时会多一个aide.db.new.gz文件在执行mv aide.db.new.gz aide.db.gz

更改身份sudo

su切换身份:su –l username –c "command"
sudo
- 来自sudo包
- man 5 sudoers
- sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用sudo,会提示联系管理员
- sudo可以提供日志,记录每个用户使用sudo操作
- sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
- sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
- 通过visudo命令编辑配置文件,具有语法检查功能
- visudo –c 检查语法
- 配置文件:/etc/sudoers, /etc/sudoers.d/
- 时间戳文件:/var/db/sudo 一定时间不会再填写密码
- 日志文件:/var/log/secure 能看到被授权人执行什么操作
- 配置文件支持使用通配符glob:

  1. ?:任意单一字符
  2. * :匹配任意长度字符
  3. [wxc]:匹配其中一个字符
  4. [!wxc]:除了这三个字符的其它字符
  5. \x : 转义
  6. [[alpha]] :字母示例:/bin/ls [[alpha]]*
配置文件规则有两类:
别名定义:不是必须的
授权规则:必须的
  1. sudo命令:
  2. ls -l /usr/bin/sudo 有特殊权限
  3. sudo i u wang切换身份
  4. sudo[-u user] COMMAND
  5. -V 显示版本信息等配置信息
  6. -u user 默认为root -l,ll列出用户在主机上可用的和被禁止的命令
  7. -v 再延长密码有效期限5分钟,更新时间戳
  8. -k 清除时间戳(1970-01-01),下次需要重新输密码
  9. -K 与-k类似,还要删除时间戳文件
  10. -b在后台执行指令
  11. -p 改变询问密码的提示符号示例:-p "password on %h for user %p:"

实例:

  1. 配置文件:/etc/sudoers(只读文件), /etc/sudoers.d/(建议修改这个文件)
  2. visudo==打开/etc/sudoers //用visudo打开文件有语法检查功能缺点没颜色配置环境变量
  3. [root@centos7 ~]#vim /etc/profile.d/env.sh
  4. export EEDITOR=vim //添加这个
  5. [root@centos7 ~]#vipw //有颜色的
  6. root:x:0:0:root:/root:/bin/bash
  7. bin:x:1:1:bin:/bin:/sbin/nologin
  8. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  9. 重要 部分 wang用户只能挂载到/mnt/cdrom目录下
  10. [root@centos6 ~]#visudo
  11. ## Allow root to run any commands anywhere
  12. root ALL=(ALL) ALL
  13. wang ALL=(root /usr/bin/mount /dev/sr0 /mnt/cdrom
  14. 注意这里写什么用户就能执行什么一点不能差
  15. 这时wang用户执行命令前必须加sudo
  16. [wang@centos6 ~]#sudo mount /dev/sr0 /mnt/cdrom
  17. 但是一般不建议在这个文件添加;(建议在/etc/sudoers.d/下)
  18. [root@centos6 ~]#vim wang
  19. wang ALL=(root /usr/bin/mount /dev/sr0 /mnt/cdrom
  20. 一个用户一个文件不会乱套
  21. visudo c 检查语法
  22. visudo -f /etc/sudoers.d/wang //打开weng用户
  23. [root@centos6 ~]#visudo -f /etc/sudoers.d/wang
  24. wang ALL=(zhang) ALL
  25. zhang ALL=(root) /bin/cat /etc/shadow
  26. [wang@centos6 ~]#sudo -u zhang sudo cat /etc/shadow //wang用户代替zhang用户执行权限 这样写有点绕
  27. %wheel ALL=(ALL) NOPASSWD: ALL //这个是组,如果这个没改放开的的话 只要是这个组成员就什么都能执行相当与root

sudoers

授权规则格式:用户登入主机=(代表用户) 命令
示例:root ALL=(ALL) ALL

格式说明:
user: 运行命令者的身份
host: 通过哪些主机
(runas):以哪个用户的身
command: 运行哪些命令

别名

  1. Usersrunas:
  2. username
  3. #uid
  4. %group_name
  5. %#gid
  6. user_alias|runas_alias
  7. host:
  8. iphostname
  9. network(/netmask)
  10. host_alias
  11. command:
  12. command name
  13. directory
  14. sudoedit(特殊权限如果用户有sudoedit权限 那他就可以编写所有用户sudo权限)
  15. Cmnd_Alias

sudo别名和示例

  1. 别名有四种类型:User_Alias, Runas_Alias, Host_Alias Cmnd_Alias
  2. 别名格式:[A-Z]([A-Z][0-9]_)*
  3. 别名定义:Alias_TypeNAME1 = item1, item2, item3 : NAME2 = item4, item5
  1. 示例1
  2. Student ALL=(ALL) ALL
  3. %wheel ALL=(ALL) ALL
  4. 示例2
  5. student ALL=(root) /sbin/pidof,/sbin/ifconfig
  6. %wheel ALL=(ALL) NOPASSWD: ALL
  7. 示例3 user
  8. User_Alias NETADMIN= netuser1,netuser2
  9. Cmnd_Alias NETCMD=/usr/sbin/ip
  10. NETADMIN ALL=(rootNETCMD
  11. 示例4
  12. User_Alias SYSADER=wang,mage,%admins //%admins组
  13. User_Alias DISKADER=tom
  14. Host_Alias SERS=www.magedu.com,172.16.0.0/24
  15. Runas_Alias OP=root
  16. Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
  17. Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
  18. SYSADER SERS= SYDCMD,DSKCMD
  19. DISKADER ALL=(OP) DSKCMD
  20. 示例5
  21. User_Alias ADMINUSER = adminuser1,adminuser2
  22. Cmnd_Alias ADMINCMD = /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd[a-zA-Z]*, !/usr/bin/passwd root
  23. ADMINUSER ALL=(root) NOPASSWD:ADMINCMDPASSWD:/usr/sbin/userdel
  24. NOPASSWD:ADMINCMD)意思是第一次都不用输入口令
  25. (PASSWD:/usr/sbin/userdel)意思是第一次输入口令
  26. 示例5 授权wang能带代替tom,jerry做任何事(如果执行的命令代替tom的比较多不写-u 指定谁的话runas_default=tom默认是tom
  27. Defaults:wang runas_default=tom
  28. wang ALL=(tom,jerry) ALL
  29. 示例6 授权以下主机登陆排除!/usr/sbin/useradd
  30. wang 192.168.175.136,192.168.175.138=(root) /usr/sbin/,!/usr/sbin/useradd
  31. 示例7 如果这样写的话也可以查看/etc/password文件 man sudoers帮助有
  32. wang ALL=(ALL) /bin/cat /var/log/messages*

问题

示例7 如果这样写的话也可以查看/etc/password文件 man sudoers帮助有
wang ALL=(ALL) /bin/cat /var/log/messages*, !/bin/cat /var/log/messages*

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注