分类: BSD
2005-10-17 14:18:20
TELNET的远程登录中,对root用户是不允许的.要打开此开关.必须查看telnetd源代码.
在telnetd的源代码中,远程登录是直接调用login.所以必须对login.c源程序进行更改.
在函数main中取得用户名到变量username中.
if (strncmp(instance + 1, "root", 4) == 0)
rootlogin = 1;
比较用户名是否为root
如果为root,rootlogin=1
随后进行登录安全检查.
if (pwd && rootlogin && !rootterm(tty))
goto failed;
如果pwd(即口令)为真(有口令且口令正确),并且是用root用户登录.而且函数rootterm(tty)
返回为0时.转到登录失败.
即我们再此要使rootterm(tty)返回为真.才能使我们远程登录成功.
当然可以简单的去掉rootterm(tty)函数.就可以达到该目的.但我们也可以去深究此问题
下去.
先来看看rootterm(tty)函数原形.
return ((t = getttynam(ttyn)) && t->ty_status & TTY_SECURE);
其实就是返回是否该tty是否远程安全.第一取得该ttyn的环境放到结构ttyent即t中.如果
为真并且该ttyn的安全属性中有安全终端属性,即为本地登录时,返回真.
我们如果远程登录的话.t->ty_status的属性中肯定没有包含TTY_SECURE.
getttynam函数位于文件libc/gen/getttyent.c中.