运维之监控与安全篇------1. Linux基本防护 、 用户切换与提权 、 SSH访问控制

时间:2021-12-02 02:42:26


 运维之监控与安全篇------1. Linux基本防护 、 用户切换与提权 、 SSH访问控制

物理安全:主机,机房环境

系统安全:   操作系统用户管理  磁盘挂载   su   sudo  文件设置特殊属性

应用安全:   网络服务与应用程序 只允许管理员root有权限、设置进程的执行者是普通用户

网络安全:   防火墙 (硬件防火墙和软件防火墙)rhel7(firewalld)  rhel6 (iptables)

                   防火墙限制ip包进出本机

                   SElinux  限制进程对文件的访问

                   ssh服务  密钥对认证登录  黑白名单

数据安全:  数据备份、加密解密、恢复 (加密工具/方式、搭建CA服务器(证书服务器)、 网站加密https  邮件加密pop3s  imaps  stmp

管理安全:各种保障性的规范、流程、方法

维护时的辅助工具:

端口扫描工具 nmap 

Network Mapper,最早是Linux下的网络扫描和嗅探工具包。一是探测一组主机是否在线;其次是扫描 主机端口,嗅探所提供的网络服务;还可以推断主机所用的操作系统

1.进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测):nmap -sP 192.168.1.0/24

2.仅列出指定网络上的每台主机,不发送任何报文到目标主机:nmap -sL 192.168.1.0/24

3.探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80):nmap -PS 192.168.1.234

4.使用UDP ping探测主机:nmap -PU 192.168.1.0/24

5.使用频率最高的扫描选项:SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快:nmap -sS 192.168.1.0/24

6.当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描:nmap -sT 192.168.1.0/24

7.UDP扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口:nmap -sU 192.168.1.0/24

8.确定目标机支持哪些IP协议 (TCP,ICMP,IGMP等):nmap -sO 192.168.1.19

9.探测目标主机的操作系统:nmap -O 192.168.1.19  nmap -A 192.168.1.19

10.nmap -v scanme.这个选项扫描主机scanme中 所有的保留TCP端口。选项-v启用细节模式。nmap -sS -O scanme./24

11.进行秘密SYN扫描,对象为主机Saznme所在的“C类”网段 的255台主机。同时尝试确定每台工作主机的操作系统类型。因为进行SYN扫描 和作系统检测,这个扫描需要有根权限。nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127

12.进行主机列举和TCP扫描,对象为B类188.116网段中255个8位子网。这 个测试用于确定系统是否运行了sshd、DNS、imapd或4564端口。如这些端口 打开,将使用版本检测来确定哪种应用在运行。nmap -v -iR 100000 -P0 -p 80

13.随机选择100000台主机扫描是否运行Web服务器(80端口)。由起始阶段 发送探测报文来确定主机是否工作非常浪费时间,而且只需探测主机的一个端口,因 此使用-P0禁止对主机列表。nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20

14.扫描4096个IP地址,查找Web服务器(不ping),将结果以Grep和XML格式保存。host -l | cut -d -f 4 | nmap -v -iL -

1.nmap-os-fingerprints:列出了500多种网络设备和操作系统的堆栈标识信息。2. nmap-protocols:Nmap执行协议扫描的协议清单。3.nmap-rpc:远程过程调用(RPC)服务清单,Nmap用它来确定在特定端口上监听的应用类型。四 nmap-services:一个TCP/UDP服务的清单,Nmap用它来匹配服务名称和端口号

抓包工具 tcpdump

http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

协议分析软件 wireshark(后续)

 

系统安全:

用户帐号安全:

与用户相关的命令 及 命令对应的选项

useradd   -u   -g    -s    -G   用户名

[root@10 disk]# useradd -u 1234 sonny

[root@10 disk]# id sonny

uid=1234(sonny) gid=1234(sonny) 组=1234(sonny)

[root@10 disk]# useradd -g 1234 tom

[root@10 disk]# id tom

uid=1235(tom) gid=1234(sonny) 组=1234(sonny)

[root@10 disk]# useradd -G 1234 jerry

[root@10 disk]# id jerry

uid=1236(jerry) gid=1236(jerry) 组=1236(jerry),1234(sonny)

