精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>《FreeBSD使用大全》第二版>>4.2.5 系统级shell设置

主题:4.2.5 系统级shell设置
发信人: sungang(笨刚)
整理人: sungang(2003-09-16 12:12:31), 站内信件
4.2.5 系统级shell设置

命令解释程序shell是与用户关系最密切的应用程序,用户主要通过shell使用系统。

对于管理员来将,要为使用不同shell的用户都设置好基本的环境,就必须了解这两种风格的shell设置方式。系统登录时,sh将首先执行/etc/profile文件,为每个用户设置最基本的环境,而csh将使用/etc/csh.cshrc,csh.login和csh.logout作为系统csh资源文件。系统管理员可以改动这些资源文件,为用户提供一个最方便的使用环境。

执行了系统级别的登录文件之后,每个用户的shell就在该用户的主目录下寻找该用户个人的资源文件:sh使用.profile文件,csh使用.login和.cshrc文件。这些资源文件均使用相应的shell语言,/etc/profile和个人目录下的.profile使用sh风格的控制语言,/etc/cshrc和个人目录下的.login、.cshrc使用csh风格的控制语言。当然,系统管理员没有必要直接去修改个人主目录下的资源文件,这些文件应该由用户自己管理,但是系统管理员可以在生成帐号时为用户产生缺省的资源文件,以减轻用户设置资源文件的麻烦。

adduser命令缺省使用/usr/share/skel下的文件为用户提供各种资源文件的缺省设置,这个目录下除了可以放入shell的资源文件之外,还可以放入其他应用程序的资源文件。由于这些资源文件都是以点开头的隐藏文件,为了表示清楚,在skel目录下使用了一种转换方式,如使用dot.profile作为.profile的模板。

# ls /usr/share/skel

dot.cshrc               dot.mail_aliases        dot.rhosts

dot.login               dot.mailrc              dot.shrc

dot.login_conf          dot.profile

在/usr/share/skel中为用户设置的缺省配置文件,在用户生成之后,就不会对用户产生影响了。因此对系统登录文件进行修改更有效和直接。对于sh风格的用户,可以更改/etc/profile文件,对csh应更改/etc/csh.cshrc文件。在这些文件中可以改动shell使用的环境变量,这样来改变shell的行为方式,或者执行一系列自动操作,完成一些用户登录时需要自动执行的任务。

可以将用户的shell设置为特殊的应用程序,来达到对特殊用户进行限制的目的。例如,仅仅给予用户一个电子邮件信箱,但不想给他终端使用权,可以将用户的shell更改为/bin/true或者其他立即退出的程序。为了安全起见,用户shell应该是一个不存在漏洞的二进制程序,最好不要使用解释性语言脚本作为登录shell。

由于系统认可的shell程序是在/etc/shells文件中列出的程序,将特殊用户的shell设置为特殊的应用程序,但这些应用程序没有列入shells文件,那么这个用户就会被一些应用程序区分出与普通用户的差异,从而拒绝提供服务。例如ftp服务器程序ftpd,通过检查用户的shell是不是标准shell,来区分这个用户是普通用户还是用于特定目的的用户。

注意,不能轻易更改root用户的shell,因为这可能会造成root无法正常登录,而使得必要时无法正常执行系统维护。即使是将root的shell更改为其他另外的shell程序,例如bash,也是不正确的做法。虽然这些shell也是非常成熟的shell程序,仍然不合适使用它们作为root的shell。主要原因是这些shell一般没有被安装到根分区中,并且通常是动态连接的,就是说还依赖于一些动态连接库,那么当系统进入单用户状态时就会发生问题。另外这些shell可能会由于进行版本升级等原因,而偶然形成了一些故障,也会造成root无法正确登录。最后,由于这些非标准shell不一定来自于系统的安装盘,因此也存在对shell来源的安全信任问题,必须保证这些shell不是经攻击者更改过的版本。

如果要使用一些其他类别的shell提供的方便特性,可以在系统登录之后,使用.profile等资源文件,以全路径执行它们。

[关闭][返回]