第八章 系统管理与优化基础
8.1 获得根用户权限:su
8.2 磁盘空间:df,diskcheck, du 
8.3 内存信息free,系统监视器,vmstat,ulimit,kill
8.4 系统负载信息ps,top,uptime,w,vmstat,pppsates,mailstats,mailq,statserial
8.5 管理帐号useradd,passwd, groupadd,redhat-config-users
8.6 日志文件
8.7 控制台访问
  8.1 获得根用户权限:su

一般只有根用户才能管理系统。su(substitute users)命令给你到根账号或系统上其它账号的访问权。直接以根用户登录不是个好习惯,通常以普通拥护登录,然后用su命令成为根用户来管理系统。

$whoami
whbian
$su -
Password:
su: incorrected password
Password:
#whoami
root
#exit
$whoami
whbian 

在缺省情况下,若调su命令没指定用户,则表示要获得根用户帐号的访问权。使用连字符号(-)表示在获得另外一个用户帐号的访问权时能够使用其环境变量。若输入了正确的口令,就成为根用户。若返回原来的shell,使用exit命令。 在以上操作中用到whoami指令,可以看出使用su后角色的转变。

还可以使用-s参数指定新的shell。使用-c参数去执行某些只有由根用户执行的任务(比如挂载一个闪存盘),这就很方便。关于su其他参数可以man su查阅。

在X11窗口环境下,若以普通用户执行需根用户权限的程序,会询问根用户口令,输入正确口令,就获得了根用户的权限。

TOP

 
  8.2 磁盘空间:df, diskcheck, du 
  • 管理磁盘分区。查看现存的分区表,改变分区的大小, 删除分区,或从空闲空间或附加的硬盘驱动器上添加分区。parted 工具会允许你执行这些任务。你还可以使用 fdisk 来执行多数此类任务(除重新划分分区以外)。你必须安装了 parted 软件包才能使用 parted 工具。要启动 parted ,在 shell 提示下以根用户身份键入命令 parted /dev/hdb ,这里的 /dev/hdb 是你想配置的设备名称。你会看到一个 (parted) 提示。键入 help 来查看可用命令的列表。如下为最常用的 parted 命令。
    命令 描述
    check minor-num 执行文件系统的简单检查
    cp from to 把文件系统从一个分区复制到另一个分区; fromto 是分区的次要号码
    help 显示可用的命令列表
    mklabel label 为分区表创建磁盘标签
    mkfs minor-num file-system-type 创建类型为 file-system-type 的文件系统
    mkpart part-type fs-type start-mb end-mb 不创建新文件系统而制作分区
    mkpartfs part-type fs-type start-mb end-mb 制作分区并创建指定的文件系统
    move minor-num start-mb end-mb 移动分区
    print 显示分区表
    quit Quit parted
    resize minor-num start-mb end-mb 重新划分分区大小,从 start-mbend-mb
    rm minor-num 删除分区
    select device 选择另一个设备来配置
    set minor-num flag state 在分区上设置标志; state 要么是 on,要么是 off

    注:在分区表中,Minor(次要)标签是分区号码。例如,次要号码为 1 的分区和 /dev/hda1 相对。Start(开始)和 End(结束)值以 MB 为单位。Type(类型)是 primary、extended、logical 中的一个。Filesystem(文件系统)是文件系统的类型,它可以是 ext2、ext3、FAT、hfs、jfs、linux-swap、ntfs、reiserfs、hp-ufs、sun-ufs 或 xfs 之一。Flags(标志)列列出了分区被设置的标准。可用的标志有: boot、root、swap、hidden、raid、lvm 或 lba。

    以下显示了parted的使用情况。

    [root@physics etc]# parted /dev/hda
    GNU Parted 1.6.3
    Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
    This program is free software, covered by the GNU General Public License.
     
    This program is distributed in the hope that it will be useful, but WITHOUT ANY
    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
    PARTICULAR PURPOSE.  See the GNU General Public License for more details.
     
    Using /dev/hda
    Information: The operating system thinks the geometry on /dev/hda is
    4864/255/63.  Therefore, cylinder 1024 ends at 8032.499M.
    (parted) p
    Disk geometry for /dev/hda: 0.000-38154.375 megabytes
    Disk label type: msdos
    Minor    Start       End     Type      Filesystem  Flags
    1          0.031  14998.183  primary   ntfs        boot
    2      14998.184  27996.086  extended              lba
    5      14998.214  27996.086  logical   fat32
    3      27996.086  37754.318  primary   ext3
    4      37754.319  38154.375  primary   linux-swap
    (parted) help
      check MINOR                   do a simple check on the filesystem
      cp [FROM-DEVICE] FROM-MINOR TO-MINOR      copy filesystem to another partition  help [COMMAND]
      prints general help, or help on COMMAND
      mklabel LABEL-TYPE            create a new disklabel (partition table)
      mkfs MINOR FS-TYPE            make a filesystem FS-TYPE on partititon MINOR
      mkpart PART-TYPE [FS-TYPE] START END      make a partition
      mkpartfs PART-TYPE FS-TYPE START END      make a partition with a filesystem
      move MINOR START END          move partition MINOR
      name MINOR NAME               name partition MINOR NAME
      print [MINOR]                 display the partition table, or a partition
      quit                          exit program
      rescue START END              rescue a lost partition near START and END
      resize MINOR START END        resize filesystem on partition MINOR
      rm MINOR                      delete partition MINOR
      select DEVICE                 choose the device to edit
      set MINOR FLAG STATE          change a flag on partition MINOR
    (parted) q
    Information: Don't forget to update /etc/fstab, if necessary.
    [root@physics etc]#

     

     

  • 使用df可以查看目前已挂载的全部文件系统的信息,如设备名、总大小、已用大小、可用大小、挂载点等。以下为在shell提示下输入df指令的输出结果 。
    Filesystem           1k-blocks      Used Available Use% Mounted on
    /dev/hda2             10325716   2902060   6899140  30% /
    /dev/hda1                15554      8656      6095  59% /boot
    /dev/hda3             20722644   2664256  17005732  14% /home
    none                    256796         0    256796   0% /dev/shm

    磁盘空间以 KB 为单位显示。要查看以 MB 和 GB 为单位的信息,使用 df -h 命令。-h 选项代表人可读格式。它的输出类似于:

    Filesystem            Size  Used Avail Use% Mounted on
    /dev/hda2             9.8G  2.8G  6.5G  30% /
    /dev/hda1              15M  8.5M  5.9M  59% /boot
    /dev/hda3              20G  2.6G   16G  14% /home
    none                  251M     0  250M   0% /dev/shm

    在分区列表中,有一项是 /dev/shm。该项目代表系统的虚拟内存文件系统。

  • 监控文件系统。Red Hat Linux 提供了一个叫做 diskcheck 的工具程序,它监视系统上的空闲磁盘空间数量,会向管理员发送警告电子邮件。要使用该工具,你必须安装了diskcheck RPM 软件包。该工具作为每小时 cron 任务运行。其配置文件为/etc/diskcheck.conf。
  • 使用 du 指令可以给出某个指定目录的空间占用量。如果你不想查看每个子目录的用量,使用 du -hs 命令来使用人可读的格式只列出目录用量总和。使用 du --help 命令来查看更多选项。du指令的使用结果如下(图):参数-b或-k表示以字节或千字节来表示已用空间。利用du命令可以跟踪记录那些占用太多磁盘空间的目录或文件。#du --summarize -b /var/* | sort -nr以上指令组合表示以占用空间多少按从大到小的顺序对/var目录下的文件进行排序(图)。
  • 使用 symlinks 来检查指定目录中的符号连接。使用其-r这一递归参数可以来查看整个子目录的结构。
  • 节省磁盘空间。为了维护系统的正常运转,应该定期执行一些操作来释放磁盘空间。首先是不要安装太多不不需要的软件。还用就是删除一些没用的文件,如前面有波浪号的备份文件,名为core的文件等,*.o程序编译目标文件。前面有波浪号的备份文件,可以使用以下指令查找出并删除:# find / -name ~* - xdev | xargs rm -f。还应该查找名为core的文件。这是一些程序在非正常终止时生成的程序内存映像文件。可以利用ulimit命令来限制它们的大小上限。 可以使用以下指令生成一个可删除的文件清单。# find /\(-name core -o -name *.o\) -xdev > deletelist.txt。

    TOP

 
  8.3获取内存信息free,系统监视器,vmstat,ulimit,kill
  • 使用free给出内存的分配使用情况,缺省的以千字节为单位显示内存状况。其参数-s表示不断监视内存使用。#free -b -s1表示在终端窗口以字节问单位。每秒更新,不断显示内存使用情况。
                 total       used       free     shared    buffers     cached
    Mem:        256812     240668      16144     105176      50520      81848
    -/+ buffers/cache:     108300     148512
    Swap:       265032        780     264252
  • 如果和 free 相比,你更喜欢使用图形化界面,你可以使用 GNOME 系统监视器。要从桌面上启动它,选择面板上的「主菜单」 => 「系统工具」 => 「系统监视器」或在 X 窗口系统的 shell 提示下键入 gnome-system-monitor。然后选择「系统监视器」标签。

  • 使用vmstat命令生成虚拟内存使用情况报告。不带参数的vmstat显示一个一次性的报告:进程,内存,交换区,来自块设备的输入输出量,系统中断,CPU的利用情况(图)。
  • 查看shell的ulimit设置。#ulimit -a 显示当前系统限制清单(图)。普通用户和根用户看到的限制值不一样。作为管理员,可以限制每个用户能够使用的内存总量或进程个数。有时要调整stack size的大小来确保程序的运行。
    [root@physics etc]# ulimit -a
    core file size           (blocks, -c) 0
    data seg size             (kbytes, -d) unlimited
    file size                 (blocks, -f) unlimited
    max locked memory     (kbytes, -l) unlimited
    max memory size         (kbytes, -m) unlimited
    open files                                   (-n) 1024
    pipe size               (512 bytes, -p) 8
    stack size               (kbytes, -s)  8192
    cpu time                 (seconds, -t) unlimited
    max user processes                   (-u) 1023
    virtual memory          (kbytes, -v) unlimited
  • 使用kill命令释放内存。利用ps可以显示目前运行的进程信息,有时需要使用一些参数才可以看到所有的进程。找出进程号(PID),用kill指令来终止某个进程。若无法终止,可加开关-9来试试。

TOP

 
  8.4 获得系统进程:ps,top,uptime,w,vmstat,pppsates,mailstats,mailq,statserial
  • ps ax 命令显示当前进程的列表,该列表中包括其他用户拥有的进程。要显示进程以及它们的所有者,使用 ps aux 命令。该列表是一个静态列表;换一句话说,它是在你启用这项命令时正在运行的进程的快照。如果你需要一个时刻更新的运行进程列表,使用下面描述的 top 命令。

    ps 的输出会很长。要防止它快速从屏幕中滑过,你可以把它管道输出给 less 命令:

    ps aux | less

    你可以使用 ps 命令和 grep 命令的组合来查看某进程是否在运行。譬如,要判定 emacs 是否在运行,使用下面这个命令:

    ps ax | grep emacs
     
  • top 指令是一个系统监视程序,可以来显示系统当前内存、交换文件和进程等的信息。top 指令还可以显示系统已经运行了多少时间、CPU的工作状态、每个进程的规模等信息。可在shell提示下输入指令 top

    以下提供了一个 top 的输出示例:

    00:53:01  up 6 days, 14:05,  3 users,  load average: 0.92, 0.87, 0.71
    71 processes: 68 sleeping, 2 running, 1 zombie, 0 stopped
    CPU states:  18.0% user   0.1% system   16.0% nice   0.0% iowait  80.1% idle
    Mem:  1030244k av,  985656k used,   44588k free,       0k shrd,  138692k buff
                        424252k actv,   23220k in_d,  252356k in_c
    Swap: 2040212k av,  330132k used, 1710080k free                  521796k cached
    
      PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
    15775 joe        5   0 11028  10M  3192 S     1.5  4.2   0:46 emacs
    14429 root      15   0 63620  62M  3284 R     0.5 24.7  63:33 X
    17372 joe       11   0  1056 1056   840 R     0.5  0.4   0:00 top
    17356 joe        2   0  4104 4104  3244 S     0.3  1.5   0:00 gnome-terminal
        1 root       0   0   544  544   476 S     0.0  0.2   0:06 init
        2 root       0   0     0    0     0 SW    0.0  0.0   0:00 kflushd
        3 root       1   0     0    0     0 SW    0.0  0.0   0:24 kupdate
        4 root       0   0     0    0     0 SW    0.0  0.0   0:00 kpiod
        5 root       0   0     0    0     0 SW    0.0  0.0   0:29 kswapd
      347 root       0   0   556  556   460 S     0.0  0.2   0:00 syslogd
      357 root       0   0   712  712   360 S     0.0  0.2   0:00 klogd
      372 bin        0   0   692  692   584 S     0.0  0.2   0:00 portmap
      388 root       0   0     0    0     0 SW    0.0  0.0   0:00 lockd
      389 root       0   0     0    0     0 SW    0.0  0.0   0:00 rpciod
      414 root       0   0   436  432   372 S     0.0  0.1   0:00 apmd
      476 root       0   0   592  592   496 S     0.0  0.2   0:00 automount

    要退出 top,按 [q] 键。

    top 指令还有一些交互式的指令,见下表。  
    c 显示命令名称或者完整的命令行
    Ctrl + L 刷新显示画面
    f 增加或者减少数据显示域
    H 按照内存使用量的大小顺序排序显示
    h,? 显示帮助信息画面
    i 切换显示休眠或者无响应的进程画面
    k 使用某个进程的PID终止它
    l 切换一般或者最大清单的显示画面
    m 切换内存信息的显示画面
    n,x 设置进程的个数( n是交互式方式)
    P 按照CPU占用情况的顺序排序显示
    q 退出
    r 改变某个进程的优先权
    S 改变CPU占用情况的显示画面
    s 设置更新显示画面的时间间隔
    空格键 更新显示画面
    t 切换进程或者CPU状态显示画面
    W 变成当前设置值到$HOME/.toprc文件中

  • 若使用图形化界面,你可以使用 GNOME 系统监视器。要从桌面上启动它,选择面板上的「主菜单」 => 「系统工具」 => 「系统监视器」或在 X 窗口系统的 shell 提示下键入 gnome-system-monitor  。选择「进程列表」标签。「系统监视器」标签是关于CPU,内存,硬盘的。

    GNOME 系统监视器允许你在正运行的进程列表中搜索进程,还可以查看所有进程、你拥有的进程、或活跃的进程。

    要了解更多关于某进程的情况,选择该进程,然后点击「更多信息」按钮。关于该进程的细节就会显示在窗口的底部。

    要停止某进程,选择该进程,然后点击「结束进程」。这有助于结束对用户输入已不再做出反应的进程。

    要按指定列的信息来排序,点击该列的名称。信息被排序的那一列会用深灰色显示。

    按照默认设置,GNOME 系统监控器不显示线程。要改变这个首选项,选择「编辑」 => 「首选项」,点击「进程列表」标签,然后选择「显示线程」。首选项还允许你配置更新间隔;每个进程默认显示的信息;以及系统监视器图表的颜色。

  • 使用uptime和w指令确定系统已运行时间。uptime指令显示系统运行时间、当前在系统上的用户,以及三种系统负载的平均值。
    #uptime

    12 : 44am up 8 : 16 , 3 users , load averge : 0.11 , 0.10 , 0.04

     
     


    若觉得uptime给出的信息太少,可以使用w命令。它可以列出当前已经登录的用户在做什么,如图所示。
    [root@physics etc]# w
     22:41:23  up  5:24,  9 users,  load average: 0.12, 0.32, 0.31
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
    root     :0       -                 5:18pm   ?     0.00s  1.39s  /usr/bin/gnome-session
    root     pts/1    :0.0              9:32pm 30:42   0.38s  0.38s  bash
    root     pts/2    :0.0              6:26pm  4:07m  0.25s  0.15s  vim readme
    root     pts/3    :0.0              8:39pm  1:12   0.16s  0.01s  telnet localhost
    root     pts/4    :0.0              9:25pm  1.00s 12.40s  0.02s  w
    root     pts/5    :0.0             10:32pm 36.00s  0.18s  0.01s  telnet localhost
    iraf     pts/6    localhost.locald 10:40pm  1:12   0.09s  0.09s  -csh
    whbian   pts/7    localhost.locald 10:40pm 36.00s  0.05s  0.05s  -bash
    root     pts/8    :0.0             10:40pm  7.00s  0.10s  0.10s  bash
  • 使用pppsates 和mailstats、mailq命令获取网络和邮件信息。pppsates会显示一个动态的关于PPP连接状态的统计信息画面。 mailstats是sendmail软件中的一个组成部分,可以用来显示系统邮件使用情况。mailq显示目前系统发邮件的序列。 # mailstats -f /var/state/sendmail.st
  • 使用statserial命令监控串行口。例如可以来监控modem,#statserial /dev/modem

TOP

 
  8.5 管理帐号:useradd,passwd,groupadd,redhat-config-users

作为一个管理员,一个主要的任务就是管理用户,如新帐号的建立,帐号的停用,限定每个帐号的磁盘空间、内存以及进程数。可以使用在X11窗口系统中的图形化软件,或在shell提示下输入指令来操作。

  • 使用 useradd 在系统上添加用户。
    1. 使用 useradd 命令来创建一个锁定的用户账号。以下所加用户的缺省值来自/etc/default/(关于根目录等)和/etc/skel/(一些.文件)。
      useradd <username>
    2. 使用 passwd 命令,通过指派口令和口令老化规则来给某账号开锁:
      passwd <username>

    下表列出了useradd 的命令行选项。

    选项 描述
    -c comment 用户的注释。
    -d home-dir 用来取代默认的 /home/username 主目录。
    -e date 禁用账号的日期,格式为:YYYY-MM-DD
    -f days 口令过期后,账号禁用前的天数(若指定了 0,账号在口令过期后会被立刻禁用。若指定了 -1,口令过期后,账号将不会被禁用)。
    -g group-name 用户默认组群的组群名或组群号码(该组群在指定前必须存在)。
    -G group-list 用户是其中成员的额外组群名或组群号码(默认以外的)列表,用逗号分隔(组群在指定前必须存在)。
    -m 若主目录不存在则创建它。
    -M 不要创建主目录。
    -n 不要为用户创建用户私人组群。
    -r 创建一个 UID 小于 500 的不带主目录的系统账号。
    -p password 使用 crypt 加密的口令。
    -s 用户的登录 shell,默认为 /bin/bash。
    -u uid 用户的 UID,它必须是独特的,且大于 499。

  • 添加组群

    要给系统添加组群,使用 groupadd命令:

    groupadd <group-name>

    groupadd的命令行选。

    选项 描述
    -g gid 组群的 GID,它必须是独特的,且大于 499。
    -r 创建小于 500 的系统组群。
    -f 若组群已存在,退出并显示错误(组群不会被改变)。如果指定了 -g 和 -f 选项,而组群已存在, -g 选项就会被忽略。

  • 使用X窗口系统中的用户管理器来管理用户和组。运行X窗口系统,在shell提示下输入redhat-config-users 命令;或者点击面板上的「主菜单」 => 「系统设置」 => 「用户和组群」。
  • 限制登录。用户在登录系统后使用帐号建立时指定的shell。利用指令chsh -l可以列出目前系统可用的shell。利用chsh可以改变用户的shell,也可以使用户在进入系统后立即执行某个程序。如关于ppp服务器的配置。
  • 也可以直接修改配置文件来管理帐号:/etc/passwd, /etc/shadow, /etc/group,及相应备份文件。
  • 设定磁盘配额。详情见第九章 磁盘配额。常用指令如下:
    quota 生成关于硬盘配额的报告
    quotaon 对用户打开硬盘配额功能并设置硬盘配额
    quotaoff 对用户关闭硬盘配额功能
    repquota 也生成关于硬盘配额的报告
    edquota 编辑调整用户的配额
    quotacheck 检查文件系统的配额使用情况
  • TOP

 
8.6 日志文件

日志文件(Log files)是包含关于系统消息的文件,包括内核、服务、在系统上运行的应用程序等信息。不同的日志文件记载不同的信息。在分析系统故障、网络入侵等方面有重要的作用。某些日志文件被叫做 syslogd 的守护进程控制。被 syslogd 维护的日志消息列表可以在 /etc/syslog.conf 配置文件中找到。

多数日志文件位于 /var/log 目录中。某些程序如 httpd 和 samba 在 /var/log 中有单独的存放它们自己的日志文件的目录。 注意,日志文件目录中会有多个后面带有数字的文件。这些文件是在日志文件被循环时创建的。日志文件被循环使用,因此文件不会变得太大。 logrotate 软件包中包含一个能够自动根据 /etc/logrotate.conf 配置文件和 /etc/logrotate.d 目录中的配置文件来循环日志文件的 cron 任务。按照默认配置,日志每周都被循环,并被保留四周之久。

大多数日志文件使用纯文本格式,可以使用more、vi等来查看。大多数日志需根特权才能查看。 也可以使用日志查看器来查看。要启动这个应用程序,点击面板上的「主菜单」 => 「系统工具」 => 「系统日志」,或在 shell 提示下键入 redhat-logviewer 命令。

从下拉菜单中选择「编辑」 => 「首选项」。在「日志文件」标签中改变程序所要查找日志文件的位置。

TOP

8.7 控制台访问

当普通用户(非根用户)在本地登录到计算机上,他们被授予两类特殊权限:

  1. 可以运行某些通常无法运行的程序

  2. 可以访问某些通常无法访问的文件(通常是用来访问磁盘、光盘等的特殊设备文件)

在控制台登录的用户都被允许运行通常只限于根用户的程序。例如在控制台使用 [Ctrl]-[Alt]-[Del]键组合来关闭并重启系统,包括在图形化界面菜单内的程序 haltpoweroffreboot等。

8.7.1 禁用通过 Ctrl-Alt-Del 关机。

按照默认设置,/etc/inittab 文件指定你的系统可在控制台使用 [Ctrl]-[Alt]-[Del]键组合来关闭并重启系统。若想全面禁用之,需要把 /etc/inittab 文件中关于ca一行变成注释,在这一行开头加一个井号( # ):

ca::ctrlaltdel:/sbin/shutdown -t 3 -r now

若同时想让个别非根用户从控制台使用 [Ctrl]-[Alt]-[Del]来重启系统。可以在ca这一行添加-a 选项:

  1. 在上面显示的 /etc/inittab的那一行中添加 -a选项,如下所示:

    ca::ctrlaltdel:/sbin/shutdown -a -t3 -r now

    -a 标志通知 shutdown命令去寻找 /etc/shutdown.allow 文件。

  2. 在 /etc 目录中创建一个叫做 shutdown.allow 的文件。shutdown.allow 文件列出允许使用 [Ctrl]-[Alt]-[Del]来关闭系统的用户名。 /etc/shutdown.allow文件使用列表格式,每行列出一名用户,如下所示:

    whbian
    bian
    bwh

根据以上 shutdown.allow 文件的例子,whbian、bian、和 bwh 被允许使用 [Ctrl]-[Alt]-[Del]关闭系统。

关于 shutdown.allow 的详细信息,请参阅 shutdown的说明书(man)页。

8.7.2 禁用控制台程序访问

为了禁用用户对控制台程序的访问,你应该以根用户身份运行下面的命令:

rm -f /etc/security/console.apps/*

要只想取消在控制台上使用命令:poweroff、halt、和 reboot,以根用户身份运行下面的命令:

rm -f /etc/security/console.apps/poweroff rm -f /etc/security/console.apps/halt rm -f /etc/security/console.apps/reboot

8.7.3 禁用所有控制台访问

PAM pam_console.so 模块管理控制台文件的权限和验证。(关于配置 PAM 的详情,请参阅《Red Hat Linux 参考指南》。)如果你想禁用所有的控制台访问,包括程序和文件的访问,把所有 /etc/pam.d 目录中引用 pam_console.so 的句子都改为注释。以根用户使用下面的脚本就可以达到这一目的:

cd /etc/pam.d
for i in * ; do
sed '/[^#].*pam_console.so/s/^/#/' < $i > foo && mv foo $i
done

8.7.4 定义控制台

pam_console.so 模块使用 /etc/security/console.perms 文件来判定系统控制台上用户的权限。该文件的语法非常灵活;你可以编辑该文件。然而,默认文件中有一行看起来如下:

<console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9]

当用户登录后,他们会被连接到某种有名称的终端,要么是名称类似 :0 或 mymachine.example.com:1.0 的 X 服务器,要么是类似 /dev/ttyS0 或 /dev/pts/2的设备。默认设置中,本地虚拟控制台和本地 X 服务器被定义为本地,但若想把/dev/ttyS1上的串线终端也当作本地,你可以把上面一行改为:

<console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9] /dev/ttyS1

8.7.5 使文件可从控制台访问

/etc/security/console.perms 文件中的某段包含以下几行:

<floppy>=/dev/fd[0-1]*\
/dev/floppy/*/mnt/floppy*
<sound>=/dev/dsp*/dev/audio*/dev/midi*\
/dev/mixer*/dev/sequencer\
/dev/sound/*/dev/beep
<cdrom>=/dev/cdrom*/dev/cdroms/*/dev/cdwriter*/mnt/cdrom*

如果有必要,你可以在这段里加入你自己编写的句子。请确定你添加的句中所指代的是正确的设备。譬如,你可以添加以下这一行:

<scanner>=/dev/scanner/dev/usb/scanner*

(当然,请确定 /dev/scanner 的确是你的扫描仪设备,而不是你的硬盘驱动器。)

第二步是定义如何处置那些文件。在 /etc/security/console.perms 文件的最后一段寻找与以下类似的句子:

<console>0660<floppy>0660root.floppy
<console>0600<sound>0640root
<console>0600<cdrom>0600root.disk

然后,添加和以下类似的一行:

<console> 0600 <scanner> 0600 root

当你在控制台登录后,你就会被给予 /dev/scanner 设备的所有权,其权限是 0600(仅可被你读写)。当你注销后,该设备就会被根用户所有,权限依旧是 0600(现在将只能被根用户读写)。

8.7.6 为其它应用程序启用控制台访问

首先,只有在/sbin 或 /usr/sbin 中的应用程序才能在控制台上访问。

  1. 创建一个从你的应用程序(如以下例子中的 foo)到 /usr/bin/consolehelper 的链接:

    cd /usr/bin
    ln -s consolehelper foo
  2. 创建文件 /etc/security/console.apps/foo

    touch /etc/security/console.apps/foo
  3. 在 /etc/pam.d/ 目录中为 foo 服务创建一个 PAM 配置文件。做到它的简单方法是使用 halt 服务的 PAM 配置文件的副本,如果你想改变行为的话,修改该文件。

    cp /etc/pam.d/halt /etc/pam.d/foo

现在,当你运行 /usr/bin/foo 时,它就会调用 consolehelper ,该命令会借助 /usr/sbin/userhelper 来验证用户。要验证用户, consolehelper 会询问根用户的口令,然后使用根权限来运行 /usr/sbin/foo

在 PAM 配置文件中,应用程序可以配置使用 pam_timestamp 模块。按照默认设置,成功验证会被缓存五分钟。在这段时期内,在同一会话中使用 pam_timestamp 的应用程序会自动为该用户验证 — 用户不必再输入根口令。

该模块被包括在 pam 软件包中。要启用这项功能, etc/pam.d/ 中的 PAM 配置文件必须包括以下几行:

authsufficient/lib/security/pam_timestamp.so
sessionoptional/lib/security/pam_timestamp.so

第一个以 auth 开头的行应该在任何 auth sufficient 行之后,以 session 开头的行应该在所有 session optional 行之后。

如果配置使用 pam_timestamp 的应用程序被成功地验证, 图标就会显示在面板的通知区域。验证过期后(默认为五分钟),该图标就会消失。用户可以通过点击图标并选择忘记验证选项来忘记缓存验证。

TOP