passwd  -S  -l   -u  -d  --stdin 用户名

[root@10 ~]# passwd -S yaya    #查看状态

yaya PS 2017-11-01 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

[root@10 ~]# passwd -l yaya1  #不能更改密码

锁定用户 yaya1 的密码 。

passwd: 操作成功

[root@10 ~]# passwd -u yaya

解锁用户 yaya 的密码。

passwd: 操作成功

[root@10 ~]# passwd -d yaya

清除用户的密码 yaya

passwd: 操作成功

usermod  -s SHELL   用户名  #/bin/bash--- /sbin/nologin

userdel  [ -r  ]  用户名 #-r删除用户目录

chage  -d  0  用户名 

chage  -l  用户名  #查看mysql用户以及密码的有效期

选项:

  -d, --lastday 最近日期        将最近一次密码设置时间设为“最近日期”

  -E, --expiredate 过期日期     将帐户过期时间设为“过期日期”

  -h, --help                    显示此帮助信息并推出

  -I, --inactive INACITVE       过期 INACTIVE 天数后,设定密码为失效状态

  -l, --list                    显示帐户年龄信息

  -m, --mindays 最小天数        将两次改变密码之间相距的最小天数设为“最小天数”

  -M, --maxdays 最大天数        将两次改变密码之间相距的最大天数设为“最大天数”

  -R, --root CHROOT_DIR         chroot 到的目录

  -W, --warndays 警告天数       将过期警告天数设为“警告天数”

设置mysql用户60天后密码过期,至少7天后才能修改密码,密码过期前7天开始收到告警信息。

[root@DB-Server ~]# chage -M 60 -m 7 -W 7 mysql

[root@DB-Server home]# useradd test
[root@DB-Server home]# passwd test

[root@DB-Server home]# chage -d 0 test  强制新建用户第一次登陆时修改密码

 

Chattr +i 文件名   #不可变

Chattr +a 文件名  #仅可追加

与用户相关的文件

1./etc/passwd ------注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序 

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

 

2./etc/shadow---登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

root:$6$mRObz2Sl$lHrUUJD7SIGDupGx7GnSKceTwfg/lK.qxYHOshnMwsCgYtcEcW45QvVsdiZ5l6y89nY7qkwAF0J.646WgFcRu0:17297:0:99999:7:::

bin:*:16579:0:99999:7:::

daemon:*:16579:0:99999:7:::

adm:*:16579:0:99999:7:::

 

与用户组相关文件

3./etc/group--------用户组名称:用户组密码:GID:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名

用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、linuxsir以及GID为0的其它用户

root:x:0:

bin:x:1:

daemon:x:2:

sys:x:3:

adm:x:4:

tty:x:5:

disk:x:6:

 

4./etc/gshadow------组名:口令:组管理者:组内用户列表  

[root@10 ~]# cat /etc/gshadow

root:::

bin:::

daemon:::

sys:::

adm:::

/etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。
/etc/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必要的。

 

5./etc/login.defs   #定义了与/etc/password和/etc/shadow配套的用户限制设定

MAIL_DIR /var/spool/mail

PASS_MAX_DAYS 99999

PASS_MIN_DAYS 0

PASS_MIN_LEN 5

PASS_WARN_AGE 7

UID_MIN                  1000

UID_MAX                 60000

SYS_UID_MIN               201

SYS_UID_MAX               999

GID_MIN                  1000

GID_MAX                 60000

SYS_GID_MIN               201

SYS_GID_MAX               999

CREATE_HOME yes

UMASK           077

USERGROUPS_ENAB yes

ENCRYPT_METHOD SHA512 

 

6./etc/skel/每当你新建一个用户的时候 (通过 useradd 命令),/etc/skel 目录下的文件,都会原封不动的复制到新建用户的家目录下~

管理员在 skel 目录下写个 ReadMe.txt 之类的文件,写一些使用说明,这样每个新建的用户都会在自己的目录下看到这个说明文件了

你希望新建用户可以直接 startx 就启动到 gnome 桌面环境,你可以在 skel 目录下建立一个 .xinitrc 文件,内容如下:

export LC_ALL="zh_CN.UTF-8"
export XMODIFIERS=@im=SCIM
export GTK_IM_MODULE="scim"
eval `dbus-launch --exit-with-session --sh-syntax`
exec gnome-session

 .xinitrc 是 X 启动需要读取的用户配置文件,这样每个用户 startx 之后就直接装载 gnome 了.

在 skel 目录下的 .bashrc 文件中加入一些方便的环境变量或者命令别名,这样每个新建用户都可以使用这些功能.不过,更好的选择是把这些设置放到全局的 /etc/profile 中, skel 目录下的文件是拷贝过去的,如果你修改或者增加了新的文件,只有新建的用户才能受益.

[root@10 ~]# ls  /etc/skel

readme.txt

[root@10 ~]# ls  -a /etc/skel

.  ..  .bash_logout  .bash_profile  .bashrc  .mozilla  readme.txt

 

伪装登录提示(字符模式提示信息)

7./etc/issue      本地登录提示,登陆前显示的信息 

/etc/issue.net   网络远程登录提示信息;不支持转义字符

/etc/motd       登陆后显示的消息

[root@room8pc205 桌面]# cat /etc/issue

\S

Kernel \r on an \m

 

常用的转义字符:
\d 本地端时间的日期
\l 显示第几个终端机的接口;
\m 显示硬件的等级(i386/i486/i586/i686....)
\n 显示主机的网络名称
\o 显示 domain name
\r 操作系统的版本 (类似 uname-r)
\t 显示本地端时间的时间
\s 操作系统的名称
\v 操作系统的版本

 

注意:欢迎语句最好不要写 welcome 之类的欢迎内容,最好写“非注册用户禁止登陆”之类的警告信息。因为在美国曾有黑客因为入侵的主机写有“欢迎来访”的语句,在庭审的时候被判无罪。

其他的一些配置文件

~/.bash_logout     当需要在退出登录后让系统完成一些操作的话可以写在这个文件中(此文件是隐藏文件)

~/.bash_history     命令历史文件,所有使用过的命令都会记录在此文件中。先在内存中缓存,然后写入此文件保存

 

文件系统安全:

环境变量 HISTSIZEHISTTIMEFORMAT

#vim /etc/profile

HISTSIZE=1000

#HISTTIMEFORMAT='%F %T '

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

export  HISTTIMEFORMAT='%F %T '

:wq

export 命令

设置或显示环境变量

语  法:export [-fnp][变量名称]=[变量设置值]

-f  代表[变量名称]中为函数名称。 

-n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 

-p  列出所有的shell赋予程序的环境变量

一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本

[root@room8pc205 桌面]# export

declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-QJWuDj3cPI,guid=b1aa4f76197c9a5b009a632759fbb583"

 

[root@10 ~]# history | tail -10

  205  useradd admin

  206  echo "123" | passwd --stdin admin

systemctl  enable|disable  httpd    -----> rhel7

systemctl  start   httpd

程序和服务控制

#chkconfig  httpd  on | off         ----->rhel6

chkconfig --list        #列出所有的系统服务
chkconfig --add httpd     #增加httpd服务
chkconfig --del httpd     #删除httpd服务
chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态
chkconfig --list         #列出系统所有的服务启动情况
chkconfig --list mysqld     #列出mysqld服务设置情况
chkconfig --level 35 mysqld on  #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭
chkconfig mysqld on        #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级

#ntsysv   通过图形把不需要的服务设置为开机不启动

service  httpd  start

/etc/init.d/httpd   start

禁止普通用户执行init.d目录下的脚本

