如果您对几个小步聚打造安全Linux系统和安全linux系统感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解几个小步聚打造安全Linux系统的各种细节,并对安全linux系统进行深入的分析,此外
如果您对几个小步聚打造安全Linux系统和安全 linux系统感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解几个小步聚打造安全Linux系统的各种细节,并对安全 linux系统进行深入的分析,此外还有关于linux – 用于生产的安全LAMP服务器、linux下PHP错误警报开启与关闭 linux php exec 执行不了 linux系统 linux系统下、LINUX实战:打造属于你自己的Linux系统、Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载五)Linux系统的对话方式的实用技巧。
本文目录一览:- 几个小步聚打造安全Linux系统(安全 linux系统)
- linux – 用于生产的安全LAMP服务器
- linux下PHP错误警报开启与关闭 linux php exec 执行不了 linux系统 linux系统下
- LINUX实战:打造属于你自己的Linux系统
- Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载五)Linux系统的对话方式
几个小步聚打造安全Linux系统(安全 linux系统)
1、LILO安全设置vi/etc/lilo.conf.anaconda//修改LILO文件===============================================……
restricted//加入这行
password=111111//加入这行并设置密码为111111
……
================================================
chmod600/etc/lilo.conf.anaconda//设置为ROOT权限读取
/sbin/lilo-v//更新系统,使上述操作生效
chattr+i/etc/lilo.conf.anaconda//设置LILO文件是不可写2、设置默认口令和帐号长度与有效期vi/etc/login.defs//修改login.defs文件================================================
……
PASS_MAX_DAYS99999
PASS_MIN_DAYS0
PASS_MIN_LEN8//修改系统默认密码长度为8位
PASS_WARN_AGE7//口令有效期为7天3、清除不设口令的帐号vi/etc/passwd//修改passwd文件=================================================
……
elain::500:501:elain:/home/elain:/bin/bash
……
//帐号elain没有设置口令。因为第二项为空,说明此帐号无密码,这是非常危险的,应该将此类帐号删除或给它设置口令。4、特别的帐号处理删除无用的用户和组用户
命令如下:
删除用户:userdelusername
删除组用户:groupdelgroupname
删除下列的用户:
adm
lp
sync
shutdown
halt
--------------
news
uucp
operator
games//若没有MAIL服务器可删除
--------------
gopher//若没有XWindows服务器可删除
ftp//若不允许匿名访问FTP删除此帐号5、权限与文件系统lsattr//列出文件的属性
chattr//改变文件的属性
a//只可添加属性
i//不可改变属性
修改系统中关键文件如下:
passwd
passwd._
shadow
shadown._
xinetd.conf
services
lilo.conf等
例:chmod600/etc/xinetd.conf//修改文件属主为root
chattr+(-)i/etc/xinetd.conf//设置为不能(取消)修改6、限制系统使用资源vi/etc/security/limits.conf
=================================================
……
加入或修改下面这几行:
*hardcore0//禁止创建core文件
*hardRSS5000//除root外,其它用户内存使用为5M
*hardnproc20//限制最多进程为20vi/etc/pam.d/login
=================================================
……
sessionrequired/lib/security/pam_limits.so
//在文件末尾加入上面这一行7、设置自动注销帐号的登录vi/etc/profile
===================================================
……
HOSTNAME='/bin/hostname'
HISTSIZE=1000//这是历史记录数,越小越好
tmout=300//添加此行,表示系统在五分钟内没有任何操作,将自动这个帐号注销8、/etc/securetty文件安全设置vi/etc/securetty
====================================================
tty1
#tty2
……
#tty11//在默认的内容中注释掉除tty1外的所有tty,表示root只能在tty1终端登录
9、禁止外来PING请求,防止补攻击vi/etc/rc.d/rc.local
====================================================
echo1>/proc/sys/net/ipv4/icmp_echo_ignore_all
//添加上面一行,可阻止系统响应任何外来的PING请求10、限制显示出系统版本信息当用户进入LINUX系统时系统将告诉用户LINUX版本号,内核版本号和服务器主机名。
vi/etc/rc.d/rc.local
=====================================================
在里面添加如下:
……
#Thiswilloverwrite/etc/issueateveryboot.so,makeanychangesyou
#wanttomaketo/etc/issuehereoryouwilllosethemwhenyoureboot.
#echo"">/etc/issue
#echo"$R">>/etc/issue
#echo"Kernel$(uname-r)on$a$(uname-m)">>/etc/issue
#
#cp-f/etc/issue/etc/issue.net
#echo>>/etc/issue
……
然后,执行下面几行命令
#rm-f/etc/issue
#rm-f/etc/issue.net
#touch/etc/issue
#touch/etc/issue.net
也可以单独编辑一个命令(telnet),如修改/etc/inetd.conf
telnetstreamtcpNowaitroot/usr/sbin/tcpdin.telnetd-h
这样,用户TELNET服务器时,就不会显示出系统版本信息等了,只显示“login:”。11、设置文件/etc/host.conf,防止IP欺骗vi/etc/host.conf
===================================================
……
#LookupnamesviaDNSfirstthenfallbackto/etc/hosts.
orderbind,hosts
#Wedon'thavemachineswithmultipeIPaddressesonthesamecard
(likevirtualserver,IPAliasing).
multioff
#CheskforIPaddressspoofing.
nospoofon
IPSpoofing:IP-Spoofingisasecurityexploitthatworksbytrichking
computersinatrustrelationshipthatyouaresomeonethatyoureallyaren.
//添加上面几行来防止IP欺骗攻击12、禁止su作为rootvi/etc/pam.d/su
======================================================
……
authsufficient/lib/security/pam_rootok.sodebug
authrequired/lib/security/pam_wheel.sogroup=elain
在文件内添加如上两行,这表示只有用户组elain里的成员可以用su作为root
若希望用记admin能su作为root,可运行以下命令:
#usermod-G10admin13、禁止使用CTRL+ALT+DEL重启服务器vi/etc/inittab
……
#ca::ctrlaltdel:/sbin/shutdown-t3-rNow//用“#”注释掉此行即可
然后运行:
#/sbin/init-q14、注销时删除命令记录vi/etc/skel/.bash_logout
============================================================
rm-f$HOME/.bash_history15、确保开启的服务安全常用服务方面的命令:
grep-v"#"/etc/services//显示没有被注释掉的服务
ps-eaf|wc-l//统计当前系统打开服务的总数
netstat-na(远程后面可加ip)//查看当前运行的服务
netstat-an|grepLISTEN//查看是否有可疑端口打开
当然,也可以执行如下命令:
shattr+i/etc/services//设置为不可理性属性
Linux启动时先检测脚本文件,在REDHAT下,在/etc/rc.d/rc3.d(rc5.d)下(图形化),脚本名字为启动顺序。
K表示杀死进程
S表示启动的服务
如在启动时禁止一个服务,只需把该服务的脚本文件的大写“S”更改为小写“s”
注意,以下3个服务漏洞很多,强烈建议关闭
yppasswdd(NIS服务器)
ypserv(NIS服务器)
nfs(NFS服务器)16、LINUX防火墙安全配置system-config-securitylevel17、LINUX系统安全工具Sxid:检查系统中的suid,sgid以及没有主人的文件
Skey:一次性口令工具
Logrotate:日志循环工具
Logcheck:日志管理工具
Swatch:日志管理工具,比logcheck实时
Ssh(openssh):提供安全的连接认证
Portsentry:反扫描工具,监视自己的udp和tcp端口
Tripwire:提供系统完整性检查
Gnupg:对单个文件进行加密以及创建数字签名
Hostsentry:基于主机的入侵检测,将连接记入日志
ipchainsLinux:发行版自带的包过滤形防火墙
Anti-sniff:反嗅探工具,检查网络中是否有嗅探器
Freeswan:在LINUX中实现VPN的工具
Syslog-ng:替代syslog的日志文件系统
Scandns:进行DNS检查追踪工具
Whisker:CGI扫描器
Snoopy:通过跟踪execve系统调用记录文件的命令
Krnsniff:一个基于内核的监听模块
Iptable:用来替代ipchains包过滤防火墙
imsafe:通过跟踪系统调用来检测缓冲溢出等问题
Iplog:对来往的包进行日志记录
Solarisdesigner:内核补丁,防止缓冲溢出等
Stackguard:作为补丁修补GCC,防止缓冲溢出
DTK:Honeyport欺骗式防御
Antiroute:阻止和记录基于路由的跟踪============================================
收集于网络,希望能为广大Linux爱好者提供一定的帮助,
如有更好的意见,敬请完善!
linux – 用于生产的安全LAMP服务器
除了为Linux设置MysqL密码和root密码之外,还应采取其他(可能不那么明显)的步骤?
如果我要特别偏执,通常可能不需要采取什么步骤呢?
这是一个基本的单站点使用,但必须是安全的.
解决方法
查看Bastille,它是一系列实现Linux最佳实践的脚本.
不要通过纯文本协议发送身份验证数据.例如,禁用FTP.如果您通过Apache发送身份验证数据,请使用SSL.
禁用并删除任何不必要的软件,包括GUI界面.
审核任何设置了SUID位的文件并删除. (这将严重限制非根本能力.了解每个变化的含义.)
审核公共可写目录并删除可写位. (单独留下/ tmp.)
避免以root身份运行任何守护程序.
研究所有多用户软件,详细监听套接字以获得安全性最佳实践.
避免将用户添加到系统是最好的方法之一.多用户系统需要更加注重细节.
实施密码标准.例如:至少10个字符,非字母数字字符,使用字母和数字.这是为了在密码文件泄露的情况下使暴力破解变得更加困难.通过系统强制执行此操作.
在5次失败的身份验证失败后锁定用户,并且锁定时间至少为10分钟.保持密码历史记录,以便用户无法使用过去的5个密码.
如果您拥有更大的环境,则使用具有多个子网的网络隔离来隔离风险是绝对必要的.如果环境较小,建议在本地系统上运行防火墙以限制曝光.例如,仅允许SSH到您的IP. tcpwrappers也可以用于额外的层. (/etc/hosts.allow,/etc/hosts.deny)
当然,保持所有软件都是最新的.特别是面向公众的守护进程.
使用SSH:
>禁用SSH协议1
>仅允许root身份验证而不使用密码(仅密钥对)
使用Apache:
>禁用任何不需要的模块
>禁用.htaccess和公共目录
>禁用FollowSymlink和任何不必要的选项
>如果您不需要,请不要安装PHP.
使用MysqL:
>禁用默认用户.
>不要使用通配符主机.
>务必为每个用户设置唯一的主机.
>除非必要,否则不要听tcp. (异常不可避免.)
>尽可能限制应用程序用户权限. (SELECT,INSERT,UPDATE,DELETE理想用于写入和SELECT用于读取)
我建议专门研究PHP.ini调优的安全性.这是默认情况下风险较高的软件.
Bastille
linux下PHP错误警报开启与关闭 linux php exec 执行不了 linux系统 linux系统下
目录 /usr/local/php/etc
php.ini
修改
2.
搜索并修改下行,把Off值改成On
display_errors = Off
3. 搜索下行
error_reporting = E_ALL & ~E_NOTICE
或者搜索:
error_reporting = E_ALL & ~E_DEPRECATED
修改为
error_reporting = E_ALL | E_STRICT
/etc/init.d/php-fpm restart
***********************vi 查找命令 / 要找的 n 下一个,shift n 上一个*****************************
以上就介绍了
LINUX实战:打造属于你自己的Linux系统
《LINUX实战:打造属于你自己的Linux系统》要点:
本文介绍了LINUX实战:打造属于你自己的Linux系统,希望对您有用。如果有疑问,可以联系我们。
一、前言
Linux操作系统至1991年10月5日诞生以来,就其开源性和自由性得到了很多技术大牛的青睐,每个Linux喜好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为我们后来人提供了一个良好的学习和研究环境.
本文主要通过裁剪现有Linux系统,根据本身的需要,打造一个属于本身的Linux小系统,让其能够具备Linux的一些常用小功能.
二、原理
启动流程先容:
制作Linux小系统之前,我们有需要再了解一下Linux的启动流程:
1、首先Linux要通过POST自检,反省硬件设备有没有故障
2、如果有多块启动盘的话,必要在BIOS中选择启动磁盘
3、启动MBR中的bootloader引导法式
4、加载内核文件
5、执行所有过程的父过程、老祖宗init
6、打印迎接界面
在Linux的启动流程中,加载内核文件时还必要借助别外两个文件:
1)initrd,是CentOS5上用内存模拟的磁盘装备
2)initramfs,是CentOS6上用内存模拟的文件体系
在启程的流程中,init主要是用来做哪些操作的呢?
init通过挪用/etc/inittab这个配置文件,然后再去执行/etc/rc.d/rc.sysinit的系统初始化脚本
好啦,原理我们已经知道了,接下来我们来看看具体的思绪吧(〃'▽'〃)
三、思路
1、我们要在一个现有的Linux系统上加一块硬盘/dev/sdb,在硬盘上分两个分区,一个是/boot,一个是/,并将其格式化.当然,我们需要明确的概念是,我们现在加的这个硬盘在现有的Linux系统中是/dev/sdb,但是,当我们把东西全部设置好时,我们就需要把这个硬盘铲除,放在我们的新系统上,此时,他就是/dev/sda啦.
2、在/dev/sdb这个硬盘上,我们要将其打造成一个独立的Linux系统,里面的所有文件是需要我们一个一个拷贝进去的.而且,作为一个将来要当/dev/sda的硬盘,里面必定要有grub文件诺~所以我们要安装grub文件.
3、同时,作为一个能独立运行的Linux系统,内核是必定不能少的!所以,我们要把内核文件和initramfs文件也一起拷到我们的/dev/sdb上.
4、现在我们系统已经初具规模了,接下来就是需要程序了0.0关于程序的拷贝我们可以通过一个脚原来实现.具体的脚本在下文中会给大家说到.
以上步骤完成,我们的自制Linux就完成啦~我们的思路便是这么回事,接下来,我们就开始吧( ̄▽ ̄)~*
四、操作步调
本次实验我们以centos6.9为例~
1、目的磁盘分区
首先,我们在宿主机上添加一块年夜小为20G的硬盘:
添加完成后,点击肯定,然后我们打开宿主机. 通过fdisk来给我们的/dev/sdb进行分区:
1 [root@localhost ~]# fdisk /dev/sdb 2 Device contains neither a valid DOS partition table,nor Sun,sgi or OSF disklabel 3 Building a new DOS disklabel with disk identifier 0x4fde4cd0. 4 Changes will remain in memory only,until you decide to write them. 5 After that,of course,the prevIoUs content won't be recoverable. 6 7 8 Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) 9 10 11 WARNING: DOS-compatible mode is deprecated. It's strongly recommended to 12 switch off the mode (command 'c') and change display units to 13 sectors (command 'u'). 14 15 16 Command (m for help): n 17 Command action 18 e extended 19 p primary partition (1-4) 20 p 21 Partition number (1-4): 1 22 First cylinder (1-2610,default 1): 23 Using default value 1 24 Last cylinder,+cylinders or +size{K,M,G} (1-2610,default 2610): +100M 25 26 27 Command (m for help): n 28 Command action 29 e extended 30 p primary partition (1-4) 31 p 32 Partition number (1-4): 2 33 First cylinder (15-2610,default 15): 34 Using default value 15 35 Last cylinder,G} (15-2610,default 2610): 36 Using default value 2610 37 #查看分区 38 Command (m for help): p 39 40 41 disk /dev/sdb: 21.5 GB,21474836480 bytes 42 255 heads,63 sectors/track,2610 cylinders 43 Units = cylinders of 16065 * 512 = 8225280 bytes 44 Sector size (logical/physical): 512 bytes / 512 bytes 45 I/O size (minimum/optimal): 512 bytes / 512 bytes 46 disk identifier: 0x4fde4cd0 47 48 49 Device Boot Start End Blocks Id System 50 /dev/sdb1 1 14 112423+ 83 Linux 51 /dev/sdb2 15 2610 20852370 83 Linux 52 #保留并退出 53 Command (m for help): w 54 The partition table has been altered!
接下来,我们对/dev/sdb的分区进行格式化:
1 [root@localhost ~]# mkfs.ext4 /dev/sdb1 2 [root@localhost ~]# mkfs.ext4 /dev/sdb2
格式化完成后,我们创立一个文件夹.进行挂载:
1 [root@localhost ~]# mkdir -p /mnt/boot 2 [root@localhost ~]# mount /dev/sdb1 /mnt/boot/
注意:新建的文件夹必需是/mnt/boot
2、安装grub至目的磁盘
我们直接用grub-install --root-directory=/mnt命令来安装.用这个命令会安装grub领导第二阶段的文件.
1 [root@localhost ~]# grub-install --root-directory=/mnt /dev/sdb 2 Probing devices to guess BIOS drives. This may take a long time. 3 Installation finished. No error reported. 4 This is the contents of the device map /mnt/boot/grub/device.map. 5 Check if this is correct or not. If any of the lines is incorrect, 6 fix it and re-run the script `grub-install'. 7 8 9 (fd0) /dev/fd0 10 (hd0) /dev/sda 11 (hd1) /dev/sdb 12 [root@localhost ~]# cd /mnt/boot 13 [root@localhost boot]# ls 14 grub lost+found 15 [root@localhost boot]# cd grub/ 16 [root@localhost grub]# ls 17 device.map fat_stage1_5 iso9660_stage1_5 minix_stage1_5 stage1 ufs2_stage1_5
18 xfs_stage1_5 e2fs_stage1_5 ffs_stage1_5 jfs_stage1_5 reiserfs_stage1_5 stage2 vstafs_stage1_5
我们可以来看一下二进制确认我们是否安装胜利:
1 [root@localhost ~]# hexdump -C -n 512 /dev/sdb 2 00000000 eb 48 90 00 00 00 00 00 00 00 00 00 00 00 00 00 |.H..............| 3 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 4 * 5 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 02 |................| 6 00000040 ff 00 00 20 01 00 00 00 00 02 fa 90 90 f6 c2 80 |... ............| 7 00000050 75 02 b2 80 ea 59 7c 00 00 31 c0 8e d8 8e d0 bc |u....Y|..1......| 8 00000060 00 20 fb a0 40 7c 3c ff 74 02 88 c2 52 f6 c2 80 |. ..@|<.t...R...| 9 00000070 74 54 b4 41 bb aa 55 cd 13 5a 52 72 49 81 fb 55 |tT.A..U..ZRrI..U| 10 00000080 aa 75 43 a0 41 7c 84 c0 75 05 83 e1 01 74 37 66 |.uC.A|..u....t7f| 11 00000090 8b 4c 10 be 05 7c c6 44 ff 01 66 8b 1e 44 7c c7 |.L...|.D..f..D|.| 12 000000a0 04 10 00 c7 44 02 01 00 66 89 5c 08 c7 44 06 00 |....D...f.\..D..| 13 000000b0 70 66 31 c0 89 44 04 66 89 44 0c b4 42 cd 13 72 |pf1..D.f.D..B..r| 14 000000c0 05 bb 00 70 eb 7d b4 08 cd 13 73 0a f6 c2 80 0f |...p.}....s.....| 15 000000d0 84 f0 00 e9 8d 00 be 05 7c c6 44 ff 00 66 31 c0 |........|.D..f1.| 16 000000e0 88 f0 40 66 89 44 04 31 d2 88 ca c1 e2 02 88 e8 |..@f.D.1........| 17 000000f0 88 f4 40 89 44 08 31 c0 88 d0 c0 e8 02 66 89 04 |..@.D.1......f..| 18 00000100 66 a1 44 7c 66 31 d2 66 f7 34 88 54 0a 66 31 d2 |f.D|f1.f.4.T.f1.| 19 00000110 66 f7 74 04 88 54 0b 89 44 0c 3b 44 08 7d 3c 8a |f.t..T..D.;D.}<.| 20 00000120 54 0d c0 e2 06 8a 4c 0a fe c1 08 d1 8a 6c 0c 5a |T.....L......l.Z| 21 00000130 8a 74 0b bb 00 70 8e c3 31 db b8 01 02 cd 13 72 |.t...p..1......r| 22 00000140 2a 8c c3 8e 06 48 7c 60 1e b9 00 01 8e db 31 f6 |*....H|`......1.| 23 00000150 31 ff fc f3 a5 1f 61 ff 26 42 7c be 7f 7d e8 40 |1.....a.&B|..}.@| 24 00000160 00 eb 0e be 84 7d e8 38 00 eb 06 be 8e 7d e8 30 |.....}.8.....}.0| 25 00000170 00 be 93 7d e8 2a 00 eb fe 47 52 55 42 20 00 47 |...}.*...GRUB .G| 26 00000180 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 65 |eom.Hard disk.Re| 27 00000190 61 64 00 20 45 72 72 6f 72 00 bb 01 00 b4 0e cd |ad. Error.......| 28 000001a0 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 00 00 00 |..<.u...........| 29 000001b0 00 00 00 00 00 00 00 00 d0 4c de 4f 00 00 00 01 |.........L.O....| 30 000001c0 01 00 83 fe 3f 0d 3f 00 00 00 4f 6e 03 00 00 00 |....?.?...On....| 31 000001d0 01 0e 83 fe ff ff 8e 6e 03 00 24 5d 7c 02 00 00 |.......n..$]|...| 32 000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 33 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 34 00000200
安装胜利.
3、复制内核文件和initrd文件
将内核文件和initrd文件复制到/dev/sdb下的boot目次中:
1 [root@localhost ~]# cp /boot/vmlinuz-2.6.32-696.el6.x86_64 /mnt/boot/ 2 [root@localhost ~]# cp /boot/initramfs-2.6.32-696.el6.x86_64.img /mnt/boot/
4、树立grub.conf文件
上面我们已经移植了内核和initrd文件,我们可以根据其版原来编写grub.conf文件:
1 [root@localhost ~]# vim /mnt/boot/grub/grub.conf 2 default=0 3 timeout=3 4 title linux owner 5 kernel /vmlinuz-2.6.32-696.el6.x86_64 root=UUID=1feac471-08c5-4b5b-aaff-bb6a1da60e26 selinux=0 init=/bin/bash 6 initrd /initramfs-2.6.32-696.el6.x86_64.img
注意,我们要把selinux给关掉,同时设定一下init,告诉内核不要再去找这个程序了,否则开机的时候会出现错误的~
5、创立一级目录并复制文件
至此,我们就缺目次和文件了~
创立开机后的一级目录,同时把/dev/sdb2挂载至/mnt/sysroot,使该目录作为根目录:
1 [root@localhost ~]# mkdir /mnt/sysroot 2 [root@localhost ~]# mkdir -pv /mnt/sysroot/{etc,tmp,var,usr,sys,proc,opt,home,root,dev,mnt,media} 3 mkdir: created directory `/mnt/sysroot/etc' 4 mkdir: created directory `/mnt/sysroot/tmp' 5 mkdir: created directory `/mnt/sysroot/var' 6 mkdir: created directory `/mnt/sysroot/usr' 7 mkdir: created directory `/mnt/sysroot/sys' 8 mkdir: created directory `/mnt/sysroot/proc' 9 mkdir: created directory `/mnt/sysroot/opt' 10 mkdir: created directory `/mnt/sysroot/home' 11 mkdir: created directory `/mnt/sysroot/root' 12 mkdir: created directory `/mnt/sysroot/dev' 13 mkdir: created directory `/mnt/sysroot/mnt' 14 mkdir: created directory `/mnt/sysroot/media'
复制文件,复制文件我们通过脚本执行,复制我们平时常用的命令即可,小编这里复制了ls,ifconfig,bash,reboot,rm,modprobe,mount,ip,mkdir,touch,cat,vi,less,shutdown,insmod.我们可以用tree查看一下这些命令的复制环境:
1 [root@localhost sysroot]# tree /mnt/sysroot/ 2 /mnt/sysroot/ 3 ├── bin 4 │ ├── bash 5 │ ├── cat 6 │ ├── ls 7 │ ├── mkdir 8 │ ├── mount 9 │ ├── rm 10 │ └── touch 11 ├── dev 12 ├── etc 13 ├── home 14 ├── lib64 15 │ ├── ld-linux-x86-64.so.2 16 │ ├── libacl.so.1 17 │ ├── libattr.so.1 18 │ ├── libaudit.so.1 19 │ ├── libblkid.so.1 20 │ ├── libcap.so.2 21 │ ├── libcrypt.so.1 22 │ ├── libc.so.6 23 │ ├── libdbus-1.so.3 24 │ ├── libdl.so.2 25 │ ├── libfreebl3.so 26 │ ├── libgcc_s.so.1 27 │ ├── libm.so.6 28 │ ├── libnih-dbus.so.1 29 │ ├── libnih.so.1 30 │ ├── libnsl.so.1 31 │ ├── libpcre.so.0 32 │ ├── libpthread.so.0 33 │ ├── libresolv.so.2 34 │ ├── librt.so.1 35 │ ├── libselinux.so.1 36 │ ├── libsepol.so.1 37 │ ├── libtinfo.so.5 38 │ ├── libutil.so.1 39 │ └── libuuid.so.1 40 ├── lost+found 41 ├── media 42 ├── mnt 43 ├── opt 44 ├── proc 45 ├── root 46 ├── sbin 47 │ ├── ifconfig 48 │ ├── insmod 49 │ ├── ip 50 │ ├── modprobe 51 │ ├── reboot 52 │ └── shutdown 53 ├── sys 54 ├── tmp 55 ├── usr 56 │ ├── bin 57 │ │ ├── less 58 │ │ └── vim 59 │ └── lib64 60 │ ├── libgpm.so.2 61 │ └── perl5 62 │ └── CORE 63 │ └── libperl.so 64 └── var 65 66 20 directories,42 files
很明显我们都复制胜利了~
附:复制命令的剧本源代码
1 #!/bin/base 2 #---------------------------------- 3 #Filename:copycmd.sh 4 #Revision:1.0 5 #Date:2017-09-14 6 #Author:Keer 7 #Email:893348728@qq.com 8 #Website:http://www.cnblogs.com/keerya/ 9 #Description:复制命令到指定目录 10 #---------------------------------- 11 12 #定义变量 13 destdir=/mnt/sysroot 14 SETCOLOR_FAILURE="echo -en \\033[1;35;5m" 15 SETCOLOR_norMAL="echo -en \\033[0m" 16 17 echo_jiantou() { 18 echo -en \\033[40G 19 $SETCOLOR_FAILURE 20 } 21 22 echo_copy() { 23 echo -en \\033[80G 24 $SETCOLOR_FAILURE 25 echo -n $"复制完成!" 26 $SETCOLOR_norMAL 27 } 28 29 #定义函数 30 #复制命令 31 copy_cmd(){ 32 # 定义变量 33 local cmd_path=`which --skip-alias $cmd` 34 local cmd_dir=`dirname $cmd_path` 35 local cmd_destdir=$destdir$cmd_dir 36 if [ ! -d $cmd_destdir ] ;then 37 mkdir -pv $cmd_destdir &> /dev/null 38 fi 39 cp $cmd_path $cmd_destdir &> /dev/null 40 echo -e "\t$cmd_path `echo_jiantou` \t $cmd_destdir `echo_copy` " 41 } 42 #复制库文件 判断库文件是否存在,若存在,跳过该次循环;如不存在,判断库文件所在目录是否存在,复制库文件;若不存在,则新建目录并复制库文件 cp -v 显示命令执行的详细操作 43 copy_libfile(){ 44 local cmd_path=`which --skip-alias $cmd` 45 local lib_list=`ldd $cmd_path |egrep -o "/.* " ` 46 for i in $lib_list ;do 47 local lib_dir=$destdir$i 48 local lib_destdir=$destdir`dirname $i` 49 echo -e "\t$i `echo_jiantou` \t $lib_destdir `echo_copy` " 50 if [ -e $lib_dir ];then 51 continue 52 elif [ -d $lib_destdir ];then 53 cp $i $lib_destdir 54 else 55 mkdir -pv $lib_destdir &> /dev/null 56 cp $i $lib_destdir 57 fi 58 done 59 } 60 #若/mnt/sysroot不存在,则创立 61 if [ ! d $destdir ];then 62 mkdir $destdir 63 fi 64 65 #死循环,清空屏幕 66 while true ; do 67 tput clear 68 #正式: 69 cat <<-EOF 70 ********************************************************************** 71 *** 命令复制脚本 *** 72 *** 请输入一个命令 *** 73 *** 按q或quit退出脚本 *** 74 ********************************************************************** 75 EOF 76 77 read -p "Please input a execute command:" cmd 78 if [ "$cmd" == 'q' -o "$cmd" == 'quit' ];then 79 unset cmd destdir 80 break 81 fi 82 # 判断输入的命令是否存在 83 if [ -n "$cmd" ];then 84 which --skip-alias "$cmd" &> /dev/null 85 if [ $? -eq 0 ];then 86 copy_cmd $cmd 87 copy_libfile $cmd 88 else 89 echo "$cmd is not exist" 90 fi 91 else 92 echo "Please enter at leastone command" 93 fi 94 echo -e "Please enter \\033[31;1menter\\033[0m and we continue" 95 read input 96 97 done
6、复制网卡驱动
我们基本工作已经完成了,如果想使这个虚拟机带有网卡功能,我们就必需把网卡驱动拷过来,具体操作如下:
1)查询网卡具体信息:
1 [root@localhost sysroot]# modinfo e1000 2 filename: /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko 3 version: 7.3.21-k8-NAPI 4 license: GPL 5 description: Intel(R) PRO/1000 Network Driver 6 author: Intel Corporation,<linux.nics@intel.com> 7 srcversion: A911791C4EFC2A93BCFCF6A 8 alias: pci:v00008086d00002E6Esv*sd*bc*sc*i* 9 alias: pci:v00008086d000010B5sv*sd*bc*sc*i* 10 alias: pci:v00008086d00001099sv*sd*bc*sc*i* 11 alias: pci:v00008086d0000108Asv*sd*bc*sc*i* 12 alias: pci:v00008086d0000107Csv*sd*bc*sc*i* 13 alias: pci:v00008086d0000107Bsv*sd*bc*sc*i* 14 ……
2)把网卡模块的路径复制到/mnt/sysroot的库文件下:
1 [root@localhost sysroot]# cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib64/
以上,我们的操作全体完成.现在我们就可以关机,然后把/dev/sdb这个硬盘拆下来,放到新的虚拟机上运行了~
五、测试开机
我们创建一个新的虚拟机,启动的时候会带一个硬盘,我们不用它的,删掉再把我们本身定义的硬盘加进去:
此时,我们做好的硬盘已经加进去了.我们可以试试能不克不及启动了,如果虚拟机可以正常开启,就说明我们的实验成功~
六、实现网络功效
由于复制命令的时候忘记复制ping了……所以我们用另一台机械来ping一下这个ip地址:
可以ping通~
至此,我们已经完成了私人订制Linux的全体操作,同时我们的自制Linux也可以联网啦~
所有实验圆满胜利!撒花✿✿ヽ(°▽°)ノ✿
本文永远更新链接地址:
更多LINUX教程,尽在小编PHP学院专栏。欢迎交流!
Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载五)Linux系统的对话方式
本篇是Linux小白最佳实践第5篇,目的就是让白菜们了解Linux进程之间是如何对话的。之前连载的几篇,在微信上引起了很多的反响,有人也反映图多文字少,感觉没有干货.本篇选了大部分是实战讲解的"管道与重定向"进行连载,希望让读者能真正学到东西.
8.3管道与重定向
管道与重定向是Linux系统进程间的一种通讯方式,在系统管理中有着举足轻重的作用。绝大部分Linux进程运行时需要使用3个文件描述符:标准输入、标准输出和标准错误输出,对应的序号是0、1和2。一般来说,这3个描述符与该进程启动的终端相关联,其中输入一般为键盘。重定向和管道的目的是重定向这些描述符。管道一般为输入和输出重定向的结合,一个进程向管道的一端发送数据,而另一个进程从该管道的另一端读取数据。管道符是“|”。
8.3.1标准输入与输出
执行一个Shell命令行时通常会自动打开3个标准文件,如图8.3所示。
图 8.3 Shell执行时对应的3个标准文件
标准输入文件stdin,通常对应终端的键盘,标准输出文件stdout和标准错误输出文件stderr,这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而错误信息将打印到标准错误文件。
现以cat 命令为例来介绍标准输入与输出。cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出文件,一般对应终端屏幕,如示例8-7所示。
【示例8-7】
[root@CentOS ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:7F:08:9D
TYPE=Ethernet
UUID=3268d86a-3245-4afa-94e0-f100a8efae44
ONBOOT=yes
BOOTPROTO=static
BROADCAST=192.168.3.255
IPADDR=192.168.3.100
NETMASK=255.255.255.0
该命令会把文件ifcfg-eth0的内容显示到标准输出即屏幕上。如果cat命令行中没有参数,会从标准输入文件中一般对应键盘读取数据,并将其送到标准输出文件中,如示例8-8所示。
【示例8-8】
cat不带任何参数时会从标准输入中读取数据并显示到标准输出文件中
[root@CentOS ~]# cat
mycontent
mycontent
hello
hello
用户输入的每一行信息都会立刻被cat命令输出到屏幕上。用户对输入的数据无法做进一步地处理。为解决这个问题,Linux操作系统为输入、输出的传送引入了另外两种机制:输入/输出重定向和管道。
8.3.2输入重定向
输入重定向是指把命令或可执行程序的标准输入重定向到指定的文件中。也就是输入可以不来自键盘,而来自一个指定的文件。输入重定向主要用于改变一个命令的输入源。
例如上个示例中的cat命令,当键入该命令后并没有任何反应,从键盘输入的所有文本都出现在屏幕上,直至按下Ctrl+d组合键,命令才会终止,可采用两种方法:一种是为该命令给出一个文件名,另外一种方法是使用输入重定向。
输入重定向的一般形式为:命令<文件名,输入重定向符号为“<”。示例8-9演示了此种情况,此示例中的文件已不是参数,而是标准输入。
【示例8-9】
[root@CentOS ~]# cat< /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:7F:08:9D
TYPE=Ethernet
UUID=3268d86a-3245-4afa-94e0-f100a8efae44
ONBOOT=yes
BOOTPROTO=static
BROADCAST=192.168.3.255
IPADDR=192.168.3.100
NETMASK=255.255.255.0
[root@CentOS ~]# wc </etc/sysconfig/network-scripts/ifcfg-eth0
99 188
还有一种输入重定向,如示例8-10所示。
【示例8-10】
[root@CentOS ~]# cat <<EEE
line1
line2
line3
EEE
line1
line2
line3
标识符“EEE”表示输入开始和结束的分隔符,此名称不是固定的,可以使用其他字符串,主要是一个分隔的作用。文档的重定向操作符为“<<”。将一对分隔符之间的正文重定向输入命令。例如上述示例中将“EEE”之间的内容作为正文,然后作为输入传给cat命令。由于大多数命令都以参数的形式在命令行中指定输入文件的文件名,所以输入重定向并不经常使用。使用某些不能利用文件名作为输入参数的命令,需要的输入内容又存在一个文件里时,可以用输入重定向来解决问题。
8.3.3输出重定向
输出重定向是指把命令或可执行程序的标准输出或标准错误输出重新定向到指定文件中。命令的输出不显示在屏幕上,而是写入到指定的文件中,以便以后的问题定位或其他用途。输出重定向比输入重定向更常用,很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显示,那么将输出重定向到一个文件中,然后再用文本编辑器打开这个文件,就可以查看输出信息,如果想保存一个命令的输出,也可以使用这种方法。还有,输出重定向可用于把一个命令的输出当作另一个命令的输入,还有一种更简单的方法,就是使用管道,管道将在下节介绍。
输出重定向的一般格式为:命令>文件名,即输出重定向符号为“>”,使用方法如示例8-11所示。
【示例8-11】
将输出重定向到文件
[root@CentOS ~]# ls -l / >dir.txt
[root@CentOS ~]# head-n5 dir.txt
total 114
dr-xr-xr-x.2 root root4096 Jun8 00:54 bin
dr-xr-xr-x.5 root root1024 Apr 13 00:33 boot
dr-xr-xr-x.7 root root4096 Mar6 02:33 cdrom
drwxr-xr-x.18 root root4096 Jun8 01:07 data
用“ls -l”命令显示当前的目录和文件,并把结果输出到当前目录下的dir.txt文件内,而不是显示在屏幕上。查看dir.txt文件的内容可以使用cat命令,注意是否与直接使用“ls -l”命令时的显示结果相同。
注意:如果“>”符号后面的文件已存在,那么这个文件将被覆盖。
为避免输出重定向命令中指定的文件内容被覆盖,Shell提供了输出重定向的追加方法。输出追加重定向与输出重定向的功能类似,区别仅在于输出追加重定向的功能是把命令或可执行程序的输出结果追加到指定文件的最后,这时文件的原有内容不被覆盖。追加重定向操作符“>>”,格式为:命令>>文件名,使用方法如示例8-12所示。
【示例8-12】
使用重定向追加文件内容
[root@CentOS ~]# ls-l /usr >>dir.txt
上述命令的输出会追加在文件的末位,原来的内容不会被覆盖。
8.3.4错误输出重定向
和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号“2>”或追加符号“2>>”标识可以对错误输出重定向。如要将程序的任何错误信息打印到文件中,以备问题定位,可以使用示例8-13中的方法。
【示例8-13】
文件不存在,此时产生标准错误输出,一般为屏幕。
[root@CentOS ~]# ls /xxxx
ls: cannot access /xxxx: No such file or directory
编号1表示重定向标准输出,但并不是错误输出吗,此时输出仍打印到屏幕上
[root@CentOS ~]# ls /xxxx 1>stdout
ls: cannot access /xxxx: No such file or directory
分别重定向标准输出和标准错误输出
[root@CentOS ~]# ls /xxxx 1>stdout 2>stderr
查看文件内容,和打印到屏幕的结果一致
[root@CentOS ~]# cat stderr
ls: cannot access /xxxx: No such file or directory
将标准输出和标准错误输出都定向到标准输出文件
[root@CentOS ~]# ls /xxxx 1>stdout 2>&1
[root@CentOS ~]# cat stdout
ls: cannot access /xxxx: No such file or directory
另外一种重定向的语法
[root@CentOS ~]# ls /xxxxx &>stderr
[root@CentOS ~]# ls /xxxxx/ &>stdout
查看输出文件内容
[root@CentOS ~]# head stdout
ls: cannot access /xxxxx: No such file or directory
/:
bin
boot
cdrom
由于/xxxx目录不存在,所以没有标准输出,只有错误输出。上述示例首先演示了错误输出的内容,当标准输出被重定向后,标准错误输出并没有被重定向,所以错误输出被打印到屏幕上。使用“2>stderr”将错误输出定位到指定的文件中,另外一种方法是将标准错误输出重定向到标准输出,执行后在屏幕上看不到任何内容,用cat命令查看文件的内容,看到上面命令的错误提示。还可以使用另一个输出重定向操作符“&>”,其功能是将标准输出和错误输出送到同一文件中。表8-3列出了常用的输入输出重定向方法。
表8.3常用的重定向含义
参数
说明
command > filename
把标准输出重定向到一个文件
command >> filename
把标准输出追加重定向到一个文件
command 1> fielname
把标准输出重定向到一个文件
command > filename 2 > &1
把标准输出和标准错误输出重定向到一个文件
command 2 > filename
把标准错误输出重定向到一个文件中
command < filename > filename2
以filename为标准输入,filename2为标准输出
command < filename
把filename作为命令的标准输入
command << delimiter
从标准输入读入数据,直到遇到delimiter为止
8.3.5管道
将一个程序或命令的输出作为另一个程序或命令的输入,有两种方法:一种是通过一个临时文件将两个命令或程序结合在一起;另外一种方法是使用管道。
管道可以把一系列命令连接起来,可以将前面命令的输出作为后面命令的输入,第1个命令输出利用管道传给第2个命令,第2个命令的输出又会作为第3个命令的输入,以此类推。如果命令行中未使用输出重定向,显示在屏幕上的是管道行中最后一个命令的输出或其他命令执行异常时导致的错误输出。使用管道符“|”来建立一个管道行,用法如示例8-14所示。
【示例8-14】
[root@CentOS ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADD
IPADDR=192.168.3.100
管道后接管道
[root@CentOS ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0|grep IPADD|awk -F= ''{print $2}''
192.168.3.100
上述示例cat命令输出的内容以管道的形式发送给grep命令,然后通过字符串匹配查找文件内容。
喜欢可以购买《超容易的Linux系统管理入门书》。写书评得奖品。
今天关于几个小步聚打造安全Linux系统和安全 linux系统的介绍到此结束,谢谢您的阅读,有关linux – 用于生产的安全LAMP服务器、linux下PHP错误警报开启与关闭 linux php exec 执行不了 linux系统 linux系统下、LINUX实战:打造属于你自己的Linux系统、Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载五)Linux系统的对话方式等更多相关知识的信息可以在本站进行查询。
本文标签: