今天上午,强迫症的老毛病犯了,写写博客突然觉得,咦这网站怎么这么慢呀!!!
不行,我非得给他优化优化,先是登入服务器,把MySQL和PHP能开的缓存全给开了,又给网站做了个动静分离,将静态文件放到CDN节点上。
然而,这网站怎么还是这么慢阿!!!
肯定是我网站运行时间久了,数据库里的冗余数据太多,还有就是网站有很多无用的功能会拖慢速度,我得给数据库清理清理~能关的花哨功能统统关掉~~~~注:此时洁癖的老毛病也犯了,其实我网站的数据库加上索引一共才5MB左右,简直是微型,即便有垃圾数据也完全不会影响性能,根本用不到优化。。。
在网上随便找了个网站优化工具,一顿乱优化之后~刺激了,我博客文章里面的引用链接显示不正常了,变得不伦不类的~哇,头好方,我好怀念它曾经的模样~不行,数据回滚吧,我要回到“优化”前。
因为之前在服务器上有运行过脚本,每天都会增量备份网站文件及数据库到阿里云OSS存储上,所以我很淡定的登录阿里云打算将备份数据下载下来,然而,现实总爱和我开玩笑。。。
因为增量备份只会将新增及更新过的文件上传到OSS,而并不会将本地删除过的文件也从OSS上删除,这会导致OSS上的文件体积越来越大,也不利于网站文件的恢复。所以我自作聪明地为OSS上的文件设置了文件的生存周期,按照设定,每7天OSS会自动删除存储内的所有文件。而今天正好是OSS删除七天前上传的文件的日子。。。我只能说,人点背的时候,喝凉水都塞牙缝。。。
还好,数据库因为是每天整体备份而非增量备份,昨天的数据还能找到,至于网站程序,,,我只能很无奈的重新部署了,整整一个上午被浪费在部署和调试网站上,时间成本不可谓不大。比较庆幸的是,今天是网站程序的备份文件没了,如果是数据库的数据备份没了,那我真的哭都没处哭。
数据安全,重中之重,一定要勤备份!勤备份!勤备份!数据安全不仅仅要考虑存储硬件的容错性,更要为日后的数据回滚多做准备!!!
事后,我果断将曾经的文件增量备份修改为整体打包备份,虽然这样会消耗很多服务器资源,但为了数据安全,值了~~~
MySQL基本命令介绍
关于本篇文章:
本文中只包含最常用的MySQL命令,也是应该全部掌握的MySQL命令,我将以一个简单的案例来对这些命令做简要说明。
MySQL介绍:
MySQL是优秀的开源关系型数据库,最初由瑞典MySQL AB 公司开发,目前属于Oracle旗下产品。
基本数据库管理命令介绍:
注:以下内容中的“mysql>”为MySQL客户端的命令提示符标志。另外,MySQL命令建议使用大写字母来书写,因为我个人习惯的问题,本篇文章中采用小写。
创建一个名为db_name的数据库。
mysql>create database db_name;
查看当前已存在的数据库。
mysql>show databases;
MySQL返回信息:

创建一个新用户,user_name,密码为ibadboy.net。
mysql>create user user_name@localhost identified by "ibadboy.net";
设置用户权限,使其对db_name数据库拥有全部权限。
mysql>grant all privileges on db_name.* to user_name@localhost identified by "ibadboy.net";
查看刚刚添加的用户。
mysql>select host,user from mysql.user;
mysql>show grants for user_name@localhost;

使用新添加的user_name用户重新登录数据库 。
[root@localhost ~]# mysql -u user_name -p
选择db_name数据库,其后的建表查表以及插入数据等操作都会在此数据库下进行。
mysql>use db_name;
创建一个名为user的表,其拥有三个字段,分别是ID(int型)、name(char型)、password(char型),其中ID是主键且可自增。
mysql>create table user(ID int auto_increment primary key,name char(10),password char(64));
查看数据库中已有的表。
mysql>show tables;
MySQL返回信息:

查看user表的结构。
mysql>desc user;
MySQL返回信息:

向user表中插入两行数据。
mysql>insert into user values(0,'myuser1','123456'); mysql>insert into user values(1,'myuser2','654321');
查看user表中所有字段的数据。
mysql>select * from user;
MySQL返回信息:

只查看user表中的name字段的数据。
mysql>select name from user;
MySQL返回信息:

更新user表中的name字段中的“myuser1”为“admin”,where关键字后面是替换条件。
mysql>update user set name='admin' where name='myuser1';
再次查看user表中的name字段发现“myuser1”已变为“admin”。

向user表中插入字段sex(varchar型)。
mysql>alter table user add sex varchar(6);
查看user表的表结构,可以发现,sex字段已加入其中。

查看user表中的数据。

此时,在之前插入的两行数据中,sex字段的值都是NULL(空值),现在我分别在其中插入“male”和“female”两个值。这里以主键“ID”来作为替换条件,以此达到只修改sex字段在某一行的值的效果。
mysql>update user set sex='male' where ID=0; mysql>update user set sex='female' where ID=1;
查询user表中sex字段的值,已经变成了预想的样子。

在user表的“password”字段的后面插入一个字段“age”,类型为int。其中,after关键字后面指定的是新加字段要跟随的字段。
mysql>alter table user add age int after password;
查看user表的表结构,age字段已添加至指定位置。

基本的数据库操作就这些,下面我将一步步的删除掉我们刚刚添加的字段、表及数据库。
先删除“age”字段。
mysql>alter table user drop column age;
查看表结构,字段已删除。

删除user这个数据表。
mysql>drop table user;
查看数据库中已有的表,因数据库已空,所以这里没有列出任何内容。

删除db_name数据库。
mysql>drop database db_name;
查看当前已存在的数据库,发现此时db_name已被删除。

切换到MySQL的root用户身份上,删除user_name用户。
mysql>drop user user_name@localhost
ABR与ASBR的区别
ABR(区域边界路由器):位于一个或多个OSPF区域边界上、将这些区域连接到主干网络的路由器。ABR被认为同时是OSPF主干和相连区域的成员。因此,它们同时维护着描述主干拓扑和其他区域拓扑的路由选择表。
ASBR(自治系统边界路由器):ASBR位于OSPF自主系统和非OSPF网络之间。ASBR可以运行OSPF和另一路由选择协议(如RIP),把OSPF上的路由发布到其他路由协议上。ASBR必须处于非存根OSPF区域中。
Linux下使用SSH客户端连接Linux服务器提示:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!的解决方法。
问题描述:
Linux下使用SSH客户端连接Linux服务器的时候抛出类似如下错误。

产生原因:
这是因为之前连接过一台与当前连接的Linux服务器使用相同IP但公钥不同的Linux服务器。系统中已经存储了此服务器的公钥,故再次连接时发现公钥变更,ssh客户端主动拒绝了连接。
解决方法:
清空~/.ssh/known_hosts文件,此文件中存放SSH客户端曾经连接的服务器的公钥信息。
echo “”> ~/.ssh/known_hosts
再次连接Linux服务器,SSH客户端会重新询问是否要接受服务器的公钥。
交换机中使VLAN永久UP的方法
在做交换机实验的时候,可能会需要ping一个VLAN接口来做连通性测试,但VLAN中的端口必须连接设备之后VLAN才会是UP状态,那如何才能不连接设备还能方便的测试连通性呢?
S4600-28P-SI(config)#vlan 200 S4600-28P-SI(config-vlan200)#sw int e1/0/5-6 Set the port Ethernet1/0/5 access vlan 200 successfully Set the port Ethernet1/0/6 access vlan 200 successfully S4600-28P-SI(config-vlan200)#int e1/0/5 S4600-28P-SI(config-if-ethernet1/0/5)#loopback //此处,将VLAN中的某个端口配置为loopback端口,使其永久UP S4600-28P-SI(config-if-ethernet1/0/5)# %Jan 01 00:07:48 2006 %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet1/0/5, changed state to UP %Jan 01 00:07:49 2006 %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan200,changed state to UP S4600-28P-SI(config-if-ethernet1/0/5)#int vlan 200 S4600-28P-SI(config-if-vlan200)#ip add 192.168.200.1 255.255.255.0 S4600-28P-SI(config-if-vlan200)#sho ip int b Index Interface IP-Address Protocol 11001 Vlan1 unassigned down 11200 Vlan200 192.168.200.1 up 17500 Loopback 127.0.0.1 up
测试VLAN200接口是否可以ping通。
S4600-28P-SI#ping 192.168.200.1 Type ^c to abort. Sending 5 56-byte ICMP Echos to 192.168.200.1, timeout is 2 seconds. !!!!! //已ping通 Success rate is 100 percent (5/5), round-trip min/avg/max = 0/0/0 ms S4600-28P-SI#
可以ping通,则目的达成。
此时,观察交换机端口的指示灯,可以发现,即便没接网线,其依然会神奇的亮起来。

交换机端口安全与AM的区别
开启端口安全后,此台主机只能与绑定其MAC地址的端口通信,但绑定了其MAC地址的端口依然可以与其他主机通信。
而开启AM后,只有端口的AM地址池中存在其MAC地址的主机才可以与端口通信,且主机的IP也必须与池中绑定的相同,被加入到某一端口的AM地址池中的主机依然可以同其他未开启AM的端口通信。
Apache配置HTTPS访问
介绍:
HTTPS协议是加密后的HTTP协议,浏览器和服务器间的通信被加密传输,有效的防止了网页劫持并保护了用户的数据安全。HTTPS加密会使用到SSL证书,本例中使用OpenSSL这个开源软件来生成SSL证书做测试用。网站正式上线后需去专门的CA机构申请SSL证书,自己生成的证书是不被浏览器信任的。
安装软件:
[root@localhost ~]# yum install -y openssl //安装OpenSSL软件包用于生成SSL证书,此软件包通常已随系统默认安装。 [root@localhost ~]# yum install -y httpd //安装Apache。 [root@localhost ~]# yum install -y mod_ssl //安装Apache的SSL加密模块。
生成证书:
使用OpenSSL在/etc/httpd/ssl目录下生成一个自签名证书(存储位置随意)。
[root@localhost ~]# mkdir /etc/httpd/ssl //创建SSL存储文件夹 [root@localhost ~]# openssl req -newkey rsa:2048 -nodes -keyout /etc/httpd/ssl/ssl.key -x509 -days 365 -out /etc/httpd/ssl/ssl.crt //生成SSL证书文件
随后程序会依次要求输入所在的国家、地区、城市等等的信息,因为我们是做测试用的,这里全部直接回车即可。但是在下图中红色箭头所指的位置上要填上启用HTTPS的站点的域名,否则客户端浏览器可能会因为签名域名和站点实际域名不同而断开链接。

查看刚刚生成的证书。
[root@localhost ~]# ls /etc/httpd/ssl/

其中,.crt文件是证书文件,.key文件是私钥文件。
Apache配置部分:
配置Apache的ssl.com子配置文件,此配置文件必须是安装过mod_ssl模块才会有。
[root@localhost ~]# vim /etc/httpd/conf.d/ssl.conf
我看到网上很多教程说,在修改/etc/httpd/conf.d/ssl.conf子配置文件前还要在/etc/httpd/conf/httpd.conf主配置文件中引入mod_ssl模块。这里特殊说明一下,在CentOS 6.5下/etc/httpd/conf.d/ssl.conf子配置文件中就已经引入了mod_ssl模块,不需要再另外引入,另外,此配置文件中也默认开启了对443端口(HTTP使用80端口传输,HTTPS使用443端口传输)的监听。

本例中修改成如下图所示,“*”代表监听所有IP地址,虚拟主机所使用的域名必须使用DNS服务器解析到Apache服务器的IP上。

在105行和112行找到下图中的选项,将这辆个选项的参数修改为证书文件及私钥文件的存储位置。

创建网站首页文件。
[root@localhost ~]# echo 'hello,world!' > /var/www/html/index.html
如果在启用HTTPS访问的同时还要禁止HTTP访问可以做如下修改。
编辑Apache主配置文件。
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
方法1:暴力修改法。
转到第136行左右位置将监听80端口的选项直接禁用掉,这将会影响主配置文件中所有的虚拟主机。

修改后如图。

方法2:将需要禁用HTTP访问的虚拟主机配置信息删掉即可,如下图就是一个监听80端口(HTTP使用80端口)的虚拟主机配置信息。

最后,保存配置文件,并在保证防火墙及selinux均已关闭的情况下重启Apache。
[root@localhost ~]# service httpd restart
测试:
此时,通过HTTP协议已无法访问网站。

HTTPS协议正常访问网站,但浏览器会提示证书错误,因为是自签证书所以并不会被浏览器所信任,此处可不予理会。

Apache配合MySQL做访问认证
介绍:
默认情况下,任何用户都可以访问由Apache所承载的网站,但如果网站管理员想要只有通过身份认证的用户才能访问网站要怎样做呢?
当然,这个需求可以使用动态网页设计语言来实现,但本篇文章中我来介绍下如何使用Apache内置的身份认证来满足此需求。
安装软件包:
# yum install -y mysql-server //安装MySQL数据库,用于存放用户身份信息 # yum install -y httpd //安装Apache # yum install -y mod_auth_mysql //为Apache安装mod_auth_mysql模块,使其可以使用MySQL中存放的用户信息做认证
MySQL配置部分:
启动mysql服务器。
# service mysqld start
修改默认root密码(此root用户是MySQL的管理员账户,而非Linux系统的root用户)。
# mysqladmin -u root -p password 123456
之后会弹出提示,要求输入原root密码,安装MySQL后默认为空,直接回车即可。
若是MySQL5.6及以上版本,默认root密码不为空而是一个随机字符串,存放在~/.mysql_secret文件中。
使用root用户登录MySQL服务器,回车后会要求键入root密码。
# mysql -u root -p
随后转到MySQL的命令提示符下,如下图。

创建一个数据库:auth_db。
mysql>create database auth_db;
选中数据库。
mysql>use auth_db;
在其中新建一个数据表:user,其表结构如下图。

mysql>create table user(ID int,Name varchar(10),Birthday datetime,Sex char(8),Password char(64),primary key(ID));
查看刚刚添加的数据表的表结构。
mysql>desc user;

向表中添加两位用户的数据,要求如下。
![]()
两位用户的口令与用户名相同。
mysql>insert into user values(0,'myuser1','1996-7-1','male','myuser1'); mysql>insert into user values(1,'myuser2','1997-9-1','female','myuser2');
查看刚刚添加的数据。
mysql>select * from user;

加密密码字段。
mysql>update user set password=encrypt(password);
查看加密后的密码字段。

至此,MySQL配置部分完成。
Apache配置部分:
编辑Apache主配置文件,添加一个虚拟主机。
# vim /etc/httpd/conf/httpd.conf
转到最后一行,可以看到如下内容,取消其前方的注释,并删除多余行(是否删除看具体需求,此处为了演示方便,除了必要选项之外全部删除),同时对选项的参数进行适当修改。

处理完后,如下。

上图中,DocumentRoot选项配置网站主目录,ServerName选项配置网站域名。注:此处的域名需使用DNS服务器解析到Apache服务器的IP上,否则无法使用域名访问。
创建网站首页文件。
# echo 'hello,world!' > /var/www/html/index.html
编辑Apache的auth_mysql.conf子配置文件,此配置文件必须是安装过mod_auth_mysql模块才会有。
# vim /etc/httpd/conf.d/auth_mysql.conf
转到第26行左右位置,可以看到如下内容,去掉其前方注释,并按实际情况修改各选项的参数。

本例中,修改后如下图。

保存并退出后,在保证防火墙和selinux均关闭的情况下重启Apache服务,使配置文件生效。
# service httpd restart
在客户机验证配置,访问网站域名后弹出认证提示框:

正确输入账号名和密码后成功访问网站:

samba中实现共享中所有创建的文件都属于指定用户的功能
方法很简单,但很实用。
在需要指定的共享中加入。
force user = 要指定的用户
例如,要求老师得能在“孙锡源”这个学生的共享文件夹中创建文件,但老师创建的文件所有者是老师本人,孙锡源没权限修改及删除文件。那么就可以加一行“force user = sxy”,让老师创建的文件的所有者也是孙锡源本人,这样孙锡源就可以操作文件了。

记录一个Linux下使用usermod修改用户家目录后产生的奇怪问题
问题描述:
学校机房的samba服务器中本来所有用户都是存放在/home目录下的,但是我在为用户统一修改权限时发现这样极不方便。因为老师和学生的权限肯定是不同的,但他们又都在同一个目录下,修改起来很麻烦。
我的解决办法是:在/home目录下新建一个teacher目录用来存放教师的用户家目录,再新建一个student用来存放学生的用户家目录,这样下次修改权限时就可以直接用通配符来分别为教师和学生修改了。
既然有了想法,就开始实施吧。
我选择使用usermod命令一个一个的辛苦的为每个用户修改家目录,而不是简单粗暴地修改/etc/passwd文件。
以下以“sxy”这个用户来做演示,注:此时我的工作目录在/home下,且/home/teacher与/home/student目录已创建。
usermod -md student/sxy sxy
修改后,查看/home下已经没有sxy这目录了,此目录已被迁移至/home/student下。
然而, 重点来了!!!!
虽然成功的迁移了目录,但是我用windows登陆samba服务器的时候点sxy这个共享目录竟然提示我“找不到路径”???注:此处的sxy共享是使用[homes]配置的。
排错过程:
我的第一步:怀疑,是不是因为samba的用户数据库中记录的还是旧的文件路径,要将用户重新加入数据库才能解决问题?
结果:用户重新加入samba数据库后问题依旧。
第二步:怀疑,是不是samba的[homes]字段必须使用默认的家目录路径,也是就是存放在/home下,不能自定义家目录?
结果:新建了一个系统用户“test”,创建用户时指定其家目录为/home/student/test并将其加入samba用户数据库中后,发现其家目录的共享可正常访问。
第三步:陷入沉思~~~随后怀疑,是不是因为usermod命令修改用户家目录改的不够彻底(比如说,某些系统配置文件中的用户家目录的路径还是以前的)。
结果:删除一个samba家目录共享无法访问的用户“lzl”,并在重新建立时使用相同的用户名,且指定家目录为/home/student/lzl同时加入到samba用户数据库中后samba的家目录共享又可以正常访问了。
第四步:感觉上,第三步中貌似找到了问题的原因。就在我准备一个个删除并重建用户时突然一个想法冒出来,我是不是可以切换到一个之前修改过家目录的“问题用户”上,来看看其家目录到底变没变。
结果:使用su – sxy命令尝试切换到“sxy”这个用户上时抛出错误:
![]()
第五步:我注意到,第四步的报错中的路径是相对路径而不是绝对路径,马上查看/etc/passwd文件,发现,所有的“问题用户”的家目录都是相对路径而正常用户都是绝对路径。
问题用户:
![]()
正常用户:
![]()
至此,问题的原因彻底搞清楚了,那就是因为我在使用usermod修改家目录时使用的是相对路径。
解决办法:使用usermod命令重新修改为绝对路径,或直接改/etc/passwd文件。
samba配置文件中的常用变量
先简单解释下什么是samba配置文件中的变量。

上图中,所有以“%”开头的字母都是变量(已用红色箭头指出)。各个变量代表的值已在下方标注。
%S = 当前服务名(如果有的话) %P = 当前服务的根目录(如果有的话) %u = 当前服务的用户名(如果有的话) %g = 当前用户说在的主工作组 %U = 当前对话的用户名 %G = 当前对话的用户的主工作组 %H = 当前服务的用户的Home目录 %v = Samba服务的版本号。 %h = 运行Samba服务机器的主机名 %m = 客户机的NETBIOS名称 %L = 服务器的NETBIOS名称 %M = 客户机的主机名 %N = NIS服务器名 %p = NIS服务的Home目录 %R = 说采用的协议等级(值可以是CORE, COREPLUS, LANMAN1, LANMAN2,NT1) %d = 当前服务进程的ID %a = 客户机的结构(只能识别几项:Samba,WfWg,WinNT,Win95) %I = 客户机的IP %T = 当前日期和时间
以上内容摘录自:http://blog.csdn.net/xkq_lyx/article/details/12905863
Linux下为普通用户开启sudo命令
介绍 :
Linux下,root用户的权限非常大,root的密码自然不能轻易的告诉别人,但如果又必须使用root权限,那要怎么办呢?这里就要使用“sudo”这个命令了。这个命令是系统管理员允许普通用户以root权限执行几个或全部命令的工具。
为普通用户开启sudo命令的方法:
默认情况下,普通用户是无权使用sudo命令的,需要管理员为其开启使用命令的权限。
下图中,红箭头所指的就是普通用户使用sudo来执行命令后抛出的错误。

为普通用户启用sudo命令:
编辑sudo的配置文件。
vim /etc/sudoers
在第105和108行左右的位置可以看到如下图中红框框起来的内容,这两处就是为某用户开启sudo命令的配置模板。二处的区别在于,使用105行的配置模板配置后用户使用sudo命令需要输入用户本身的密码,而108行处的模板则不需要输入密码,二者可以同时配置。

例如,下图中,为user1、user2、user3、user4这四个系统用户开启了sudo命令,其中user1和user2在使用sudo命令时需要输入密码,而user3和user4则不需要。

此时再分别使用user1、user2、user3、user4这四个用户的身份测试sudo命令的执行情况即可。
CentOS 6下搭建TFTP服务器
介绍:
TFTP是非常“简陋”的文件传输协议,基于UDP协议传输,日常生活中很少会用到,但做嵌入式开发及网络设备运维时经常会用到这种简易的文件传输方式。
软件安装:
服务器端:
[root@localhost ~]# yum install tftp-server
配置文件介绍
[root@localhost ~]# /etc/xinetd.d/tftp //TFTP服务主配置文件
服务配置:
tftp这种“简陋”的服务,配置起来也是相当的容易。
编辑主配置文件。
[root@localhost ~]# vim /etc/xinetd.d/tftp
下图红框中,“server_args”选项是配置TFTP根目录及操作权限的,“disable”选项用以配置是否启用TFTP服务。通常情况下只需要配置这两个选项即可。

这里,我指定TFTP的根目录为/tmp/tftp,且具有可写入的权限,并启用TFTP服务。

注意,上图中“server_args”选项的参数后面多了个“-c”,这个“-c”代表可写入,默认是只读。
保存配置文件后记得要创建TFTP的根目录。
[root@localhost ~]# mkdir /tmp/tftp
还要给TFTP根目录777的权限,这里不用去想权限给大了会不会不安全,没意义,TFTP这种“简陋”的协议本身就是不安全的(基于UDP,不支持加密,任何人都可以连接)。
[root@localhost ~]# chmod 777 /tmp/tftp
最后,在保证selinux及防火墙均已关闭的情况下重启TFTP服务器。
[root@localhost ~]# service xinetd restart
服务测试:
这里客户端使用CentOS 6.5系统做测试,当然你也可以使用Windows系统做测试。
先在服务器端的TFTP根目录中新建一个文件,用以测试下载。
[root@localhost ~]# touch /tmp/tftp/testget
在客户端机器安装TFTP客户端软件。
[root@localhost ~]# yum install -y tftp
创建一个文件用以测试上传。
[root@localhost ~]# touch testput
连接TFTP服务器,本例中服务器IP地址为192.168.1.20。
[root@localhost ~]# tftp 192.168.1.20
会弹出“tftp>”提示符,在其后输入TFTP命令。
主要的TFTP命令其实就三个:
get 接文件名 //将当前目录下的文件上传至TFTP服务器 put 接文件名 //从TFTP服务器下载文件到当前目录 q //退出TFTP客户端工具
这里,我连接上TFTP服务器后,先将客户机家目录下的testput上传到了服务器上,又将服务器上的testget下载到客户机,最后退出了TFTP客户端工具。

查看客户机家目录是否有testget文件。

查看服务器的TFTP根目录上是否有testput文件。

如都有,则配置成功,否则就需要回过头检查下是不是哪一步出了岔子。
CentOS 6下配置NIS服务
介绍:
Linux下的NIS服务器类似于Windows下的域控制器,用于Linux下的用户信息集中管理。
软件安装:
服务器端:
[root@localhost ~]# yum install -y ypserv
客户端:
[root@localhost ~]# yum install -y ypbind
配置文件介绍:
服务器端:
/etc/ypserv.conf //服务器端主配置文件
客户端:
/etc/yp.conf //客户端主配置文
服务器端配置:
NIS通过域名来分辨不同的账号密码数据,因此需先指定NIS域名。
方法很简单,如下。
[root@localhost ~]# vim /etc/sysconfig/network
添加一行
NISDOMAIN=nis.ibadboy.net
最终效果如下。

这里啰嗦一下:看到网上很多文章都说要设置主机名,还要给主机名添加到/etc/hosts文件中,做主机名和IP的对应。
不过,我使用CentOS 6.5版本亲测,不另外设置主机名,不编辑/etc/hosts文件,NIS服务器也一样能正常工作。但前提是,在/etc/ypserv.conf这个文件中是以IP地址来限制客户机而不是使用主机名,如果使用主机名则必须添加DNS解析或编辑/etc/hosts文件,关于ypserv.conf文件的配置下面马上会介绍到。
另外,为了方便配置防火墙规则,我们也可以指定让NIS服务器每次都启动在固定端口,否则NIS会动态使用端口。
[root@localhost ~]# vim /etc/sysconfig/network
添加一行。
YPSERV_ARGS="-p 1011" //使NIS服务器每次启动都使用1011端口
添加后文件内容如下:

编辑NIS服务器端主配置文件。
[root@localhost ~]# vim /etc/ypserv.conf
先来简单看下配置文件的内容再来说通常情况下如何配置。
转到14行和17行可以看到如下两个被红框框起来的选项(因软件版本号差异,行号可能不一样,可在VIM中搜索关键字来查找),其中“dns”选项是定义是否使用DNS,一般情况下保持默认即可(我搞不懂为啥会有这个选项,感觉很白痴)。“files”选项是定义载入到内存中的数据库个数(我不清楚这里的数据库是指的什么,这一段摘录自《鸟哥的Linux私房菜》),如果账号多,可以调大。

转到第25行左右,这里定义是否将Master/Slave的同步更新的数据库对比放置于小于1024的端口中,通常情况下保持默认即可。

接下来到重点了:配置允许访问NIS服务器的主机及主机的权限,这也是通常情况下服务器端主配置文件中唯一需要修改的部分。
参照如下格式配置:
[主机名/IP]:[NIS域名]:[可用数据库名称]:[安全策略] //可使用通配符 [主机名/IP] :直接填入允许访问的主机名或使用网络地址/掩码的形式,如 192.168.1.0/255.255.255.0。 [NIS域名] :例如本案例中的“nis.ibadboy.net”。 [可用数据库名称]:就是由 NIS 制作出来的数据库名称。 [安全限制] :有三种,没有限制(none)、仅能使用小于1024的端口(port)及拒绝(deny)。
例如:
192.168.1.0/255.255.255.0 : nis.ibadboy.net : * : none
通常情况下,NIS服务器都是应用在局域网,限制可以不用这么严格,使用如下格式也可以。当然,你也可以按照自己的需求来设置。
* : * : * : none
转到第38行左右,可以看到默认已经配置好了两条规则,我们可以在这个基础上稍作修改。

本例改成如下形式:

保存退出后,在保证防火墙和selinux均关闭的情况下启动ypserv(NIS主服务)及yppasswdd(用于支持客户端修改NIS服务器上的用户密码)服务。
[root@localhost ~]# service ypserv start [root@localhost ~]# service yppasswddd start
再在服务器端添加几个用户信息,一会好在客户端测试。
[root@localhost ~]# useradd user1 [root@localhost ~]# useradd user2 [root@localhost ~]# passwd user1 [root@localhost ~]# passwd user2
最后,编译生成各种数据库文件来供客户机查询。
[root@localhost ~]# /usr/lib64/yp/ypinit -m
到这一步,按下“Ctrl + D”


这一步输入y或者直接回车。

看到打印出如下字样即是成功。

客户端配置:
设置NIS域名,这里注意,一定要和服务器端是同样的NIS域名,否则客户端将无法绑定服务器端。
[root@localhost ~]# vim /etc/sysconfig/network
本例中,添加“NISDOMAIN=nis.ibadboy.net”

编辑客户端主配置文件。
[root@localhost ~]# vim /etc/yp.conf
在其中添加服务器端信息,格式如下。
domain [NIS域名] server [NIS服务器IP地址]
例如,本例中为:
domain nis.ibadboy.net server 192.168.1.20
添加后,效果如下。

保存并重启NIS客户端。
[root@localhost ~]# service ypbind restart
如下,是成功了。

如果是这种呢,一眼就能看出是失败了,那就要仔细检查下是不是哪一步做错了。

通常情况下,错误一般都是NIS域名不一致导致的,虽然客户端和服务器端的/etc/sysconfig/network中设置的NIS域名是一致的,但要注意的是,这里的NIS域名并非实时生效,因此还需要使用“nisdomainname”命令来分别检查服务器端和客户端当前的NIS域名,若发现有不符合的则使用“nisdomainname 接新NIS域名”来实时修改。
例如:

到这里,虽然客户端绑定服务器端成功了,但我们依然不能在客户端使用NIS服务器中的用户信息,原因是还没修改系统查询用户信息服务的方式。
编辑/etc/nsswitch.conf(服务搜索顺序配置文件)
在几个主要的配置文件的搜索顺序中都加入“nis”。注意,这里把“nis”加到“files”后,是先搜索本地配置文件而后才搜索nis服务器。这就导致,如果本地和nis服务器上存在相同的用户,客户端并不会使用nis服务器上的用户数据。可以通过将“nis”写在“files”前来解决这个问题。
注意最后一行,hosts文件的搜索顺序中加入了nis,这就是为什么我们不写hosts文件,不做dns一样可以正常使用nis服务器的原因。

这样,NIS客户端就算配置完了。
执行yptest命令看是否能列出NIS服务器端的账号信息。
在“Test 9: yp_all”这个测试结果中能看到NIS服务器端的用户信息即算成功。
例如:

客户端的配置,看似貌似很完美,但其实还是有点问题的,那就是需要PAM等认证的服务依然不会查询NIS服务器上的信息,这些配置文件我们手动修改实在是太麻烦了,可以使用“setup”工具来快速设置。
当然,如果没有特殊需求,仅仅需要系统用户身份认证信息使用NIS服务器上的数据那么按照之前那样简单配置以下就可以满足需求了。
若需要vsftpd虚拟用户这种使用PAM做身份认证的服务也使用NIS服务器,则就要使用“setup”工具来设置了,系统中没有安装“setup”工具可以参考此篇文章安装。
按照如下步骤走一遍即可,十分简单。之后setup会帮你把所有需要修改的配置文件全部修改一遍,换而言之,如果你使用setup工具来设置客户端,那除了安装ypbind软件包之外,不需再手工编辑任何文件。
注意,这里特殊说明一下,我的setup工具是中文语言的,其中图一的“验证配置”对应的英文版是“authentication configuration”,不要选错了哦。

Linux下使用quota工具为用户配置磁盘配额
介绍:
Linux是多用户多任务的操作系统,这就难免出现多个用户共享磁盘的情况,如何使多个用户公平的使用磁盘,就是磁盘配置要解决的问题。当然也可以在每创建一个用户的时候,将它的主目录建在一个单独的逻辑分区上,但是这样太麻烦了,也不灵活。
本文以针对用户的磁盘配额配置为例,演示磁盘配额的配置流程。
操作步骤:
1、安装quota软件包
[root@localhost ~]# yum install -y quota
2、给指定分区开启磁盘配额功能
编辑/etc/fstab(此文件负责记录文件系统信息)
[root@localhost ~]# vim /etc/fstab
如下图(看第一个分区),给想要开启磁盘配额的分区的挂载方式后面加上,usrquota,grpquota,其中usrquota是开启用户磁盘限额,grpquota是开启组磁盘限额。

保存并退出此文件后配置并未生效,还需要重新挂载磁盘。
[root@localhost ~]# mount -o remount /
3、扫描所有支持磁盘配额的分区并在其根目录生成相应的配置文件
[root@localhost ~]# quotacheck -avugm
上面的命令中,参数a 扫描/etc/fstab中所有支持磁盘配额的分区,v 显示指令执行过程,u 生成用户磁盘配额配置文件,g 生成组用户配置文件,m 强制扫描(有的时候不加m会报错,最好加上)。
记得把selinux关上再执行此命令。

执行完可以查看下分区挂载的目录中出没出现aquota.group(组磁盘配额配置文件)、aquota.user(用户磁盘配额配置文件)这两个配置文件,有就代表成功了。
当然这两个文件不一定都有,因为你有可能在执行命令的时候指定只生成用户磁盘配额配置文件,那就看不到组磁盘配额配置文件了。

4、为用户/组设置磁盘配额大小
[root@localhost ~]# edquota -u 接用户名 //为用户配置磁盘配额 [root@localhost ~]# edquota -g 接组名 //为组配置磁盘配额

命令执行后会自动使用vi/vim文本编辑器打开对应配置文件,下面是对此配置文件中各个区域的解释(顺序,从左到右)。
Filesystem 文件系统 blocks 已经使用的块数(块的单位为1K) soft 块数软限制,0表示禁用 hard 块数硬限制,0表示禁用 inodes 已经创建的文件个数,如果后面有*表示已经超出软限制 soft 创建的文件个数的软限制,0表示禁用 hard 创建的文件个数的硬限制,0表示禁用
其中软限制的额度在达到后会弹出警告,如果用户在宽限期(默认7天)内还未删除超出部分的文件,软限制就会转为硬限制,阻止用户继续写入数据。
可以通过如下命令修改宽限期。
[root@localhost ~]# edquota -t

如上图可以看到,Block grace period(块的宽限期)对应值是7days(七天),Inode grace period(文件数量的宽限期)对应值也是7days(7天),这里直接修改对应值即可。上图中因为我的设备名称比较长,所以文字排版乱了,导致值和选项没有对应起来,但不影响其生效。
修改后保存并退出。
此外,所涉及到容量的配置部分的计算单位都是KB,比如上图中容量的hard值我设置成了20480,这个数值的单位就是KB,可以换算成20MB。
修改后,保存并退出。
如果有多个账户需要设定相同的磁盘配额则可以使用edquota搭配-p参数实现,例如:
[root@localhost ~]# edquota -p user1 user2 将user1的磁盘配额配置复制给user2。
5、开启磁盘配额功能
quotaon 接需要开启磁盘配额功能的分区所挂载的目录,例如本实验中分区挂载到了根目录,则执行如下命令开启该分区的磁盘配额。
[root@localhost ~]# quotaon /
关闭磁盘配额:
[root@localhost ~]# quotaoff /
6、测试
切换为被设置了磁盘配额的用户身份,本实验中是user1。
[root@localhost ~]# su - user1
进入用户邮箱目录(本实验中/var/mail目录存在于根目录所挂载的磁盘上,所以根目录的磁盘限额对其有效)。
[root@localhost ~]# cd /var/mail
写1G的数据到user1的邮箱中。
[root@localhost mail]# dd if=/dev/zero of=user1 bs=1M count=1000

可以看到,弹出提示说超出磁盘限额了。
查看下user1用户的邮箱现在的大小,正好是20MB。
[root@localhost mail]# ll -h user1

最后记得清空邮箱中的数据哦。
[root@localhost mail]# echo '' > user1