chmod o-x  /etc/init.d/*

文件系统规划及挂载:

分区:装系统   使用盘存储数据

           /           根分区

           /boot   系统启动引导文件

           swap    交换分区的空间从系统硬盘获取。 物理内存空间不足时,把内存里不活跃的程序交换到 交换空间里

           /var   

          /home

格式化的文件系统类型:ext2/3/4   LVM   nfs    xfs   gfs    

 

挂载:  手动挂载  mount

        开机挂载  /etc/fstab

        uuid    目录     文件系统    defaults   0   0 

触发挂载  systemctl  start  autofs

手动挂载  mount的格式

#mount   -t  文件系统类型    分区   目录

#mount   -t  文件系统类型  -o  选项   分区   目录

命令格式:mount [-t vfstype] [-o options] device dir 

1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有: 
光盘或光盘镜像:iso9660 
DOS fat16文件系统:msdos 
Windows 9x fat32文件系统:vfat 
Windows NT ntfs文件系统:ntfs 
Mount Windows文件网络共享:smbfs 
UNIX(LINUX) 文件网络共享:nfs 
2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有: 
loop:用来把一个文件当成硬盘分区挂接上系统 
ro:采用只读方式挂接设备 
rw:采用读写方式挂接设备 
iocharset:指定访问文件系统所用字符集 

3.device 要挂接(mount)的设备。 
4.dir设备在系统上的挂接点(mount point)。

1、从光盘制作光盘镜像文件。将光盘放入光驱,执行下面的命令。 
#cp /dev/cdrom /home/sunky/mydisk.iso 或 
#dd if=/dev/cdrom of=/home/sunky/mydisk.iso 
注:执行上面的任何一条命令都可将当前光驱里的光盘制作成光盘镜像文件/home/sunky/mydisk.iso 
2、将文件和目录制作成光盘镜像文件,执行下面的命令。 
#mkisofs -r -J -V mydisk -o /home/sunky/mydisk.iso /home/sunky/ mydir 
注:这条命令将/home/sunky/mydir目录下所有的目录和文件制作成光盘镜像文件/home/sunky/mydisk.iso,光盘卷标为:mydisk 
3、光盘镜像文件的挂接(mount) 
#mkdir /mnt/vcdrom 
注:建立一个目录用来作挂接点(mount point) 
#mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom 
注:使用/mnt/vcdrom就可以访问盘镜像文件mydisk.iso里的所有文件了。 
挂接移动硬盘 
对linux系统而言,USB接口的移动硬盘是当作SCSI设备对待的。插入移动硬盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。 
[root at pldyrouter /]# fdisk -l 
接好移动硬盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况.应该可以发现多了一个SCSI硬盘/dev/sdc和它的两个磁盘分区/dev /sdc1?、/dev/sdc2,其中/dev/sdc5是/dev/sdc2分区的逻辑分区。我们可以使用下面的命令挂接/dev/sdc1和 /dev/sdc5。 
#mkdir -p /mnt/usbhd1 
#mkdir -p /mnt/usbhd2 
注:建立目录用来作挂接点(mount point) 
#mount -t ntfs /dev/sdc1 /mnt/usbhd1 
#mount -t vfat /dev/sdc5 /mnt/usbhd2 
注:对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。 
#mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1 
#mount -t vfat -o iocharset=cp936 /dev/sdc5 /mnt/usbhd2 
linux系统下使用fdisk分区命令和mkfs文件系统创建命令可以将移动硬盘的分区制作成linux系统所特有的ext2、ext3格式。这样,在linux下使用就更方便了。使用下面的命令直接挂接即可。 
#mount /dev/sdc1 /mnt/usbhd1 
挂接U盘 
和USB接口的移动硬盘一样对linux系统而言U盘也是当作SCSI设备对待的。使用方法和移动硬盘完全一样。插入U盘之前,应先用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。 
[root at pldyrouter root]# fdisk -l 
插入U盘后,再用fdisk –l 或 more /proc/partitions查看系统的硬盘和硬盘分区情况。 
[root at pldyrouter root]# fdisk -l 
系统多了一个SCSI硬盘/dev/sdd和一个磁盘分区/dev/sdd1,/dev/sdd1就是我们要挂接的U盘。 
#mkdir -p /mnt/usb 
注:建立一个目录用来作挂接点(mount point) 
#mount -t vfat /dev/sdd1 /mnt/usb 
注:现在可以通过/mnt/usb来访问U盘了, 若汉字文件名显示为乱码或不显示,可以使用下面的命令。 
#mount -t vfat -o iocharset=cp936 /dev/sdd1 /mnt/usb 
挂接Windows文件共享 
Windows网络共享的核心是SMB/CIFS,在linux下要挂接(mount)windows的磁盘共享,就必须安装和使用samba 软件包。现在流行的linux发行版绝大多数已经包含了samba软件包,如果安装linux系统时未安装samba请首先安装samba。当然也可以到 www.samba.org网站下载......新的版本是3.0.10版。 
当windows系统共享设置好以后,就可以在linux客户端挂接(mount)了,具体操作如下: 
# mkdir –p /mnt/samba 
注:建立一个目录用来作挂接点(mount point) 
# mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba 
注:administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享 
如此就可以在linux系统上通过/mnt/samba来访问windows系统磁盘上的文件了。以上操作在redhat as server 3、redflag server 4.1、suse server 9以及windows NT 4.0、windows 2000、windows xp、windows 2003环境下测试通过。 
挂接UNIX系统NFS文件共享 
类似于windows的网络共享,UNIX(Linux)系统也有自己的网络共享,那就是NFS(网络文件系统),下面我们就以SUN Solaris2.8和REDHAT as server 3 为例简单介绍一下在linux下如何mount nfs网络共享。 
在linux客户端挂接(mount)NFS磁盘共享之前,必须先配置好NFS服务端。 
1、Solaris系统NFS服务端配置方法如下: 
(1)修改 /etc/dfs/dfstab, 增加共享目录 
share -F nfs -o rw /export/home/sunky 
(2)启动nfs服务 
# /etc/init.d/nfs.server start 
(3)NFS服务启动以后,也可以使用下面的命令增加新的共享 
# share /export/home/sunky1 
# share /export/home/sunky2 
注:/export/home/sunky和/export/home/sunky1是准备共享的目录 
2、linux系统NFS服务端配置方法如下: 
(1)修改 /etc/exports,增加共享目录 
/export/home/sunky 10.140.133.23(rw) 
/export/home/sunky1 *(rw) 
/export/home/sunky2 linux-client(rw) 
注:/export/home/目录下的sunky、sunky1、sunky2是准备共享的目录,10.140.133.23、*、 linux-client是被允许挂接此共享linux客户机的IP地址或主机名。如果要使用主机名linux-client必须在服务端主机 /etc/hosts文件里增加linux-client主机ip定义。格式如下: 
10.140.133.23 linux-client 
(2)启动与停止NFS服务 
/etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的) 
/etc/rc.d/init.d/nfs start 启动NFS服务 
/etc/rc.d/init.d/nfs stop 停止NFS服务 
注:若修改/etc/export文件增加新的共享,应先停止NFS服务,再启动NFS服务方能使新增加的共享起作用。使用命令exportfs -rv也可以达到同样的效果。 
3、linux客户端挂接(mount)其他linux系统或UNIX系统的NFS共享 
# mkdir –p /mnt/nfs 
注:建立一个目录用来作挂接点(mount point) 
#mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs 
注:这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。 
如此就可以在linux客户端通过/mnt/nfs来访问其它linux系统或UNIX系统以NFS方式共享出来的文件了。以上操作在 redhat as server 3、redflag server4.1、suse server 9以及Solaris 7、Solaris 8、Solaris 9 for x86&sparc环境下测试通过
linux加载光驱
(1)使用光驱前,要先mount一下:#mount /dev/cdrom /mnt/cdrom,然后您就可以进入/mnt/cdrom目录下读取光盘内容了;
(2)当您想退出光盘时,须使用umout命令,否则光驱就会一直处于死锁状态:#umount /mnt/cdrom。

 

默认defaults挂载包括哪些挂载参数:  #man   mount

 

suid  启用SUIDSGID特殊权限

nosuid:禁用SUIDSGID特殊权限

exec:有运行二进制文件noexec

noexec:禁止运行二进制文件

 

mount   -t ext3   -o nosuid,noexec  /dev/sdb1   /disk

dd:拷贝

if=file #输入文件名,缺省为标准输入。 
of=file #输出文件名,缺省为标准输出。 
ibs=bytes #一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。 
obs=bytes #一次写 bytes 个字节(即一个块大小为 bytes 个字节)。 
bs=bytes #同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。 
cbs=bytes #一次转换 bytes 个字节,即转换缓冲区大小。 
skip=blocks #从输入文件开头跳过 blocks 个块后再开始复制。 
seek=blocks #从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。 
count=blocks #仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。 
conv=conversion[,conversion...] #用指定的参数转换文件。

备份: 
dd if=/dev/hdx of=/dev/hdy #将本地的/dev/hdx整盘备份到/dev/hdy 
dd if=/dev/hdx of=/path/to/image #将/dev/hdx全盘数据备份到指定路径的image文件 
dd if=/dev/hdx | gzip >/path/to/image.gz 
#备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径

恢复:

dd if=/path/to/image of=/dev/hdx #将备份文件恢复到指定盘 
gzip -dc /path/to/image.gz | dd of=/dev/hdx #将压缩的备份文件恢复到指定盘

2.1.2.利用netcat远程备份 
dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234 #在源主机上执行此命令备份/dev/hda

netcat -l -p 1234 | dd of=/dev/hdc bs=16065b #在目的主机上执行此命令来接收数据并写入/dev/hdc

netcat -l -p 1234 | bzip2 > partition.img 
netcat -l -p 1234 | gzip > partition.img 
#以上两条指令是目的主机指令的变化分别采用bzip2 gzip对数据进行压缩,并将备份文件保存在当前目录。

2.1.3.备份MBR 
备份: dd if=/dev/hdx of=/path/to/image count=1 bs=512 
备份磁盘开始的512Byte大小的MBR信息到指定文件

恢复: dd if=/path/to/image of=/dev/hdx 
将备份的MBR信息写到磁盘开始部分

2.1.4.备份软盘 
dd if=/dev/fd0 of=disk.img count=1 bs=1440k 
将软驱数据备份到当前目录的disk.img文件

2.1.5.拷贝内存资料到硬盘 
dd if=/dev/mem of=/root/mem.bin bs=1024 
将内存里的数据拷贝到root目录下的mem.bin文件

2.1.6.从光盘拷贝iso镜像 
dd if=/dev/cdrom of=/root/cd.iso 
拷贝光盘数据到root文件夹下,并保存为cd.iso文件

2.2.增加Swap分区文件大小 
dd if=/dev/zero of=/swapfile bs=1024 count=262144 #创建一个足够大的文件(此处为256M) 
mkswap /swapfile #把这个文件变成swap文件 
swapon /swapfile #启用这个swap文件 
/swapfile swap swap defaults 0 0 #在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行

2.3.销毁磁盘数据 
dd if=/dev/urandom of=/dev/hda1 
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。

2.4.磁盘管理

2.4.1.得到最恰当的block size 
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file 
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file 
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file 
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file 
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

2.4.2测试硬盘读写速度 
dd if=/root/1Gb.file bs=64k | dd of=/dev/null 
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000 
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度

2.4.3.修复硬盘 
dd if=/dev/sda of=/dev/sda 
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生magnetic flux point。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

 

+++++++++++++++++++++++++++++

二    su 用户切换  

#su   用户   #不改变环境

#su  -  用户  #改变环境

#su  -   -c  "命令"    用户  #带有命令 

$su  -   -c    "systemctl   stop  mysqld"  root

三  用户提权(让普通用户登录系统后,可以执行root用户的操作,只有操作系统的管理员root用户有提权权限)

获取命令的绝对路径

#which  命令名

#which  systemctl

 

主配置文件 

#vim /etc/sudoers    =====  visudo

用户     主机列表=提权命令列表

%用户组     主机列表=提权命令列表

使用别名做用户提权(别名名称必须使用大写字母表示)

定义命令别名  Cmnd_Alias    别名名称=命令列表

定义主机别名   Host_Alias    别名名称=主机列表

定义用户别名   User_Alias    别名名称=用户名列表

用户别名     主机别名=命令别名,命令别名,命令别名

Host_Alias  MYPC=localhost,ser10

User_Alias  WEBGRP=t1,t2,t3

Cmnd_Alias  MGMCMD=/usr/sbin , /usr/bin/*, !/usr/bin/passwd   root 

WEBGRP    MYPC=MGMCMD,SERVICECMD

++++++++++++++++++++++++++++++

启用日志记录提权用户执行过的命令

vim /etc/sudoers

Host_Alias     FILESERVERS = fs1, fs2

# Host_Alias     MAILSERVERS = smtp, smtp2

Host_Alias MYPC=localhost,10.example.com

User_Alias WEBADMIN = bob,jim    #别名必须大写

User_Alias DEADMIN = lucy,lili

Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

Cmnd_Alias WEBCOMM=/usr/bin/systemctl * httpd,/usr/bin/vim /etc/httpd/conf/httpd.conf

WEBADMIN MYPC=SOFTWARE,WEBCOM

DBADMIN MYPC=SOFTWARE,DBCOMN

rootALL=(ALL) ALL

%wheel ALL=(ALL) NOPASSWD:ALL

jim localhost,10.example.com=/usr/bin/systemctl * crond,/usr/bin/vim /etc/my.cnf SOFTWARE

lucy localhost,10.example.com=/usr/bin/systemctl * httpd,/usr/bin/vim /etc/httod/conf/httpd.conf

admin localhost,10.example.com=/usr/bin/passwd,/usr/sbin/useradd 

## Allows members of the 'sys' group to run networking, software, 

Defaults  logfile="/var/log/sudo"

:wq

++++++++++++++++++++++++++++++++

提权用户登录系统后,查看提权命令

sudo  -l

提权用户登录系统后,执行提权命令

sudo  提权命令

Which passwd

Which useradd

visudo

Cmnd_Alias uADM_CTRL=/usr/bin/passwd,/usr/passwd/root

#su - yaya

#sudo -l

$sudo /usrbin/systemctl * httpd

+++++++++++++++++++++++++++++++++

#visudo

%whell localhost,10.example.com=/bin/*

#usermod -a -G wheel yaya

$sudo -l

 

四  配置sshd服务

 运维之监控与安全篇------1. Linux基本防护 、 用户切换与提权 、 SSH访问控制

4.1  常用配置参数 

#man  sshd_config

#vim /etc/ssh/sshd_config

Port 4444                        #端口

Protocol 2                        #协议版本

listenAddress 192.168.4.10      #监听地址

Permitrootlogin no               #禁止root 登陆

useDNS no                        #不解析客户机地址

LoginGraceTime 2m               #登陆限时

MaxAuthTries 6                   #每连接最多认证次数

黑白名单:

DenyUsers user1 user2....

AllowUsers user1@host user2....

Denygroups group1 group2....

AllowGroups group group2...

 

HostKey /etc/ssh/ssh_host_rsa_key

HostKey /etc/ssh/ssh_host_ecdsa_key

HostKey /etc/ssh/ssh_host_ed25519_key

SyslogFacility AUTHPRIV

AuthorizedKeysFile .ssh/authorized_keys

PasswordAuthentication yes              #检测客户端私钥与服务器上的公钥是否匹配

ChallengeResponseAuthentication no

GSSAPIAuthentication yes

GSSAPICleanupCredentials no

UsePAM yes

X11Forwarding yes

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT

AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

AcceptEnv XMODIFIERS

Subsystem sftp /usr/libexec/openssh/sftp-server

allowusers root@192.168.4.254 yaya

 

#systemctl  restart  sshd

+++++++++++++++++++++++++++++++

4.3  启用密钥对认证方式

             公钥  ----> 加密

             私钥  ---->

#ssh-keygen  #创建ssh密钥对

#ls /home/用户名/.ssh

Id_rsa       #私钥文件

Id_rsa.pub   #公钥文件

#ssh-cpoy-id john@192.168.4.10    #部署ssh公钥

Passwword:

#whoami      #我是谁

密钥对认证方式的登录过程

20  客户端

10  ssh服务密钥认证登录方式

++++++++++++++++++++++++++++++

客户端连接sshd服务器

#ssh  -p  端口号    -X    用户名@sshd服务器ip地址

+++++++++++++++++++++++++++

执行脚本adduser.sh可以交互方式批量添加系统用户要求如下:

可以指定添加系统用户的个数  用户的初始密码和用户名同名,首次登录系统强制修改密码。设置帐号的有效为一个月。每个新添加的用户家目录下都自动生成机房使用规则文件readme.txt . 添加时若系统内已有此帐号提示用户以存在反之提示添加成功。