免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1251 | 回复: 4

(原)将linux用户转移到FreeBSD [复制链接]

论坛徽章:
0
发表于 2005-10-27 10:49 |显示全部楼层
这是前端时间搞出来的。网上类似的讨论好像很少。
现在发出来。请大家指正。     


以转移其中一个帐户为例,这里假设要转移的帐号名为icipiq
关键是要将linux上的密码迁移到bsd后仍然能继续使用。
Linux的用户密码文件是/etc/passwd,例如其中一行:
www:41845:41845::/home/www:/bin/bash
有6个冒号7个域。
linux保存用户真正密码的文件是/etc/shadow,文件的每行是8个冒号分割的9个域,格式如下:
username: passwd: lastchg: min: max: warn: inactive: expire: flag
  lastchg:表示从1970年1月1日起到上次修改口令所经过的天数。
  min:表示两次修改口令之间至少经过的天数。
  max:表示口令还会有效的最大天数,如果是99999则表示永不过期。
  warn:表示口令失效前多少天内系统向用户发出警告。
  inactive:表示禁止登陆前用户名还有效的天数。
  expire:表示用户被禁止登陆的时间。0
flag:无意义,未使用。
FreeBSD保存用户密码的文件是/etc/master.passwd,现在我们查看其中任意一行:
dlavigne:pZV8Ju.2sEqsY:1000:1000::0:0ru Lavigne:/home/dlavigne:/bin/tcsh
第一个字段(dlavigne)是该用户用于登录到系统时所用的用户名。
第二个字段(pZV8Ju.2sEqsY)是加密散列;dlavigne很幸运,这并不是她在登录时键入的口令,也无法知道从该文件中读出的她的实际口令是什么。但是,注意“test”用户的第二个字段。因为那里个空白,就说明该用户没有使用口令,只要读一个该文件就知道了。再注意很多系统账号的第二个字段都是一个星号(*),这说明普通用户无法用账号进行登录。
第三个字段(1000)是用户的UID(user ID);这是FreeBSD用来区别不同用户的,所以它必须是唯一的。当我们用adduser工具,它提议从1000开始建立UID,所以我建立的所有用户都有大于1000的UID。注意用户“root”和“toor”的UID为0,这说明他们都是系统的超级用户。
第四个字段(1000)是用户的初始GID(group ID)。缺省情况下,当你在FreeBSD中建立一个用户时,会建立一个同名的组。
第五个字段(空白)是用户的类别。类别用于决定环境设定、会话记账和资源限制。我们会在将来讨论使用类别。这个字段缺省是空的。
第六个字段(0)表示口令的期限。这个字段缺省是零,表示用户无须更新他的口令。
第七个字段(0)表示用户账号的期限。如果用户账号过期,该用户将无法再登录了。这个字段缺省是零,表示账号永不过期。
第八个字段(Dru Lavigne)包含用户的“gecos”综合信息。这里可以包含用户的全名、办公地点、工作电话和家庭电话,中间只要用逗号分隔。术语“gecos”的来源很有趣。当Unix最初在Bell实验室开发时,主计算机运行的是General Electric Computer Operating System(gecos),使用该计算机的用户的地址信息都被存在口令文件的“gecos”字段中。
第九个字段(/home/dlavigne)是用户的主目录。它就是用户登录时所处的目录。
第十个字段(/bin/tcsh)是用户命令解释器shell的路径。

在Linux上首先查出该帐号的密码信息:
#grep “icipiq” /etc/shadow >; /root/icipiq.tmp
icipiq1$fxYmdXAD$iK89fRjAxoPu9mTnn4UJj.:13038:0:99999:7::::
如果迁移到bsd上,关键是shadow文件中第一个域的用户名和第二个域的密码的迁移,其他的譬如用户的登陆shell,默认目录等,需要查看/etc/passwd文件。这里假定icipiq在linux上的shell为bash,目录为/home/icipiq。
为了通用,我们可以在迁移的过程中将bash在bsd上指定为sh。
然后到bsd系统上,将文件icipiq.tmp scp到该bsd某个目录。然后:
# awk -F: '{ printf "%s:%s:1008:1009::0:0:User &:/home/icipiq:/bin/sh\n",$1,$2,$3,$4,$5,$8,$9,$10 }' < /dirname/icipiq.tmp >;>; /etc/master.passwd
这里由于我想继续使用bsd现有的帐号,所以用>;>;
根据上边说的关于域方面的东西,知道1008和1009是该帐号的UID和GID
一定注意:linux的shadow文件是8个冒号9个域,而bsd的master.passwd是9个冒号10个域。
然後再check一下新造出来的 master.passwd 有没有问题 :
#pwd_mkdb -C /etc/master.passwd
没有错误讯息的话就:
#pwd_mkdb -p -d /etc /etc/master.passwd
此时已经将icipiq用户迁移到bsd上了。。

