[关闭]
@mrz1 2018-01-11T14:39:56.000000Z 字数 11879 阅读 1272

2017-1-8课程笔记(TCP_Wrappers PAM 运维自动化之系统安装)

笔记


TCP_Wrappers介绍

TCP_Wrappers的使用

基本语法:

daemon_list@host: client_list[ :options:option... ]

  • Daemon_list@host格式单个应用程序的二进制文件名,而非服务名,例如vsftpd
  • 以逗号或空格分隔的应用程序文件名列表,如:sshd,vsftpd,in-telnetd
  • ALL表示所有接受tcp_wrapper控制的服务程序
  • 主机有多个IP,可用@hostIP来实现控制
  • 如:in.telnetd@192.168.0.254
  1. 拒绝用户ip访问 即时生效
  2. [root@centos7 ~]#vim /etc/hosts.deny
  3. in.telnetd:172.18.0.6 //添加这一行意思是不允许这个IP用telnet服务登陆
  4. sshd:172.18.0.6 //添加这一行意思是不允许这个IP用ssh服务登陆
  5. 可以在/var/log/secure 日志中可以看到 (多个ip空格隔开)
  6. /etc/hosts.allow /etc/hosts.deny 如果这两个文件都有的话先看/etc/hosts.allow有的话就不会看/etc/hosts.deny

客户端Client_list格式

实例:

  1. 示例:只允许192.168.1.0/24的主机访问sshd
  2. /etc/hosts.allow
  3. sshd: 192.168.1.
  4. /etc/hosts.deny
  5. sshd:ALL
  6. 示例:只允许192.168.1.0/24的主机访问telnetvsftpd服务
  7. /etc/hosts.allow
  8. vsftpd,in.telnetd: 192.168.1.
  9. /etc/host.deny
  10. vsftpd,in.telnetd: ALL
  11. 示例:不允许sshd172.18.101.118公网访问
  12. /etc/host.deny
  13. sshd@172.18.101.118:ALL
  14. 示例:拒绝所有172.18.101.118访问
  15. /etc/host.deny
  16. ALL@172.18.101.118:ALL
  17. 示例:拒绝172.18.101.网段但172.18.101.7允许
  18. /etc/hosts.allow
  19. sshd: 192.168.1.7
  20. /etc/hosts.deny
  21. sshd:172.18.101.
  22. 或者
  23. /etc/hosts.deny
  24. sshd:172.18.101. EXCEPT 172.18.101.7 //这样写也可以

[:options]选项:

  1. [:options]选项:
  2. 帮助:man 5 hosts_options
  3. deny 主要用在/etc/hosts.allow定义“拒绝”规则
  4. 如:vsftpd: 172.16. :deny
  5. allow 主要用在/etc/hosts.deny定义“允许”规则
  6. 如:vsftpd:172.16. :allow
  7. spawn 启动一个外部程序完成执行的操作(在服务器上执行)
  8. twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/OERROR发送到客户端,默认至/dev/null
  9. 测试工具:
  10. tcpdmatch [-d] daemon[@host] client
  11. 例:-d 测试当前目录下的hosts.allowhosts.deny
  12. [root@centos7 app]#cat hosts.deny
  13. sshd: 172.18.27.7
  14. [root@centos7 app]#tcpdmatch -d sshd 172.18.27.7
  15. client: address 172.18.27.7
  16. server: process sshd
  17. access: denied
  18. [root@centos7 app]#tcpdmatch -d sshd 172.18.27.5
  19. client: address 172.18.27.5
  20. server: process sshd
  21. access: granted

示例:spawn启动一个外部程序完成执行的操作

  1. sshd: ALL :spawn echo "$(date +"%%F %%T") login attempt from %c to %s,%d" >>/var/log/sshd.log
  2. 说明:
  3. 在/etc/hosts.allow中添加,允许登录,并记录日志
  4. 在/etc/hosts.deny中添加,拒绝登录,并记录日志
  5. %c 客户端信息
  6. %s 服务器端信息
  7. %d 服务名
  8. %p 守护进程的PID
  9. %% 表示%
  10. in.telnet,sshd: 172.18. :twist /bin/echo connection failed
  11. 说明:
  12. sshd访问时“connection failed”错误提示会出现在ssh -v 172.18.101.93
  13. in.telnet访问时“connection failed”提示到当前屏幕
  14. 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/OERROR发送到客户端,默认至/dev/null

TCP_Wrappers练习

PAM

认证机制

PAM架构

PAM架构

PAM相关文件

PAM认证原理

通用配置文件/etc/pam.conf格式

服务名 类型 控制 模块路径 参数
application type control module-path argument

专用配置文件/etc/pam.d/*格式

类型 控制 模块路径 参数
type control module-path arguments

说明:

模块类型(module-type)

控制(Control)
Control:PAM库如何处理与该服务相关的PAM模块成功或失败情况

  1. 复杂详细实现:使用一个或多个“status=action
  2. [status1=action1 status2=action ...]
  3. Status:检查结果的返回状态
  4. Action:采取行为okdonediebadignorereset
  5. ok 模块通过,继续检查
  6. done 模块通过,返回最后结果给应用
  7. bad 结果失败,继续检查
  8. die 结果失败,返回失败结果给应用
  9. ignore 结果忽略,不影响最后结果
  10. reset 忽略已经得到的结果

module-path: 模块路径

  1. 相对路径:
  2. /lib64/security目录下的模块可使用相对路径
  3. 如:pam_shells.sopam_limits.so
  4. 绝对路径:
  5. 模块通过读取配置文件完成用户对系统资源的使用控制
  6. /etc/security/*.conf
  7. 注意:修改PAM配置文件将马上生效
  8. 建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误
  9. Arguments 用来传递给该模块的参数

pam文档说明

/user/share/doc/pam-*
rpm -qd pam
man –k pam_各个PAM模块说明
man 模块名如man rootok
《The Linux-PAM System Administrators' Guide》说明书链接

PAM模块示例

PAM模块:pam_shells

  1. 模块:pam_shells
  2. 功能:检查有效shell
  3. 帮助:man pam_shells
  4. 示例:不允许使用/bin/csh的用户本地登录
  5. vim /etc/pam.d/login
  6. auth required pam_shells.so
  7. vim /etc/shells
  8. 去掉/bin/csh
  9. useradd s /bin/csh testuser(用户)或者chsh -s /bin/csh wang //给wang切换为/bin/csh shell
  10. testuser(用户)将不可登录
  11. tail /var/log/secure 日志文件可查看失败的原因

PAM模块:pam_securetty

  1. 模块:pam_securetty.so
  2. 功能:只允许root用户在/etc/securetty列出的安全终端上登陆
  3. 示例:允许roottelnet登陆
  4. vi /etc/pam.d/remote
  5. #auth required pam_securetty.so #将这一行加上注释
  6. 或者/etc/securetty文件中加入
  7. pts/0,pts/1...pts/n

PAM模块:pam_nologin

  1. 模块:pam_nologin.so
  2. 功能:
  3. 如果/etc/nologin文件存在,将导致非root用户不能登陆
  4. 如果用户shell是/sbin/nologin 时,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆

PAM模块:pam_limits

  1. 模块:pam_limits.so
  2. 功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间
  3. 修改限制的实现方式:
  4. (1) ulimit命令,立即生效,但无法保存(内部命令)
  5. -n 最多的打开的文件描述符个数
  6. -u 最大用户进程数
  7. -S 使用soft(软)资源限制
  8. -H 使用hard(硬)资源限制
  9. -a 报告所有当前的限制
  10. (2) 配置文件:
  11. /etc/security/limits.conf
  12. /etc/security/limits.d/*.conf
  13. 配置文件:每行一个定义;/etc/security/limits.conf这个文件有说明
  14. <domain> <type> <item> <value>

ulimit参数
ulimit -a

  1. [root@centos7 pam.d]#ulimit -a
  2. core file size (blocks, -c) 0
  3. data seg size (kbytes, -d) unlimited
  4. scheduling priority (-e) 0
  5. file size (blocks, -f) unlimited
  6. pending signals (-i) 4086
  7. max locked memory (kbytes, -l) 64
  8. max memory size (kbytes, -m) unlimited
  9. open files (-n) 1024
  10. pipe size (512 bytes, -p) 8
  11. POSIX message queues (bytes, -q) 819200
  12. real-time priority (-r) 0
  13. stack size (kbytes, -s) 8192
  14. cpu time (seconds, -t) unlimited
  15. max user processes (-u) 4086
  16. virtual memory (kbytes, -v) unlimited
  17. file locks (-x) unlimited
pam_limits.so
  1. <domain> 应用于哪些对象
  2. Username 单个用户
  3. @group 组内所有用户
  4. * 所有用户
  5. <type> 限制的类型
  6. Soft 软限制,普通用户自己可以修改
  7. Hard 硬限制,由root用户设定,且通过kernel强制生效
  8. - 二者同时限定
  9. <item> 限制的资源
  10. nofile 所能够同时打开的最大文件数量,默认为1024
  11. nproc 所能够同时运行的进程的最大数量,默认为1024
  12. <value> 指定具体值

示例:pam_limits.so

  1. 限制用户最多打开的文件数和运行进程数
  2. /etc/pam.d/system-auth
  3. session required pam_limits.so
  4. vim /etc/security/limits.conf
  5. apache nofile 10240 apache 用户可打开10240个文件
  6. student hard nproc20 不能运行超过20个进程

pam练习

1、限制centos用户只能够在工作时间通过ssh远程连接本机

2、限制只有admins组内的用户可ssh到本机

运维自动化之系统安装

运维自动化发展历程及技术应用

运维自动化发展历程及技术应用

安装程序

安装程序启动过程

  1. MBRisolinux/boot.cat
  2. stage2: isolinux/isolinux.bin
  3. 配置文件:isolinux/isolinux.cfg
  4. 每个对应的菜单选项:
  5. 加载内核:isolinuz/vmlinuz
  6. 向内核传递参数:append initrd=initrd.img...
  7. 装载根文件系统,并启动anaconda
  8. 默认启动GUI接口
  9. 若是显式指定使用TUI接口:向内核传递text参数即可
  10. (1)按tab键,在后面增加text
  11. (2)按ESC键:boot: linux text

anaconda工作过程

  1. Anaconda安装系统分成三个阶段:
  2. 安装前配置阶段
  3. 安装过程使用的语言
  4. 键盘类型
  5. 安装目标存储设备
  6. Basic Storage:本地磁盘
  7. 特殊设备:iSCSI
  8. 设定主机名
  9. 配置网络接口
  10. 时区
  11. 管理员密码
  12. 设定分区方式及MBR的安装位置
  13. 创建一个普通用户
  14. 选定要安装的程序包
  15. 安装阶段
  16. 在目标磁盘创建分区,执行格式化操作等
  17. 将选定的程序包安装至目标位置
  18. 安装bootloaderinitramfs
  19. 图形模式首次启动
  20. iptables
  21. selinux
  22. core dump

系统安装

  1. 启动安装过程一般应位于引导设备;后续的anaconda及其安装用到的程序包等可来自下面几种方式:
  2. 本地光盘
  3. 本地硬盘
  4. NFS
  5. URL:
  6. ftp server: yum repository
  7. http server: yum repostory
  8. 如果想手动指定安装源:boot: linux askmethod
  9. anaconda的配置方式:
  10. (1) 交互式配置方式
  11. (2) 通过读取事先给定的配置文件自动完成配置
  12. 按特定语法给出的配置选项
  13. kickstart文件
  14. 安装boot引导选项:boot:
  15. text: 文本安装方式
  16. askmethod: 手动指定使用的安装方法
  17. 与网络相关的引导选项:
  18. ip=IPADDR
  19. netmask=MASK
  20. gateway=GW
  21. dns=DNS_SERVER_IP
  22. ifname=NAME:MAC_ADDR
  23. 与远程访问功能相关的引导选项:
  24. vnc
  25. vncpassword='PASSWORD'
  26. 指明kickstart文件的位置:ks=
  27. DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
  28. Hard drive: ks=hd:device:/directory/KICKSTART_FILE
  29. HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
  30. FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
  31. HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
  32. NFS server:ks=nfs:host:/path/to/KICKSTART_FILE
  33. 启动紧急救援模式:
  34. rescue
  35. 官方文档:《Installation Guide
  36. [参考](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/)

kickstart文件的格式

  1. 命令段:指明各种安装前配置,如键盘类型等
  2. 程序包段:指明要安装的程序包组或程序包,不安装的程序包等
  3. %packages
  4. @group_name
  5. package
  6. -package
  7. %end
  8. 脚本段:
  9. %pre: 安装前脚本
  10. 运行环境:运行于安装介质上的微型Linux环境
  11. %post: 安装后脚本
  12. 运行环境:安装完成的系统
  13. 命令段中的命令:
  14. 必备命令
  15. authconfig: 认证方式配置
  16. authconfig--useshadow--passalgo=sha512
  17. bootloaderbootloader的安装位置及相关配置
  18. bootloader --location=mbr--driveorder=sdaappend="crashkernel=auto rhgbquiet"
  19. keyboard: 设定键盘类型
  20. lang: 语言类型
  21. part: 创建分区
  22. rootpw: 指明root的密码
  23. timezone: 时区
  24. 可选命令
  25. install OR upgrade
  26. text: 文本安装界面
  27. network
  28. firewall
  29. selinux
  30. halt
  31. poweroff
  32. reboot
  33. repo
  34. user:安装完成后为系统创建新用户
  35. url: 指明安装源
  36. key skip 跳过安装号码,适用于rhel版本
  37. 创建kickstart文件的方式
  38. 直接手动编辑
  39. 依据某模板修改
  40. 可使用创建工具:system-config-kickstart
  41. 依据某模板修改并生成新配置/root/anaconda-ks.cfg
  42. 检查ks文件的语法错误:ksvalidator
  43. ksvalidator /PATH/TO/KICKSTART_FILE

最小安装

  1. 配置yum源
  2. yum groupinstall "kde desktop"
  3. yum install xorg-x11-server-Xorg
  4. init 5 或者chboot
  5. yum install vim-enhanced.x86_64
  6. vim /etc/inittab 修改启动那个模式
  7. cat anaconda-ks.cfg

半自动安装

centos7.cfg 文件参考 下载
1. yum install system-config-kickstart //图形配置anaconda-ks.cfg 文件(准备这个文件)
2. system-config-kickstart //图形配置
3. centou7 Pachage selection 有一个bug 解决:/etc/yum.repos.d/base.repo 中的第一个[bash]修改为[development] 完成
4. 手动修改(anaconda-ks.cfg)·ksvalidator anaconda-ks.cfg检查语法错误

半自动安装

centos6.cfg 文件参考 下载
1. yum install system-config-kickstart //图形配置anaconda-ks.cfg 文件(准备这个文件)
2. system-config-kickstart //图形配置
3. 开启ftp服务
4. 启动 centos tab键 后面补ks=ftp://172.18.101.93/pub/ks6-mini.cfg ip=172.18.0.109 netmask=255.255.0.0

失败问题

  1. 权限问题644
  2. 图形化安装一个内存不够需要多点

系统光盘中isolinux目录列表

制作引导光盘和U盘

  1. 创建引导光盘:
  2. mkdir pv /app/myiso
  3. cp -r /misc/cd/isolinux/ /app/myiso/
  4. vim /app/myiso/isolinux/isolinux.cfg
  5. initrd=initrd.imgtext ks=cdrom:/myks.cfg
  6. cp /root/myks.cfg /app/myiso/
  7. mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso/app/myiso/
  8. 注意:以上相对路径都是相对于光盘的根,和工作目录无关
  9. 创建U盘启动盘
  10. dd if=/dev/sr0 of=/dev/sdb

mkisofs选项

  1. -o 指定映像文件的名称。
  2. -b 指定在制作可开机光盘时所需的开机映像文件。
  3. -c 制作可开机光盘时,会将开机映像文件中的no-eltorito-catalog 全部内容作成一个文件。
  4. -no-emul-boot 非模拟模式启动。
  5. -boot-load-size 4 设置载入部分的数量
  6. -boot-info-table 在启动的图像中现实信息
  7. -R 或-rock 使用Rock RidgeExtensions
  8. -J 或-joliet 使用Joliet 格式的目录与文件名称
  9. -v 或-verbose 执行时显示详细的信息
  10. -T 或-translation-table 建立文件名的转换表,适用于不支持Rock Ridge Extensions 的系统上

制作引导iso

  1. cp -rv /misc/cd/ /app/centos6/
  2. find /app/centos6 -name TRANS.TBL -exec rm {} \;
  3. rm /app/centos6/repodata/* -f
  4. cp /misc/cd/repodata/43······7d-c6-x86_64-comps.xml /app/centos6/repodata/ //复制回来的文件是包组信息
  5. cd /app/centos6/;createrepo -g repodata/43······7d-c6-x86_64-comps.xml ./ //创建仓库
  6. tree repodata //生成元数据
  7. mkdir ksdir/
  8. centos6.cfg 文件参考 下载 yum install system-config-kickstart //图形配置anaconda-ks.cfg文件(准备这个文件)system-config-kickstart //图形配置
  9. vim isolinux.cfg 修改菜单
  10. mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos6.iso/app/centos6/
  11. 完成iso文件 直接使用就可以了

mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso/app/myiso/
注意:以上相对路径都是相对于光盘的根,和工作目录无关

创建U盘启动盘
dd if=/dev/sr0 of=/dev/sdb

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