要 ftp 不要 telnet 如何设?

  •   2009-07-28/15:33
  • 作者: woju (躲起来了) 看板: BSD
    标题: Re: [help]请 教 要 ftp 不要 telnet 如何设?
    时间: Sun Feb 15 16:21:25 1998

    ※ 引述《demonhuang.bbs@csie.nctu.edu.tw (小黄)》之铭言:
    : ==> 在 haha.bbs@bsd.hs.ntnu.edu.tw (haha) 的文章中提到:
    : : 我想让使用者只用ftp 进来主机
    : : 但不让这些使用者用telnet 进来主机
    : :         (but有些使用者还是可以让它进来)
    : : 对於这些特别的使用者如何设定呢???
    :   把那些使用者的 shell 改掉 .like /noexistence ..
    刚好最近也在处理类似的 ftp/login 机制,除了传统做法 -- 改 login shell 外,
    还可配合其它机制的辅助让 login access control 更有弹性。

    /nonexistent
    /sbin/nologin
    是典型的 no login shells,若要让 ftp account 能正常使用得在 /etc/shells
    有对应的 entries。

    ftp://freebsd.ntu.edu.tw/freebsd/woju/source/telnetd.tgz
    有更新,修改了 safe_exit() 让 deny try 的「代价」少一点:

    safe_exit(int n)
    {
       struct rtprio rp;

       rp.prio = RTP_PRIO_MAX;
       rp.type = RTP_PRIO_REALTIME;
       rtprio(RTP_SET, 0, &rp);
       rp.type = RTP_PRIO_NORMAL;
       rtprio(RTP_SET, 0, &rp);
       rp.type = RTP_PRIO_IDLE;
       rtprio(RTP_SET, 0, &rp);
       setgid(65534);
       initgroups("nobody", 65534);
       chroot("/usr/local/srclocal/telnetd");
       chdir("/");
       setuid(65534);
       setpriority(PRIO_PROCESS, 0, 20);
       setpriority(PRIO_PGRP, 0, 20);
       setpriority(PRIO_USER, 0, 20);
       execl("/telnets", 0);
       sleep(60);
       exit(n);
    }

    setgid/chroot/setuid 将程式切换到较安全的状态。

    rtprio/setpriority 将 prio/nice 调到最大,也就是让这个 process 吃量
    少的系统(cpu)资源。

    execl 将 telnetd 换成 telnets,节省记忆体(vsz/rss)的使用,telnets 非常小,
    主要的任务是「拖时间 & 省资源」。

    telnet://bbs.ee.ntu.edu.tw BSD 板精华区
    http://bbs.ee.ntu.edu.tw/cgi-bin/bbs2html_cgi?boards/BSD/
    -> 3. ◆ FreeBSD 快速入门 (由网路安装FreeBSD)
       -> 7. ◇ [fromzero] telnetd
    有相关的资料。

    接下来谈的和原问题有较直接的关 -- /etc/login.access
    较保守的设定例如下:
    +:woju:.ee.ntu.edu.tw
    -:wheel:ALL EXCEPT local freebsd.ee.ntu.edu.tw
    -:ALL:ALL EXCEPT LOCAL

    login.access 的特性是 "first match",从第一行开始比对,如果 match 就直接
    return result,所以我们应将「特例」量往前放,是「通用性的规则」该
    放後头。

    login.access 的格式为
    perm(+|-):users:origins
    以上面的例子来说,第一行 woju 可以从 *.ee.ntu.edu.tw login,第二行 wheel
    group 只能从 local 或 freebsd.ee.ntu.edu.tw login,第三行拒绝所有 remote
    login。

    man login.access 有更详细的说明。

    要特别说明的是 origins 会先使用 domain name,若查不到 domain name *才* 会
    使用 ip,也就是我们 *不能* 使用 ip 来代表有 domain name 的主机,举例说:
    -:wheel:ALL EXCEPT local 140.112.19.123
    将 *无法* 让 wheel group 的人从 140.112.19.123 (freebsd.ee.ntu.edu.tw)
    login。

    此外请记得将 /etc/inetd.conf  rlogin 相关的 entries 全关掉,rlogind 不
    认得 /etc/login.access。
    --------------------------------------------------------------------------------吴 庆 鸿,woju@freebsd.ee.ntu.edu.tw | 台大电机,http://bbs.ee.ntu.edu.tw


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多