@mrz1
2018-01-11T14:39:56.000000Z
字数 11879
阅读 1390
笔记
ldd /PATH/TO/PROGRAM | grep libwrap.so
strings PATH/TO/PROGRAM | grep libwrap.so
ll /etc/hosts.allow /etc/hosts.deny
tail /var/log/secure
查看日志记录/etc/hosts.allow
, /etc/hosts.deny
man 5 hosts_access
,man 5 hosts_options
hosts.allow
,hosts.deny
(默认允许)注意:一旦前面规则匹配,直接生效,将不再继续daemon_list@host: client_list[ :options:option... ]
拒绝用户ip访问 即时生效
[root@centos7 ~]#vim /etc/hosts.deny
in.telnetd:172.18.0.6 //添加这一行意思是不允许这个IP用telnet服务登陆
sshd:172.18.0.6 //添加这一行意思是不允许这个IP用ssh服务登陆
可以在/var/log/secure 日志中可以看到 (多个ip空格隔开)
/etc/hosts.allow /etc/hosts.deny 如果这两个文件都有的话先看/etc/hosts.allow有的话就不会看/etc/hosts.deny
客户端Client_list格式
内置ACL:ALL(所有主机),LOCAL(主机名不带点),KNOWN(ip找到对应DNS解析并对应),UNKNOWN(ip找不到对应DNS解析并对应),PARANOID(ip解析成名字,但是名字不能解析成刚才的ip)
EXCEPT用法:(排除)
示例:
vsftpd: 172.16. EXCEPT 172.16.100.0/24 EXCEPT 172.16.100.1
实例:
示例:只允许192.168.1.0/24的主机访问sshd
/etc/hosts.allow
sshd: 192.168.1.
/etc/hosts.deny
sshd:ALL
示例:只允许192.168.1.0/24的主机访问telnet和vsftpd服务
/etc/hosts.allow
vsftpd,in.telnetd: 192.168.1.
/etc/host.deny
vsftpd,in.telnetd: ALL
示例:不允许sshd172.18.101.118公网访问
/etc/host.deny
sshd@172.18.101.118:ALL
示例:拒绝所有172.18.101.118访问
/etc/host.deny
ALL@172.18.101.118:ALL
示例:拒绝172.18.101.网段但172.18.101.7允许
/etc/hosts.allow
sshd: 192.168.1.7
/etc/hosts.deny
sshd:172.18.101.
或者
/etc/hosts.deny
sshd:172.18.101. EXCEPT 172.18.101.7 //这样写也可以
[:options]选项:
[:options]选项:
帮助:man 5 hosts_options
deny 主要用在/etc/hosts.allow定义“拒绝”规则
如:vsftpd: 172.16. :deny
allow 主要用在/etc/hosts.deny定义“允许”规则
如:vsftpd:172.16. :allow
spawn 启动一个外部程序完成执行的操作(在服务器上执行)
twist 实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端,默认至/dev/null
测试工具:
tcpdmatch [-d] daemon[@host] client
例:-d 测试当前目录下的hosts.allow和hosts.deny
[root@centos7 app]#cat hosts.deny
sshd: 172.18.27.7
[root@centos7 app]#tcpdmatch -d sshd 172.18.27.7
client: address 172.18.27.7
server: process sshd
access: denied
[root@centos7 app]#tcpdmatch -d sshd 172.18.27.5
client: address 172.18.27.5
server: process sshd
access: granted
示例:spawn启动一个外部程序完成执行的操作
sshd: ALL :spawn echo "$(date +"%%F %%T") login attempt from %c to %s,%d" >>/var/log/sshd.log
说明:
在/etc/hosts.allow中添加,允许登录,并记录日志
在/etc/hosts.deny中添加,拒绝登录,并记录日志
%c 客户端信息
%s 服务器端信息
%d 服务名
%p 守护进程的PID
%% 表示%
in.telnet,sshd: 172.18. :twist /bin/echo “connection failed”
说明:
当sshd访问时“connection failed”错误提示会出现在ssh -v 172.18.101.93
当in.telnet访问时“connection failed”提示到当前屏幕
实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O和ERROR发送到客户端,默认至/dev/null
/lib64/security/*.so
/etc/pam.conf
,默认不存在/etc/pam.d/APP_NAME
/etc/pam.d
存在,`/etc/pam.conf
将失效/etc/pam.d
下),最后调用认证文件(位于/lib/security
下)进行安全认证 通用配置文件/etc/pam.conf
格式
服务名 | 类型 | 控制 | 模块路径 | 参数 |
---|---|---|---|---|
application | type | control | module-path | argument |
专用配置文件/etc/pam.d/*
格式
类型 | 控制 | 模块路径 | 参数 |
---|---|---|---|
type | control | module-path | arguments |
说明:
模块类型(module-type)
控制(Control)
Control:PAM库如何处理与该服务相关的PAM模块成功或失败情况
复杂详细实现:使用一个或多个“status=action”
[status1=action1 status2=action ...]
Status:检查结果的返回状态
Action:采取行为ok,done,die,bad,ignore,reset
ok 模块通过,继续检查
done 模块通过,返回最后结果给应用
bad 结果失败,继续检查
die 结果失败,返回失败结果给应用
ignore 结果忽略,不影响最后结果
reset 忽略已经得到的结果
module-path: 模块路径
相对路径:
/lib64/security目录下的模块可使用相对路径
如:pam_shells.so、pam_limits.so
绝对路径:
模块通过读取配置文件完成用户对系统资源的使用控制
/etc/security/*.conf
注意:修改PAM配置文件将马上生效
建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误
Arguments 用来传递给该模块的参数
/user/share/doc/pam-*
rpm -qd pam
man –k pam_
各个PAM模块说明
man 模块名如man rootok
《The Linux-PAM System Administrators' Guide》
说明书链接
模块:pam_shells
功能:检查有效shell
帮助:man pam_shells
示例:不允许使用/bin/csh的用户本地登录
vim /etc/pam.d/login
auth required pam_shells.so
vim /etc/shells
去掉/bin/csh
useradd –s /bin/csh testuser(用户)或者chsh -s /bin/csh wang //给wang切换为/bin/csh shell
testuser(用户)将不可登录
tail /var/log/secure 日志文件可查看失败的原因
模块:pam_securetty.so
功能:只允许root用户在/etc/securetty列出的安全终端上登陆
示例:允许root在telnet登陆
vi /etc/pam.d/remote
#auth required pam_securetty.so #将这一行加上注释
或者/etc/securetty文件中加入
pts/0,pts/1...pts/n
模块:pam_nologin.so
功能:
如果/etc/nologin文件存在,将导致非root用户不能登陆
如果用户shell是/sbin/nologin 时,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆
模块:pam_limits.so
功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间
修改限制的实现方式:
(1) ulimit命令,立即生效,但无法保存(内部命令)
-n 最多的打开的文件描述符个数
-u 最大用户进程数
-S 使用soft(软)资源限制
-H 使用hard(硬)资源限制
-a 报告所有当前的限制
(2) 配置文件:
/etc/security/limits.conf
/etc/security/limits.d/*.conf
配置文件:每行一个定义;/etc/security/limits.conf这个文件有说明
<domain> <type> <item> <value>
ulimit -a
[root@centos7 pam.d]#ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4086
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4086
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
<domain> 应用于哪些对象
Username 单个用户
@group 组内所有用户
* 所有用户
<type> 限制的类型
Soft 软限制,普通用户自己可以修改
Hard 硬限制,由root用户设定,且通过kernel强制生效
- 二者同时限定
<item> 限制的资源
nofile 所能够同时打开的最大文件数量,默认为1024
nproc 所能够同时运行的进程的最大数量,默认为1024
<value> 指定具体值
示例:pam_limits.so
限制用户最多打开的文件数和运行进程数
/etc/pam.d/system-auth
session required pam_limits.so
vim /etc/security/limits.conf
apache –nofile 10240 apache 用户可打开10240个文件
student hard nproc20 不能运行超过20个进程
1、限制centos用户只能够在工作时间通过ssh远程连接本机
2、限制只有admins组内的用户可ssh到本机
MBR:isolinux/boot.cat
stage2: isolinux/isolinux.bin
配置文件:isolinux/isolinux.cfg
每个对应的菜单选项:
加载内核:isolinuz/vmlinuz
向内核传递参数:append initrd=initrd.img...
装载根文件系统,并启动anaconda
默认启动GUI接口
若是显式指定使用TUI接口:向内核传递text参数即可
(1)按tab键,在后面增加text
(2)按ESC键:boot: linux text
Anaconda安装系统分成三个阶段:
安装前配置阶段
安装过程使用的语言
键盘类型
安装目标存储设备
Basic Storage:本地磁盘
特殊设备:iSCSI
设定主机名
配置网络接口
时区
管理员密码
设定分区方式及MBR的安装位置
创建一个普通用户
选定要安装的程序包
安装阶段
在目标磁盘创建分区,执行格式化操作等
将选定的程序包安装至目标位置
安装bootloader和initramfs
图形模式首次启动
iptables
selinux
core dump
启动安装过程一般应位于引导设备;后续的anaconda及其安装用到的程序包等可来自下面几种方式:
本地光盘
本地硬盘
NFS
URL:
ftp server: yum repository
http server: yum repostory
如果想手动指定安装源:boot: linux askmethod
anaconda的配置方式:
(1) 交互式配置方式
(2) 通过读取事先给定的配置文件自动完成配置
按特定语法给出的配置选项
kickstart文件
安装boot引导选项:boot:
text: 文本安装方式
askmethod: 手动指定使用的安装方法
与网络相关的引导选项:
ip=IPADDR
netmask=MASK
gateway=GW
dns=DNS_SERVER_IP
ifname=NAME:MAC_ADDR
与远程访问功能相关的引导选项:
vnc
vncpassword='PASSWORD'
指明kickstart文件的位置:ks=
DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
Hard drive: ks=hd:device:/directory/KICKSTART_FILE
HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
NFS server:ks=nfs:host:/path/to/KICKSTART_FILE
启动紧急救援模式:
rescue
官方文档:《Installation Guide》
[参考](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/)
命令段:指明各种安装前配置,如键盘类型等
程序包段:指明要安装的程序包组或程序包,不安装的程序包等
%packages
@group_name
package
-package
%end
脚本段:
%pre: 安装前脚本
运行环境:运行于安装介质上的微型Linux环境
%post: 安装后脚本
运行环境:安装完成的系统
命令段中的命令:
必备命令
authconfig: 认证方式配置
authconfig--useshadow--passalgo=sha512
bootloader:bootloader的安装位置及相关配置
bootloader --location=mbr--driveorder=sda–append="crashkernel=auto rhgbquiet"
keyboard: 设定键盘类型
lang: 语言类型
part: 创建分区
rootpw: 指明root的密码
timezone: 时区
可选命令
install OR upgrade
text: 文本安装界面
network
firewall
selinux
halt
poweroff
reboot
repo
user:安装完成后为系统创建新用户
url: 指明安装源
key –skip 跳过安装号码,适用于rhel版本
创建kickstart文件的方式
直接手动编辑
依据某模板修改
可使用创建工具:system-config-kickstart
依据某模板修改并生成新配置/root/anaconda-ks.cfg
检查ks文件的语法错误:ksvalidator
ksvalidator /PATH/TO/KICKSTART_FILE
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
创建引导光盘:
mkdir –pv /app/myiso
cp -r /misc/cd/isolinux/ /app/myiso/
vim /app/myiso/isolinux/isolinux.cfg
initrd=initrd.imgtext ks=cdrom:/myks.cfg
cp /root/myks.cfg /app/myiso/
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
-o 指定映像文件的名称。
-b 指定在制作可开机光盘时所需的开机映像文件。
-c 制作可开机光盘时,会将开机映像文件中的no-eltorito-catalog 全部内容作成一个文件。
-no-emul-boot 非模拟模式启动。
-boot-load-size 4 设置载入部分的数量
-boot-info-table 在启动的图像中现实信息
-R 或-rock 使用Rock RidgeExtensions
-J 或-joliet 使用Joliet 格式的目录与文件名称
-v 或-verbose 执行时显示详细的信息
-T 或-translation-table 建立文件名的转换表,适用于不支持Rock Ridge Extensions 的系统上
cp -rv /misc/cd/ /app/centos6/
find /app/centos6 -name TRANS.TBL -exec rm {} \;
rm /app/centos6/repodata/* -f
cp /misc/cd/repodata/43······7d-c6-x86_64-comps.xml /app/centos6/repodata/
//复制回来的文件是包组信息cd /app/centos6/;createrepo -g repodata/43······7d-c6-x86_64-comps.xml ./
//创建仓库tree repodata
//生成元数据mkdir ksdir/
yum install system-config-kickstart
//图形配置anaconda-ks.cfg文件(准备这个文件)system-config-kickstart
//图形配置vim isolinux.cfg
修改菜单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/
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