怎么安装getfiledir:homedir

zookeeper windows 入门安装和测试 - Hello World - ITeye博客
博客分类:
以下是我对zookeeper 的一些理解:
zookeeper 作为一个服务注册信息存储的管理工具,好吧,这样说得很抽象,我们举个“栗子”。
假设我是一家KTV的老板,我同时拥有5家KTV,我肯定得时刻监视我KTV 的情况吧,是不是有人打架,或者发生火灾什么的,这时候我会给设置一个视频监控,然后每一家都连接到我的视频监控里面,那么我就可以在家里看到所有KTV 的情况了,如果某一家出现问题,我就能及时发现,并且做出反应。
这个视频监控就相当于zookeeper,每一家的连接,就相当于KTV 的信息。
二、安装过程
http://mirrors./apache/zookeeper/
下载,我的版本是 3.4.6(stable) 稳定
解压到 F:\zookeeper-3.4.6
到目录conf 下创建 zoo.cfg 文件,默认就是加载这个文件,文件内容 我直接copy 的sample里面的
#zoo.cfg 的内容
心跳检查的时间 2秒
tickTime=2000
# 初始化时 连接到服务器端的间隔次数,总时间10*2=20秒
initLimit=10
# ZK Leader 和follower 之间通讯的次数,总时间5*2=10秒
syncLimit=5
# 存储内存中数据库快照的位置,如果不设置参数,更新事务日志将被存储到默认位置。
dataDir=F:\\zk\\tmp\\zookeeper
# 错误日志的存放位置
dataLogDir=F:\\zk\\logs\\zookeeper
# ZK 服务器端的监听端口
clientPort=2181
上面的说明介绍:http://zookeeper.apache.org/doc/current/zookeeperStarted.html
然后 cd 到bin 目录下 执行zkServer.cmd 就启动成功了。
注意:dataDir
dataLogDir 目录不会自动创建,得手动创建才能启动。
可以用netstat -ano|findstr "2181" 看看是否OK。
也可以用JPS 查看启动的JAVA 进程的情况,会出现这样
C:\windows\system32&jps
10040 QuorumPeerMain
// 这东西是zk的东西,源码有介绍
也可以用自带客户端命令 :
zkCli.cmd -server 127.0.0.1:2181
关于JPS的东西,可以自己去JAVA_HOME\bin 目录下去看,里面很多命令。
四、JAVA 操作zookeeper :
上面安装挺简单的,我们来实际操作下:
导入依赖:
&dependency&
&groupId&org.apache.zookeeper&/groupId&
&artifactId&zookeeper&/artifactId&
&version&3.4.6&/version&
&/dependency&
4.2 JAVA 实现:这里我们简单实现上面的栗子
public static final String ROOT = "/root-ktv";
public static void main(String[] args) throws Exception {
// 创建一个与服务器的连接
ZooKeeper zk = new ZooKeeper("localhost:2181", 30000, new Watcher() {
// 监控所有被触发的事件
public void process(WatchedEvent event) {
System.out.println("状态:" + event.getState()+":"+event.getType()+":"+event.getWrapper()+":"+event.getPath());
// 创建一个总的目录ktv,并不控制权限,这里需要用持久化节点,不然下面的节点创建容易出错
zk.create(ROOT, "root-ktv".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// 然后杭州开一个KTV ,
PERSISTENT_SEQUENTIAL 类型会自动加上
自增的后缀
zk.create(ROOT+"/杭州KTV", "杭州KTV".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
// 也可以在北京开一个,
EPHEMERAL session 过期了就会自动删除
zk.create(ROOT+"/北京KTV", "北京KTV".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
// 同理,我可以在北京开多个,EPHEMERAL_SEQUENTIAL
session 过期自动删除,也会加数字的后缀
zk.create(ROOT+"/北京KTV-分店", "北京KTV-分店".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
// 我们也可以 来看看 一共监视了多少家的ktv
List&String& ktvs = zk.getChildren(ROOT, true);
System.out.println(Arrays.toString(ktvs.toArray()));
for(String node : ktvs){
// 删除节点
zk.delete(ROOT+"/"+node,-1);
// 根目录得最后删除的
zk.delete(ROOT, -1);
zk.close();
zookeeper 的结构图和其他的一些功能,可参考:
http://www.blogjava.net/shenh062326/archive//zookeeper_yuling.html
三、zookeeper 伪集群
上面栗子我们看到,如果我们的监控室也停电了,那不是就监测不到KTV情况了?一般情况下,zk 也是作为分布式部署了,也就是有多台监控,由于监控多了,肯定要有一定为准(比如直播会有一些延迟),就要涉及到选举的算法,这里暂时不介绍,先搭建一个伪集群,因为机器不够,只能再一台机器上模拟搭建,整个过程无非是将上面的一些配置copy 几份,然后配置不同的 地址和端口就行。
我们将F:\zookeeper-3.4.6\conf\下的zoo.cfg 改成zoo1.cfg,内容改为:
# 存储内存中数据库快照的位置,如果不设置参数,更新事务日志将被存储到默认位置。
# 每一个文件路径和下面的对应,zk1 zk2 zk3
dataDir=F:\\zk\\tmp\\zk1
# 错误日志的存放位置
dataLogDir=F:\\zk\\logs\\zk1
# ZK 服务器端的监听端口
# 对应分别:
clientPort=2181
#2887 是server 之间通讯的,3887 是应用程序通讯的
# 同时加入其他两个服务的地址和端口信息
server.1=127.0.0.1:
server.2=127.0.0.1:
server.3=127.0.0.1:
# 最后在钱文件目录下创建3份,zoo1.cfg,zoo2.cfg,zoo3,cfg 记得改参数
3.2 同时我们将F:\zookeeper-3.4.6\bin\下的 zkServer.cmd 改为zkServer1.cmd,内容加上:
set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
# 读取配置的路径,每个启动服务对应一份
set ZOOCFG=..\conf\zoo1.cfg
# 同理创建3个zkServer1.cmd,zkServer2.cmd,zkServer3.cmd
记得改zoo 1 2 3.cfg
3.3 还得在dataDir 指定目录,也就是F:\\zk\\tmp\\zk1 下创建myid 的文件,内容对应1 2 3 即可。
这个的数字是唯一的,在1-255 之间,用来表示自身的id(其实我不明白 为啥zk 要这么设计- -!)
3.4 启动3个zkServer1.cmd 就OK了,如果要多服务器配置,只需要要将 3份分开放到不同服务器就OK
依次启动的时刻有错误信息,因为你启动server1 的时候 2 和 3 没找到,但是后面都启动了 就没问题了。
1.zookeeper
现在大家都用得比较多,这里也是仅仅介绍下入门知识,linux 上安装区别不打,还是得看具体应用。
2.关于选举、一致性 和一些其他的东西,慢慢再写!
3.有错误,请指出哦~。~ 感激。
参考资料:
http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html
API 文档:
http://zookeeper.apache.org/doc/r3.4.6/api/
别人介绍的一些流程:
/blog/2014486
常用的场景:
http://nileader./0007
浏览 20614
greemranqq
浏览: 610568 次
来自: 重庆
不错不错,收x藏了。推荐下,RocketMQ 源码解析 14
16/11/18 16:21:17 ERROR SparkDe ...
什么情况下会有 p!=t ?
给个我实现的代码,需要自己写一个类继承之~
public ab ...mysql免安装版配置步骤详解分享
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了mysql免安装版配置步骤详解,提供了二个网友的安装方法,大家可以参考使用
1.准备工作
下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\\ mysql-noinstall-5.1.53-win32。这个就是mysql的根目录了。
在根目录下有几个文件如下:
my-small.ini (这是针对一个小内存(〈= 64MB)的系统,MySQL 只会被时不时地用一下,很重要的是 mysqld 守护进程不会使用很多资源。)my-medium.ini (这是针对一个小内存(32M- 64M)系统的,MySQL 扮演了一个比较重要的部分,或者当系统达到 128M 后 MySQL 被用来与其它程序(如一个 Web 服务器)一起使用。)my-large.ini (这是针对一个内存 = 512M 的大系统,系统主要运行 MySQL)my-huge.ini (这是针对一个内存为 1G – 2G 的大系统,系统主要运行 MySQL)my-innodb-heavy-4G.ini (这是一个针对 4G 内存系统(主要运行只有 InnoDB 表的 MySQL 并使用几个连接数执行复杂的查询)的 MySQL 配置文件例子)对应自己的配置,自己选择下,其他的就删除吧。然后重命名成my.ini。编辑my.ini,在[mysqld]节点下增加如下几句:basedir= D:/mysql-noinstall-5.1.53-win32 #根目录datadir= D:/mysql-noinstall-5.1.53-win32/data #数据文件存放目录
3.安装服务
cmd:进入mysql的根目录\bin:mysqld --install MySQL这样用默认的 MySQL 为名称添加了一个windows服务。要移除mysql服务:mysqld –remove MySQL设置服务为自动启动:sc config MySQL start= auto
4.启动与关闭
代码如下:cmd:net start MySQL --启动net stop MySQL --关闭
mysql启动后。在任务管理器当中可以看到mysqld.exe这个进程。说明mysql已经安装好了。并且已经成功的启动!
如果你觉得mysql目录过于庞大的话请看。根目录下可以只留下my.ini和bin,data,share目录,其余全部删除。bin目录下可以把.pdb的文件全部删除。
6.初始化数据库:
由于mysql默认的root的密码为空并且只能本机登录,做如下修改:cmd:进入mysql的根目录\bin:mysql -uroot这时进入了mysql命令行界面,继续输入:
代码如下:mysql&mysql&mysql& grant all on *.* to root@'%' identified by "root"mysql&mysql& 这样就给root用户赋予了初始密码"root",并且可以不限制本机登录。
7.乱码问题:
修改my.ini文件,找到[mysqld],在下方加上: 代码如下:character-set-server = utf8 #mysql5.5开始default-character-set = utf8 #mysql5.5以前
找到[client],在下方加上: 代码如下:default-character-set = utf8另一网友提供的安装步骤和配置文件,大家可以参考二种方法1.将下载好的 noinstall 包解压到你想放置的位置,这个位置放了就可以一直放那了!以后重装系统也不要紧。我这里是:E:/Program Files/mysql-5.1.58-win32/2.新建一个my.ini文件。这个就是mysql的配置文件了,也可以从原来的ini改名,不过现在可以直接复制下面的配置:
代码如下:[client]port=3306
[mysql]default-character-set=gbk
[mysqld]port=3306basedir="E:/Program Files/mysql-5.1.58-win32/"datadir="E:/MySQL Datafiles/"default-character-set=gbkdefault-storage-engine=INNODBsql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"max_connections=100query_cache_size=15Mtable_cache=256tmp_table_size=18Mthread_cache_size=8myisam_max_sort_file_size=100Gmyisam_sort_buffer_size=35Mkey_buffer_size=23Mread_buffer_size=64Kread_rnd_buffer_size=256Ksort_buffer_size=256Kinnodb_data_home_dir="E:/MySQL Datafiles/"innodb_additional_mem_pool_size=2Minnodb_flush_log_at_trx_commit=1innodb_log_buffer_size=1Minnodb_buffer_pool_size=42Minnodb_log_file_size=10Minnodb_thread_concurrency=8
注意:这里需要修改的是 datadir 和 innodb_data_home_dir 这两个值,我一直是设置为同一个文件夹。 innodb_data_home_dir 就是INNODB 数据库储存引擎的数据地址。
3.用cmd进入mysql安装目录下的 bin 目录,再执行:mysqld --install mysql --defaults-file="E:\Program Files\mysql-5.1.58-win32\my.ini"就是注册为系统服务。 后面的默认配置文件就是上一步创建的文件的路径。--install 后面跟的是 服务名称出现:Service successfully installed. 则服务注册成功。
4.然后:net start mysql启动刚刚注册的 mysql 服务。就ok了。如果想要删除这个服务。就用:mysqld --remove这个命令是默认删除名为 mysql 的服务,如果不是这个名字,就在 remove 后加相应的服务名称。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具GoldenGate的安装与配置(原创) - CzmMiao的博客生活 - ITeye博客
博客分类:
OS: Oracle Linux 5.4 32-bit
DB: Oracle Database 10gR2(10.2.0.1)
IP: 192.168.0.111
同步表名: scott.tcustmer,scott.tcustord
OS: Oracle Linux 5.4 32-bit
DB: Oracle Database 10gR2(10.2.0.1)
IP: 192.168.0.113
同步表: scott.gg_test复制架构图
安装GoldenGate
源端:将数据库设为Archive Mode,安装之前需要打开Oracle的supplemental log。目标端不需要此操作
SQL& archive log list
DATABASE log mode
Archive Mode
Automatic archival
Archive destination
USE_DB_RECOVERY_FILE_DEST
Oldest online log SEQUENCE
NEXT log SEQUENCE TO archive
CURRENT log SEQUENCE
SQL& ALTER DATABASE ADD supplemental log DATA;
DATABASE altered.
SQL& ALTER s
System altered.
SQL& select SUPPLEMENTAL_LOG_DATA_MIN from v$database
注:SUPPLEMENTAL_LOG_DATA_MIN值为implicit亦可
查看源端ogg版本
$ ggsci -v
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_0_FBO
Linux, x86, 32bit (optimized), Oracle 10g on Apr 23 :02
Copyright (C) , Oracle and/or its affiliates. All rights reserved.源端和目标端安装goldengate。
创建源端和目标端ogg目录
GGSCI (rac) 1& CREATE SUBDIRS
Creating subdirectories under current directory /home/oracle/ggs
Parameter files
/home/oracle/ggs/dirprm: created
Report files
/home/oracle/ggs/dirrpt: created
Checkpoint files
/home/oracle/ggs/dirchk: created
Process status files
/home/oracle/ggs/dirpcs: created
SQL script. files
/home/oracle/ggs/dirsql: created
Database definitions files
/home/oracle/ggs/dirdef: created
Extract data files
/home/oracle/ggs/dirdat: created
Temporary files
/home/oracle/ggs/dirtmp: created
Veridata files
/home/oracle/ggs/dirver: created
Veridata Lock files
/home/oracle/ggs/dirver/lock: created
Veridata Out-Of-Sync files
/home/oracle/ggs/dirver/oos: created
Veridata Out-Of-Sync XML files /home/oracle/ggs/dirver/oosxml: created
Veridata Parameter files
/home/oracle/ggs/dirver/params: created
Veridata Report files
/home/oracle/ggs/dirver/report: created
Veridata Status files
/home/oracle/ggs/dirver/status: created
Veridata Trace files
/home/oracle/ggs/dirver/trace: created
Stdout files
/home/oracle/ggs/dirout: created配置goldengate创建goldengate管理用户源端:创建goldengate管理用户,并赋予适当权限SQL&Create user g
SQL&GRANT CONNECT TO
SQL&GRANT ALTER ANY TABLE TO
SQL&GRANT ALTER SESSION TO
SQL&GRANT CREATE SESSION TO
SQL&GRANT FLASHBACK ANY TABLE TO
SQL&GRANT SELECT ANY DICTIONARY TO
SQL&GRANT SELECT ANY TABLE TO
SQL&GRANT RESOURCE TO
SQL&GRANT drop ANY TABLE TO
SQL&GRANT delete any table TO
SQL&GRANT execute on utl_fileE TO
SQL&GRANT execute on dbms_flashback TO
SQL&GRANT unlimited tablespace TO
目标端:创建goldengate管理用户,并赋予适当权限
SQL&Create user g
SQL&GRANT CONNECT TO
SQL&GRANT ALTER ANY TABLE TO
SQL&GRANT ALTER SESSION TO
SQL&GRANT CREATE SESSION TO
SQL&GRANT update any table TO
SQL&GRANT SELECT ANY DICTIONARY TO
SQL&GRANT SELECT ANY TABLE TO
SQL&GRANT RESOURCE TO
SQL&GRANT drop ANY TABLE TO
SQL&GRANT delete any table TO
SQL&GRANT execute on utl_fileE TO
SQL&GRANT insert any table TO
SQL&GRANT unlimited tablespace TO
源端:创建编辑manager参数文件,PORT为7500,保存退出。
Oracle GoldenGate Command Interpreter FOR Oracle
Version 11.1.1.1.2 OGGCORE_11.1.1.1.2_PLATFORMS_0
Solaris, x64, 64bit (optimized), Oracle 11g ON Oct
Copyright (C) , Oracle AND/OR its affiliates. ALL rights reserved.
GGSCI (rac1) 1& EDIT PARAMS MGR
GGSCI (rac1) 6& view params mgr
dynamicportlist
autorestart extract *,waitminutes 2 ,retries 5
GGSCI (rac1) 4& START MGR
Manager started.其中port参数标示mgr进程通信的端口,是配置mgr进程必须的。dynamicportlist(可选),表示manager进程可以为源端和目标端的动态通信时采用的动态端口。autorestart(可选),表示如果extract进程失败,则每隔2分钟尝试重启一次,最多重启5次。默认为2分钟重启一次。
查看manager进程
$ ps -ef|grep mgr|grep -v grep
00:00:56 ./mgr PARAMFILE /home/oracle/ggs/dirprm/mgr.prm REPORTFILE /home/oracle/ggs/dirrpt/MGR.rpt PROCESSID MGR PORT 7809
目标端:创建编辑manager参数文件,PORT为7500,保存退出。
Oracle GoldenGate Command Interpreter FOR Oracle
Version 11.1.1.1.2 OGGCORE_11.1.1.1.2_PLATFORMS_0
Solaris, x64, 64bit (optimized), Oracle 11g ON Oct
Copyright (C) , Oracle AND/OR its affiliates. ALL rights reserved.
GGSCI (rac1) 1& EDIT PARAMS MGR
GGSCI (rac1) 6& view params mgr
dynamicportlist
autorestart extract *,waitminutes 2 ,retries 5
GGSCI (rac1) 4& START MGR
Manager started.
查看manager进程
$ ps -ef|grep mgr|grep -v grep
00:00:56 ./mgr PARAMFILE /home/oracle/ggs/dirprm/mgr.prm REPORTFILE /home/oracle/ggs/dirrpt/MGR.rpt PROCESSID MGR PORT 7809
配置表级补充日志源端:
SQL& create table gg_test(id int primary key);
Table created.
GGSCI (rac1) 12& dblogin userid ggs,password ggs
Successfully logged into database.
GGSCI (rac1) 13& add trandata scott.gg_test
Logging of supplemental redo data enabled for table SCOTT.GG_TEST.
注:goldengate中在表级配置补充日志必须先开启数据库级补充日志才能生效。
目标端:SQL& create table gg_test(id int primary key);
Table created.配置extract进程源端:
GGSCI (rac1) 15& edit params eora
GGSCI (rac1) 16& view params eora
extract eora
dynamicresolution
userid ggs,password ggs
setenv(ORACLE_SID=orcl)
exttrail ./dirdat/et
table scott.gg_
dynamicresolution,默认值,表示在分析日志时遇到元数据即立刻操作,如创建表等。而不是一次性操作所有的元数据,nodynamicresolution。setenv,设置ORACLE_SID环境变量。exttrail,抽取的临时文件存放位置。table,需要操作的表。GGSCI (rac1) 2& ADD EXTRACT EORA, TRANLOG, BEGIN NOW
EXTRACT added.TRANLOG 表示使用事务日志的方式
BEGIN NOW 表示从现在开始,你也可以指定一个具体的开始时间
GGSCI (rac1) 42& add exttrail ./dirdat/et,extract eora
EXTTRAIL added.
配置extract进程的本地trail文件路径GGSCI (rac1) 47& start eora
Sending START request to MANAGER ...
EXTRACT EORA starting启动extract进程
配置pump进程源端:
GGSCI (rac1) 18& edit params pump_so
GGSCI (rac1) 19& view params pump_so
extract pump_so
dynamicresolution
userid ggs,password ggs
rmthost 192.168.0.113, mgrport 7500
setenv(ORACLE_SID=orcl)
rmttrail ./dirdat/rt
table scott.gg_
rmthost配置远程主机ip或者主机名。rmttrail,配置远程主机存放的trail文件。passthru,data-pump在抽取时使用pass-through模式,不会检查表定义,速度更快。但是由于没有检查表定义,也就无法使用映射和转换函数。使用passthru时可以将数据抽取到没有安装数据库的中转服务器上。passthru可以和nopassthru配合使用,这样就可以针对某些表使用pass-through模式,某些表不使用pass-through模式。具体如下:passthru
table scott.gg_
nopassthru
table scott.gg_GGSCI (rac1) 46& add extract pump_so,exttrailsource ./dirdat/et
EXTRACT added.
配置pump_so进程的本地trail文件路径,exttrailsource直接指定trail文件的路径
GGSCI (rac1) 37& add rmttrail ./dirdat/rt
,extract pump_so
RMTTRAIL added.
配置pump_so进程的远程trail文件路径
GGSCI (rac1) 48& start pump_so
Sending START request to MANAGER ...
EXTRACT PUMP_SO starting
启动data-pump进程
GGSCI (rac1) 62& info all
Lag at Chkpt
Time Since Chkpt
配置检查点表
GGSCI (rac2) 146& edit params ./GLOBALS
GGSCI (rac2) 147& view params ./GLOBALS
checkpointtable scott.checkczm
创建检查点表
GGSCI (rac2) 149& add checkpointtable
No checkpoint table specified, using GLOBALS specification (ggs.checkczm)...
Successfully created checkpoint table ggs.checkczm.配置复制进程目标端
GGSCI (rac2) 150& edit params pora
GGSCI (rac2) 151& view params pora
replicat pora
userid ggs, password ggs
assumetargetdefs
discardfile ./dirrpt/pora.dsc, purge
map scott.gg_test, target scott.gg_
assumetargetdefs,不进行表结构检查,直接复制数据。discardfile,将没有成功复制的数据信息记录到文件中,后面的purge选项,表示每次有记录新信息时删除之前的信息。map,对表进行映射,这里只是指定要操作的表scott.gg_test。
GGSCI (rac2) 161& add replicat pora ,exttrail ./dirdat/rt
REPLICAT added.配置复制进程
GGSCI (rac2) 162& start pora
Sending START request to MANAGER ...
REPLICAT PORA starting启动复制进程
验证数据同步源端:
SQL& conn scott/
Connected.
SQL& insert into gg_test values(1);
1 row created.
Commit complete.目标端:
SQL& select * from gg_
----------
数据成功同步
参考至:《GoldenGate Windows and UNIX Reference Guide 11g Release 2 Patch Set 1》
http://www.code365.org/?p=1594如有错误,欢迎指正邮箱:
浏览: 2641544 次
来自: 厦门
谢谢非常有用那
写的很详细
学习了,学习了
大写的赞..
作为初学者,我表示写得非常好,正在疑惑这些参数的意义呢!常用的Linux可插拔认证模块(PAM)应用举例:pam_mkhomedir.so和pam_ldap.so模块(上)
- 谷普下载 |
| 您所在的位置: >
> 常用的Linux可插拔认证模块(PAM)应用举例:pam_mkhomedir.so和pam_ldap.so模块(上)常用的Linux可插拔认证模块(PAM)应用举例:pam_mkhomedir.so和pam_ldap.so模块(上)更新:&&&&编辑:不详&&&&来源:谷普下载&&&&人气:加载中...&&&&字号:|标签:&&&&&&&&&&&&
pam_homedir.sopam_homedir.so的主要作用是帮助用户在登录系统的时候自动创建家,并且随之生成该用户的profile文件。所以该模块在实现一些混合集中式的场景中会非常有用。因为当这些来自服务的用户登录成功之后,一般不会像本地用户登录那样可以自动创建自己的家目录。所以来自目录服务的用户登录之后所做的一切操作和配置都无法永久保存,除非管理员手动地给这些登录用户创建家目录。不过目录服务中的用户的数量一般都非常大,手工操作的工作量和准确率可想而知。所以在这种情况下就需要使用pam_mkhomedir.so模块,当用户登录系统成功的时候,该模块会自动为用户创建家目录以及生成相关的profile文件。我们可以结合上面的RHEL + Windows Server实现混和集中式认证的案例来继续说明pam_mkhomedir.so模块的用法。在上例中,当windows系统上的用户administrator成功地在RHEL上登录之后,唯一的是没有自己的主目录。这个时候终于轮到pam_mkhomedir.so模块出场了!在这个方案中我们只需要简单修改PAM和系统用户登录的相关配置文件/etc/pam.d/system-auth并增加一行session的控制信息如下:session
pam_mkhomedir.so skel=/etc/skel umask=0022 silent
表示用户登录之后会利用pam_mkhomedir.so这个pam模块自动建立自己的主目录,并会从/etc/skel目录下拷贝用户原始配置文件到所建立的目录中,当然所有的操作都会在后台执行。这个更改是实时生效的,也就是说更改完成之后无需重启任何服务,只要使用域内用户重新登录系统即可发现与这个用户同名的主目录就能够自动建立在/home/JERRYWJL目录下。这样通过W2K8E活动目录认证用户访问RHEL的基本架构就已经搭建完成。另外进行这个实验的用户应该可以发现,在当执行setup并选择使用winbind结合活动目录进行认证的时候,当完成这一步骤时系统会自动修改/etc/pam.d/system-auth文件,并在其中添加一个新的配置项――即使用pam_winbind.so进行用户验证用户,此模块专用于结合活动目录进行用户认证,并将获取的信息转换成系统所能兼容的用户信息格式,所以整个的配置文件将变成:#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
/lib/security/$ISA/pam_env.so
sufficient
/lib/security/$ISA/pam_unix.so likeauth nullok
sufficient
/lib/security/$ISA/pam_winbind.so use_first_pass
/lib/security/$ISA/pam_deny.so
/lib/security/$ISA/pam_unix.so broken_shadow
[default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_winbind.so
/lib/security/$ISA/pam_permit.so
/lib/security/$ISA/pam_cracklib.so retry=3 type=
sufficient
/lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
sufficient
/lib/security/$ISA/pam_winbind.so use_authtok
/lib/security/$ISA/pam_deny.so
/lib/security/$ISA/pam_limits.so
/lib/security/$ISA/pam_unix.so
pam_mkhomedir.so skel=/etc/skel umask=0022 silent
此时当用administrator登录Linux系统的时候会发现其主目录会自动建立。pam_ldap.so模块其实结合RHEL + Windows Server进行集中式认证的实现方法不仅仅只有winbind一种手段。
使用Winbind的方法由于涉及到AD,Kerberos,Samba,Winbind这几方面内容,因而在有些用户看来配置过程似乎有些复杂。所以在今天的内容中,我们将完全放弃使用Samba和Winbind而将RHEL系统配置为一个具有更出色兼容性的LDAP来实现类似的功能。这种方案的原理实际上包括下面几个内容:首先我们将Windows AD作为网络中的IDM系统,所有的用户信息,包括用户名,UID,口令,登录shell、有效期等等按理说都会在AD当中。然后Linux系统会通过自身的程序编程接口和LDAP查询集来和AD服务器通讯并访问AD中的这些用户信息。这种访问方式实际上到了Linux系统中的一个PAM模块――pam_ldap。pam_ldap这个模块类似于常见的pam_unix.so。一般来说如果Linux本地用户登录系统时会使pam_unix.so,该模块可以将用户登录时输入的用户名和密码与系统本地用户数据库/etc/passwd和/etc/shadow中所记录的信息进行核对,如果验证通过则允许登录;而pam_ldap模块的基本功能则是会以AD上某个固定用户的身份和口令连接到Windows DC上查询AD数据库(之所以要以一个固定用户身份执行这个操作时因为默认情况下,Windows AD是不允许以匿名方式查询和访问的,所以这个固定用户在AD上不但要确实存在,而且要具备足够的权限),另外pam_ldap.so在查询到AD中用户信息的同时也能对AD中加密的用户口令进行正确转换以实现身份认证,认证成功之后才允许用户登录或进行后续访问。除了pam_ldap.so模块之外,Linux系统还提供了一个Open LDAP的集,其中最关键的工具和命令是ldapsearch,管理员通过手动执行该命令能够从AD上获得目录内的信息。这对于在配置的过程中进行调试和排错将相当有用。当然在这个认证过程中为了保证密码之类的敏感信息在网络中传递的安全性,Linux要和基于Windows操作系统的Kerberos KDC进行安全通讯,这样则必须要启用另外一个PAM模块――pam_krb5.so,它能够使Linux客户端以正确的实例从Kerberos KDC上获取TGT(票据授权票据),并通过一个完整的Kerberos认证过程来实现用户信息的安全传递。因为在默认情况下Windows的域控制器和Kerberos的KDC是集成于一体的。另外,当使用pam_ldap查询到用户信息时,还有一个非常关键的需要,这就是Windows AD中的用户信息和Linux Open LDAP所存储的用户信息格式和名称是不统一的。如果大家曾经看过我以前介绍Open LDAP的文章则很容易建立这样的概念:所有的LDAP服务器实际上基本上都在使用LDAP(轻量级目录访问协议),这个协议规定了LDAP中的所有信息都必须有一个命名方式,而命名方式归根结底是由架构档,即schema所决定。由于历史方面的问题,我们实在无法保证不同的目录服务产品都是用统一的架构档,这就意味着很有可能在Windows AD的目录服务器上添加的用户的一些属性虽然能够被Linux系统的LDAP查询工具和应用程序编程接口获得,但无法通过NSS名字转换服务转换成用户登录或者其它服务所需要的属性。举一个简单的例子:假如我们在Linux系统中添加一个本地用户或者在Linux的Open LDAP中添加一个用户,这个用户如果要能够登录到Linux系统则必须包括用户名、用户ID(UID)、用户家目录、默认登录Shell以及用户口令等基本信息。这样当用户登录的时候,,Linux系统的名称服务(NSS)会将用户转换成UID来验证用户身份,验证成功方可登录。但是在Windows系统中,显然我们不能指望所添加的用户具有和Linux系统上一样的用户属性和信息,无法获得这些信息将意味着无法登录Linux系统。所以这个时候我们不但要使用pam_ldap,还要使用一个叫做nss_ldap的应用程序扩展库来实现将Windows AD用户的架构所定义的一些属性和Linux Open LDAP架构所定义的,用户登录必须的属性进行一一映像。(实际上pam_ldap和nss_ldap分别是RHEL系统中一个叫做nss_ldap的安装包提供的pam模块扩展和应用库扩展,所以在RHEL系统中必须确保已经安装了nss_ldap包。)而映射的方法也很简单,因为nss_ldap提供了一个配置文件/etc/ldap.conf,该档可以根据需求更改。我们只需要按照其规定的格式指定两种目录产品的用户属性对应关系即可。那么这种对应包括:将一些Windows AD的schema所定义的用户属性名称映像为Linux Open LDAP schema所拥有的用户属性。例如在Linux的Open LDAP中UID对应Windows AD中的sAMAccountName,当然类似这样的映射还有很多;
这也是比较大的问题:Linux Open LDAP的架构中规定的一些用户属性实际上在Windows AD上是根本不存在的,针对这个问题诸位已经想到了方法,就是通过一些特殊的方式来扩展Windows AD上的用户属性。所以在Windows系统上实际上已经提供了一个这样的工具,叫做SFU(Service For Unix)。该工具在W2K3E的R2版本上已经被加入到标准安装光盘中。而在W2K3E的非R2版本上也可以通过手动安装来实现其功能。这是一个在Windows系统上专门对Unix系统访问提供支持的组件。通过SFU可以将某些Windows操作系统集成到现有的UNIX环境中。它提供的组件可以简化跨UNIX和Windows平台的网络管理和用户管理。
| 分类选择您可能在找这些}

我要回帖

更多关于 deldirandfile 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信