
问题描述:
RedHat Linux 9.0 图形界面登陆,使用 ctrl + Alt + F1到F6 进入字符界面后键盘没有反应
然后键盘不能输入任何东西,数字键盘的"Num lock"也没有反应
只是显示
Red Hat Linux release 9 (Shrike)
Kernel 2.4.20-8 on an i686
Shrike login:
解析:
redhat linux9.0的配置
1.安装samba
首先验证您的机器中是否已经安装samba
rpm -qa|grep samba,如果出现
samba-mon-2.2.7a-7.9.0
samba-client-2.2.7a-7.9.0
samba-2.2.7a-7.9.0
那么恭喜你,你已经安装好了samba,如果没有以上那些东东,请安装,安装方法很简单,redhat
linux 9.0第一张光盘里就有cdrom/RedHat/RPMS/
以下是我的详细安装过程
把第一张光盘放进光驱,他会自动挂接的,省得自己动手mount了
#cd /mnt/cdrom/RedHat/RPMS(主意大小写字母,否则会出错的啊)
#rpm -ivh samba-mon-2.2.7a-7.9.0 (这个要先安装,安装的时候不一定要把后面的samba-mon-2.2.7a-7.9.0全部写完,比如写到samba-c的时候,多按几次Tab键,很省事的哦)
#rpm -ivh samba-2.2.7a-7.9.0
#rpm -ivh samba-client-2.2.7a-7.9.0(客户端)
安装了以上的东西之后,基本上就可以了,但为了配置的方便以及利用REDHAT LINUX9.0新特性,我建议在安装以下两个东东redhat-config-samba-1.0.4-1,samba-swat-2.2.7a-7.9.0光盘里都有,其中redhat-config-samba-1.0.4-1在第一张光盘里,samba-swat-2.2.7a-7.9.0在第二张光盘里,安装方法和上面的一样了.
通过上面的简单介绍,我想你已经安装好了,试验一下
#rpm -qa|grep samba(这是什么含义应该知道吧,如果不知道,建议先学学LINUX的基本命令)
redhat-config-samba-1.0.4-1
samba-mon-2.2.7a-7.9.0
samba-client-2.2.7a-7.9.0
samba-swat-2.2.7a-7.9.0
samba-2.2.7a-7.9.0
OK,安装成功!(建议,以上东西最好自己安装一次,系统上如果装的有,还是先卸载,这样,才能加深印象,如果卸载以后,安装出问题,可能是你没有完全卸载,解决方法要不继续查找卸载,要不强制安装)
2.配置
(1)方法1
利用我们安装的redhat-config-samba-1.0.4-1进行配置,方法如下:
开始--->系统设置--->服务器配置--->samba服务器
(我是在LINUX写这个文章,所以图形的东西我不会剪切,只好用简单的说一下了)
首选项-->服务器设置,这里你可以对samba服务器进行一些基本的设置里,应该说比较简单了,我看没有必要介绍了,配置好之后,记住重新启动服务.
重新启动的方法有两种:
#service *** b start或restart
#/etc/rc.d/init.d/ *** b start
(2)方法2
利用samba-swat-2.2.7a-7.9.0
首先,你要修改swat的配置文件,默认的情况下是关闭的
service swat
{
port = 901 (swat用到的端口是901)
socket_type = stream(类似tcp协议的东西,呵呵这是我自己的理解)
wait = no
only_from = 127.0.0.1(只从这个启动swat,关键!)
user = root(启动swat用到的名子)
server = /usr/ *** in/swat
log_on_failure += USERID
disable = yes (一定要把yes改成no)
}
修改过之后,启动xid就可以了
启动方法跟刚才我说的一样
然后在浏览器里些上127.0.0.1:901/重重的按回车,你发现你成功了 !(注意,这个IP地址要跟你在SWAT配置文件里的IP地址一样才形,切记!)
至于如何使用swat,自己摸索一下应该不成问题了,配置完成以后,记得重新启动服务就可以了.对了,为了使得samba和swat在每次开机的时候启动,你可以这样:
#setup,然后找到system service,在SMB和SWAT前搞个*,也可以#ntsysv,同样的效果.
(3)方法3
利用samba-2.2.7a-7.9.0,这是最根本的东西,不管用什么工具,掌握其原理才是最重要的,像网页制作一样,虽然工具很多,但一定要熟悉HTML语言,才能编的好的网页(扯蛋!呵呵)
装好samba-2.2.7a-7.9.0之后,会在/etc/samba/下形成己个文件
*** b.conf *** bpasswd *** busers lmhosts,如果没有其中的一个,你可以touch创建
修改 *** b.conf文件
我只做简单的说明:guest ok 和public是一样的,read only 和writable是相反的,没什么区别
workgroup=(工作组名子,填上你目前的LAN的工作组)
bios=(最好是你的机器名,如果把改句注消,默认的是你LINUX机器名,不过,最好还是自己填上)
client code page=936(默认是850,936是简体中文的意思,这个要记住,难道不记得你mount你windows系统下的中文名子都是???,就是因为你没有加-o iocharset=cp936的原因!)
guest account=nobody(guest帐号,这于你定义的共享文件颊有关,其中nobody在 *** busers里有)
security = SHARE(有四个级别,不多说)
encrypt passwords = Yes(加密的密码, win98/2000传送的密码都是加密的,所以这里要yes)
以上都是[global]的内容,其实,很多呢,水平有限不多说了.
下面就是你要开的共享的东西,要说明的是,文件夹共享的属性取决于该文件颊在LINUX里的权限设定
[myxfc]
ment = myxinfc
path = /home/xinfc
read only = No
guest ok = Yes
[tmp]
path = /home
valid users = hehl
write list = @staff
read only = No
guest ok = Yes
共享的设定其实很简单,主要是路径和权限的问题,这两个搞清楚了 ,应该没问题了
该介绍的我都介绍完了,重新启动服务!
或许您会发现客户端无法连接,奶奶的,真让人生气,忙了这么久,还是不能访问,why?
1)客户端应安装tcp/ip bios ipx(这个东东不太懂)
2lmhosts, IP地址和bios名子对应.
3)iptables(这个东西最坏,就是因为他,我浪费了两天时间!我得出一个小小的结论,做各种配置前把iptables给关闭!)
由于我对iptables不太懂,我的解决方式有两种:
1:#setup 然后选择防火墙,然后关闭
2.修改/etc/sysconfig/iptables
-A INPUT -j RH-Lokkit-0-50-INPUT
-A FORWARD -j RH-Lokkit-0-50-INPUT
-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 --syn -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 --syn -j REJECT
COMMIT
把0:1023的两行的REJECT改成ACCEPT
重新启动防火墙就可以了
#service iptables start
本文以redhat 8.0 *** 作系统平台为背景,阐述如何实现启动级别为3时的自动登录,及自动运行相应程序,并简要介绍了如何在redhat 8.0下自动登录X window(系统启动级别为5),并自动运行指定的应用程序。一、启动级别为3时自动登录的实现
启动级别为3时自动登录的实现涉及两个软件包:mingetty-1.00-3.src.rpm软件包及util-linux-2.11r-10.src.rpm软件包。
(1)mingetty-1.00-3.src.rpm软件包
对于启动级别为3的自动登录的实现,仍然需要考察/etc/inittab脚本,
3:123:respawn:/sbin/mingetty tty3
因此,如果想在启动级别3的情况下实现自动登录,必须要了解mingetty的功能,甚至要修改mingetty的代码。用命令rpm -qf /sbin/mingetty 可知redhat 8.0版本的mingetty包含在mingetty-1.00-3.src.rpm软件包中,下载该软件包,安装源代码,缺省情况下,代码会安装在/usr/src/redhat/下,我们关心的只是mingetty.c源文件。mingetty.c约有五百行代码,主要实现如下功能:
打开指定的tty(由参数指定);
提示用户登录(login:);
获得登录用户名;
把用户登录名作为参数,调用/bin/login。
我们所关心的部分实质上只有以下三行:
... ...
438while ((logname = get_logname ()) == 0) //mingetty.c文件438行
439execl (_PATH_LOGIN, _PATH_LOGIN, "--", logname, NULL)
440error ("%s: can't exec " _PATH_LOGIN ": %s", tty, sys_errlist[errno])
... ...
第一行的功能是输出login提示,并获得用户输入的登录用户名,登录用户名由logname返回。因此,可作如下修改
... ...
438// while ((logname = get_logname ()) == 0) //注释掉本行,不再提示login:
439logname = "root" //添加本行代码
440execl (_PATH_LOGIN, _PATH_LOGIN, "--", logname, NULL)
441error ("%s: can't exec " _PATH_LOGIN ": %s", tty, sys_errlist[errno])
... ...
注意,这里假定用户以超级用户身份登录。
第二行以用户登录名为参数,调用/bin/login程序,进一步实现登录。因此,要想实现自动登录,还应该了解/bin/login的功能,必要时还应修改其源代码。
第三行为出错处理。
(2)util-linux-2.11r-10.src.rpm软件包
采用同样的方法,查看/bin/login所属软件包(redhad8.0版本的login包含在util-linux-2.11r-10.src.rpm软件包中),下载并安装util-linux-2.11r-10.src.rpm,login可执行文件有几个源文件编译而成,我们最关心的是login.c源文件(大约1500行的代码)。下面简要分析一下login要实现的功能,并对相应部分作必要的修改。
Login程序主要可以分为以下几个主要部分:
1.Login首先检查登录者是否为超级用户,如果不是超级用户,并且存在/etc/nologin文件,则输出该文件内容,并中止登录过程;主要由checknologin()实现;
2.如果登录用户是超级用户,那么login必须在/etc/securetty/中指定的tty列表中实现登录,否则将导致登录失败。同样可以不指定/etc/securetty文件,此时,超级用户可以在任何tty上登录。
3.经过前两步测试后,login接下来将提示输入登录密码(由getpass()调用完成,有兴趣的读者可参考其手册页面),并进行验证,如果密码不对,则提示重新登录。
4.顺利经过密码验证后,login还将检查是否存在.hushlogin文件,如果该文件存在,则执行一次"quiet"登录(所谓的quiet登录指的是,登录时不再提示邮件mail,不再显示最后一次登录时间,不输出任何消息。启动级别为3时,正常情况下输出这些信息)
5.login接下来设置登录tty的用户ID和组ID,并设置相应的环境变量,包括HOME、PATH、SHELL、TERM、LOGNAME等。对于普通用户来说,PATH缺省被设置成/usr/local/bin: /bin/usr/bin:;对于超级用户来说,PATH被设置成/sbin: /bin: /usr/sbin: /usr/bin:
6.login的最后一步是为用户启动shell。如果在/etc/passwd中没有为用户指定shell,那么将使用/bin/sh,如果在/etc/passwd中没有给出当前工作目录,则使用"/"。
至此,一个完整的登录过程就结束了。
从以上对login源程序分析过程中可发现,如果要实现自动登录,应该在第三步做文章,设法绕过提示输入密码以及对密码进行验证这一过程。实际上很简单,login源程序对是否要求输入密码设置了一个开关控制passwd_req,缺省情况下,其值为1(passwd_req = 1),即要求输入密码进行身份验证。把该行代码改为(passwd_req = 0)后,问题就解决了。即对源文件作如下修改即可:
... ...
402fflag = hflag = pflag = 0 //login.c文件402行
403//passwd_req = 1 //缺省时,要求进行密码验证,注释掉本行
404passwd_req = 0//添加本行
... ...
修改后,可以直接使用util-linux-2.11r-10.src.rpm提供的Makefile进行重新编译,也可以自己对其编译:
gcc -o login login.c setproctitle.c checktty.c xstrncpy.c -Wall -lcrypt注意包含后面的编译选项-lcrypt,否则会出问题。
有了新版的mingetty及login后,拷贝mingetty到/sbin/目录,拷贝login到/bin目录,并将/etc/inittab中的启动级别设置为3,再重新引导系统即可(读者可以自己写一个脚本实现上述过程)。
如果读者对mingetty或login代码的其他部分感兴趣,可以反复修改login.c或mingetty.c的源代码,测试一下代码的功能,这里要注意的是,在拷贝新版mingetty和login之前,一定要把原来的mingetty和login备份,同时还要准备系统引导盘(有系统安装盘亦可,这样读者有机会键入linux rescue),在测试新版程序前更应如此,如果对代码修改稍有不当,系统将不能正常启动。
如果不想再作进一步的代码测试,只是按本文给出的方法进行代码修改,在系统启动上不会出现什么问题。
二、自动登录后,自动运行特定的应用程序
在实现了启动级别3时的自动登录后,自动运行应用程序非常简单,把应用程序添加在/etc/rc.d/rc.local脚本中既可。(读者可以尝试一下把startx加入脚本中,看一看效果如何。在某种意义上,又增加了一种自动登录X window的方法)
三、对自动登录X window(系统启动级别为5),并自动运行指定的应用程序的补充
在"如何实现自动登录linux"中,主要以redhat 7.2平台为背景进行阐述的,其中的自动登录部分可以直接用于redhat 8.0中,不需要任何修改。
但是,登录后自动运行应用程序的接口在redhat 8.0中有所不同,主要是登录gnome后,自动运行应用程序的接口有所改变:首先点击面板上的GNOME帮助(那个红色的小帽子),然后选择/其它/首选项/Sessions,在Session对话框的启动程序属性页中添加要启动的程序即可。
对于登录kde后,自动运行程序的接口没有改变。
四、结论
本文同"如何实现自动登录linux"一文,基本上解决了如何实现自动登录Linux,并自动运行相应应用程序的问题。对于两个最常见的启动级别(3、5),都给出了各自的方法。
在系统初始化到mingetty及login这一阶段,内核实际上已经完成了引导过程,已经到了系统初始化的最高阶段,与内核没什么关系了。此时,主要是/sbin/init根据/etc/inittab的内容而相机行事。读者可通过(man 8 init)或者(man 5 inittab)了解更多东西。
在对文中提到的软件包修改时,请遵守GNU General Public License(GPL)相关标准,另外,替换login通常被视为黑客行为,应当谨慎行事。
参考文献
1.login手册页面
2.mingetty-1.00-3.src.rpm,在redhat 8.0的发行版本的源代码中,包含该软件包;
3.util-linux-2.11r-10.src.rpm,
可在http://rpmfind.net/linux/RPM/redhat/8.0/i386/util-linux-2.11r-10.i386.html处下载,注意下载源代码包(..src.rpm)
关于作者
郑彦兴,男,现攻读国防科大计算机学院博士学位。您可以通过电子邮件 mlinux@163.com和他联系
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)