其他相关资料:
如何确定生成的密码是否一致:
perl -e 'print crypt("123456","\$1\$abcdef\$","\n"'
其中123456是要加密的明文,abcdef是函数crypt的salt
比如icipiq1$fxYmdXAD$iK89fRjAxoPu9mTnn4UJj.:13038:0:99999:7::::
他的salt就是fxYmdXAD共8个字符——因为linux和bsd都是md5加密,所以不是两个。
分别在linux和bsd上执行以上perl语句,看产生的结果是否一样。如果一样,则证明ok。
相关信息可参考:
http://www.cnfug.org/journal/archives/000074.html
在BSD下,实际的口令文件是/etc/master.passwd.,这里的密码都是简单的文本数据库,每个用户占一行,行中字段用":"隔开。/etc/master.passwd权限为0600,而/etc/passwd为0644,这就意味着任何人都人存取/etc/passwd.但只有root才能读取/etc/master.passwd.
在BSD中,/etc/master.passwd是/etc/passwd的超集,它直接生成/etc/passwd文件。所以在BSD中/etc/passwd文件总是不需要直接进行编辑。一旦运行vipw,passwd,chfn,chsh或者chpass这些命令,也是对/etc/master.passwd进行修改。并且修改后会自动生成/etc/passwd.(一同生成的还有由pwd_mkdb工具生成的/etc/master.passwd的散列表形式。)
平面文件数据库(/etc/passwd,/etc/master.passwd)都只对少量用户合适,用户一多,查找速度就慢。因此在BSD 下相应的还有两个数据库格式的散列表/etc/pwd.db和/etc/spwd.db,其权限也和上面两文件对应。每次运行chfn,passwd等命令后,pwd_mkdb都会自动修改这两个文件。
提示:若希望根据另一个FreeBSD重新构件用户列表或者从另一个FreeBSD机器移植一个用户列表,只须简单的把新的master.passwd(比如master.passwd.new)文件置于/etc/下(或/ 下),然后运行如下命令(注意先备份):
%cp /etc/master.passwd /etc/master.passwd.bak
%pwd_mkdb -p /etc/master.passwd.new
这样/etc/master.passwd文件将被覆盖,其他三个文件也得以重建。(-p即为生成新的/etc/passwd)
注意:/etc/master.passw文件和shadow文件形式和功能都相同,但是和/etc/master.passwd不同的是,Linux下(或其他系统)使用的/etc/shadow文件并非/etc/passwd文件的超集。/etc/passwd文件也并非由/etc/shadow文件产生,需要手工维护这两个文件。



至此,可以再手动写一些脚本,结合awk等,实现批量用户的迁移。

以上方法已经成功实现:
Linux 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i686 i686 i386 GNU/Linux

FreeBSD 5.4-RELEASE FreeBSD 5.4-RELEASE #0: Tue Sep 13 17:08:15 CST 2005

论坛徽章:
0
发表于 2005-10-27 10:51 |显示全部楼层

(原)将linux用户转移到FreeBSD

    

论坛徽章:
0
发表于 2005-10-27 11:00 |显示全部楼层

(原)将linux用户转移到FreeBSD

倒。。
没人路过??郁闷。。

论坛徽章:
5
巳蛇
日期:2013-08-28 09:26:15CU十二周年纪念徽章
日期:2013-10-24 15:41:34射手座
日期:2013-10-31 09:13:04射手座
日期:2014-02-11 13:18:34天秤座
日期:2014-03-25 09:22:28
发表于 2005-10-27 11:16 |显示全部楼层

(原)将linux用户转移到FreeBSD

不错,有机会试验一下.
BTW:linux和solaris的用户可以通用,做过实验.

论坛徽章:
0
发表于 2005-10-27 11:31 |显示全部楼层

(原)将linux用户转移到FreeBSD

关键就是一个格式问题
拿c在linux下将passwd和shadow按照bsd的格式处理成一个文件,然后用这个文件去覆盖bsd的/etc/master.passwd更简单一些吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP