免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4566 | 回复: 3
打印 上一主题 下一主题

[OpenBSD] openbsd4.5下编译安装telnetd [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-07 11:36 |只看该作者 |倒序浏览
最近安装了一个openbsd4.5,出于安全考虑openbsd缺省并不安装telnet服务,并且源码包中也没有提供相应代码文件。在网上搜索了N久几乎没有任何有用信息,最后通过openbsd提供的cvs下载到了相应的源码。在编译安装过程颇费了些周折,现记录如下:

安装环境为windows xp + vmware 6.0

cvs上所需项目文件:
src/libexec/telnetd
src/lib/libtelnet

其他文件:
install45.iso (系统安装光盘映象,234M)
src.tar.gz(源码包,110M)

系统安装过程就不多说了,安装源码包:
#cd /usr/src
tar xzvf src.tar.gz

上传telnetd源码:src/libexec/telnetd src/lib/libtelnet
目录结构应为:/usr/src/libexec/telnetd /usr/src/lib/libtelnet
首先编译libtelnet:
cd /usr/src/lib/libtelnet
make
编译无法通过,一大堆错误。看了提示,估计是和平台相关的东西。修改Makefile如下:
  1. #       from: @(#)Makefile      8.2 (Berkeley) 12/15/93
  2. #       $NetBSD: Makefile,v 1.31 2008/08/29 00:02:22 gmcgarry Exp $
  3. USE_FORT?= yes  # network protocol library
  4. LIBISPRIVATE=   yes
  5. .include <bsd.own.mk>
  6. WARNS?= 1
  7. LIB=    telnet
  8. SRCS=   auth.c encrypt.c genget.c getent.c misc.c
  9. CPPFLAGS+= -DHAS_CGETENT -Dlint
  10. CPPFLAGS+= -I${.CURDIR}
  11. #.if (${USE_KERBEROS} != "no")
  12. #SRCS+= enc_des.c
  13. #CPPFLAGS+= -DENCRYPTION -DAUTHENTICATION
  14. #CPPFLAGS+= -DDES_ENCRYPTION
  15. #SRCS+= kerberos5.c
  16. #CPPFLAGS+= -DKRB5
  17. #CPPFLAGS+= -I${DESTDIR}/usr/include/krb5
  18. #.endif
  19. #.if ${USE_PAM} != "no" && ${MKCRYPTO} != "no"
  20. #SRCS+= sra.c pk.c
  21. #CPPFLAGS+= -DSRA
  22. #.endif
  23. #.if (defined(HAVE_GCC) && ${HAVE_GCC} == 4) || defined(HAVE_PCC)
  24. #.for f in auth enc_des kerberos5 pk
  25. #COPTS.${f}.c+=  -Wno-pointer-sign
  26. #.endfor
  27. #.endif
  28. .include <bsd.lib.mk>
复制代码
再次make,依然不能通过,错误信息如下:
encrypt.c:36: error: syntax error before string constant
vi encrypt.c 注释掉33-37行,编译OK

回过来编译telnetd:
cd /usr/src/libexec/telnetd
make 同样是一大堆报错,有些提示跟编译libtelnet.a类似。修改Makefile如下:
  1. #       $NetBSD: Makefile,v 1.45 2009/03/16 02:24:57 lukem Exp $
  2. #       from: @(#)Makefile      8.2 (Berkeley) 12/15/93
  3. WARNS?= 2               # XXX: const issues in sys_term.c
  4. .include <bsd.own.mk>
  5. MAN=    telnetd.8
  6. PROG=   telnetd
  7. CPPFLAGS+=-DLINEMODE -DKLUDGELINEMODE -DDIAGNOSTICS -Dlint
  8. CPPFLAGS+=-DOLD_ENVIRON -DENV_HACK -DSECURELOGIN -DSUPPORT_UTMP #-DSUPPORT_UTMPX
  9. SRCS=   authenc.c global.c slc.c state.c sys_term.c telnetd.c \
  10.         termstat.c utility.c
  11. DPADD=  ${LIBTELNETDIR}/libtelnet.a ${LIBTERMCAP} ${LIBUTIL}
  12. LDADD+= ${LIBTELNETDIR}/libtelnet.a -ltermcap -lutil
  13. CPPFLAGS+=-I${NETBSDSRCDIR}/lib
  14. CPPFLAGS+=-I${.CURDIR}
  15. LIBTELNETDIR=/usr/src/lib/libtelnet
  16. #LIBTELNETDIR!= cd ${.CURDIR}/../../lib/libtelnet; ${PRINTOBJDIR}
  17. #.if (${USE_KERBEROS} != "no")
  18. #CPPFLAGS+=-I${DESTDIR}/usr/include/krb5
  19. #CPPFLAGS+=-DKRB5 -DAUTHENTICATION -DENCRYPTION
  20. #LDADD+= -lkrb5 -lasn1 -lcrypto -lcrypt
  21. #DPADD+=        ${LIBKRB5} ${LIBASN1} ${LIBCRYPTO} ${LIBCRYPT}
  22. #.if (${USE_PAM} != "no")
  23. #LDADD+= -lpam ${PAM_STATIC_LDADD}
  24. #DPADD+=        ${LIBPAM} ${PAM_STATIC_DPADD}
  25. #.endif
  26. #VERS!= cd ${NETBSDSRCDIR}/lib/libvers && ${PRINTOBJDIR}
  27. #LDADD+=         -ldes -lcom_err -L${VERS} -lvers -lroken
  28. #DPADD+=        ${LIBDES} ${LIBCOM_ERR} ${LIBROKEN}
  29. #.endif
  30. .include <bsd.prog.mk>
复制代码
修改之后编译应该能够通过,运行telnetd,提示:
./telnetd: getpeername: Socket operation on non-socket
google了下出错信息,解决办法是该服务应该由inetd来启动。
vi /etc/inetd.conf
加入如下行:
telnet          stream  tcp     nowait  root    /usr/libexec/telnetd    telnetd
telnet          stream  tcp6    nowait  root    /usr/libexec/telnetd    telnetd
第二行应该是支持IP v6的,可以不要。
cp -p telnetd /usr/libexec/
重启inetd服务:
kill -HUP `cat /var/run/inetd.pid`
查看telnet是否起来:
# netstat -na|grep LISTEN|grep 23

尝试登录,连接直接中断了,提示login 不支持选项 -a
grep login *.c
问题出在sys_term.c
vi sys_term.c
修改函数start_login()
注释掉下面行:
  1. //argv = addarg(argv, "-a");
  2.         //(void)strvisx(buf, (const char *)(const void *)&from, sizeof(from),
  3.          //   VIS_WHITE);
  4.         //argv = addarg(argv, buf);
复制代码
重新make
cp -p telnetd /usr/libexec/
kill -HUP `cat /var/run/inetd.pid`
尝试root用户登录,连接会被拒绝(如何修改没有继续研究了),新建了普通用户,可以正常登录,但不能su成root用户,提示与root不在同一个成员组。
telnetd.tgz.rar (151.91 KB, 下载次数: 91)

论坛徽章:
0
2 [报告]
发表于 2009-08-07 16:08 |只看该作者
强人,不过我已经淘汰telnet了 呵呵

貌似freebsd下 su成root 此用户必须是wheel组的用户 openbsd下也一样?

论坛徽章:
0
3 [报告]
发表于 2009-08-09 20:37 |只看该作者

回复 #2 zmoon 的帖子

应该是这样的,用户必须是wheel组

论坛徽章:
0
4 [报告]
发表于 2009-08-09 21:34 |只看该作者
Add a secondary group to you user.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP