Suse Linux Reference
Suse Linux Reference
10.1
April07,2006
www.novell.com Reference
Reference
List of Authors: Jrg Arndt, Stefan Behlert, Frank Bodammer, James Branam, Volker Buzek, Klara Cihlarova, Stefan Dirsch, Olaf Donjak, Roman Drahtmller, Thorsten Dubiel, Torsten Duwe, Thomas Fehr, Stefan Fent, Werner Fink, Jakub Friedl, Kurt Garloff, Joachim Gleiner, Carsten Gro, Andreas Grnbacher, Berthold Gunreben, Franz Hassels, Andreas Jaeger, Jana Jaeger, Klaus Kmpf, Andi Kleen, Hubert Mantel, Lars Marowsky-Bree, Chris Mason, Johannes Meixner, Lars Mller, Matthias Nagorni, Anas Nashif, Siegfried Olschner, Edith Parzefall, Peter Pml, Thomas Renninger, Hannes Reinecke, Scott Rhoades, Thomas Rlz, Heiko Rommel, Tanja Roth, Marcus Schfer, Thomas Schraitle, Klaus Singvogel, Frank Sundermeyer, Elisabeth Tobiasson, Hendrik Vogelsang, Klaus G. Wagner, Rebecca Walter, Christian Zoz This publication is intellectual property of Novell Inc. Its contents can be duplicated, either in part or in whole, provided that a copyright label is visibly located on each copy. All information found in this book has been compiled with utmost attention to detail. However, this does not guarantee complete accuracy. Neither SUSE LINUX GmbH, the authors, nor the translators shall be held liable for possible errors or the consequences thereof. Novell, the Novell logo, the N logo and SUSE are registered trademarks of Novell, Inc. in the United States and other countries. * Linux is a registered trademark of Linus Torvalds. All other third party trademarks are the property of their respective owners.
Contents
xi 15 17
17 26 35 45 49
53
53 60
65
65 68 86
99 101
101 110
Encrypting Partitions and Files . . . . . . . . . . . . . . . . . . . Confining Privileges with AppArmor . . . . . . . . . . . . . . . . Security and Confidentiality . . . . . . . . . . . . . . . . . . . .
141
141 143 143 144 152 152
153
153 155 155 156 156 157 158 159 160 160 161 161 162 165 166 167 168 168 169 169
Part III System 7 32-Bit and 64-Bit Applications in a 64-Bit System Environment
7.1 7.2 7.3 7.4 Runtime Support . . . . . . . . . . . Software Development . . . . . . . . . Software Compilation on Biarch Platforms . Kernel Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
171 173
173 174 174 176
177
177 181 189
193
194 194 203 208 208 209 210 212
213
213 220 220 221
1 1 Printer Operation
11.1 11.2 11.3 11.4 11.5 11.6 11.7 Workflow of the Printing System . . . . . . Methods and Protocols for Connecting Printers Installing the Software . . . . . . . . . . Configuring the Printer . . . . . . . . . . Configuration for Applications . . . . . . . Special Features in SUSE Linux . . . . . . . Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
227
228 229 229 230 237 237 243
251
251 252 252 253 253 254 255 256 257
259
259 260 266 267 268
271
271 273 279 284
289
289 291 298 300
301
302 303 306 308
309
310 311 312 313 314
315 317
321 323 333 334
Managing Network Connections with NetworkManager . . . . . . . . Configuring a Network Connection Manually . . . . . . . . . . . . . smpppd as Dial-up Assistant . . . . . . . . . . . . . . . . . . . .
363
363 364 365 365
367
367 368 376 378 382 387 387 388 389
2 1 Using NIS
21.1 21.2 Configuring NIS Servers . . . . . . . . . . . . . . . . . . . . . . Configuring NIS Clients . . . . . . . . . . . . . . . . . . . . . .
391
391 397
399
399 400 401 402 404
2 3 DHCP
23.1 23.2 23.3 23.4 Configuring a DHCP Server with DHCP Software Packages . . . The DHCP Server dhcpd . . . For More Information . . . . YaST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
405
406 410 411 414
415
415 418 419
421
423 424 427 432 436 444 445
447
447 449 463 465 472 475 480 482 484
2 7 File Synchronization
27.1 27.2 27.3 27.4 27.5 27.6 27.7 Available Data Synchronization Software . . Determining Factors for Selecting a Program Introduction to Unison . . . . . . . . . Introduction to CVS . . . . . . . . . . Introduction to Subversion . . . . . . . Introduction to rsync . . . . . . . . . . Introduction to mailsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
487
487 491 495 497 499 502 504
2 8 Samba
28.1 28.2 28.3 28.4 28.5 28.6 Terminology . . . . . . . . Starting and Stopping Samba Configuring a Samba Server . Configuring Clients . . . . . Samba as Login Server . . . For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
509
509 510 511 516 517 518
521
522 523 525 527 533 536 537 539 540
541 543
543 551 552 552
3 1 PCMCIA
31.1 31.2 31.3 Controlling PCMCIA Cards Using pccardctl . . . . . . . . . . . . . . PCMCIA in Detail . . . . . . . . . . . . . . . . . . . . . . . . Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . .
555
556 556 559
563
564 564 565 572 575 576
3 3 Power Management
33.1 33.2 33.3 33.4 33.5 33.6 Power Saving Functions . . . . . . APM . . . . . . . . . . . . . . ACPI . . . . . . . . . . . . . . Rest for the Hard Disk . . . . . . The powersave Package . . . . . . The YaST Power Management Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
577
578 579 580 588 589 597
3 4 Wireless Communication
34.1 34.2 34.3 Wireless LAN . . . . . . . . . . . . . . . . . . . . . . . . . . Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . Infrared Data Transmission . . . . . . . . . . . . . . . . . . . .
603
603 614 625
Index
629
1 Feedback
We want to hear your comments and suggestions about this manual and the other documentation included with this product. Please use the User Comments feature at the bottom of each page of the online documentation and enter your comments there.
2 Additional Documentation
There are other manuals available on this SUSE Linux product, either online at http://www.novell.com/documentation/ or in your installed system under /usr/share/doc/manual/: SUSE Linux Start-Up This guide introduces you to the installation procedure of SUSE Linux and the basic use of your desktop environment. An online version of this document can be found at http://www.novell.com/documentation/suse101/ SUSE Linux Applications This guide features a selection of the most important tools offered by SUSE Linux. An online version of this document can be found at http://www.novell.com/ documentation/suse101/. Novell AppArmor 2.0 Administration Guide This guide contains in-depth information on the use of AppArmor in your environment. An online version of this document can be found at http://www.novell .com/documentation/apparmor/.
3 Documentation Conventions
The following typographical conventions are used in this manual: /etc/passwd: filenames and directory names placeholder: replace placeholder with the actual value PATH: the environment variable PATH ls, --help: commands, options, and parameters user: users or groups
Alt , Alt + F1 : a key to press or a key combination; keys are shown in uppercase as on a keyboard
Dancing Penguins (Chapter Penguins, Reference): This is a reference to a chapter in another book.
5 Acknowledgment
With a lot of voluntary commitment, the developers of Linux cooperate on a global scale to promote the development of Linux. We thank them for their effortsthis distribution would not exist without them. Furthermore, we thank Frank Zappa and Pawar. Special thanks, of course, go to Linus Torvalds. Have a lot of fun! Your SUSE Team
xiii
Remote Installation
SUSE Linux can be installed in several different ways. As well as the usual CD or DVD installation covered in Chapter Installation with YaST (Start-Up), you can choose from various network-based approaches or even take a completely hands-off approach to the installation of SUSE Linux. Each method is introduced by means of two short check lists: one listing the prerequisites for this method and the other illustrating the basic procedure. More detail is then provided for all the techniques used in these installation scenarios. NOTE In the following sections, the system to hold your new SUSE Linux installation is referred to as target system or installation target. The term installation source is used for all sources of installation data. This includes physical media, such as CD and DVD, and network servers distributing the installation data in your network.
IMPORTANT The configuration of the X Window System is not part of any remote installation process. After the installation has finished, log in to the target system as root, enter telinit 3, and start SaX2 to configure the graphics hardware as described in Section 14.1, X11 Setup with SaX2 (page 271).
18
Reference
3 When the boot screen of the target system appears, use the boot options prompt to set the appropriate VNC options and the address of the installation source. This is described in detail in Section 1.4, Booting the Target System for Installation (page 45). The target system boots to a text-based environment, giving the network address and display number under which the graphical installation environment can be addressed by any VNC viewer application or browser. VNC installations announce themselves over OpenSLP and can be found using Konqueror in service:// or slp:// mode. 4 On the controlling workstation, open a VNC viewing application or Web browser and connect to the target system as described in Section 1.5.1, VNC Installation (page 49). 5 Perform the installation as described in Chapter Installation with YaST (StartUp) . You will need to reconnect to the target system after it reboots for the final part of the installation. 6 Finish the installation.
1.1.2 Simple Remote Installation via VNCDynamic Network Configuration via DHCP
This type of installation still requires some degree of physical access to the target system to boot for installation. The network configuration is made with DHCP. The installation itself is entirely controlled from a remote workstation using VNC to connect to the installer, but still requires user interaction for the actual configuration efforts. For this type of installation, make sure that the following requirements are met: Remote installation source: NFS, HTTP, FTP, or SMB with working network connection Target system with working network connection
Remote Installation
19
Controlling system with working network connection and VNC viewer software or Java-enabled browser (Firefox, Konqueror, Internet Explorer, or Opera) Physical boot medium (CD, DVD, custom boot disk) for booting the target system Running DHCP server providing IP addresses To perform this kind of installation, proceed as follows: 1 Set up the installation source as described in Section 1.2, Setting Up the Server Holding the Installation Sources (page 26). Choose an NFS, HTTP, or FTP network server. For a SMB installation source, refer to Section 1.2.5, Managing a SMB Installation Source (page 34). 2 Boot the target system using the first CD or DVD of the SUSE Linux media kit. 3 When the boot screen of the target system appears, use the boot options prompt to set the appropriate VNC options and the address of the installation source. This is described in detail in Section 1.4, Booting the Target System for Installation (page 45). The target system boots to a text-based environment, giving the network address and display number under which the graphical installation environment can be addressed by any VNC viewer application or browser. VNC installations announce themselves over OpenSLP and can be found using Konqueror in service:// or slp:// mode. 4 On the controlling workstation, open a VNC viewing application or Web browser and connect to the target system as described in Section 1.5.1, VNC Installation (page 49). 5 Perform the installation as described in Chapter Installation with YaST (StartUp) . You will need to reconnect to the target system after it reboots for the final part of the installation. 6 Finish the installation.
20
Reference
Remote Installation
21
5 Initiate the boot process of the target system using Wake on LAN. This is described in Section 1.3.7, Wake on LAN (page 44). 6 On the controlling workstation, open a VNC viewing application or Web browser and connect to the target system as described in Section 1.5.1, VNC Installation (page 49). 7 Perform the installation as described in Chapter Installation with YaST (StartUp) . You will need to reconnect to the target system after it reboots for the final part of the installation. 8 Finish the installation.
22
Reference
Valid static IP address to assign to the target system To perform this kind of installation, proceed as follows: 1 Set up the installation source as described in Section 1.2, Setting Up the Server Holding the Installation Sources (page 26). 2 Boot the target system using the first CD or DVD of the SUSE Linux media kit. 3 When the boot screen of the target system appears, use the boot options prompt to set the appropriate parameters for network connection, address of the installation source, and SSH enablement. This is described in detail in Section 1.4.3, Using Custom Boot Options (page 47). The target system boots to a text-based environment, giving the network address under which the graphical installation environment can be addressed by any SSH client. 4 On the controlling workstation, open a terminal window and connect to the target system as described in Section Connecting to the Installation Program (page 52). 5 Perform the installation as described in Chapter Installation with YaST (StartUp) . You will need to reconnect to the target system after it reboots for the final part of the installation. 6 Finish the installation.
1.1.5 Simple Remote Installation via SSHDynamic Network Configuration via DHCP
This type of installation still requires some degree of physical access to the target system to boot for installation and determine the IP address of the installation target. The installation itself is entirely controlled from a remote workstation using VNC to connect to the installer, but still requires user interaction for the actual configuration efforts.
Remote Installation
23
For this type of installation, make sure that the following requirements are met: Remote installation source: NFS, HTTP, FTP, or SMB with working network connection Target system with working network connection Controlling system with working network connection and working SSH client software. Physical boot medium (CD or DVD) for booting the target system Running DHCP server providing IP addresses To perform this kind of installation, proceed as follows: 1 Set up the installation source as described in Section 1.2, Setting Up the Server Holding the Installation Sources (page 26). Choose an NFS, HTTP, or FTP network server. For a SMB installation source, refer to Section 1.2.5, Managing a SMB Installation Source (page 34). 2 Boot the target system using the first CD or DVD of the SUSE Linux media kit. 3 When the boot screen of the target system appears, use the boot options prompt to pass the appropriate parameters for network connection, location of the installation source, and SSH enablement. See Section 1.4.3, Using Custom Boot Options (page 47) for detailed instructions on the use of these parameters. The target system boots to a text-based environment, giving you the network address under which the graphical installation environment can be addressed by any SSH client. 4 On the controlling workstation, open a terminal window and connect to the target system as described in Section Connecting to the Installation Program (page 52). 5 Perform the installation as described in Chapter Installation with YaST (StartUp) . You will need to reconnect to the target system after it reboots for the final part of the installation.
24
Reference
Remote Installation
25
5 Initiate the boot process of the target system using Wake on LAN. This is described in Section 1.3.7, Wake on LAN (page 44). 6 On the controlling workstation, start an SSH client and connect to the target system as described in Section 1.5.2, SSH Installation (page 51). 7 Perform the installation as described in Chapter Installation with YaST (StartUp) . You will need to reconnect to the target system it reboots for the final part of the installation. 8 Finish the installation.
2 Start YaST Miscellaneous Installation Server. 3 Select Server Configuration. 4 Select the server type (HTTP, FTP, or NFS). The selected server service is started automatically every time the system starts. If a service of the selected type is already running on your system and you want to configure it manually for the server, deactivate the automatic configuration of the server service with Do Not Configure Any Network Services. In both cases, define the directory in which the installation data should be made available on the server. 5 Configure the required server type. This step relates to the automatic configuration of server services. It is skipped when automatic configuration is deactivated. Define an alias for the root directory of the FTP or HTTP server on which the installation data should be found. The installation source will later be located under ftp://Server-IP/Alias/Name (FTP) or under http://Server-IP/Alias/Name (HTTP). Name stands for the name of the installation source, which is defined in the following step. If you selected NFS in the previous step, define wild cards and exports options. The NFS server will be accessible under nfs://Server-IP/Name . Details of NFS and exports can be found in Chapter 22, Sharing File Systems with NFS (page 399). 6 Configure the installation source. Before the installation media are copied to their destination, define the name of the installation source (ideally, an easily remembered abbreviation of the product and version). YaST allows providing ISO images of the media instead of copies of the installation CDs. If you want this, activate the relevant check box and specify the directory path under which the ISO files can be found locally. Depending on the product to distribute using this installation server, it might be that more add-on CDs or service pack CDs are required to install the product completely. If you activate Prompt for Additional CDs, YaST automatically reminds you to supply these media. To announce your installation server in the network via OpenSLP, activate the appropriate option.
Remote Installation
27
TIP Consider announcing your installation source via OpenSLP if your network setup supports this option. This saves you from entering the network installation path on every target machine. The target systems are just booted using the SLP boot option and will find the network installation source without any further configuration. For details on this option, refer to Section 1.4, Booting the Target System for Installation (page 45). 7 Upload the installation data. The most lengthy step in configuring an installation server is copying the actual installation CDs. Insert the media in the sequence requested by YaST and wait for the copying procedure to end. When the sources have been fully copied, return to the overview of existing information sources and close the configuration by selecting Finish. Your installation server is now fully configured and ready for service. It is automatically started every time the system is started. No further intervention is required. You only need to configure and start this service correctly by hand if you have deactivated the automatic configuration of the selected network service with YaST as an initial step. To deactivate an installation source, select Change in the overview to reach a list of all available installation sources. Choose the entry to remove then select Delete. This delete procedure only relates to the deactivation of the server service. The installation data itself remains in the directory chosen. However, you can remove it manually. If your installation server should provide the installation data for more than one product of product version, start the YaST installation server module and select Configure in the overview of existing installation sources to configure the new installation source.
28
Reference
media over to this structure. Second, export the directory holding the installation data to the network. To create a directory holding the installation data, proceed as follows: 1 Log in as root. 2 Create a directory that should later hold all installation data and change into this directory. For example:
mkdir install/product/productversion cd install/product/productversion
Replace product with an abbreviation of the product name (in this case SUSE Linux) and productversion with a string that contains the product name and version. 3 For each CD contained in the media kit execute the following commands: a Copy the entire content of the installation CD into the installation server directory:
cp -a /media/path_to_your_CD-ROM_drive .
Replace path_to_your_CD-ROM_drive with the actual path under which your CD or DVD drive is addressed. Depending on the type of drive used in your system, this can be cdrom, cdrecorder, dvd, or dvdrecorder. b Rename the directory to the CD number:
mv path_to_your_CD-ROM_drive CDx
Replace x with the actual number of your CD. To export the installation sources via NFS using YaST, proceed as follows: 1 Log in as root. 2 Start YaST Network Services NFS Server. 3 Select Start NFS Server and Open Port in Firewall and click Next.
Remote Installation
29
4 Select Add Directory and enter the path to the directory holding the installation data. In this case, it is /productversion. 5 Select Add Host and enter the hostnames of the machines to which to export the installation data. Instead of specifying hostnames here, you could also use wild cards, ranges of network addresses, or just the domain name of your network. Enter the appropriate export options or leave the default, which works fine in most setups. For more information about the syntax used in exporting NFS shares, read the exports man page. 6 Click Finish. The NFS server holding the SUSE Linux installation sources is automatically started and integrated into the boot process. If you prefer to manually export the installation sources via NFS instead of using the YaST NFS Server module, proceed as follows: 1 Log in as root. 2 Open the file /etc/exports and enter the following line:
/productversion *(ro,root_squash,sync)
This exports the directory /productversion to any host that is part of this network or to any host that can connect to this server. To limit the access to this server, use netmasks or domain names instead of the general wild card *. Refer to the export man page for details. Save and exit this configuration file. 3 To add the NFS service to the list of servers started during system boot, execute the following commands:
insserv /etc/init.d/nfsserver insserv /etc/init.d/portmap
If you need to change the configuration of your NFS server later, modify the configuration file and restart the NFS daemon with rcnfsserver restart.
30
Reference
Announcing the NFS server via OpenSLP makes its address known to all clients in your network. 1 Log in as root. 2 Enter the directory /etc/slp.reg.d/. 3 Create a configuration file called install.suse.nfs.reg containing the following lines:
# Register the NFS Installation Server service:install.suse:nfs://$HOSTNAME/path_instsource/CD1,en,65535 description=NFS Installation Source
Replace path_instsource with the actual path to the installation source on your server. 4 Save this configuration file and start the OpenSLP daemon using the following command:
rcslpd start
For more information about OpenSLP, refer to the package documentation located under /usr/share/doc/packages/openslp/ or refer to Chapter 19, SLP Services in the Network (page 363).
Remote Installation
31
cd/srv/ftp
c Create a subdirectory holding the installation sources in the FTP root directory:
mkdir instsource
Replace instsource with the product name. d Copy the contents of all installation CDs into the FTP server's root directory (similar to the procedure described in Section 1.2.2, Manual Setup of an NFS Installation Source (page 28), Step 3 (page 29)). Alternatively, mount the contents of the already existing installation repository into the change root environment of the FTP server:
mount --bind path_to_instsource /srv/ftp/instsource
Replace path_to_instsource and instsource with values matching your setup. If you need to make this permanent, add it to /etc/ fstab. e Start pure-ftpd:
pure-ftpd &
3 Announce the installation source via OpenSLP, if this is supported by your network setup: a Create a configuration file called install.suse.ftp.reg under /etc/ slp/reg.d/ that contains the following lines:
# Register the FTP Installation Server service:install.suse:ftp://$HOSTNAME/srv/ftp/instsource/CD1,en,65535 description=FTP Installation Source
Replace instsource with the actual name to the installation source directory on your server. The service: line should be entered as one continuous line. b Save this configuration file and start the OpenSLP daemon using the following command:
rcslpd start
32
Reference
Replace instsource with the product name. c Create a symbolic link from the location of the installation sources to the root directory of the Web server (/srv/www/htdocs):
ln -s /path_instsource /srv/www/htdocs/instsource
d Modify the configuration file of the HTTP server (/etc/apache2/ default-server.conf) to make it follow symbolic links. Replace the following line:
Options None
with
Options Indexes FollowSymLinks
e Reload the HTTP server configuration using rcapache2 reload. 3 Announce the installation source via OpenSLP, if this is supported by your network setup:
Remote Installation
33
a Create a configuration file called install.suse.http.reg under /etc/slp/reg.d/ that contains the following lines:
# Register the HTTP Installation Server service:install.suse:http://$HOSTNAME/srv/www/htdocs/instsource/CD1/,en,65535 description=HTTP Installation Source
Replace path_to_instsource with the actual path to the installation source on your server. The service: line should be entered as one continuous line. b Save this configuration file and start the OpenSLP daemon using rcslpd restart.
34
Reference
7 Create a new folder under INSTALL and name it yast. Enter the yast folder and create the files order and instorder. 8 Open the order file and enter the following line:
/NLD/CD1 smb://user:password@hostname/productCD1
Replace user with the username you use on the Windows machine or use Guest to enable guest login to this share. password should be replaced either with your login password or any other string for guest login. hostname should be replaced with the network name of your Windows machine. 9 Open the instorder file and add the following line:
/product/CD1
To use a SMB mounted share as installation source, proceed as follows: 1 Boot the installation target. 2 Select Installation. 3 Press
F3
and
F4
4 Choose SMB and enter the Windows machine's name or IP address, the share name (INSTALL, in this example), username, and password. After you hit
Enter
Remote Installation
35
Replace ip_of_the_tftp_server with the actual IP address of the TFTP server. For more information about the options available in dhcpd.conf, refer to the dhcpd.conf manual page. 3 Restart the DHCP server by executing rcdhcpd restart. If you plan on using SSH for the remote control of a PXE and Wake on LAN installation, explicitly specify the IP address DHCP should provide to the installation target. To achieve this, modify the above mentioned DHCP configuration according to the following example:
group { # PXE related stuff
36
Reference
# # "next server" defines the tftp server that will be used next server ip_tftp_server: # # "filename" specifiies the pxelinux image on the tftp server # the server runs in chroot under /srv/tftpboot filename "pxelinux.0"; host test { hardware ethernet mac_address; fixed-address some_ip_address; } }
The host statement introduces the hostname of the installation target. To bind the hostname and IP address to a specific host, you have to know and specify the system's hardware (MAC) address. Replace all the variables used in this example with the actual values that match your environment. After restarting the DHCP server, it provides a static IP to the host specified, enabling you to connect to the system via SSH.
Remote Installation
37
The default directory /tftpboot is created and selected automatically. 6 Click Finish to apply your settings and start the server.
= = = = = = =
38
Reference
1 Change to the directory of your installation repository and copy the linux, initrd, message, and memtest files to the /srv/tftpboot directory by entering the following:
cp -a boot/loader/linux boot/loader/initrd boot/loader/message boot/loader/memtest /srv/tftpboot
2 Install the syslinux package directly from your installation CDs or DVDs with YaST. 3 Copy the /usr/share/syslinux/pxelinux.0 file to the /srv/ tftpboot directory by entering the following:
cp -a /usr/share/syslinux/pxelinux.0 /srv/tftpboot
4 Change to the directory of your installation repository and copy the isolinux .cfg file to /srv/tftpboot/pxelinux.cfg/default by entering the following:
cp -a boot/loader/isolinux.cfg /srv/tftpboot/pxelinux.cfg/default
5 Edit the /srv/tftpboot/pxelinux.cfg/default file and remove the lines beginning with gfxboot, readinfo, and framebuffer. 6 Insert the following entries in the append lines of the default failsafe and apic labels: insmod=e100 By means of this entry, the kernel module for an Intel 100MBit/s network card is loaded on the PXE clients. This entry depends on the client's hardware and must be adapted accordingly. In the case of a Broadcom GigaBit network card, this entry should read insmod=bcm5700. netdevice=eth0 This entry defines the client's network interface that must be used for the network installation. It is only necessary if the client is equipped with several network cards and must be adapted accordingly. In case of a single network card, this entry can be omitted. install=nfs://ip_instserver/path_instsource/CD1 This entry defines the NFS server and the installation source for the client installation. Replace ip_instserver with the actual IP address of your Remote Installation 39
installation server. path_instsource should be replaced with the actual path to the installation sources. HTTP, FTP, or SMB sources are addressed in a similar manner, except for the protocol prefix, which should read http, ftp, or smb. IMPORTANT If you need to pass other boot options to the installation routines, such as SSH or VNC boot parameters, append them to the install entry. An overview of parameters and some examples are given in Section 1.4, Booting the Target System for Installation (page 45). An example /srv/tftpboot/pxelinux.cfg/default file follows. Adjust the protocol prefix for the installation source to match your network setup and specify your preferred method of connecting to the installer by adding the vnc and vncpassword or the ssh and sshpassword options to the install entry. The lines separated by \ must be entered as one continuous line without a line break and without the \.
default linux # default label linux kernel linux append initrd=initrd ramdisk_size=65536 insmod=e100 \ install=nfs://ip_instserver/path_instsource/product # failsafe label failsafe kernel linux append initrd=initrd ramdisk_size=65536 ide=nodma apm=off acpi=off \ insmod=e100 install=nfs://ip_instserver/path_instsource/product # apic label apic kernel linux append initrd=initrd ramdisk_size=65536 apic insmod=e100 \ install=nfs://ip_instserver/path_instsource/product # manual label manual kernel linux append initrd=initrd ramdisk_size=65536 manual=1 # rescue label rescue kernel linux
40
Reference
append initrd=initrd ramdisk_size=65536 rescue=1 # memory test label memtest kernel memtest # hard disk label harddisk kernel linux append SLX=0x202 implicit display prompt timeout 0 message 1 100
Replace ip_instserver and path_instsource with the values used in your setup. The following section serves as a short reference to the PXELINUX options used in this setup. More information about the options available can be found in the documentation of the syslinux package located under /usr/share/doc/ packages/syslinux/.
Remote Installation
41
LABEL label KERNEL image APPEND options... Indicates that if label is entered as the kernel to boot, PXELINUX should instead boot image and the specified APPEND options should be used instead of the ones specified in the global section of the file (before the first LABEL command). The default for image is the same as label and, if no APPEND is given, the default is to use the global entry (if any). Up to 128 LABEL entries are permitted. Note that GRUB uses the following syntax:
title mytitle kernel my_kernel my_kernel_options initrd myinitrd
Labels are mangled as if they were filenames and they must be unique after mangling. For example, the two labels v2.1.30 and v2.1.31 would not be distinguishable under PXELINUX because both mangle to the same DOS filename. The kernel does not have to be a Linux kernel; it can be a boot sector or a COMBOOT file. APPEND Append nothing. APPEND with a single hyphen as argument in a LABEL section can be used to override a global APPEND. LOCALBOOT type On PXELINUX, specifying LOCALBOOT 0 instead of a KERNEL option means invoking this particular label and causes a local disk boot instead of a kernel boot. Argument 0 4 Description Perform a normal boot Performs a local boot with the Universal Network Driver Interface (UNDI) driver still resident in memory
42
Reference
Argument 5
Description Performs a local boot with the entire PXE stack, including the UNDI driver, still resident in memory
All other values are undefined. If you do not know what the UNDI or PXE stacks are, specify 0. TIMEOUT time-out Indicates how long to wait at the boot prompt until booting automatically, in units of 1/10 second. The time-out is cancelled as soon as the user types anything on the keyboard, the assumption being that the user completes the command begun. A time-out of zero disables the time-out completely (this is also the default). The maximum possible time-out value is 35996 (just less than one hour). PROMPT flag_val If flag_val is 0, displays the boot prompt only if Shift or Alt is pressed or Caps Lock or Scroll lock is set (this is the default). If flag_val is 1, always displays the boot prompt.
F2 filename F1 filename ..etc... F9 filename F10filename
Displays the indicated file on the screen when a function key is pressed at the boot prompt. This can be used to implement preboot online help (presumably for the kernel command line options.) For backward compatibility with earlier releases, F10 can be also entered as F0 . Note that there is currently no way to bind filenames to F11 and F12 .
Remote Installation
43
WARNING Do not place the PXE option ahead of the hard disk boot option in the BIOS. Otherwise this system would try to reinstall itself every time you boot it.
44
Reference
3 Open a terminal and enter the following command as root to wake the target:
ether-wakemac_of_target
Remote Installation
45
F Keys During Installation Purpose Provide help Select the installation language Change screen resolution for installation Available Options None All supported languages Default Value None English
F3
F4
CD-ROM/DVD
F5
Driver
None
46
Reference
Replace all the values (...) in this string with the values appropriate for your setup. Table 1.2 Installation (Boot) Scenarios Used in This Chapter Parameters Needed for Booting Boot Options
Installation Scenario
Chapter Installation with None: system boots au- None needed tomatically YaST (Start-Up) Section 1.1.1, Simple Remote Installation via VNCStatic Network Configuration (page 18) Location of the installation server Network device IP address Netmask Gateway VNC enablement VNC password install=(nfs,http, ftp,smb)://path_to _instmedia netdevice=some _netdevice (only needed if several network devices are available) hostip=some_ip netmask=some _netmask gateway=ip_gateway vnc=1 vncpassword=some _password
Remote Installation
47
Installation Scenario
Parameters Needed for Booting Location of the installation server VNC enablement VNC password
Boot Options
Section 1.1.2, Simple Remote Installation via VNCDynamic Network Configuration via DHCP (page 19)
install=(nfs,http, ftp,smb)://path_to _instmedia vnc=1 vncpassword=some _password Not applicable; process managed through PXE and DHCP
Section 1.1.3, Remote Installation via VNCPXE Boot and Wake on LAN (page 21)
Location of the installation server Location of the TFTP server VNC enablement VNC password Location of the installation server Network device IP address Netmask Gateway SSH enablement SSH password
Section 1.1.4, Simple Remote Installation via SSHStatic Network Configuration (page 22)
install=(nfs,http, ftp,smb)://path_to _instmedia netdevice=some _netdevice (only needed if several network devices are available) hostip=some_ip netmask=some _netmask gateway=ip_gateway usessh=1 sshpassword=some _password install=(nfs,http, ftp,smb)://path_to _instmedia
48
Reference
Installation Scenario
Boot Options
usessh=1 sshpassword=some _password Not applicable; process managed through PXE and DHCP
Section 1.1.6, Remote Installation via SSHPXE Boot and Wake on LAN (page 25)
Location of the installation server Location of the TFTP server SSH enablement SSH password
TIP Find more information about the linuxrc boot options used for booting a Linux system in /usr/share/doc/packages/linuxrc/linuxrc.html.
Remote Installation
49
50
Reference
To connect to the installation program running on the target machine, proceed as follows: 1 Start the VNC viewer. 2 Enter the IP address and display number of the installation target as provided by the SLP browser or the installation program itself:
ip_address:display_number
A window opens on your desktop displaying the YaST screens as in a normal local installation. Using a Web browser to connect to the installation program makes you totally independent of any VNC software or the underlying operating system. As long as the browser application has Java support enabled, you can use any browser (Firefox, Internet Explorer, Konqueror, Opera, etc.) to perform the installation of your Linux system. To perform a VNC installation, proceed as follows: 1 Launch your preferred Web browser. 2 Enter the following at the address prompt:
http://ip_address_of_target:5801
3 Enter your VNC password when prompted to do so. The browser window now displays the YaST screens as in a normal local installation.
Remote Installation
51
Replace ip_address_of_target with the actual IP address of the installation target. 3 When prompted for a username, enter root. 4 When prompted for password, enter the password that has been set via the SSH boot option. After you have successfully authenticated, a command line prompt for the installation target appears. 5 Enter yast to launch the installation program. A window opens showing the normal YaST screens as described in Chapter Installation with YaST (Start-Up) .
52
Reference
segmentation of hard disk space arises only after the initial partitioning during installation has already been done. Because it is difficult to modify partitions on a running system, LVM provides a virtual pool (volume group, VG for short) of memory space from which logical volumes (LVs) can be created as needed. The operating system accesses these LVs instead of the physical partitions. Volume groups can span more than only one disk so that several disks or parts of them may constitute one single VG. This way, LVM provides a kind of abstraction from the physical disk space that allows its segmentation to be changed in a much easier and safer way than physical repartitioning does. Background information regarding physical partitioning can be found in Section Partition Types (Chapter 1, Installation with YaST, Start-Up) and Section Partitioner (Chapter 2, System Configuration with YaST, Start-Up). Figure 2.1 Physical Partitioning versus LVM
DISK PART PART PART DISK 1 PART PART VG 1 PART DISK 2 PART PART
VG 2
LV 1
LV 2
LV 3
LV 4
MP
MP
MP
MP
MP
MP
MP
Figure 2.1, Physical Partitioning versus LVM (page 54) compares physical partitioning (left) with LVM segmentation (right). On the left side, one single disk has been divided into three physical partitions (PART), each with a mount point (MP) assigned so that the operating system can access them. On the right side, two disks have been divided into two and three physical partitions each. Two LVM volume groups (VG 1 and VG 2) have been defined. VG 1 contains two partitions from DISK 1 and one from DISK 2. VG 2 contains the remaining two partitions from DISK 2. In LVM, the physical disk partitions that are incorporated in a volume group are called physical volumes (PVs). Within the volume groups, four logical volumes (LV 1 through LV 4) have been defined, which can be used by the operating system via the associated mount points. The border 54 Reference
between different logical volumes need not be aligned with any partition border. See the border between LV 1 and LV 2 in this example. LVM features: Several hard disks or partitions can be combined in a large logical volume. Provided the configuration is suitable, an LV (such as /usr) can be enlarged when the free space is exhausted. Using LVM, even add hard disks or LVs in a running system. However, this requires hot-swappable hardware that is capable of such actions. It is possible to activate a "striping mode" that distributes the data stream of a logical volume over several physical volumes. If these physical volumes reside on different disks, this can improve the reading and writing performance just like RAID 0. The snapshot feature enables consistent backups (especially for servers) in the running system. With these features, using LVM already makes sense for heavily used home PCs or small servers. If you have a growing data stock, as in the case of databases, music archives, or user directories, LVM is just the right thing for you. This would allow file systems that are larger than the physical hard disk. Another advantage of LVM is that up to 256 LVs can be added. However, keep in mind that working with LVM is different from working with conventional partitions. Instructions and further information about configuring LVM is available in the official LVM HOWTO at http://tldp.org/ HOWTO/LVM-HOWTO/. Starting from kernel version 2.6, LVM version 2 is available, which is downwardcompatible with the previous LVM and enables the continued management of old volume groups. When creating new volume groups, decide whether to use the new format or the downward-compatible version. LVM 2 does not require any kernel patches. It makes use of the device mapper integrated in kernel 2.6. This kernel only supports LVM version 2. Therefore, when talking about LVM, this section always refers to LVM version 2.
partitioning tool enables you to edit and delete existing partitions and create new ones that should be used with LVM. There, create an LVM partition by first clicking Create Do not format then selecting 0x8E Linux LVM as the partition identifier. After creating all the partitions to use with LVM, click LVM to start the LVM configuration.
56
Reference
If there are several volume groups, set the current volume group in the selection box to the upper left. The buttons in the upper right enable creation of additional volume groups and deletion of existing volume groups. Only volume groups that do not have any partitions assigned can be deleted. All partitions that are assigned to a volume group are also referred to as a physical volumes (PV). Figure 2.3 Physical Volume Setup
To add a previously unassigned partition to the selected volume group, first click the partition then Add Volume. At this point, the name of the volume group is entered next to the selected partition. Assign all partitions reserved for LVM to a volume group. Otherwise, the space on the partition remains unused. Before exiting the dialog, every volume group must be assigned at least one physical volume. After assigning all physical volumes, click Next to proceed to the configuration of logical volumes.
57
existing logical volumes are listed here. Add, Edit, and Remove logical volumes as needed until all space in the volume group has been exhausted. Assign at least one logical volume to each volume group. Figure 2.4 Logical Volume Management
To create a new logical volume, click Add and fill out the pop-up that opens. As for partitioning, enter the size, file system, and mount point. Normally, a file system, such as reiserfs or ext2, is created on a logical volume and is then designated a mount point. The files stored on this logical volume can be found at this mount point on the installed system. Additionally it is possible to distribute the data stream in the logical volume among several physical volumes (striping). If these physical volumes reside on different hard disks, this generally results in a better reading and writing performance (like RAID 0). However, a striping LV with n stripes can only be created correctly if the hard disk space required by the LV can be distributed evenly to n physical volumes. If, for example, only two physical volumes are available, a logical volume with three stripes is impossible. WARNING: Striping YaST has no chance at this point to verify the correctness of your entries concerning striping. Any mistake made here is apparent only later when the LVM is implemented on disk.
58
Reference
If you have already configured LVM on your system, the existing logical volumes can be entered now. Before continuing, assign appropriate mount points to these logical volumes too. With Next, return to the YaST Expert Partitioner and finish your work there.
59
60
Reference
access is significantly faster in comparison to any one of the normal physical hard disks, because the data is duplicated so can be parallel scanned. Generally it can be said that Level 1 provides nearly twice the read transaction rate of single disks and almost the same write transaction rate as single disks. RAID 2 and RAID 3 These are not typical RAID implementations. Level 2 stripes data at the bit level rather than the block level. Level 3 provides byte-level striping with a dedicated parity disk and cannot service simultaneous multiple requests. Both levels are only rarely used. RAID 4 Level 4 provides block-level striping just like Level 0 combined with a dedicated parity disk. In the case of a data disk failure, the parity data is used to create a replacement disk. However, the parity disk may create a bottleneck for write access. Nevertheless, Level 4 is sometimes used. RAID 5 RAID 5 is an optimized compromise between Level 0 and Level 1 in terms of performance and redundancy. The hard disk space equals the number of disks used minus one. The data is distributed over the hard disks as with RAID 0. Parity blocks, created on one of the partitions, are there for security reasons. They are linked to each other with XOR, enabling the contents to be reconstructed by the corresponding parity block in case of system failure. With RAID 5, no more than one hard disk can fail at the same time. If one hard disk fails, it must be replaced as soon as possible to avoid the risk of losing data. Other RAID Levels Several other RAID levels have been developed (RAIDn, RAID 10, RAID 0+1, RAID 30, RAID 50, etc.), some of them being proprietary implementations created by hardware vendors. These levels are not very widespread, so are not explained here.
61
clicking Create Do not format then selecting 0xFD Linux RAID as the partition identifier. For RAID 0 and RAID 1, at least two partitions are neededfor RAID 1, usually exactly two and no more. If RAID 5 is used, at least three partitions are required. It is recommended to take only partitions of the same size. The RAID partitions should be stored on different hard disks to decrease the risk of losing data if one is defective (RAID 1 and 5) and to optimize the performance of RAID 0. After creating all the partitions to use with RAID, click RAID Create RAID to start the RAID configuration. In the next dialog, choose between RAID levels 0, 1, and 5 (see Section 2.2.1, RAID Levels (page 60) for details). After Next is clicked, the following dialog lists all partitions with either the Linux RAID or Linux native type (see Figure 2.6, RAID Partitions (page 62)). No swap or DOS partitions are shown. If a partition is already assigned to a RAID volume, the name of the RAID device (e.g., /dev/md0) is shown in the list. Unassigned partitions are indicated with --. Figure 2.6 RAID Partitions
To add a previously unassigned partition to the selected RAID volume, first click the partition then Add. At this point, the name of the RAID device is entered next to the selected partition. Assign all partitions reserved for RAID. Otherwise, the space on the partition remains unused. After assigning all partitions, click Next to proceed to the settings dialog where you can fine-tune the performance (see Figure 2.7, File System Settings (page 63)).
62
Reference
As with conventional partitioning, set the file system to use as well as encryption and the mount point for the RAID volume. Checking Persistent Superblock ensures that the RAID partitions are recognized as such when booting. After completing the configuration with Finish, see the /dev/md0 device and others indicated with RAID in the expert partitioner.
2.2.3 Troubleshooting
Check the file /proc/mdstats to find out whether a RAID partition has been destroyed. In the event of a system failure, shut down your Linux system and replace the defective hard disk with a new one partitioned the same way. Then restart your system and enter the command mdadm /dev/mdX --add /dev/sdX. Replace 'X' with your particular device identifiers. This integrates the hard disk automatically into the RAID system and fully reconstructs it.
63
64
Reference
3.1.1 Preparations
Before updating, copy the old configuration files to a separate medium, such as streamer, removable hard disk, USB stick, or ZIP drive, to secure the data. This primarily applies to files stored in /etc as well as some of the directories and files in /var and /opt. You may also want to write the user data in /home (the HOME directories) to a backup medium. Back up this data as root. Only root has read permission for all local files.
65
Before starting your update, make note of the root partition. The command df / lists the device name of the root partition. In Example 3.1, List with df -h (page 66), the root partition to write down is /dev/hda3 (mounted as /). Example 3.1 List with df -h
Filesystem /dev/hda3 tmpfs /dev/hda5 /dev/hda1 /dev/hda2 Size 74G 506M 116G 39G 4.6G Used Avail Use% Mounted on 22G 53G 29% / 0 506M 0% /dev/shm 5.8G 111G 5% /home 1.6G 37G 4% /windows/C 2.6G 2.1G 57% /windows/D
PostgreSQL
Before updating PostgreSQL (postgres), dump the databases. See the manual page of pg_dump. This is only necessary if you actually used PostgreSQL prior to your update.
a language and select Update in the Installation Mode dialog. Do not select New Installation. 2 YaST determines whether there are multiple root partitions. If there is only one, continue with the next step. If there are several, select the right partition and confirm with Next (/dev/hda3 was selected in the example in Section 3.1.1, Preparations (page 65)). YaST reads the old fstab on this partition to analyze and mount the file systems listed there. 3 In the Installation Settings dialog, adjust the settings according to your requirements. Normally, you can leave the default settings untouched, but if you intend to enhance your system, check the packages offered in the Software Selection submenus or add support for additional languages. You also have the possibility to make backups of various system components. Selecting backups slows down the update process. Use this option if you do not have a recent system backup. 4 In the following dialog, choose to update only the software that is already installed or to add new software components to the system (upgrade mode). It is advisable to accept the suggested composition, for example, Update Based on Selection "Standard System with KDE" or "Standard System with GNOME". Adjustments can be made later with YaST.
67
68
Reference
sysfs now complements the /proc file system. Power management (especially ACPI) has been improved and can be configured by means of a YaST module.
Input Devices
Regarding the changes in connection with the input devices, refer to the already-mentioned portal article Known Problems and Special Features in SUSE LINUX 9.1 in the Support Database at http://portal.suse.com under the keyword special features.
69
The following version numbers are possible: 2.2.5 (i386, i586): linuxthreads without floating stacks 2.4.1 (AMD64, IPF, s390x, i586, i686):, 2.4.1 (AMD64, i586, i686): linuxthread with floating stacks Notes regarding the kernel and linuxthreads with floating stacks: Applications using errno, h_errno, and _res must include the header files (errno.h, netdb.h, and resolv.h) with #include. For C++ programs with multithread support that use thread cancellation, the environment variable LD_ASSUME_KERNEL=2.4.1 must be used to prompt the use of the linuxthreads library.
70
Reference
Sound Configuration
Following an update, the sound cards must be reconfigured. This can be done with the YaST sound module. As root, enter /sbin/yast2 sound.
71
The new value is 200112 and is used as the default for _POSIX2_VERSION. The SUS standard can be reviewed (free of charge, but registration is required) at http://www .unix.org. TIP Third-party software may not yet comply with the new standard. In this case, set the environment variable as described above.
/etc/gshadow Obsolete
/etc/gshadow has been abandoned and removed, because this file is superfluous for the following reasons: It is not supported by glibc. There is no official interface for this file. Even the shadow suite does not contain such an interface. Most tools that check the group password do not support the file and ignore it for the said reasons.
OpenLDAP
Because the database format has changed, the databases must be regenerated. During the update, the system attempts to perform this conversion automatically. However, there will certainly be cases in which the conversion fails. The schema check has undergone substantial improvement. Therefore, a number of standard-noncompliant operations that were possible with the former LDAP server are no longer possible. The syntax of the configuration file has partly changed with a view to ACLs. Following the installation, information regarding the update is available in the file /usr/share/ doc/packages/openldap2/README.update.
72
Reference
73
libiodbc Discarded
Users of FreeRADIUS must now link against unixODBC, because libiodbc has been discarded.
74
Reference
75
Change to X.Org
The change from XFree86 to X.Org is facilitated by compatibility links that enable access to important files and commands with the old names. Table 3.1 XFree86 XFree86 xf86config xf86cfg Table 3.2 XFree86 XFree86.0.log XFree86.0.log.old Log Files in /var/log X.Org Xorg.0.log Xorg.0.log.old Commands X.Org Xorg xorgconfig xorgcfg
In the course of the change to X.Org, the packages were renamed from XFree86* to xorg-x11*.
76
Reference
UTF-8. SUSE Linux offers standard terminals, such as xterm, the KDE and GNOME terminals, and mlterm (Multilingual Terminal Emulator for X), which might be a replacement for aterm and eterm.
/etc/sysconfig/powersave/ common common cpufreq events battery sleep thermal /etc/powersave.conf has become obsolete. Existing variables have been moved to the files listed in Table 3.3, Split Configuration Files in /etc/sysconfig/powersave (page 77). If you changed the event variables in /etc/powersave.conf, these must now be adapted in /etc/sysconfig/powersave/events. The names of sleep states have changed from: suspend (ACPI S4, APM suspend) standby (ACPI S3, APM standby) To: suspend to disk (ACPI S4, APM suspend)
77
suspend to ram (ACPI S3, APM suspend) standby (ACPI S1, APM standby)
OpenOffice.org (OOo)
Directories: OOo is now installed in /usr/lib/ooo-1.1 instead of /opt/OpenOffice .org. The default directory for user settings is now ~/.ooo-1.1 instead of ~/ OpenOffice.org1.1. Wrapper: There are some new wrappers for starting the OOo components. The new names are shown Table 3.4, Wrapper (page 78). Table 3.4 Old /usr/X11R6/bin/OOo-calc /usr/X11R6/bin/OOo-draw /usr/X11R6/bin/OOo-impress /usr/X11R6/bin/OOo-math /usr/X11R6/bin/OOo-padmin /usr/X11R6/bin/OOo-setup /usr/X11R6/bin/OOo-template /usr/X11R6/bin/OOo-web /usr/X11R6/bin/OOo-writer /usr/X11R6/bin/OOo Wrapper New /usr/bin/oocalc /usr/bin/oodraw /usr/bin/ooimpress /usr/bin/oomath /usr/sbin/oopadmin /usr/bin/oofromtemplate /usr/bin/ooweb /usr/bin/oowriter /usr/bin/ooffice
78
Reference
Old /usr/X11R6/bin/OOo-wrapper
New /usr/bin/ooo-wrapper
The wrapper now supports the option --icons-set for switching between KDE and GNOME icons. The following options are no longer supported: --default-configuration, --gui, --java-path, --skip-check, --lang (the language is now determined by means of locales), --messages-in-window, and --quiet. KDE and GNOME Support: KDE and GNOME extensions are available in the OpenOffice_org-kde and OpenOffice_org-gnome packages.
DVD Burning
In the past, a patch was applied to the cdrecord binary from the cdrecord package to support burning DVDs. Instead, a new binary cdrecord-dvd is installed that has this patch. The growisofs program from the dvd+rw-tools package can now burn all DVD media (DVD+R, DVD-R, DVD+RW, DVD-RW, DVD+RL). Try using that one instead of the patched cdrecord-dvd.
Multiple Kernels
It is possible to install multiple kernels side by side. This feature is meant to allow administrators to upgrade from one kernel to another by installing the new kernel, verifying that the new kernel works as expected, then uninstalling the old kernel. While YaST does not yet support this feature, kernels can easily be installed and uninstalled from the shell using rpm -i package.rpm.
79
The default boot loader menus contain one kernel entry. Before installing multiple kernels, it is useful to add an entry for the extra kernels, so that they can easily be selected. The kernel that was active before installing a new kernel can be accessed as vmlinuz.previous and initrd.previous. By creating a boot loader entry similar to the default entry and having this entry refer to vmlinuz.previous and initrd.previous instead of vmlinuz and initrd, the previously active kernel can be accessed. Alternatively, GRUB and LILO support wild card boot loader entries. Refer to the GRUB info pages (info grub) and to the lilo.conf (5) manual page for details.
80
Reference
The client configuration (/etc/krb5.conf) is very similar to the one of heimdal. If nothing special was configured, it is enough to replace the parameter kpasswd_server with admin_server. It is not possible to copy the server-related (kdc and kadmind) data. After the system update, the old heimdal database is still available under /var/heimdal. MIT kerberos maintains the database under /var/lib/kerberos/krb5kdc.
PAM Configuration
New Configuration Files (containing comments for more information) common-auth Default PAM configuration for auth section
81
common-account Default PAM configuration for account section common-password Default PAM configuration for password changing common-session Default PAM configuration for session management You should include these default configuration files from within your application-specific configuration file, because it is easier to modify and maintain one file instead of the approximately forty files that used to exist on the system. If you install an application later, it inherits the already applied changes and the administrator is not required to remember to adjust the configuration. The changes are simple. If you have the following configuration file (which should be the default for most applications):
#%PAM-1.0 auth required account required password required password required #password required session required pam_unix2.so pam_unix2.so pam_pwcheck.so pam_unix2.so pam_make.so pam_unix2.so
82
Reference
PCMCIA
cardmgr no longer manages PC cards. Instead, as with Cardbus cards and other subsystems, a kernel module manages them. All necessary actions are executed by hotplug. The pcmcia start script has been removed and cardctl is replaced by pccardctl. For more information, see /usr/share/doc/packages/ pcmciautils/README.SUSE.
83
your old ~/.xinitrc. Then copy the new template file into your home directory with: cp /etc/skel/.xinitrc.template ~/.xinitrc Finally, add your customizations from the saved .xinitrc.
84
Reference
Apache 2.2
For Apache version 2.2, Chapter 26, The Apache HTTP Server (page 447) was completely reworked. In addition, find generic upgrade information at http://httpd.apache .org/docs/2.2/upgrading.html and the description of new features at http://httpd.apache.org/docs/2.2/new_features_2_2.html.
85
86
Reference
TIP: Software Development Packages For a number of packages, the components needed for software development (libraries, headers, include files, etc.) have been put into separate packages. These development packages are only needed if you want to compile software yourself, for example, the most recent GNOME packages. They can be identified by the name extension -devel, such as the packages alsa-devel, gimp-devel, and kdelibs3-devel.
The command rpm --checksig package-1.2.3.rpm can be used to verify the signature of an RPM package to determine whether it really originates from SUSE Linux or from another trustworthy facility. This is especially recommended for update packages from the Internet. The SUSE Linux public package signature key normally resides in /root/.gnupg/. The key is additionally located in the directory /usr/ lib/rpm/gnupg/ to enable normal users to verify the signature of RPM packages.
87
The options -U or --upgrade and -F or --freshen can be used to update a package, for example, rpm -F package.rpm. This command removes the files of the old version and immediately installs the new files. The difference between the two versions is that -U installs packages that previously did not exist in the system, but -F merely updates previously installed packages. When updating, rpm updates configuration files carefully using the following strategy: If a configuration file was not changed by the system administrator, rpm installs the new version of the appropriate file. No action by the system administrator is required. If a configuration file was changed by the system administrator before the update, rpm saves the changed file with the extension .rpmorig or .rpmsave (backup file) and installs the version from the new package, but only if the originally installed file and the newer version are different. If this is the case, compare the backup file (.rpmorig or .rpmsave) with the newly installed file and make your changes again in the new file. Afterwards, be sure to delete all .rpmorig and .rpmsave files to avoid problems with future updates. .rpmnew files appear if the configuration file already exists and if the noreplace label was specified in the .spec file. Following an update, .rpmsave and .rpmnew files should be removed after comparing them, so they do not obstruct future updates. The .rpmorig extension is assigned if the file has not previously been recognized by the RPM database. Otherwise, .rpmsave is used. In other words, .rpmorig results from updating from a foreign format to RPM. .rpmsave results from updating from an older RPM to a newer RPM. .rpmnew does not disclose any information as to whether the system administrator has made any changes to the configuration file. A list of these files is available in /var/adm/rpmconfigcheck. Some configuration files (like /etc/ httpd/httpd.conf) are not overwritten to allow continued operation. The -U switch is not just an equivalent to uninstalling with the -e option and installing with the -i option. Use -U whenever possible. To remove a package, enter rpm -e package. rpm only deletes the package if there are no unresolved dependencies. It is theoretically impossible to delete Tcl/Tk, for example, as long as another application requires it. Even in this case, RPM calls for assistance from the database. If such a deletion isfor whatever reason and under unusual
88
Reference
circumstancesimpossible, even if no additional dependencies exist, it may be helpful to rebuild the RPM database using the option --rebuilddb.
Then check if the patch RPM is suitable for this version of pine:
rpm -qp --basedon pine-4.44-224.i586.patch.rpm pine = 4.44-188 pine = 4.44-195 pine = 4.44-207
This patch is suitable for three different versions of pine. The installed version in the example is also listed, so the patch can be installed. Which files are replaced by the patch? The files affected by a patch can easily be seen in the patch RPM. The rpm parameter -P allows selection of special patch features. Display the list of files with the following command:
rpm -qpPl pine-4.44-224.i586.patch.rpm /etc/pine.conf /etc/pine.conf.fixed /usr/bin/pine
89
/etc/pine.conf.fixed /usr/bin/pine
How can a patch RPM be installed in the system? Patch RPMs are used just like normal RPMs. The only difference is that a suitable RPM must already be installed. Which patches are already installed in the system and for which package versions? A list of all patches installed in the system can be displayed with the command rpm -qPa. If only one patch is installed in a new system (as in this example), the list appears as follows:
rpm -qPa pine-4.44-224
If, at a later date, you want to know which package version was originally installed, this information is also available in the RPM database. For pine, this information can be displayed with the following command:
rpm -q --basedon pine pine = 4.44-188
More information, including information about the patch feature of RPM, is available in the man pages of rpm and rpmbuild.
90
Reference
The prepdeltarpm, writedeltarpm, and applydeltarpm binaries are part of the delta RPM suite (package deltarpm) and help you create and apply delta RPM packages. With the following commands, create a delta RPM called new.delta.rpm. The following command assumes that old.rpm and new.rpm are present:
prepdeltarpm -s seq -i info old.rpm > old.cpio prepdeltarpm -f new.rpm > new.cpio xdelta delta -0 old.cpio new.cpio delta writedeltarpm new.rpm delta info new.delta.rpm rm old.cpio new.cpio delta
Using applydeltarpm, you can reconstruct the new RPM from the file system if the old package is already installed:
applydeltarpm new.delta.rpm new.rpm
To derive it from the old RPM without accessing the file system, use the -r option:
applydeltarpm -r old.rpm new.delta.rpm new.rpm
-s
91
-d -c --dump
List only documentation files (implies -l) List only configuration files (implies -l) File list with complete details (to be used with -l, -c, or -d) List features of the package that another package can request with --requires Capabilities the package requires Installation scripts (preinstall, postinstall, uninstall)
--provides
--requires, -R --scripts
For example, the command rpm -q -i wget displays the information shown in Example 3.2, rpm -q -i wget (page 92). Example 3.2 rpm -q -i wget
Name : wget Relocations: (not relocatable) Version : 1.9.1 Vendor: SUSE LINUX AG, Nuernberg, Germany Release : 50 Build Date: Sat 02 Oct 2004 03:49:13 AM CEST Install date: Mon 11 Oct 2004 10:24:56 AM CEST Build Host: f53.suse.de Group : Productivity/Networking/Web/Utilities Source RPM: wget-1.9.1-50.src.rpm Size : 1637514 License: GPL Signature : DSA/SHA1, Sat 02 Oct 2004 03:59:56 AM CEST, Key ID a84edae89c800aca Packager : http://www.suse.de/feedback URL : http://wget.sunsite.dk/ Summary : A tool for mirroring FTP and HTTP servers Description : Wget enables you to retrieve WWW documents or FTP files from a server. This can be done in script files or via the command line. [...]
The option -f only works if you specify the complete filename with its full path. Provide as many filenames as desired. For example, the following command
rpm -q -f /bin/rpm /usr/bin/wget
results in:
92
Reference
rpm-4.1.1-191 wget-1.9.1-50
If only part of the filename is known, use a shell script as shown in Example 3.3, Script to Search for Packages (page 93). Pass the partial filename to the script shown as a parameter when running it. Example 3.3 Script to Search for Packages
#! /bin/sh for i in $(rpm -q -a -l | grep $1); do echo "\"$i\" is in package:" rpm -q -f $i echo "" done
The command rpm -q --changelog rpm displays a detailed list of change information about a specific package, sorted by date. This example shows information about the package rpm. With the help of the installed RPM database, verification checks can be made. Initiate these with -V, -y, or --verify. With this option, rpm shows all files in a package that have been changed since installation. rpm uses eight character symbols to give some hints about the following changes: Table 3.7 5 S L T D U G M RPM Verify Options MD5 check sum File size Symbolic link Modification time Major and minor device numbers Owner Group Mode (permissions and file type)
93
In the case of configuration files, the letter c is printed. For example, for changes to /etc/wgetrc (wget):
rpm -V wget S.5....T c /etc/wgetrc
The files of the RPM database are placed in /var/lib/rpm. If the partition /usr has a size of 1 GB, this database can occupy nearly 30 MB, especially after a complete update. If the database is much larger than expected, it is useful to rebuild the database with the option --rebuilddb. Before doing this, make a backup of the old database. The cron script cron.daily makes daily copies of the database (packed with gzip) and stores them in /var/adm/backup/rpmdb. The number of copies is controlled by the variable MAX_RPMDB_BACKUPS (default: 5) in /etc/sysconfig/backup. The size of a single backup is approximately 1 MB for 1 GB in /usr.
94
Reference
BUILD all the sources are unpacked, patched, and compiled in this directory RPMS where the completed binary packages are stored SRPMS here are the source RPMs When you install a source package with YaST, all the necessary components are installed in /usr/src/packages: the sources and the adjustments in SOURCES and the relevant .spec file in SPECS. WARNING Do not experiment with system components (glibc, rpm, sysvinit, etc.), because this endangers the operability of your system. The following example uses the wget.src.rpm package. After installing the package with YaST, you should have files similar to the following listing:
/usr/src/packages/SOURCES/nops_doc.diff /usr/src/packages/SOURCES/toplev_destdir.diff /usr/src/packages/SOURCES/wget-1.9.1+ipvmisc.patch /usr/src/packages/SOURCES/wget-1.9.1-brokentime.patch /usr/src/packages/SOURCES/wget-1.9.1-passive_ftp.diff /usr/src/packages/SOURCES/wget-LFS-20040909.tar.bz2 /usr/src/packages/SOURCES/wget-wrong_charset.patch /usr/src/packages/SPECS/wget.spec
rpmbuild -b X /usr/src/packages/SPECS/wget.spec starts the compilation. X is a wild card for various stages of the build process (see the output of --help or the RPM documentation for details). The following is merely a brief explanation: -bp Prepare sources in /usr/src/packages/BUILD: unpack and patch. -bc Do the same as -bp, but with additional compilation.
95
-bi Do the same as -bp, but with additional installation of the built software. Caution: if the package does not support the BuildRoot feature, you might overwrite configuration files. -bb Do the same as -bi, but with the additional creation of the binary package. If the compile was successful, the binary should be in /usr/src/packages/RPMS. -ba Do the same as -bb, but with the additional creation of the source RPM. If the compilation was successful, the binary should be in /usr/src/packages/ SRPMS. --short-circuit Skip some steps. The binary RPM created can now be installed with rpm -i or, preferably, with rpm -U. Installation with rpm makes it appear in the RPM database.
Subsequently, a minimum environment is established at /var/tmp/build-root. The package is built in this environment. Upon completion, the resulting packages are located in /var/tmp/build-root/usr/src/packages/RPMS.
96
Reference
The build script offers a number of additional options. For example, cause the script to prefer your own RPMs, omit the initialization of the build environment, or limit the rpm command to one of the above-mentioned stages. Access additional information with build --help and by reading the build man page.
97
Security in Linux
Masquerading and a firewall ensure a controlled data flow and data exchange. SSH (secure shell) enables you to log in to remote hosts over an encrypted connection. The encryption of files or entire partitions protects your data in the event that third parties gain access to your system. Along with technical instructions, find information about security aspects of Linux networks.
The Linux kernel maintains three tables, each for a particular category of functions of the packet filter: filter This table holds the bulk of the filter rules, because it implements the packet filtering mechanism in the stricter sense, which determines whether packets are let through (ACCEPT) or discarded (DROP), for example. nat This table defines any changes to the source and target addresses of packets. Using these functions also allows you to implement masquerading, which is a special case of NAT used to link a private network with the Internet. mangle The rules held in this table make it possible to manipulate values stored in IP headers (such as the type of service). Figure 4.1 iptables: A Packet's Possible Paths
PREROUTING
incoming packet
mangle nat
INPUT
mangle filter
Routing
FORWARD
OUTPUT
filter
POSTROUTING
mangle nat
outgoing packet
These tables contain several predefined chains to match packets: PREROUTING This chain is applied to incoming packets.
102
Reference
INPUT This chain is applied to packets destined for the system's internal processes. FORWARD This chain is applied to packets that are only routed through the system. OUTPUT This chain is applied to packets originating from the system itself. POSTROUTING This chain is applied to all outgoing packets. Figure 4.1, iptables: A Packet's Possible Paths (page 102) illustrates the paths along which a network packet may travel on a given system. For the sake of simplicity, the figure lists tables as parts of chains, but in reality these chains are held within the tables themselves. In the simplest of all possible cases, an incoming packet destined for the system itself arrives at the eth0 interface. The packet is first referred to the PREROUTING chain of the mangle table then to the PREROUTING chain of the nat table. The following step, concerning the routing of the packet, determines that the actual target of the packet is a process of the system itself. After passing the INPUT chains of the mangle and the filter table, the packet finally reaches its target, provided that the rules of the filter table are actually matched.
Security in Linux
103
IMPORTANT: Using the Correct Network Mask When configuring your network, make sure both the broadcast address and the netmask are the same for all local hosts. Failing to do so prevents packets from being routed properly. As mentioned, whenever one of the LAN hosts sends a packet destined for an Internet address, it goes to the default router. However, the router must be configured before it can forward such packets. For security reasons, SUSE Linux does not enable this in a default installation. To enable it, set the variable IP_FORWARD in the file /etc/ sysconfig/sysctl to IP_FORWARD=yes. The target host of the connection can see your router, but knows nothing about the host in your internal network where the packets originated. This is why the technique is called masquerading. Because of the address translation, the router is the first destination of any reply packets. The router must identify these incoming packets and translate their target addresses, so packets can be forwarded to the correct host in the local network. With the routing of inbound traffic depending on the masquerading table, there is no way to open a connection to an internal host from the outside. For such a connection, there would be no entry in the table. In addition, any connection already established has a status entry assigned to it in the table, so the entry cannot be used by another connection. As a consequence of all this, you might experience some problems with a number of application protocols, such as ICQ, cucme, IRC (DCC, CTCP), and FTP (in PORT mode). Netscape, the standard FTP program, and many others use the PASV mode. This passive mode is much less problematic as far as packet filtering and masquerading are concerned.
server, for example, explicitly open the corresponding port. However, a packet filter does not scan the contents of packets with legitimate addresses, such as those directed to your Web server. For example, if incoming packets were intended to compromise a CGI program on your Web server, the packet filter would still let them through. A more effective but more complex mechanism is the combination of several types of systems, such as a packet filter interacting with an application gateway or proxy. In this case, the packet filter rejects any packets destined for disabled ports. Only packets directed to the application gateway are accepted. This gateway or proxy pretends to be the actual client of the server. In a sense, such a proxy could be considered a masquerading host on the protocol level used by the application. One example for such a proxy is Squid, an HTTP proxy server. To use Squid, the browser must be configured to communicate via the proxy. Any HTTP pages requested are served from the proxy cache and pages not found in the cache are fetched from the Internet by the proxy. As another example, the SUSE proxy-suite (proxy-suite) provides a proxy for the FTP protocol. The following section focuses on the packet filter that comes with SUSE Linux. For further information about packet filtering and firewalling, read the Firewall HOWTO included in the howto package. If this package is installed, read the HOWTO with less /usr/share/doc/howto/en/txt/Firewall-HOWTO.gz.
4.1.4 SuSEfirewall2
SuSEfirewall2 is a script that reads the variables set in /etc/sysconfig/ SuSEfirewall2 to generate a set of iptables rules. It defines three security zones, although only the first and the second one are considered in the following sample configuration: External Zone Given that there is no way to control what is happening on the external network, the host needs to be protected from it. In most cases, the external network is the Internet, but it could be another insecure network, such as a WLAN. Internal Zone This refers to the private network, in most cases the LAN. If the hosts on this network use IP addresses from the private range (see Section 18.1.2, Netmasks and Routing (page 321)), enable network address translation (NAT), so hosts on the internal network can access the external one.
Security in Linux
105
Demilitarized Zone (DMZ) While hosts located in this zone can be reached both from the external and the internal network, they cannot access the internal network themselves. This setup can be used to put an additional line of defense in front of the internal network, because the DMZ systems are isolated from the internal network. Any kind of network traffic not explicitly allowed by the filtering rule set is suppressed by iptables. Therefore, each of the interfaces with incoming traffic must be placed into one of the three zones. For each of the zones, define the services or protocols allowed. The rule set is only applied to packets originating from remote hosts. Locally generated packets are not captured by the firewall. The configuration can be performed with YaST (see Section Configuring with YaST (page 106)). It can also be made manually in the file /etc/sysconfig/ SuSEfirewall2, which is well commented. Additionally, a number of example scenarios are available in /usr/share/doc/packages/SuSEfirewall2/ EXAMPLES.
106
Reference
Interfaces All known network interfaces are listed here. To remove an interface from a zone, select the interface, press Change, and choose No Zone Assigned. To add an interface to a zone, select the interface, press Change and choose any of the available zones. You may also create a special interface with your own settings by using Custom. Allowed Services You need this option to offer services from your system to a zone from which it is protected. By default, the system is only protected from external zones. Explicitly allow the services that should be available to external hosts. Activate the services after selecting the desired zone in Allowed Services for Selected Zone. Masquerading Masquerading hides your internal network from external networks, such as the Internet, while enabling hosts in the internal network to access the external network transparently. Requests from the external network to the internal one are blocked and requests from the internal network seem to be issued by the masquerading server when seen externally. If special services of an internal machine need to be available to the external network, add special redirect rules for the service.
Security in Linux
107
Broadcast In this dialog, configure the UDP ports that allow broadcasts. Add the required port numbers or services to the appropriate zone, separated by spaces. See also the file /etc/services. The logging of broadcasts that are not accepted can be enabled here. This may be problematic, because Windows hosts use broadcasts to know about each other and so generate many packets that are not accepted. IPsec Support Configure whether the IPsec service should be available to the external network in this dialog. Configure which packets are trusted under Details. Logging Level There are two rules for the logging: accepted and not accepted packets. Packets that are not accepted are DROPPED or REJECTED. Select from Log All, Log Critical, or Do Not Log Any for both of them. When completed with the firewall configuration, exit this dialog with Next. A zoneoriented summary of your firewall configuration then opens. In it, check all settings. All services, ports, and protocols that have been allowed are listed in this summary. To modify the configuration, use Back. Press Accept to save your configuration.
Configuring Manually
The following paragraphs provide step-by-step instructions for a successful configuration. Each configuration item is marked as to whether it is relevant to firewalling or masquerading. Aspects related to the DMZ (demilitarized zone) as mentioned in the configuration file are not covered here. They are applicable only to a more complex network infrastructure found in larger organizations (corporate networks), which require extensive configuration and in-depth knowledge about the subject. First, use the YaST module System Services (Runlevel) to enable SuSEfirewall2 in your runlevel (3 or 5 most likely). It sets the symlinks for the SuSEfirewall2_* scripts in the /etc/init.d/rc?.d/ directories. FW_DEV_EXT (firewall, masquerading) The device linked to the Internet. For a modem connection, enter ppp0. For an ISDN link, use ippp0. DSL connections use dsl0. Specify auto to use the interface that corresponds to the default route.
108
Reference
FW_DEV_INT (firewall, masquerading) The device linked to the internal, private network (such as eth0). Leave this blank if there is no internal network and the firewall protects only the host on which it runs. FW_ROUTE (firewall, masquerading) If you need the masquerading function, set this to yes. Your internal hosts will not be visible to the outside, because their private network addresses (e.g., 192.168.x.x) are ignored by Internet routers. For a firewall without masquerading, only set this to yes if you want to allow access to the internal network. Your internal hosts need to use officially registered IPs in this case. Normally, however, you should not allow access to your internal network from the outside. FW_MASQUERADE (masquerading) Set this to yes if you need the masquerading function. This provides a virtually direct connection to the Internet for the internal hosts. It is more secure to have a proxy server between the hosts of the internal network and the Internet. Masquerading is not needed for services a proxy server provides. FW_MASQ_NETS (masquerading) Specify the hosts or networks to masquerade, leaving a space between the individual entries. For example:
FW_MASQ_NETS="192.168.0.0/24 192.168.10.1"
FW_PROTECT_FROM_INT (firewall) Set this to yes to protect your firewall host from attacks originating in your internal network. Services are only available to the internal network if explicitly enabled. Also see FW_SERVICES_INT_TCP and FW_SERVICES_INT_UDP. FW_SERVICES_EXT_TCP (firewall) Enter the TCP ports that should be made available. Leave this blank for a normal workstation at home that should not offer any services. FW_SERVICES_EXT_UDP (firewall) Leave this blank unless you run a UDP service and want to make it available to the outside. The services that use UDP include include DNS servers, IPSec, TFTP, DHCP and others. In that case, enter the UDP ports to use.
Security in Linux
109
FW_SERVICES_INT_TCP (firewall) With this variable, define the services available for the internal network. The notation is the same as for FW_SERVICES_EXT_TCP, but the settings are applied to the internal network. The variable only needs to be set if FW_PROTECT_FROM_INT is set to yes. FW_SERVICES_INT_UDP (firewall) See FW_SERVICES_INT_TCP. After configuring the firewall, test your setup. The firewall rule sets are created by entering SuSEfirewall2 start as root. Then use telnet, for example, from an external host to see whether the connection is actually denied. After that, review /var/ log/messages, where you should see something like this:
Mar 15 13:21:38 linux kernel: SFW2-INext-DROP-DEFLT IN=eth0 OUT= MAC=00:80:c8:94:c3:e7:00:a0:c9:4d:27:56:08:00 SRC=192.168.10.0 DST=192.168.10.1 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=15330 DF PROTO=TCP SPT=48091 DPT=23 WINDOW=5840 RES=0x00 SYN URGP=0 OPT (020405B40402080A061AFEBC0000000001030300)
Other packages to test your firewall setup are nmap or nessus. The documentation of nmap is found at /usr/share/doc/packages/nmap and the documentation of nessus resides in the directory /usr/share/doc/packages/nessus-core after installing the respective package.
110
Reference
that this would open all the user's files to an attacker, the illegal account could be used to obtain administrator or root access or to penetrate other systems. In the past, remote connections were established with telnet, which offers no guards against eavesdropping in the form of encryption or other security mechanisms. There are other unprotected communication channels, like the traditional FTP protocol and some remote copying programs. The SSH suite provides the necessary protection by encrypting the authentication strings (usually a login name and a password) and all the other data exchanged between the hosts. With SSH, the data flow could still be recorded by a third party, but the contents are encrypted and cannot be reverted to plain text unless the encryption key is known. So SSH enables secure communication over insecure networks, such as the Internet. The SSH flavor that comes with SUSE Linux is OpenSSH.
Security in Linux
111
ssh otherplanet "uptime; mkdir tmp" tux@otherplanet's password: 1:21pm up 2:17, 9 users, load average: 0.15, 0.04, 0.02
Quotation marks are necessary here to send both instructions with one command. It is only by doing this that the second command is executed on sun.
112
Reference
Version 2 of the SSH protocol is used by default. Override this to use version 1 of the protocol with the -1 switch. The client stores all public host keys in ~/.ssh/known _hosts after its first contact with a remote host. This prevents any man-in-the-middle attacksattempts by foreign SSH servers to use spoofed names and IP addresses. Such attacks are detected either by a host key that is not included in ~/.ssh/known_hosts or by the server's inability to decrypt the session key in the absence of an appropriate private counterpart. It is recommended to back up the private and public keys stored in /etc/ssh/ in a secure, external location. In this way, key modifications can be detected and the old ones can be used again after a reinstallation. This spares users any unsettling warnings. If it is verified that, despite the warning, it is indeed the correct SSH server, the existing entry for the system must be removed from ~/.ssh/known_hosts.
114
Reference
private keys for the duration of an X session. The entire X session is started as a child process of ssh-agent. The easiest way to do this is to set the variable usessh at the beginning of the .xsession file to yes and log in via a display manager, such as KDM or XDM. Alternatively, enter ssh-agent startx. Now you can use ssh or scp as usual. If you have distributed your public key as described above, you are no longer prompted for your password. Take care of terminating your X session or locking it with a password protection application, such as xlock. All the relevant changes that resulted from the introduction of version 2 of the SSH protocol are also documented in the file /usr/share/doc/packages/openssh/ README.SuSE.
With this command, any connection directed to earth port 25 (SMTP) is redirected to the SMTP port on sun via an encrypted channel. This is especially useful for those using
Security in Linux
115
SMTP servers without SMTP-AUTH or POP-before-SMTP features. From any arbitrary location connected to a network, e-mail can be transferred to the home mail server for delivery. Similarly, all POP3 requests (port 110) on earth can be forwarded to the POP3 port of sun with this command:
ssh -L 110:sun:110 earth
Both commands must be executed as root, because the connection is made to privileged local ports. E-mail is sent and retrieved by normal users in an existing SSH connection. The SMTP and POP3 host must be set to localhost for this to work. Additional information can be found in the manual pages for each of the programs described above and also in the files under /usr/share/doc/packages/openssh.
116
Reference
Workstations In companies where almost everyone has access to your computer, it can makes sense to encrypt partition or single files.
Security in Linux
117
If the encrypted file system should only be mounted when necessary, enable Do Not Mount During Booting in the fstab Options dialog. The respective partition will not be mounted when the system is booted. To make it available afterwards, mount it manually with mount name_of_partition mount_point. Enter the password when prompted to do so. After finishing your work with the partition, unmount it with umount name_of_partition to protect it from access by other users.
118
Reference
Use vi -x filename to edit a new file. vi prompts you to set a password, after which it encrypts the content of the file. Whenever you access this file, vi requests the correct password. For even more security, you can place the encrypted text file in an encrypted partition. This is recommended because the encryption used in vi is not very strong.
Security in Linux
119
Administrators only need to care about the applications that are vulnerable to attacks and generate profiles for these. Hardening a system thus comes down to building and maintaining the AppArmor profile set and monitoring any policy violations or exceptions logged by AppArmor's reporting facility. Building AppArmor profiles to confine an application is very straightforward and intuitive. AppArmor ships with several tools that assist in profile creation. AppArmor does not require you to do any programming or script handling. The only task that is required from the administrator is to determine a policy of strictest access and execute permissions for each application that needs to be hardened. Updates or modifications to the application profiles are only required if the software configuration or the desired range of activities changes. AppArmor offers intuitive tools to handle profile updates or modifications. Users will not notice AppArmor at all. It runs behind the scenes and does not require any user interaction. Performance will not be affected noticeably by AppArmor. If some activity of the application is not covered by an AppArmor profile or if some activity of the application is prevented by AppArmor, the administrator needs to adjust the profile of this application to cover this kind of behavior. This guide outlines the basic tasks that need to be performed with AppArmor to effectively harden a system. For more in-depth information, refer to Novell AppArmor 2.0 Administration Guide.
120
Reference
4 Select all these packages for installation then select Accept. YaST resolves any dependencies and installs all the packages for you. 5 After YaST has finished updating the system configuration, select Finish to leave the package manager.
Security in Linux
121
Using the YaST Runlevel tool, you enable services permanentlythese settings survive a reboot of your system. To enable AppArmor temporarilyfor the duration of one session onlyproceed as follows: 1 Log in as root and start YaST. 2 Start Novell AppArmor AppArmor Control Panel. 3 Set the AppArmor Status to AppArmor is enabled by clicking Configure Enable OK. 4 Apply your settings with Done.
122
Reference
1 Determine the applications to profile. Read more on this in Section Choosing the Applications to Profile (page 123). 2 Build the needed profiles as roughly outlined in Section Building and Modifying Profiles (page 124). Check the results and adjust the profiles when necessary. 3 Keep track of what is happening on your system by running AppArmor reports and dealing with security events. Refer to Section Configuring Novell AppArmor Event Notification and Reports (page 126). 4 Update your profiles whenever your environment changes or you need to react to security events logged by AppArmor's reporting tool. Refer to Section Updating Your Profiles (page 127).
Security in Linux
123
Each of the processes in the above example labeled not confined might need a custom profile to confine it. Those labeled confined by are already protected by AppArmor. TIP: For More Information For more information about choosing the the right applications to profile, refer to Chapter Selecting Programs to Immunize (Novell AppArmor 2.0 Administration Guide) .
124
Reference
3 Let AppArmor analyze the log files generated in Step 2 (page 124). Do this either by running typing S in genprof or clicking Scan system log for AppArmor events in the Add Profile Wizard and follow the instructions given in the wizard until the profile is completed. AppArmor scans the logs it recorded during the application's run and asks you to set the access rights for each event that was logged. Either set them for each file or use globbing. 4 Once all access permissions are set, your profile is set to enforce mode mode. The profile is applied and AppArmor restricts the application according to the profile just created. If you started genprof against an application that had an existing profile that was in complain mode, this profile will remain in learning mode upon exit of this learning cycle. For more information on changing the mode of a profile, refer to Section Complain or Learning Mode (Chapter 3, Building Novell AppArmor Profiles, Novell AppArmor 2.0 Administration Guide) and to Section Enforce Mode (Chapter 3, Building Novell AppArmor Profiles, Novell AppArmor 2.0 Administration Guide) . Test your profile settings by performing every task you need with the application you just confined. Normally, the confined program runs smoothly and you do not notice AppArmor activities at all. However, if you notice certain misbehavior with your application, check the system logs and see if AppArmor is too closely constricting your application. Find the appropriate logs in /var/log/messages or run dmesg. Any output resembling the following example hints at AppArmor too closely confining your application:
AppArmor: REJECTING w access to /var/run/nscd/socket (traceroute(2050) profile /usr/sbin/traceroute active /usr/sbin/traceroute)
To adjust the profile, run the Add Profile Wizard again as described above and let it analyze the log messages relating this particular application. Determine the access rights or restrictions when prompted by YaST.
Security in Linux
125
TIP: For More Information For more information about profile building and modification, refer to Chapter Building Novell AppArmor Profiles (Novell AppArmor 2.0 Administration Guide) .
126
Reference
the cumbersome messages only useful to the logprof tool. You can decrease the size of the report by filtering by date range or program name. To configure the AppArmor reports, proceed as follows: 1 Log in as root and start YaST. Select Novell AppArmor AppArmor Reports. 2 Select the type of report you want to examine or configure from Executive Security Summary, Applications Audit, and Security Incident Report. 3 Edit the report generation frequency, e-mail address, export format, and the location of the reports by selecting Edit and providing the requested data. 4 To run a report of the selected type, click Run Now. 5 Browse through the archived reports of a given type by selecting View Archive and specifying the report type. or Delete unneeded reports or add new ones. TIP: For More Information For more information about configuring event notification in Novell AppArmor, refer to Section Setting Up Event Notification (Chapter 4, Managing Profiled Applications, Novell AppArmor 2.0 Administration Guide). More information about report configuration can be found in Section Reports (Chapter 4, Managing Profiled Applications, Novell AppArmor 2.0 Administration Guide) .
Security in Linux
127
1 Log in as root and start YaST. 2 Start Novell AppArmor Update Profile Wizard. 3 Adjust access or execute rights to any resource or for any executable that has been logged when prompted. 4 Leave YaST after you answered all questions. Your changes are applied to the respective profiles. TIP: For More Information For more information about updating your profiles from the system logs, refer to Section Updating Profiles from Syslog Entries (Chapter 3, Building Novell AppArmor Profiles, Novell AppArmor 2.0 Administration Guide).
128
Reference
Security in Linux
129
Serial terminals connected to serial ports are still used in many places. Unlike network interfaces, they do not rely on a network protocol to communicate with the host. A simple cable or an infrared port is used to send plain characters back and forth between the devices. The cable itself is the weakest point of such a system: with an older printer connected to it, it is easy to record anything that runs over the wires. What can be achieved with a printer can also be accomplished in other ways, depending on the effort that goes into the attack. Reading a file locally on a host requires other access rules than opening a network connection with a server on a different host. There is a distinction between local security and network security. The line is drawn where data must be put into packets to be sent somewhere else.
Local Security
Local security starts with the physical environment in the location where the computer is running. Set up your machine in a place where security is in line with your expectations and needs. The main goal of local security is to keep users separate from each other, so no user can assume the permissions or the identity of another. This is a general rule to be observed, but it is especially true for the user root, who holds the supreme power on the system. root can take on the identity of any other local user without being prompted for the password and read any locally stored file.
Passwords
On a Linux system, passwords are not stored as plain text and the text string entered is not simply matched with the saved pattern. If this were the case, all accounts on your system would be compromised as soon as someone got access to the corresponding file. Instead, the stored password is encrypted and, each time it is entered, is encrypted again and the two encrypted strings are compared. This only provides more security if the encrypted password cannot be reverse-computed into the original text string. This is actually achieved by a special kind of algorithm, also called trapdoor algorithm, because it only works in one direction. An attacker who has obtained the encrypted string is not able to get your password by simply applying the same algorithm again. Instead, it would be necessary to test all the possible character combinations until a combination is found that looks like your password when encrypted. With passwords eight characters long, there are quite a number of possible combinations to calculate.
130
Reference
In the seventies, it was argued that this method would be more secure than others due to the relative slowness of the algorithm used, which took a few seconds to encrypt just one password. In the meantime, however, PCs have become powerful enough to do several hundred thousand or even millions of encryptions per second. Because of this, encrypted passwords should not be visible to regular users (/etc/shadow cannot be read by normal users). It is even more important that passwords are not easy to guess, in case the password file becomes visible due to some error. Consequently, it is not really useful to translate a password like tantalize into t@nt@1lz3. Replacing some letters of a word with similar looking numbers is not safe enough. Password cracking programs that use dictionaries to guess words also play with substitutions like that. A better way is to make up a word with no common meaning, something that only makes sense to you personally, like the first letters of the words of a sentence or the title of a book, such as The Name of the Rose by Umberto Eco. This would give the following safe password: TNotRbUE9. In contrast, passwords like beerbuddy or jasmine76 are easily guessed even by someone who has only some casual knowledge about you.
File Permissions
As a general rule, always work with the most restrictive privileges possible for a given task. For example, it is definitely not necessary to be root to read or write e-mail. If the mail program has a bug, this bug could be exploited for an attack that acts with exactly the permissions of the program when it was started. By following the above rule, minimize the possible damage. The permissions of the more than 200,000 files included in a SUSE distribution are carefully chosen. A system administrator who installs additional software or other files Security in Linux 131
should take great care when doing so, especially when setting the permission bits. Experienced and security-conscious system administrators always use the -l option with the command ls to get an extensive file list, which allows them to detect any incorrect file permissions immediately. An incorrect file attribute does not only mean that files could be changed or deleted. These modified files could be executed by root or, in the case of configuration files, programs could use such files with the permissions of root. This significantly increases the possibilities of an attacker. Attacks like this are called cuckoo eggs, because the program (the egg) is executed (hatched) by a different user (bird), just like a cuckoo tricks other birds into hatching its eggs. A SUSE Linux system includes the files permissions, permissions.easy, permissions.secure, and permissions.paranoid, all in the directory /etc. The purpose of these files is to define special permissions, such as world-writable directories or, for files, the setuser ID bit (programs with the setuser ID bit set do not run with the permissions of the user that has launched it, but with the permissions of the file owner, in most cases root). An administrator can use the file /etc/ permissions.local to add his own settings. To define which of the above files is used by SUSE's configuration programs to set permissions accordingly, select Security in YaST. To learn more about the topic, read the comments in /etc/permissions or consult the manual page of chmod (man chmod).
132
Reference
serious consequences, especially if the program is being executed with special privileges (see Section File Permissions (page 131)). Format string bugs work in a slightly different way, but again it is the user input that could lead the program astray. In most cases, these programming errors are exploited with programs executed with special permissionssetuid and setgid programswhich also means that you can protect your data and your system from such bugs by removing the corresponding execution privileges from programs. Again, the best way is to apply a policy of using the lowest possible privileges (see Section File Permissions (page 131)). Given that buffer overflows and format string bugs are bugs related to the handling of user data, they are not only exploitable if access has been given to a local account. Many of the bugs that have been reported can also be exploited over a network link. Accordingly, buffer overflows and format string bugs should be classified as being relevant for both local and network security.
Viruses
Contrary to what some people say, there are viruses that run on Linux. However, the viruses that are known were released by their authors as a proof of concept to prove that the technique works as intended. None of these viruses have been spotted in the wild so far. Viruses cannot survive and spread without a host on which to live. In this case, the host would be a program or an important storage area of the system, such as the master boot record, which needs to be writable for the program code of the virus. Owing to its multiuser capability, Linux can restrict write access to certain files, especially important with system files. Therefore, if you did your normal work with root permissions, you would increase the chance of the system being infected by a virus. In contrast, if you follow the principle of using the lowest possible privileges as mentioned above, chances of getting a virus are slim. Apart from that, you should never rush into executing a program from some Internet site that you do not really know. SUSE's RPM packages carry a cryptographic signature as a digital label that the necessary care was taken to build them. Viruses are a typical sign that the administrator or the user lacks the required security awareness, putting at risk even a system that should be highly secure by its very design.
Security in Linux
133
Viruses should not be confused with worms, which belong to the world of networks entirely. Worms do not need a host to spread.
Network Security
Network security is important for protecting from an attack that is started outside. The typical login procedure requiring a username and a password for user authentication is still a local security issue. In the particular case of logging in over a network, differentiate between the two security aspects. What happens until the actual authentication is network security and anything that happens afterwards is local security.
134
Reference
tory by accident, you would not be able to open any new windows or X clients. Read more about X Window System security mechanisms in the man page of Xsecurity (man Xsecurity). SSH (secure shell) can be used to encrypt a network connection completely and forward it to an X server transparently without the encryption mechanism being perceived by the user. This is also called X forwarding. X forwarding is achieved by simulating an X server on the server side and setting a DISPLAY variable for the shell on the remote host. Further details about SSH can be found in Section 4.2, SSH: Secure Network Operations (page 110). WARNING If you do not consider the host where you log in to be a secure host, do not use X forwarding. With X forwarding enabled, an attacker could authenticate via your SSH connection to intrude on your X server and sniff your keyboard input, for instance.
Security in Linux
135
Denial of Service
The purpose of a denial of service (DoS) attack is to block a server program or even an entire system, something that could be achieved by various means: overloading the server, keeping it busy with garbage packets, or exploiting a remote buffer overflow. Often a DoS attack is made with the sole purpose of making the service disappear. However, once a given service has become unavailable, communications could become vulnerable to man-in-the-middle attacks (sniffing, TCP connection hijacking, spoofing) and DNS poisoning.
136
Reference
DNS Poisoning
DNS poisoning means that the attacker corrupts the cache of a DNS server by replying to it with spoofed DNS reply packets, trying to get the server to send certain data to a victim who is requesting information from that server. Many servers maintain a trust relationship with other hosts, based on IP addresses or hostnames. The attacker needs a good understanding of the actual structure of the trust relationships among hosts to disguise itself as one of the trusted hosts. Usually, the attacker analyzes some packets received from the server to get the necessary information. The attacker often needs to target a well-timed DoS attack at the name server as well. Protect yourself by using encrypted connections that are able to verify the identity of the hosts to which to connect.
Worms
Worms are often confused with viruses, but there is a clear difference between the two. Unlike viruses, worms do not need to infect a host program to live. Instead, they are specialized to spread as quickly as possible on network structures. The worms that appeared in the past, such as Ramen, Lion, or Adore, make use of well-known security holes in server programs like bind8 or lprNG. Protection against worms is relatively easy. Given that some time elapses between the discovery of a security hole and the moment the worm hits your server, there is a good chance that an updated version of the affected program is available on time. That is only useful if the administrator actually installs the security updates on the systems in question.
Security in Linux
137
[email protected] is one of the best-known security mailing lists worldwide. Reading this list, which receives between 15 and 20 postings per day, is recommended. More information can be found at http://www.securityfocus .com. The following is a list of rules you may find useful in dealing with basic security concerns: According to the rule of using the most restrictive set of permissions possible for every job, avoid doing your regular jobs as root. This reduces the risk of getting a cuckoo egg or a virus and protects you from your own mistakes. If possible, always try to use encrypted connections to work on a remote machine. Using ssh (secure shell) to replace telnet, ftp, rsh, and rlogin should be standard practice. Avoid using authentication methods based on IP addresses alone. Try to keep the most important network-related packages up-to-date and subscribe to the corresponding mailing lists to receive announcements on new versions of such programs (bind, sendmail, ssh, etc.). The same should apply to software relevant to local security. Change the /etc/permissions file to optimize the permissions of files crucial to your system's security. If you remove the setuid bit from a program, it might well be that it cannot do its job anymore in the intended way. On the other hand, consider that, in most cases, the program will also have ceased to be a potential security risk. You might take a similar approach with world-writable directories and files. Disable any network services you do not absolutely require for your server to work properly. This makes your system safer. Open ports, with the socket state LISTEN, can be found with the program netstat. As for the options, it is recommended to use netstat -ap or netstat -anp. The -p option allows you to see which process is occupying a port under which name. Compare the netstat results with those of a thorough port scan done from outside your host. An excellent program for this job is nmap, which not only checks out the ports of your machine, but also draws some conclusions as to which services are waiting behind them. However, port scanning may be interpreted as an aggressive act, so do not do this on a host without the explicit approval of the administrator. 138 Reference
Finally, remember that it is important not only to scan TCP ports, but also UDP ports (options -sS and -sU). To monitor the integrity of the files of your system in a reliable way, use the program AIDE (Advanced Intrusion Detection Environment), available on SUSE Linux. Encrypt the database created by AIDE to prevent someone from tampering with it. Furthermore, keep a backup of this database available outside your machine, stored on an external data medium not connected to it by a network link. Take proper care when installing any third-party software. There have been cases where a hacker had built a trojan horse into the tar archive of a security software package, which was fortunately discovered very quickly. If you install a binary package, have no doubts about the site from which you downloaded it. SUSE's RPM packages are gpg-signed. The key used by SUSE for signing is: ID:9C800ACA 2000-10-19 SUSE Package Signing Key <[email protected]> Key fingerprint = 79C1 79B2 E1C8 20C1 890F 9994 A84E DAE8 9C80 0ACA The command rpm --checksig package.rpm shows whether the checksum and the signature of an uninstalled package are correct. Find the key on the first CD of the distribution and on most key servers worldwide. Check your backups of user and system files regularly. Consider that if you do not test whether the backup works, it might actually be worthless. Check your log files. Whenever possible, write a small script to search for suspicious entries. Admittedly, this is not exactly a trivial task. In the end, only you can know which entries are unusual and which are not. Use tcp_wrapper to restrict access to the individual services running on your machine, so you have explicit control over which IP addresses can connect to a service. For further information regarding tcp_wrapper, consult the manual pages of tcpd and hosts_access (man 8 tcpd, man hosts_access). Use SuSEfirewall to enhance the security provided by tcpd (tcp_wrapper). Design your security measures to be redundant: a message seen twice is much better than no message at all.
Security in Linux
139
140
Reference
141
would not be able to change passwd, because it would be too dangerous to grant all users direct access to this file. A possible solution to this problem is the setuid mechanism. setuid (set user ID) is a special file attribute that instructs the system to execute programs marked accordingly under a specific user ID. Consider the passwd command:
-rwsr-xr-x 1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd
You can see the s that denotes that the setuid bit is set for the user permission. By means of the setuid bit, all users starting the passwd command execute it as root.
You can see the s that denotes that the setgid bit is set for the group permission. The owner of the directory and members of the group archive may access this directory. Users that are not members of this group are mapped to the respective group. The effective group ID of all written files will be archive. For example, a backup program that runs with the group ID archive is able to access this directory even without root privileges.
142
Reference
5.3 Definitions
user class The conventional POSIX permission concept uses three classes of users for assigning permissions in the file system: the owner, the owning group, and other users. Three permission bits can be set for each user class, giving permission to read (r), write (w), and execute (x). access ACL The user and group access permissions for all kinds of file system objects (files and directories) are determined by means of access ACLs.
143
default ACL Default ACLs can only be applied to directories. They determine the permissions a file system object inherits from its parent directory when it is created. ACL entry Each ACL consists of a set of ACL entries. An ACL entry contains a type, a qualifier for the user or group to which the entry refers, and a set of permissions. For some entry types, the qualifier for the group or users is undefined.
144
Reference
ACL Entry Types Text Form user::rwx user:name:rwx group::rwx group:name:rwx mask::rwx other::rwx Masking Access Permissions Text Form user:geeko:r-x mask::rweffective permissions: Permissions r-x rwr--
145
ACL entry owner. Other class permissions are mapped to the respective ACL entry. However, the mapping of the group class permissions is different in the two cases. Figure 5.1 Minimum ACL: ACL Entries Compared to Permission Bits
In the case of a minimum ACLwithout maskthe group class permissions are mapped to the ACL entry owning group. This is shown in Figure 5.1, Minimum ACL: ACL Entries Compared to Permission Bits (page 146). In the case of an extended ACLwith maskthe group class permissions are mapped to the mask entry. This is shown in Figure 5.2, Extended ACL: ACL Entries Compared to Permission Bits (page 146). Figure 5.2 Extended ACL: ACL Entries Compared to Permission Bits
This mapping approach ensures the smooth interaction of applications, regardless of whether they have ACL support. The access permissions that were assigned by means of the permission bits represent the upper limit for all other fine adjustments made with an ACL. Changes made to the permission bits are reflected by the ACL and vice versa.
Before creating the directory, use the umask command to define which access permissions should be masked each time a file object is created. The command umask 027 sets the default permissions by giving the owner the full range of permissions (0), denying the group write access (2), and giving other users no permissions at all (7). umask actually masks the corresponding permission bits or turns them off. For details, consult the umask man page. mkdir mydir creates the mydir directory with the default permissions as set by umask. Use ls -dl mydir to check whether all permissions were assigned correctly. The output for this example is:
drwxr-x--- ... tux project3 ... mydir
With getfacl mydir, check the initial state of the ACL. This gives information like:
# file: mydir # owner: tux # group: project3 user::rwx group::r-x other::---
The first three output lines display the name, owner, and owning group of the directory. The next three lines contain the three ACL entries owner, owning group, and other. In fact, in the case of this minimum ACL, the getfacl command does not produce any information you could not have obtained with ls. Modify the ACL to assign read, write, and execute permissions to an additional user geeko and an additional group mascots with:
setfacl -m user:geeko:rwx,group:mascots:rwx mydir
The option -m prompts setfacl to modify the existing ACL. The following argument indicates the ACL entries to modify (multiple entries are separated by commas). The final part specifies the name of the directory to which these modifications should be applied. Use the getfacl command to take a look at the resulting ACL.
# file: mydir # owner: tux # group: project3 user::rwx user:geeko:rwx group::r-x group:mascots:rwx
147
mask::rwx other::---
In addition to the entries initiated for the user geeko and the group mascots, a mask entry has been generated. This mask entry is set automatically so that all permissions are effective. setfacl automatically adapts existing mask entries to the settings modified, unless you deactivate this feature with -n. mask defines the maximum effective access permissions for all entries in the group class. This includes named user, named group, and owning group. The group class permission bits displayed by ls -dl mydir now correspond to the mask entry.
drwxrwx---+ ... tux project3 ... mydir
The first column of the output contains an additional + to indicate that there is an extended ACL for this item. According to the output of the ls command, the permissions for the mask entry include write access. Traditionally, such permission bits would mean that the owning group (here project3) also has write access to the directory mydir. However, the effective access permissions for the owning group correspond to the overlapping portion of the permissions defined for the owning group and for the maskwhich is r-x in our example (see Table 5.2, Masking Access Permissions (page 145)). As far as the effective permissions of the owning group in this example are concerned, nothing has changed even after the addition of the ACL entries. Edit the mask entry with setfacl or chmod. For example, use chmod g-w mydir. ls -dl mydir then shows:
drwxr-x---+ ... tux project3 ... mydir
After executing the chmod command to remove the write permission from the group class bits, the output of the ls command is sufficient to see that the mask bits must have changed accordingly: write permission is again limited to the owner of mydir.
148
Reference
The output of the getfacl confirms this. This output includes a comment for all those entries in which the effective permission bits do not correspond to the original permissions, because they are filtered according to the mask entry. The original permissions can be restored at any time with chmod g+w mydir.
149
The option -d of the setfacl command prompts setfacl to perform the following modifications (option -m) in the default ACL. Take a closer look at the result of this command:
getfacl mydir # file: mydir # owner: tux # group: project3 user::rwx user:geeko:rwx group::r-x group:mascots:rwx mask::rwx other::--default:user::rwx default:group::r-x default:group:mascots:r-x default:mask::r-x default:other::---
getfacl returns both the access ACL and the default ACL. The default ACL is formed by all lines that start with default. Although you merely executed the setfacl command with an entry for the mascots group for the default ACL, setfacl automatically copied all other entries from the access ACL to create a valid default ACL. Default ACLs do not have an immediate effect on access permissions. They only come into play when file system objects are created. These new objects inherit permissions only from the default ACL of their parent directory. 2. In the next example, use mkdir to create a subdirectory in mydir, which inherits the default ACL.
mkdir mydir/mysubdir getfacl mydir/mysubdir # file: mydir/mysubdir # owner: tux # group: project3 user::rwx group::r-x group:mascots:r-x mask::r-x other::--default:user::rwx default:group::r-x default:group:mascots:r-x
150
Reference
default:mask::r-x default:other::---
As expected, the newly-created subdirectory mysubdir has the permissions from the default ACL of the parent directory. The access ACL of mysubdir is an exact reflection of the default ACL of mydir. The default ACL that this directory will hand down to its subordinate objects is also the same. 3. Use touch to create a file in the mydir directory, for example, touch mydir/myfile. ls -l mydir/myfile then shows:
-rw-r-----+ ... tux project3 ... mydir/myfile
touch uses a mode with the value 0666 when creating new files, which means that the files are created with read and write permissions for all user classes, provided no other restrictions exist in umask or in the default ACL (see Section Effects of a Default ACL (page 149)). In effect, this means that all access permissions not contained in the mode value are removed from the respective ACL entries. Although no permissions were removed from the ACL entry of the group class, the mask entry was modified to mask permissions not set in mode. This approach ensures the smooth interaction of applications, such as compilers, with ACLs. You can create files with restricted access permissions and subsequently mark them as executable. The mask mechanism guarantees that the right users and groups can execute them as desired.
151
access is handled in accordance with the entry that best suits the process. Permissions do not accumulate. Things are more complicated if a process belongs to more than one group and would potentially suit several group entries. An entry is randomly selected from the suitable entries with the required permissions. It is irrelevant which of the entries triggers the final result access granted. Likewise, if none of the suitable group entries contains the required permissions, a randomly selected entry triggers the final result access denied.
152
Reference
The descriptions have been kept short to allow as many utilities as possible to be mentioned. Further information for all the commands can be found in the man pages. Most of the commands also understand the parameter --help, which produces a brief list of the possible parameters.
tester@linux:~> lsof -p $$ COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME bash 5552 tester cwd DIR 3,3 1512 117619 /home/tester bash 5552 tester rtd DIR 3,3 584 2 / bash 5552 tester txt REG 3,3 498816 13047 /bin/bash bash 5552 tester mem REG 0,0 0 [heap] (stat: No such \ file or directory) bash 5552 tester mem REG 3,3 217016 115687 /var/run/nscd/passwd bash 5552 tester mem REG 3,3 208464 11867 \ /usr/lib/locale/en_GB.utf8/LC_CTYPE bash 5552 tester mem REG 3,3 882134 11868 \ /usr/lib/locale/en_GB.utf8/LC_COLLATE bash 5552 tester mem REG 3,3 1386997 8837 /lib/libc-2.3.6.so bash 5552 tester mem REG 3,3 13836 8843 /lib/libdl-2.3.6.so bash 5552 tester mem REG 3,3 290856 12204 /lib/libncurses.so.5.5 bash 5552 tester mem REG 3,3 26936 13004 /lib/libhistory.so.5.1 bash 5552 tester mem REG 3,3 190200 13006 /lib/libreadline.so.5.1 bash 5552 tester mem REG 3,3 54 11842 \ /usr/lib/locale/en_GB.utf8/LC_NUMERIC bash 5552 tester mem REG 3,3 2375 11663 \ /usr/lib/locale/en_GB.utf8/LC_TIME bash 5552 tester mem REG 3,3 290 11736 \ /usr/lib/locale/en_GB.utf8/LC_MONETARY bash 5552 tester mem REG 3,3 52 11831 \ /usr/lib/locale/en_GB.utf8/LC_MESSAGES/SYS_LC_MESSAGES bash 5552 tester mem REG 3,3 34 11862 \ /usr/lib/locale/en_GB.utf8/LC_PAPER bash 5552 tester mem REG 3,3 62 11839 \ /usr/lib/locale/en_GB.utf8/LC_NAME bash 5552 tester mem REG 3,3 127 11664 \ /usr/lib/locale/en_GB.utf8/LC_ADDRESS bash 5552 tester mem REG 3,3 56 11735 \ /usr/lib/locale/en_GB.utf8/LC_TELEPHONE bash 5552 tester mem REG 3,3 23 11866 \ /usr/lib/locale/en_GB.utf8/LC_MEASUREMENT bash 5552 tester mem REG 3,3 21544 9109 \ /usr/lib/gconv/gconv-modules.cache bash 5552 tester mem REG 3,3 366 9720 \ /usr/lib/locale/en_GB.utf8/LC_IDENTIFICATION bash 5552 tester mem REG 3,3 97165 8828 /lib/ld-2.3.6.so bash 5552 tester 0u CHR 136,5 7 /dev/pts/5 bash 5552 tester 1u CHR 136,5 7 /dev/pts/5 bash 5552 tester 2u CHR 136,5 7 /dev/pts/5 bash 5552 tester 255u CHR 136,5 7 /dev/pts/5
The special shell variable $$, whose value is the process ID of the shell, has been used. The command lsof lists all the files currently open when used without any parameters. Because there are often thousands of open files, listing all of them is rarely useful. However, the list of all files can be combined with search functions to generate useful lists. For example, list all used character devices:
tester@linux:~> lsof | grep CHR bash 3838 tester 0u bash 3838 tester 1u bash 3838 tester 2u bash 3838 tester 255u bash 5552 tester 0u bash 5552 tester 1u bash 5552 tester 2u bash 5552 tester 255u X 5646 root mem lsof 5673 tester 0u lsof 5673 tester 2u CHR CHR CHR CHR CHR CHR CHR CHR CHR CHR CHR 136,0 136,0 136,0 136,0 136,5 136,5 136,5 136,5 1,1 136,5 136,5 2 2 2 2 7 7 7 7 1006 7 7 /dev/pts/0 /dev/pts/0 /dev/pts/0 /dev/pts/0 /dev/pts/5 /dev/pts/5 /dev/pts/5 /dev/pts/5 /dev/mem /dev/pts/5 /dev/pts/5
154
Reference
grep grep
5674 5674
tester tester
1u 2u
CHR CHR
136,5 136,5
7 /dev/pts/5 7 /dev/pts/5
/mnt/notes.txt
Following termination of the less process, which was running on another terminal, the file system can successfully be unmounted.
The parameter --filesystem produces details of the properties of the file system in which the specified file is located:
tester@linux:~> stat /etc/profile --filesystem File: "/etc/profile" ID: 0 Namelen: 255 Type: reiserfs Block size: 4096 Fundamental block size: 4096 Blocks: Total: 2622526 Free: 1809771 Available: 1809771 Inodes: Total: 0 Free: 0
155
0 0 1 1 1 1 0 0 0 0 0 0 0 3
156
Reference
The option -d puts out a defects list with two tables of bad blocks of a hard disk: first the one supplied by the vendor (manufacturer table) and second the list of bad blocks that appeared in operation (grown table). If the number of entries in the grown table increases, it might be a good idea to replace the hard disk.
157
15 16 15 16 23 19 16
0 0 0 0 0 0 0
1840 752 556 S 1600 516 320 S 1736 800 652 S 4192 2852 1444 S 1756 600 524 S 2668 1076 944 S 1756 648 564 S
If you press F while top is running, a menu opens with which to make extensive changes to the format of the output. The parameter -U UID monitors only the processes associated with a particular user. Replace UID with the user ID of the user. top -U `id -u` returns the UID of the user on the basis of the username and displays his processes.
To check how many sshd processes are running, use the option -p together with the command pidof, which lists the process IDs of the given processes.
158
Reference
`pidof sshd` TIME COMMAND 0:00 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid 0:00 sshd: tester [priv] 0:00 sshd: tester@pts/0
The process list can be formatted according to your needs. The option -L returns a list of all keywords. Enter the following command to issue a list of all processes sorted by memory usage:
tester@linux:~> ps ax --format pid,rss,cmd --sort rss PID RSS CMD 2 0 [ksoftirqd/0] 3 0 [events/0] 4 0 [khelper] 5 0 [kthread] 11 0 [kblockd/0] 12 0 [kacpid] 472 0 [pdflush] 473 0 [pdflush] [...] 4028 17556 nautilus --no-default-window --sm-client-id default2 4118 17800 ksnapshot 4114 19172 sound-juicer 4023 25144 gnome-panel --sm-client-id default1 4047 31400 mono-best --debug /usr/lib/beagle/Best.exe --autostarted 3973 31520 mono-beagled --debug /usr/lib/beagle/BeagleDaemon.exe \ --bg --autostarted
159
| |-kio_file | |-klauncher | |-konqueror | |-konsole-+-bash---su---bash | | `-bash | `-kwin |-kdesktop---kdesktop_lock---xmatrix |-kdesud |-kdm-+-X | `-kdm---startkde---kwrapper [...]
The parameter -p adds the process ID to a given name. To have the command lines displayed as well, use the -a parameter:
If any users of other systems have logged in remotely, the parameter -f shows the computers from which they have established the connection.
The options -b,-k,-m,-g show output in bytes, KB, MB, or GB, respectively. The parameter -d delay ensures that the display is refreshed every delay seconds. For example, free -d 1.5 produces an update every 1.5 seconds.
160
Reference
Obtain information about total usage of the file systems with the command df. The parameter -h (or --human-readable) transforms the output into a form understandable for common users.
161
tester@linux:~> df -h Filesystem Size /dev/hda3 11G udev 252M /dev/hda1 16M /dev/hda4 27G
Used Avail Use% Mounted on 3.2G 6.9G 32% / 104K 252M 1% /dev 6.6M 7.8M 46% /boot 34M 27G 1% /local
Display the total size of all the files in a given directory and its subdirectories with the command du. The parameter -s suppresses the output of detailed information. -h again transforms the data into a human-readable form:
tester@linux:~> du -sh /local 1.7M /local
The allocation and use of interrupts can be queried with the following command:
tester@linux:~> cat /proc/interrupts CPU0 0: 3577519 XT-PIC timer 1: 130 XT-PIC i8042 2: 0 XT-PIC cascade 5: 564535 XT-PIC Intel 82801DB-ICH4 7: 1 XT-PIC parport0 8: 2 XT-PIC rtc 9: 1 XT-PIC acpi, uhci_hcd:usb1, ehci_hcd:usb4 10: 0 XT-PIC uhci_hcd:usb3 11: 71772 XT-PIC uhci_hcd:usb2, eth0 12: 101150 XT-PIC i8042 14: 33146 XT-PIC ide0 15: 149202 XT-PIC ide1
162
Reference
0 0 0 0
Some of the important files and their contents are: /proc/devices available devices /proc/modules kernel modules loaded /proc/cmdline kernel command line /proc/meminfo detailed information about memory usage /proc/config.gz gzip-compressed configuration file of the kernel currently running Further information is available in the text file /usr/src/linux/ Documentation/filesystems/proc.txt. Information about processes currently running can be found in the /proc/NNN directories, where NNN is the process ID (PID) of the relevant process. Every process can find its own characteristics in /proc/self/:
tester@linux:~> ls -l /proc/self lrwxrwxrwx 1 root root 64 2006-01-09 13:03 /proc/self -> 5356 tester@linux:~> ls -l /proc/self/ total 0 dr-xr-xr-x 2 tester users 0 2006-01-09 17:04 attr -r-------- 1 tester users 0 2006-01-09 17:04 auxv -r--r--r-- 1 tester users 0 2006-01-09 17:04 cmdline lrwxrwxrwx 1 tester users 0 2006-01-09 17:04 cwd -> /home/tester -r-------- 1 tester users 0 2006-01-09 17:04 environ lrwxrwxrwx 1 tester users 0 2006-01-09 17:04 exe -> /bin/ls dr-x------ 2 tester users 0 2006-01-09 17:04 fd -rw-r--r-- 1 tester users 0 2006-01-09 17:04 loginuid -r--r--r-- 1 tester users 0 2006-01-09 17:04 maps -rw------- 1 tester users 0 2006-01-09 17:04 mem -r--r--r-- 1 tester users 0 2006-01-09 17:04 mounts -rw-r--r-- 1 tester users 0 2006-01-09 17:04 oom_adj -r--r--r-- 1 tester users 0 2006-01-09 17:04 oom_score lrwxrwxrwx 1 tester users 0 2006-01-09 17:04 root -> / -rw------- 1 tester users 0 2006-01-09 17:04 seccomp
163
-r--r--r--r--r--r--r--r--r--r--r--r-dr-xr-xr-x -r--r--r--
1 1 1 1 3 1
0 0 0 0 0 0
The address assignment of executables and libraries is contained in the maps file:
tester@linux:~> cat /proc/self/maps 08048000-0804c000 r-xp 00000000 03:03 17753 0804c000-0804d000 rw-p 00004000 03:03 17753 0804d000-0806e000 rw-p 0804d000 00:00 0 b7d27000-b7d5a000 r--p 00000000 03:03 11867 /usr/lib/locale/en_GB.utf8/LC_CTYPE b7d5a000-b7e32000 r--p 00000000 03:03 11868 /usr/lib/locale/en_GB.utf8/LC_COLLATE b7e32000-b7e33000 rw-p b7e32000 00:00 0 b7e33000-b7f45000 r-xp 00000000 03:03 8837 b7f45000-b7f46000 r--p 00112000 03:03 8837 b7f46000-b7f48000 rw-p 00113000 03:03 8837 b7f48000-b7f4c000 rw-p b7f48000 00:00 0 b7f52000-b7f53000 r--p 00000000 03:03 11842 /usr/lib/locale/en_GB.utf8/LC_NUMERIC [...] b7f5b000-b7f61000 r--s 00000000 03:03 9109 /usr/lib/gconv/gconv-modules.cache b7f61000-b7f62000 r--p 00000000 03:03 9720 /usr/lib/locale/en_GB.utf8/LC_IDENTIFICATION b7f62000-b7f76000 r-xp 00000000 03:03 8828 b7f76000-b7f78000 rw-p 00013000 03:03 8828 bfd61000-bfd76000 rw-p bfd61000 00:00 0 ffffe000-fffff000 ---p 00000000 00:00 0 /bin/cat /bin/cat [heap] \ \
6.13.1 procinfo
Important information from the /proc file system is summarized by the command procinfo:
tester@linux:~> procinfo Linux 2.6.15-rc5-git3-2-default (geeko@buildhost) (gcc 4.1.0 20051129) #1 Wed Dec 14 13:10:38 UTC 2005 1CPU [linux.suse.de] Memory: Mem: Swap: Total 515584 658656 Used 509472 0 Free 6112 658656 Shared 0 Buffers 73024
Load average: 0.10 0.04 0.05 1/86 5406 page in : 442638 disk 1: 20125r
0:02:07.98
164
Reference
13476w nice : system: IOwait: hw irq: sw irq: idle : uptime: irq irq irq irq irq irq irq irq 0: 1: 2: 3: 4: 5: 6: 7:
0:02:20.91 0:00:42.93 0:01:25.40 0:00:08.94 0:00:01.29 4:06:30.54 4:13:20.72 3799268 130 0 8 8 564535 9 1
page out: page act: page dea: page flt: swap in : swap out: context :
134950 70577 11696 1423622 0 0 3813145 2 rtc 1 acpi, uhci_hcd:usb1, 0 uhci_hcd:usb3 75905 uhci_hcd:usb2, eth0 101150 i8042 33733 ide0 157045 ide1
irq 8: irq 9: irq 10: irq 11: irq 12: irq 14: irq 15:
To see all the information, use the parameter -a. The parameter -nN produces updates of the information every N seconds. In this case, terminate the program by pressing Q . By default, the cumulative values are displayed. The parameter -d produces the differential values. procinfo -dn5 displays the values that have changed in the last five seconds:
165
Controller (rev 01) 00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) \ SMBus Controller (rev 01) 00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM \ (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 01) 01:00.0 VGA compatible controller: Matrox Graphics, Inc. G400/G450 (rev 85) 02:08.0 Ethernet controller: Intel Corporation 82801DB PRO/100 VE (LOM) \ Ethernet Controller (rev 81)
Information about device name resolution is obtained from file /usr/share/pci .ids. PCI IDs not listed in this file are marked Unknown device. The parameter -vv produces all the information that could be queried by the program. To view the pure numeric values, you should use the parameter -n.
166
Reference
fstat64(3, {st_mode=S_IFREG|0755, st_size=36659, ...}) = 0 [...] stat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) \ = 0xb7ca7000 write(1, "bin Desktop Documents music\tM"..., 55bin Desktop Documents \ \ music Music public_html tmp ) = 55 close(1) = 0 munmap(0xb7ca7000, 4096) = 0 exit_group(0) = ?
For example, to trace all attempts to open a particular file, use the following:
tester@linux:~> strace -e open ls .bashrc open("/etc/ld.so.cache", O_RDONLY) = open("/lib/librt.so.1", O_RDONLY) = open("/lib/libacl.so.1", O_RDONLY) = open("/lib/libc.so.6", O_RDONLY) = open("/lib/libpthread.so.0", O_RDONLY) = open("/lib/libattr.so.1", O_RDONLY) = [...] 3 3 3 3 3 3
To trace all the child processes, use the parameter -f. The behavior and output format of strace can be largely controlled. For information, see man strace.
167
168
Reference
Entry point address: Start of program headers: Start of section headers: Flags: Size of this header: Size of program headers: Number of program headers: Size of section headers: Number of section headers: Section header string table index:
0x8049b60 52 (bytes into file) 81112 (bytes into file) 0x0 52 (bytes) 32 (bytes) 9 40 (bytes) 30 29
dest
nsems 8
perms
used-bytes
messages
169
To retain compatibility with the 32-bit version, the libraries are stored at the same place in the system as in the 32-bit environment. The 32-bit version of libc.so.6 is located under /lib/libc.so.6 in both the 32-bit and 64-bit environments. All 64-bit libraries and object files are located in directories called lib64. The 64-bit object files you would normally expect to find under /lib, /usr/lib, and /usr/ X11R6/lib are now found under /lib64, /usr/lib64, and /usr/X11R6/ lib64. This means that there is space for the 32-bit libraries under /lib, /usr/lib and /usr/X11R6/lib, so the filename for both versions can remain unchanged. No subdirectories of the object directories whose data content does not depend on the word size are moved. For example, the X11 fonts are still found in the usual location under /usr/X11R6/lib/X11/fonts. This scheme conforms to the LSB (Linux Standards Base) and the FHS (File System Hierarchy Standard).
174
Reference
Most Open Source programs use an autoconf-based program configuration. To use autoconf for configuring a program for the second architecture, overwrite the normal compiler and linker settings of autoconf by running the configure script with additional environment variables. The following example refers to an AMD64 or EM64T system with x86 as the second architecture: 1. Set autoconf to use the 32-bit compiler:
CC="gcc -m32"
2.
3.
4.
Determine that the libraries for libtool and so on come from /usr/lib:
LDFLAGS="-L/usr/lib"
5.
6.
Not all of these variables are needed for every program. Adapt them to the respective program.
CC="gcc -m64" \ LDFLAGS="-L/usr/lib64;" \ .configure \ --prefix=/usr \ --libdir=/usr/lib64 make make install
175
176
Reference
2.
177
More information about GRUB, the Linux boot loader, can be found in Chapter 9, The Boot Loader (page 193). 3. Kernel and initramfs To pass system control, the boot loader loads both the kernel and an initial RAM-based file system (initramfs) into memory. The contents of the initial ramfs can be used by the kernel directly. The init ramfs contains a small executable called init that handles the mounting of the real root file system. In former versions of SUSE Linux, these tasks were handled by initrd and linuxrc, respectively. For more information about initramfs, refer to Section 8.1.1, initramfs (page 178). init on initramfs This program performs all actions needed to mount the proper root file system, like providing kernel functionality for the needed file system and device drivers for mass storage controllers with udev. After the root file system has been found, it is checked for errors and mounted. If this has been successful, the initramfs is cleaned and the init program on the root file system is executed. For more information about init, refer to Section 8.1.2, init on initramfs (page 179). Find more information about udev in Chapter 12, Dynamic Kernel Device Management with udev (page 251). init init handles the actual booting of the system through several different levels providing different functionality. init is described in Section 8.2, The init Process (page 181).
4.
5.
8.1.1 initramfs
initramfs is a small cpio archive that the kernel can load to a RAM disk. It provides a minimal Linux environment that enables the execution of programs before the actual root file system is mounted. This minimal Linux environment is loaded into memory by BIOS routines and does not have specific hardware requirements other than sufficient memory. initramfs must always provide an executable named init that should execute the actual init program on the root file system for the boot process to proceed. Before the actual root file system can be mounted and the actual operating system can be started, the kernel needs the corresponding drivers to access the device on which the root file system is located. These drivers may include special drivers for certain kinds of hard drives or even network drivers to access a network file system. The needed modules for the root file system may be loaded by init on initramfs. After the modules are loaded, udev provides the initramfs with the needed devices. initramfs is available
178
Reference
during the entire boot process. This makes it possible to handle all device events generated during boot. If you need to change hardware (hard disks) in an installed system and this hardware requires different drivers to be present in the kernel at boot time, you must update initramfs. This is done in the same way as with initramfs' predecessor, initrd, by calling mkinitrd. Calling mkinitrd without any argument creates an initramfs. Calling mkinitrd -R creates an initrd. In SUSE Linux, the modules to load are specified by the variable INITRD_MODULES in /etc/sysconfig/kernel. After installation, this variable is automatically set to the correct value. The modules are loaded in exactly the order in which they appear in INITRD_MODULES. This is especially important if several SCSI drivers are used, because otherwise the names of the hard disks would change. Strictly speaking, it would be sufficient just to load those drivers needed to access the root file system. However, all SCSI drivers needed for installation are loaded by means of initramfs or initrd because later loading could be problematic. IMPORTANT: Updating initramfs or initrd The boot loader loads initramfs or initrd in the same way as the kernel. It is not necessary to reinstall GRUB after updating initramfs or initrd, because GRUB searches the directory for the right file when booting.
179
Managing RAID and LVM Setups If you configured your system to hold the root file system under RAID or LVM, init sets up LVM or RAID to enable access to the root file sytem later. Information about RAID can be found in Section 2.2, Soft RAID Configuration (page 60). Information about LVM can be found in Section 2.1, LVM Configuration (page 53). Managing Network Configuration If you configured your system to use a network-mounted root file system (mounted via NFS), init must make sure that the proper network drivers are loaded and that they are set up to allow access to the root file system. When init is called during the initial boot as part of the installation process, its tasks differ from those mentioned earlier: Finding the Installation Medium As you start the installation process, your machine loads an installation kernel and a special initrd with the YaST installer from the installation medium. The YaST installer, which is run in a RAM file system, needs to have information about the actual location of the installation medium to access it and install the operating system. Initiating Hardware Recognition and Loading Appropriate Kernel Modules As mentioned in Section 8.1.1, initramfs (page 178), the boot process starts with a minimum set of drivers that can be used with most hardware configurations. init starts an initial hardware scanning process that determines the set of drivers suitable for your hardware configuration. These values are later written to INITRD_MODULES in /etc/sysconfig/kernel to enable any subsequent boot process to use a custom initrd or in a /etc/sysconfig/hardware/ hwconfig-* file if the device is not needed during the boot process. During the installation process, init loads this set of modules. Loading the Installation System or Rescue System As soon as the hardware has been properly recognized, the appropriate drivers have been loaded, and udev has created the device special files, init starts the installation system, which contains the actual YaST installer, or the rescue system. Starting YaST Finally, init starts YaST, which starts package installation and system configuration.
180
Reference
8.2.1 Runlevels
In Linux, runlevels define how the system is started and what services are available in the running system. After booting, the system starts as defined in /etc/inittab in the line initdefault. Usually this is 3 or 5. See Table 8.1, Available Runlevels (page 181). As an alternative, the runlevel can be specified at boot time (at the boot prompt, for instance). Any parameters that are not directly evaluated by the kernel itself are passed to init. Table 8.1 Runlevel 0 S Available Runlevels Description System halt Single user mode; from the boot prompt, only with US keyboard mapping Single user mode
181
Runlevel 2 3 4 5
Description Local multiuser mode without remote network (NFS, etc.) Full multiuser mode with network Not used Full multiuser mode with network and X display managerKDM, GDM, or XDM System reboot
IMPORTANT: Avoid Runlevel 2 with a Partition Mounted via NFS You should not use runlevel 2 if your system mounts a partition like /usr via NFS. The system might behave unexpectedly if program files or libraries are missing because the NFS service is not available in runlevel 2 (local multiuser mode without remote network). To change runlevels while the system is running, enter telinit and the corresponding number as an argument. Only the system administrator is allowed to do this. The following list summarizes the most important commands in the runlevel area. telinit 1 or shutdown now The system changes to single user mode. This mode is used for system maintenance and administration tasks. telinit 3 All essential programs and services (including network) are started and regular users are allowed to log in and work with the system without a graphical environment. telinit 5 The graphical environment is enabled. Usually a display manager like XDM, GDM, or KDM is started. If autologin is enabled, the local user is logged in to the preselected window manager (GNOME or KDE or any other window manager).
182
Reference
telinit 0 or shutdown -h now The system halts. telinit 6 or shutdown -r now The system halts then reboots. Runlevel 5 is the default runlevel in all SUSE Linux standard installations. Users are prompted for login with a graphical interface or the default user is logged in automatically. If the default runlevel is 3, the X Window System must be configured properly, as described in Chapter 14, The X Window System (page 271), before the runlevel can be switched to 5. If this is done, check whether the system works in the desired way by entering telinit 5. If everything turns out as expected, you can use YaST to set the default runlevel to 5. Generally, two things happen when you change runlevels. First, stop scripts of the current runlevel are launched, closing down some programs essential for the current runlevel. Then start scripts of the new runlevel are started. Here, in most cases, a number of programs are started. For example, the following occurs when changing from runlevel 3 to 5: 1. The administrator (root) requests init to change to a different runlevel by entering telinit 5. init consults its configuration file (/etc/inittab) and determines it should start /etc/init.d/rc with the new runlevel as a parameter. Now rc calls all the stop scripts of the current runlevel, but only those for which there is no start script in the new runlevel. In this example, these are all the scripts that reside in /etc/init.d/rc3.d (old runlevel was 3) and start with a K. The number following K specifies the order to start, because there are some dependencies to consider. The last things to start are the start scripts of the new runlevel. These are, in this example, in /etc/init.d/rc5.d and begin with an S. The same procedure regarding the order in which they are started is applied here.
2.
3.
4.
When changing into the same runlevel as the current runlevel, init only checks /etc/ inittab for changes and starts the appropriate steps, for example, for starting a getty on another interface. The same functionality may be achieved with the command telinit q.
183
reload
184
Reference
Option force-reload
Description Reload the configuration if the service supports this. Otherwise, do the same as if restart had been given. Show the current status of service.
status
Links in each runlevel-specific subdirectory make it possible to associate scripts with different runlevels. When installing or uninstalling packages, these links are added and removed with the help of the program insserv (or using /usr/lib/lsb/install _initd, which is a script calling this program). See the insserv(8) man page for details. A short introduction to the boot and stop scripts launched first or last, respectively, follows as well as an explanation of the maintaining script. boot Executed while starting the system directly using init. It is independent of the chosen runlevel and is only executed once. Here, the proc and pts file systems are mounted and blogd (boot logging daemon) is activated. If the system is booted for the first time after an update or an installation, the initial system configuration is started. The blogd daemon is a service started by boot and rc before any other one. It is stopped after the actions triggered by the above scripts (running a number of subscripts, for example) are completed. blogd writes any screen output to the log file /var/log/boot.msg, but only if and when /var is mounted read-write. Otherwise, blogd buffers all screen data until /var becomes available. Get further information about blogd on the blogd(8) man page. The script boot is also responsible for starting all the scripts in /etc/init.d/ boot.d with a name that starts with S. There, the file systems are checked and loop devices are configured if needed. The system time is also set. If an error occurs while automatically checking and repairing the file system, the system administrator can intervene after first entering the root password. Last executed is the script boot.local. boot.local Here, enter additional commands to execute at boot before changing into a runlevel. It can be compared to AUTOEXEC.BAT on DOS systems.
185
boot.setup This script is executed when changing from single user mode to any other runlevel and is responsible for a number of basic settings, such as the keyboard layout and initialization of the virtual consoles. halt This script is only executed while changing into runlevel 0 or 6. Here, it is executed either as halt or as reboot. Whether the system shuts down or reboots depends on how halt is called. rc This script calls the appropriate stop scripts of the current runlevel and the start scripts of the newly selected runlevel. You can create your own scripts and easily integrate them into the scheme described above. For instructions about formatting, naming, and organizing custom scripts, refer to the specifications of the LSB and to the man pages of init, init.d, and insserv. Additionally consult the man pages of startproc and killproc. WARNING: Faulty init Scripts May Halt Your System Faulty init scripts may hang your machine. Edit such scripts with great care and, if possible, subject them to heavy testing in the multiuser environment. Some useful information about init scripts can be found in Section 8.2.1, Runlevels (page 181). To create a custom init script for a given program or service, use the file /etc/init .d/skeleton as a template. Save a copy of this file under the new name and edit the relevant program and filenames, paths, and other details as needed. You may also need to enhance the script with your own parts, so the correct actions are triggered by the init procedure. The INIT INFO block at the top is a required part of the script and must be edited. See Example 8.1, A Minimal INIT INFO Block (page 187).
186
Reference
In the first line of the INFO block, after Provides:, specify the name of the program or service controlled by this init script. In the Required-Start: and Required-Stop: lines, specify all services that need to be started or stopped before the service itself is started or stopped. This information is used later to generate the numbering of script names, as found in the runlevel directories. After Default-Start: and Default-Stop:, specify the runlevels in which the service should automatically be started or stopped. Finally, for Description:, provide a short description of the service in question. To create the links from the runlevel directories (/etc/init.d/rc?.d/) to the corresponding scripts in /etc/init.d/, enter the command insserv new-script-name. The insserv program evaluates the INIT INFO header to create the necessary links for start and stop scripts in the runlevel directories (/etc/init .d/rc?.d/). The program also takes care of the correct start and stop order for each runlevel by including the necessary numbers in the names of these links. If you prefer a graphical tool to create such links, use the runlevel editor provided by YaST, as described in Section 8.2.3, Configuring System Services (Runlevel) with YaST (page 188). If a script already present in /etc/init.d/ should be integrated into the existing runlevel scheme, create the links in the runlevel directories right away with insserv or by enabling the corresponding service in the runlevel editor of YaST. Your changes are applied during the next rebootthe new service is started automatically. Do not set these links manually. If something is wrong in the INFO block, problems will arise when insserv is run later for some other service. The manually-added service will be removed with the next run of insserv.
187
For detailed control over the runlevels in which a service is started or stopped or to change the default runlevel, first select Expert Mode. The current default runlevel or initdefault (the runlevel into which the system boots by default) is displayed at the top. Normally, the default runlevel of a SUSE Linux system is runlevel 5 (full multiuser mode with network and X). A suitable alternative might be runlevel 3 (full multiuser mode with network).
188
Reference
This YaST dialog allows the selection of one of the runlevels (as listed in Table 8.1, Available Runlevels (page 181)) as the new default. Additionally use the table in this window to enable or disable individual services and daemons. The table lists the services and daemons available, shows whether they are currently enabled on your system, and, if so, for which runlevels. After selecting one of the rows with the mouse, click the check boxes representing the runlevels (B, 0, 1, 2, 3, 5, 6, and S) to define the runlevels in which the selected service or daemon should be running. Runlevel 4 is initially undefined to allow creation of a custom runlevel. A brief description of the currently selected service or daemon is provided below the table overview. With Start, Stop, or Refresh, decide whether a service should be activated. Refresh status checks the current status. Set or Reset lets you select whether to apply your changes to the system or to restore the settings that existed before starting the runlevel editor. Selecting Finish saves the changed settings to disk. WARNING: Faulty Runlevel Settings May Damage Your System Faulty runlevel settings may render a system unusable. Before applying your changes, make absolutely sure that you know their consequences.
189
8.3.1 Changing the System Configuration Using the YaST sysconfig Editor
The YaST sysconfig editor provides an easy-to-use front-end to system configuration. Without any knowledge of the actual location of the configuration variable you need to change, you can just use the built-in search function of this module, change the value of the configuration variable as needed, and let YaST take care of applying these changes, updating configurations that depend on the values set in sysconfig and restarting services. WARNING: Modifying /etc/sysconfig/* Files Can Damage Your Installation Do not modify the /etc/sysconfig files if you lack previous experience and knowledge. It could do considerable damage to your system. The files in /etc/sysconfig include a short comment for each variable to explain what effect they actually have. Figure 8.2 System Configuration Using the sysconfig Editor
The YaST sysconfig dialog is split into three parts. The left part of the dialog shows a tree view of all configurable variables. When you select a variable, the right part displays
190
Reference
both the current selection and the current setting of this variable. Below, a third window displays a short description of the variable's purpose, possible values, the default value, and the actual configuration file from which this variable originates. The dialog also provides information about which configuration script is executed after changing the variable and which new service is started as a result of the change. YaST prompts you to confirm your changes and informs you which scripts will be executed after you leave the dialog by selecting Finish. Also select the services and scripts to skip for now, so they are started later. YaST applies all changes automatically and restarts any services involved for your changes to take an effect.
191
TIP: Configuring Automated System Configuration To disable the automated system configuration by SuSEconfig, set the variable ENABLE_SUSECONFIG in /etc/sysconfig/suseconfig to no. Do not disable SuSEconfig if you want to use the SUSE installation support. It is also possible to disable the autoconfiguration partially.
192
Reference
193
Boot Sectors Boot sectors are the first sectors of hard disk partitions with the exception of the extended partition, which merely serves as a container for other partitions. These boot sectors have 512 bytes of space for code used to boot an operating system installed in the respective partition. This applies to boot sectors of formatted DOS, Windows, and OS/2 partitions, which also contain some important basic data of the file system. In contrast, the boot sectors of Linux partitions are initally empty after setting up a file system other than XFS. Therefore, a Linux partition is not bootable by itself, even if it contains a kernel and a valid root file system. A boot sector with valid code for booting the system has the same magic number as the MBR in its last two bytes (AA55).
194
Reference
disks, CD drives, and DVD drives detected by the BIOS). Therefore, changes to the GRUB configuration file (menu.lst) do not require a reinstallation of the boot manager. When the system is booted, GRUB reloads the menu file with the valid paths and partition data of the kernel or the initial RAM disk (initrd) and locates these files. The actual configuration of GRUB is based on three files that are described below: /boot/grub/menu.lst This file contains all information about partitions or operating systems that can be booted with GRUB. Without this information, the GRUB command line prompts the user for how to proceed (see Section Editing Menu Entries during the Boot Procedure (page 199) for details). /boot/grub/device.map This file translates device names from the GRUB and BIOS notation to Linux device names. /etc/grub.conf This file contains the commands, parameters, and options the GRUB shell needs for installing the boot loader correctly. GRUB can be controlled in various ways. Boot entries from an existing configuration can be selected from the graphical menu (splash screen). The configuration is loaded from the file menu.lst. In GRUB, all boot parameters can be changed prior to booting. For example, errors made when editing the menu file can be corrected in this way. Boot commands can also be entered interactively at a kind of input prompt (see Section Editing Menu Entries during the Boot Procedure (page 199)). GRUB offers the possibility of determining the location of the kernel and the initrd prior to booting. In this way, you can even boot an installed operating system for which no entry exists in the boot loader configuration. GRUB actually exists in two versions: as a boot loader and as a normal Linux program in /usr/sbin/grub. This program is referred to as the GRUB shell. It provides an emulation of GRUB in the installed system and can be used to install GRUB or test new settings before applying them. The functionality to install GRUB as the boot loader on a hard disk or floppy disk is integrated in GRUB in the form of the commands install and setup. This is available in the GRUB shell when Linux is loaded.
195
The device names in GRUB are explained in Section Naming Conventions for Hard Disks and Partitions (page 197). This example specifies the first block of the fourth partition of the first hard disk. Use the command kernel to specify a kernel image. The first argument is the path to the kernel image in a partition. The other arguments are passed to the kernel on its command line. If the kernel does not have built-in drivers for access to the root partition or a recent Linux system with advanced hotplug features is used, initrd must be specified with a separate GRUB command whose only argument is the path to the initrd file. Because the loading address of the initrd is written to the loaded kernel image, the command initrd must follow immediately after the kernel command.
196
Reference
The command root simplifies the specification of kernel and initrd files. The only argument of root is a device or a partition. This device is used for all kernel, initrd, or other file paths for which no device is explicitly specified until the next root command. The boot command is implied at the end of every menu entry, so it does not need to be written into the menu file. However, if you use GRUB interactively for booting, you must enter the boot command at the end. The command itself has no arguments. It merely boots the loaded kernel image or the specified chain loader. After writing all menu entries, define one of them as the default entry. Otherwise, the first one (entry 0) is used. You can also specify a time-out in seconds after which the default entry should boot. timeout and default usually precede the menu entries. An example file is described in Section An Example Menu File (page 198).
Being dependent on BIOS devices, GRUB does not distinguish between IDE, SATA, SCSI, and hardware RAID devices. All hard disks recognized by the BIOS or other controllers are numbered according to the boot sequence preset in the BIOS. Unfortunately, it is often not possible to map the Linux device names to BIOS device names exactly. It generates this mapping with the help of an algorithm and saves it to the file device.map, which can be edited if necessary. Information about the file device.map is available in Section 9.2.2, The File device.map (page 200).
197
A complete GRUB path consists of a device name written in parentheses and the path to the file in the file system in the specified partition. The path begins with a slash. For example, the bootable kernel could be specified as follows on a system with a single IDE hard disk containing Linux in its first partition:
(hd0,0)/boot/vmlinuz
The first block defines the configuration of the splash screen: gfxmenu (hd0,4)/message The background image message is located in /dev/hda5. color white/blue black/light-gray Color scheme: white (foreground), blue (background), black (selection), and light gray (background of the selection). The color scheme has no effect on the splash screen, only on the customizable GRUB menu that you can access by exiting the splash screen with Esc . default 0 The first menu entry title linux is the one to boot by default. 198 Reference
timeout 8 After eight seconds without any user input, GRUB automatically boots the default entry. To deactivate automatic boot, delete the timeout line. If you set timeout 0, GRUB boots the default entry immediately. The second and largest block lists the various bootable operating systems. The sections for the individual operating systems are introduced by title. The first entry (title linux) is responsible for booting SUSE Linux. The kernel (vmlinuz) is located in the first logical partition (the boot partition) of the first hard disk. Kernel parameters, such as the root partition and VGA mode, are appended here. The root partition is specified according to the Linux naming convention (/dev/hda7/), because this information is read by the kernel and has nothing to do with GRUB. The initrd is also located in the first logical partition of the first hard disk. The second entry is responsible for loading Windows. Windows is booted from the first partition of the first hard disk (hd0,0). The command chainloader +1 causes GRUB to read and execute the first sector of the specified partition. The next entry enables booting from floppy disk without modifying the BIOS settings. The boot option failsafe starts Linux with a selection of kernel parameters that enables Linux to boot even on problematic systems. The menu file can be changed whenever necessary. GRUB then uses the modified settings during the next boot. Edit the file permanently using YaST or an editor of your choice. Alternatively, make temporary changes interactively using the edit function of GRUB. See Section Editing Menu Entries during the Boot Procedure (page 199).
199
IMPORTANT: Keyboard Layout during the Boot Procedure The US keyboard layout is the only one available when booting. Editing menu entries facilitates the repair of a defective system that can no longer be booted, because the faulty configuration file of the boot loader can be circumvented by manually entering parameters. Manually entering parameters during the boot procedure is also useful for testing new settings without impairing the native system. After activating the editing mode, use the arrow keys to select the menu entry of the configuration to edit. To make the configuration editable, press E again. In this way, edit incorrect partitions or path specifications before they have a negative effect on the boot process. Press Enter to exit the editing mode and return to the menu. Then press B to boot this entry. Further possible actions are displayed in the help text at the bottom. To enter changed boot options permanently and pass them to the kernel, open the file menu.lst as the user root and append the respective kernel parameters to the existing line, separated by spaces:
title linux kernel (hd0,0)/vmlinuz root=/dev/hda3 additional parameter initrd (hd0,0)/initrd
GRUB automatically adopts the new parameters the next time the system is booted. Alternatively, this change can also be made with the YaST boot loader module. Append the new parameters to the existing line, separated by spaces.
200
Reference
Because the order of IDE, SCSI, and other hard disks depends on various factors and Linux is not able to identify the mapping, the sequence in the file device.map can be set manually. If you encounter problems when booting, check if the sequence in this file corresponds to the sequence in the BIOS and use the GRUB prompt to modify it temporarily if necessary. After the Linux system has booted, the file device.map can be edited permanently with the YaST boot loader module or an editor of your choice. IMPORTANT: SATA Disks Depending on the controller, SATA disks are either recognized as IDE (/dev/hdx) or SCSI (/dev/sdx) devices. After manually changing device.map, execute the following command to reinstall GRUB. This command causes the file device.map to be reloaded and the commands listed in grub.conf to be executed:
grub --batch < /etc/grub.conf
Meaning of the individual entries: root (hd0,4) This command tells GRUB to apply the following commands to the first logical partition of the first hard disk (the location of the boot files). install parameter The command grub should be run with the parameter install. stage1 of the boot loader should be installed in the the extended partition container (/grub/stage1 (hd0,3)). stage2 should be loaded to the memory address 0x8000 (/grub/stage2 0x8000). The last entry ((hd0,4)/grub/menu.lst) tells GRUB where to look for the menu file. The Boot Loader 201
3 Paste the encrypted string into the global section of the file menu.lst:
gfxmenu (hd0,4)/message color white/blue black/light-gray default 0 timeout 8 password --md5 $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
Now GRUB commands can only be executed at the boot prompt after pressing P and entering the password. However, users can still boot all operating systems from the boot menu. 4 To prevent one or several operating systems from being booted from the boot menu, add the entry lock to every section in menu.lst that should not be bootable without entering a password. For example:
title linux kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791 initrd (hd0,4)/initrd lock
After rebooting the system and selecting the Linux entry from the boot menu, the following error message is displayed: 202 Reference
Press Enter to enter the menu. Then press P to get a password prompt. After entering the password and pressing Enter , the selected operating system (Linux in this case) should boot.
Use the Section Management tab to edit, change, and delete boot loader sections for the individual operating systems. To add an option, click Add. To change the value of an existing option, select it with the mouse and click Edit. If you do not want to use an existing option at all, select it and click Delete. If you are not familiar with boot loader options, read Section 9.2, Booting with GRUB (page 194) first. The Boot Loader 203
Use the Boot Loader Installation tab to view and change settings related to type, location, and advanced loader settings.
204
Reference
NOTE: Custom Boot Loader If you want use a boot loader other than GRUB or LILO, select Do Not Install Any Boot Loader. Read the documentation of your boot loader carefully before choosing this option.
Boot Sector of Boot Partition /dev/hdXY The boot sector of the /boot partition. This option is the default if you have several operating systems installed on your hard drive. The Y stands for the partition (1, 2, 3, 4, 5, etc.) as in:
/dev/hda1
Boot Sector of Root Partition /dev/hdXY The boot sector of the / (root) partition. Unless a /boot partition is necessary or the MBR needs to be used, this is the preferred default. Other Use this option to specify the location of the boot loader manually. 2 Click Finish to apply your changes.
205
206
Reference
207
Using this module, you can also replace the master boot record with generic code, which boots the active partition. Click Replace MBR with Gerneric Code in Disk System Area Update. Enable Activate Boot Loader Partition to activate the partition that contains the boot loader. Click Finish to save the changes.
208
Reference
3 Copy the kernel, the files stage2_eltorito, initrd, menu.lst, and /boot/message to iso/boot/:
cp cp cp cp /boot/vmlinuz iso/boot/ /boot/initrd iso/boot/ /boot/message iso/boot/ /boot/grub/menu.lst iso/boot/grub
4 Adjust the path entries in iso/boot/menu.lst to make them point to a CDROM device. Do this by replacing the device name of the hard disks, listed in the format (hd*), in the pathnames with the device name of the CD-ROM drive, which is (cd):
gfxmenu (cd)/boot/message timeout 8 default 0 title Linux kernel (cd)/boot/vmlinuz root=/dev/hda5 vga=794 resume=/dev/hda1 \ splash=verbose showopts initrd (cd)/boot/initrd
209
Disabling the SUSE screen by default. Add the kernel parameter splash=0 to your boot loader configuration. Chapter 9, The Boot Loader (page 193) provides more information about this. However, if you prefer the text mode, which was the default in earlier versions, set vga=normal. Completely Disabling the SUSE Screen Compile a new kernel and disable the option Use splash screen instead of boot logo in framebuffer support. TIP Disabling framebuffer support in the kernel automatically disables the splash screen as well. SUSE cannot provide any support for your system if you run it with a custom kernel.
9.7 Troubleshooting
This section lists some of the problems frequently encountered when booting with GRUB and a short description of possible solutions. Some of the problems are covered in articles in the Support Database at http://portal.suse.de/sdb/en/index .html. If your specific problem is not included in this list, use the search dialog of the Support Database at https://portal.suse.com/PM/page/search.pm to search for keywords like GRUB, boot, and boot loader. GRUB and XFS XFS leaves no room for stage1 in the partition boot block. Therefore, do not specify an XFS partition as the location of the boot loader. This problem can be solved by creating a separate boot partition that is not formatted with XFS. GRUB and JFS Although technically possible, the combination of GRUB with JFS is problematic. In this case, create a separate boot partition (/boot) and format it with Ext2. Install GRUB in this partition. GRUB Reports GRUB Geom Error GRUB checks the geometry of connected hard disks when the system is booted. Sometimes, the BIOS returns inconsistent information and GRUB reports a GRUB Geom Error. If this is the case, use LILO or update the BIOS. Detailed information
210
Reference
about the installation, configuration, and maintenance of LILO is available in the Support Database under the keyword LILO. GRUB also returns this error message if Linux was installed on an additional hard disk that is not registered in the BIOS. stage1 of the boot loader is found and loaded correctly, but stage2 is not found. This problem can be remedied by registering the new hard disk in the BIOS. System Containing IDE and SCSI Hard Disks Does Not Boot During the installation, YaST may have incorrectly determined the boot sequence of the hard disks. For example, GRUB may regard /dev/hda as hd0 and /dev/ sda as hd1, although the boot sequence in the BIOS is reversed (SCSI before IDE). In this case, correct the hard disks during the boot process with the help of the GRUB command line. After the system has booted, edit device.map to apply the new mapping permanently. Then check the GRUB device names in the files /boot/grub/menu.lst and /boot/grub/device.map and reinstall the boot loader with the following command:
grub --batch < /etc/grub.conf
Booting Windows from the Second Hard Disk Some operating systems, such as Windows, can only boot from the first hard disk. If such an operating system is installed on a hard disk other than the first hard disk, you can effect a logical change for the respective menu entry.
... title windows map (hd0) (hd1) map (hd1) (hd0) chainloader(hd1,0)+1 ...
In this example, Windows is started from the second hard disk. For this purpose, the logical order of the hard disks is changed with map. This change does not affect the logic within the GRUB menu file. Therefore, the second hard disk must be specified for chainloader.
211
212
Reference
10
This chapter starts with information about various software packages, the virtual consoles, and the keyboard layout. We talk about software components like bash, cron, and logrotate, because they were changed or enhanced during the last release cycles. Even if they are small or considered of minor importance, users may want to change their default behavior, because these components are often closely coupled with the system. The chapter is finished by a section about language and country-specific settings (I18N and L10N).
213
1. 2. 3. 4.
Custom settings can be made in ~/.profile or in ~/.bashrc. To ensure the correct processing of these files, it is necessary to copy the basic settings from /etc/skel/ .profile or /etc/skel/.bashrc into the home directory of the user. It is recommended to copy the settings from /etc/skel following an update. Execute the following shell commands to prevent the loss of personal adjustments:
mv cp mv cp ~/.bashrc ~/.bashrc.old /etc/skel/.bashrc ~/.bashrc ~/.profile ~/.profile.old /etc/skel/.profile ~/.profile
You cannot edit /etc/crontab by calling the command crontab -e. This file must be loaded directly into an editor, modified, then saved.
214
Reference
A number of packages install shell scripts to the directories /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, and /etc/cron.monthly, whose execution is controlled by /usr/lib/cron/run-crons. /usr/lib/cron/ run-crons is run every 15 minutes from the main table (/etc/crontab). This guarantees that processes that may have been neglected can be run at the proper time. To run the hourly, daily, or other periodic maintenance scipts at custom times, remove the time stamp files regulary using /etc/crontab entries (see Example 10.2, /etc/crontab: Remove Time Stamp Files (page 215), which removes the hourly one before every full hour, the daily one once a day at 2:14 a.m., etc.). Example 10.2 /etc/crontab: Remove Time Stamp Files
59 14 29 44 * 2 2 2 * * * 1 * * * * * * 6 * root root root root rm rm rm rm -f -f -f -f /var/spool/cron/lastrun/cron.hourly /var/spool/cron/lastrun/cron.daily /var/spool/cron/lastrun/cron.weekly /var/spool/cron/lastrun/cron.monthly
The daily system maintenance jobs have been distributed to various scripts for reasons of clarity. They are contained in the package aaa_base. /etc/cron.daily contains, for example, the components suse.de-backup-rpmdb, suse .de-clean-tmp, or suse.de-cron-local.
215
logrotate is controlled through cron and is called daily by /etc/cron.daily/ logrotate. IMPORTANT The create option reads all settings made by the administrator in /etc/ permissions*. Ensure that no conflicts arise from any personal modifications.
216
Reference
Systemwide entries can be made in /etc/profile. There, enable creation of core files, needed by programmers for debugging. A normal user cannot increase the values specified in /etc/profile by the system administrator, but can make special entries in ~/.bashrc. Example 10.4 ulimit: Settings in ~/.bashrc
# Limits of physical memory: ulimit -m 98304 # Limits of virtual memory: ulimit -v 98304
Memory amounts must be specified in KB. For more detailed information, see man bash.
217
IMPORTANT Not all shells support ulimit directives. PAM (for instance, pam_limits) offers comprehensive adjustment possibilities if you depend on encompassing settings for these restrictions.
218
Reference
219
The components of Emacs are divided into several packages: The base package emacs. emacs-x11 (usually installed): the program with X11 support. emacs-nox: the program without X11 support. emacs-info: online documentation in info format. emacs-el: the uncompiled library files in Emacs Lisp. These are not required at runtime. Numerous add-on packages can be installed if needed: emacs-auctex (for LaTeX), psgml (for SGML and XML), gnuserv (for client and server operation), and others.
Alt
F1
to
220
Reference
These changes only affect applications that use terminfo entries or whose configuration files are changed directly (vi, less, etc.). Applications not shipped with SUSE Linux should be adapted to these defaults. Under X, the compose key (multikey) can be accessed using Ctrl + Shift (right). Also see the corresponding entry in /usr/X11R6/lib/X11/Xmodmap. Further settings are possible using the X Keyboard Extension (XKB). This extension is also used by the desktop environments GNOME (gswitchit) and KDE (kxkb). TIP: For More Information Information about XKB is available in /etc/X11/xkb/README and the documents listed there. Detailed information about the input of Chinese, Japanese, and Korean (CJK) is available at Mike Fabian's page: http://www.suse.de/~mfabian/ suse-cjk/input.html.
221
RC_LC_MESSAGES, RC_LC_CTYPE, RC_LC_COLLATE, RC_LC_TIME, RC_LC_NUMERIC, RC_LC_MONETARY These variables are passed to the shell without the RC_ prefix and represent the listed categories. The shell profiles concerned are listed below. The current setting can be shown with the command locale. RC_LC_ALL This variable, if set, overwrites the values of the variables already mentioned. RC_LANG If none of the previous variables are set, this is the fallback. By default, SUSE Linux only sets RC_LANG. This makes it easier for users to enter their own values. ROOT_USES_LANG A yes or no variable. If it is set to no, root always works in the POSIX environment. The variables can be set with the YaST sysconfig editor (see Section 8.3.1, Changing the System Configuration Using the YaST sysconfig Editor (page 190)). The value of such a variable contains the language code, country code, encoding, and modifier. The individual components are connected by special characters:
LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]
222
Reference
LANG=en_US.UTF-8 This is the default setting if American English is selected during installation. If you selected another language, that language is enabled but still with UTF-8 as the character encoding. LANG=en_US.ISO-8859-1 This sets the language to English, country to United States, and the character set to ISO-8859-1. This character set does not support the Euro sign, but it can be useful sometimes for programs that have not been updated to support UTF-8. The string defining the charset (ISO-8859-1 in this case) is then evaluated by programs like Emacs. LANG=en_IE@euro The above example explicitly includes the Euro sign in a language setting. Strictly speaking, this setting is obsolete now, because UTF-8 also covers the Euro symbol. It is only useful if an application does not support UTF-8, but ISO-8859-15. SuSEconfig reads the variables in /etc/sysconfig/language and writes the necessary changes to /etc/SuSEconfig/profile and /etc/SuSEconfig/ csh.cshrc. /etc/SuSEconfig/profile is read or sourced by /etc/ profile. /etc/SuSEconfig/csh.cshrc is sourced by /etc/csh.cshrc. This makes the settings available systemwide. Users can override the system defaults by editing their ~/.bashrc accordingly. For instance, if you do not want to use the systemwide en_US for program messages, include LC_MESSAGES=es_ES so messages are displayed in Spanish instead.
in /usr/share/locale/en_US/LC_MESSAGES does not exist, it falls back to /usr/share/locale/en/LC_MESSAGES. A fallback chain can also be defined, for example, for Breton to French or for Galician to Spanish to Portuguese: LANGUAGE="br_FR:fr_FR" LANGUAGE="gl_ES:es_ES:pt_PT" If desired, use the Norwegian variants Nynorsk and Bokml instead (with additional fallback to no): LANG="nn_NO" LANGUAGE="nn_NO:nb_NO:no" or LANG="nb_NO" LANGUAGE="nb_NO:nn_NO:no" Note that in Norwegian, LC_TIME is also treated differently. One problem that can arise is a separator used to delimit groups of digits not being recognized properly. This occurs if LANG is set to only a two-letter language code like de, but the definition file glibc uses is located in /usr/share/lib/de_DE/LC _NUMERIC. Thus LC_NUMERIC must be set to de_DE to make the separator definition visible to the system.
224
Reference
225
Printer Operation
11
CUPS is the standard print system in SUSE Linux. CUPS is highly user-oriented. In many cases, it is compatible with LPRng or can be adapted with relatively little effort. LPRng is included in SUSE Linux only for reasons of compatibility. Printers can be distinguished by interface, such as USB or network, and printer language. When buying a printer, make sure that the printer has an interface that is supported by the hardware and a suitable printer language. Printers can be categorized on the basis of the following three classes of printer languages: PostScript Printers PostScript is the printer language in which most print jobs in Linux and Unix are generated and processed by the internal print system. This language is already quite old and very efficient. If PostScript documents can be processed directly by the printer and do not need to be converted in additional stages in the print system, the number of potential error sources is reduced. Because PostScript printers are subject to substantial license costs, these printers usually cost more than printers without a PostScript interpreter. Standard Printer (languages like PCL and ESC/P) Although these printer languages are quite old, they are still undergoing expansion to address new features in printers. In the case of known printer languages, the print system can convert PostScript jobs to the respective printer language with the help of Ghostscript. This processing stage is referred to as interpreting. The bestknown languages are PCL, which is mostly used by HP printers and their clones, and ESC/P, which is used by Epson printers. These printer languages are usually supported by Linux and produce a decent print result. Linux may not be able to address some functions of extremely new and fancy printers, because the open Printer Operation 227
source developers may still be working on these features. Except for the hpijs drivers developed by HP, there are currently no printer manufacturers who develop Linux drivers and make them available to Linux distributors under an open source license. Most of these printers are in the medium price range. Proprietary Printers (usually GDI printers) Usually only one or several Windows drivers are available for proprietary printers. These printers do not support any of the common printer languages and the printer languages they use are subject to change when a new edition of a model is released. See Section 11.7.1, Printers without Standard Printer Language Support (page 243) for more information. Before you buy a new printer, refer to the following sources to check how well the printer you intend to buy is supported: http://cdb.suse.de/the SUSE Linux printer database http://www.linuxprinting.org/the LinuxPrinting.org printer database http://www.cs.wisc.edu/~ghost/the Ghostscript Web page /usr/share/doc/packages/ghostscript/catalog.deviceslist of included drivers The online databases always show the latest Linux support status. However, a Linux distribution can only integrate the drivers available at production time. Accordingly, a printer currently rated as perfectly supported may not have had this status when the latest SUSE Linux version was released. Thus, the databases may not necessarily indicate the correct status, but only provide an approximation.
228
Reference
The filter converts the data the user wants to print (ASCII, PostScript, PDF, JPEG, etc.) into printer-specific data (PostScript, PCL, ESC/P, etc.). The features of the printer are described in the PPD files. A PPD file contains printer-specific options with the parameters needed to enable them on the printer. The filter system makes sure that options selected by the user are enabled. If you use a PostScript printer, the filter system converts the data into printer-specific PostScript. This does not require a printer driver. If you use a non-PostScript printer, the filter system converts the data into printer-specific data using Ghostscript. This requires a Ghostscript printer driver suitable for your printer. The back-end receives the printer-specific data from the filter passes it to the printer.
Printer Operation
229
desired. During the installation of SUSE Linux, many PPD files are preinstalled to enable even printers without PostScript support to be used. To configure a PostScript printer, the best approach is to get a suitable PPD file. Many PPD files are available in the package manufacturer-PPDs, which is automatically installed within the scope of the standard installation. See Section 11.6.3, PPD Files in Various Packages (page 240) and Section 11.7.2, No Suitable PPD File Available for a PostScript Printer (page 243). New PPD files can be stored in the directory /usr/share/cups/model/ or added to the print system with YaST (see Section Manual Configuration (page 231)). Subsequently, the PPD file can be selected during the installation. Be careful if a printer manufacturer wants you to install entire software packages in addition to modifying configuration files. First, this kind of installation would result in the loss of the support provided by SUSE Linux and, second, print commands may work differently and the system may no longer be able to address devices of other manufacturers. For this reason, the installation of manufacturer software is not recommended.
IMPORTANT If the Printer entry is not available in the YaST control center, the yast2-printer package probably is not installed. To solve this problem, install the yast2-printer package and restart YaST.
Automatic Configuration
YaST is able to configure the printer automatically if the parallel or USB port can be set up automatically and the connected printer can be detected. The printer database must also contain the ID string of the printer that YaST retrieves during the automatic hardware detection. If the hardware ID differs from the model designation, select the model manually. To make sure that everything works properly, each configuration should be checked with the print test function of YaST. The test page also provides important information about the configuration tested.
Manual Configuration
If the requirements for automatic configuration are not met or if you want a custom setup, configure the printer manually. Depending on how successful the autodetection is and how much information about the printer model is found in the database, YaST may be able to determine the right settings automatically or at least make a reasonable preselection. The following parameters must be configured: Hardware Connection (Port) The configuration of the hardware connection depends on whether YaST has been able to find the printer during hardware autodetection. If YaST is able to detect the printer model automatically, it can be assumed that the printer connection works on the hardware level and no settings need to be changed in this respect. If YaST is unable to autodetect the printer model, there may be some problem with the connection on the hardware level. In this case, some manual intervention is required to configure the connection.
Printer Operation
231
In the Printer Configuration dialog, press Add to start the manual configuration workflow. Here, select your Printer Type (for example USB printer) and, with Next, enter the Printer Connection and select the device. Name of the Queue The queue name is used when issuing print commands. The name should be relatively short and consist of lowercase letters and numbers only. Enter the Name for printing in the next dialog (Queue name). Printer Model and PPD File All printer-specific parameters, such as the Ghostscript driver to use and the printer filter parameters for the driver, are stored in a PPD (PostScript Printer Description) file. See Section 11.3, Installing the Software (page 229) for more information about PPD files. For many printer models, several PPD files are available, for example, if several Ghostscript drivers work with the given model. When you select a manufacturer and a model in the next dialog (Printer model), YaST selects the PPD file that corresponds to the printer. If several PPD files are available for the model, YaST defaults to one of them (normally the one marked recommended). You can change the chosen PPD file in the next dialog with Edit. For non-PostScript models, all printer-specific data is produced by the Ghostscript driver. For this reason, the driver configuration is the single most important factor determining the output quality. The printout is affected both by the kind of Ghostscript driver (PPD file) selected and the options specified for it. If necessary, change additional options (as made available by the PPD file) after selecting Edit.
232
Reference
Always check whether your settings work as expected by printing the test page. If the output is garbled, for example, with several pages almost empty, you should be able to stop the printer by first removing all paper then stopping the test from YaST. If the printer database does not include an entry for your model, you can either add a new PPD file by selecting Add PPD File to Database, or use a collection of generic PPD files to make the printer work with one of the standard printer languages. To do so, select UNKNOWN MANUFACTURER as your printer manufacturer. Advanced Settings Normally, you do not need to change any of these settings.
Printer Operation
233
234
Reference
ipp://host-printer/ps and ipp://host-cupsserver/printers/ps. SMB (Windows share) CUPS also supports printing on printers connected to Windows shares. The protocol used for this purpose is SMB. SMB uses the port numbers 137, 138, and 139. Example device URIs are smb://user:password@workgroup/server/printer, smb://user:password@host/printer, and smb://server/printer. The protocol supported by the printer must be determined before configuration. If the manufacturer does not provide the needed information, the command nmap, which comes with the nmap package, can be used to guess the protocol. nmap checks a host for open ports. For example:
nmap -p 35,137-139,515,631,9100-10000 printerIP
Printer Operation
235
Then the device (-v) will be available as queue (-p), using the specified PPD file (-P). This means that you must know the PPD file and the name of the device if you want to configure the printer manually. Do not use -E as the first option. For all CUPS commands, -E as the first argument sets use of an encrypted connection. To enable the printer, -E must be used as shown in the following example:
lpadmin -p ps -v parallel:/dev/lp0 -P \ /usr/share/cups/model/Postscript.ppd.gz -E
For more options of lpadmin, see the lpadmin(1) man page. During printer setup, certain options are set as default. These options can be modified for every print job (depending on the print tool used). Changing these default options with YaST is also possible. Using command line tools, set default options as follows: 1 First, list all options:
lpoptions -p queue -l
Example:
Resolution/Output Resolution: 150dpi *300dpi 600dpi
The activated default option is evident from the preceding asterisk (*). 2 Change the option with lpadmin:
lpadmin -p queue -o Resolution=600dpi
236
Reference
Settings are written to ~/.lpoptions when a normal user runs lpoptions. root settings are written to /etc/cups/lpoptions.
Printer Operation
237
2.
3.
238
Reference
This setting is also essential if you want to use the CUPS administration Web front-end or the KDE printer administration tool. When cupsd runs as lp, /etc/printcap cannot be generated, because lp is not permitted to create files in /etc/. Therefore, cupsd generates /etc/cups/ printcap. To ensure that applications that can only read queue names from /etc/ printcap continue to work properly, /etc/printcap is a symbolic link pointing to /etc/cups/printcap. When cupsd runs as lp, port 631 cannot be opened. Therefore, cupsd cannot be reloaded with rccups reload. Use rccups restart instead.
Printer Operation
239
and
<Location /> Order Deny,Allow Deny From All Allow From 127.0.0.1 Allow From 127.0.0.2 Allow From @LOCAL </Location>
In this way, only LOCAL hosts can access cupsd on a CUPS server. LOCAL hosts are hosts whose IP addresses belong to a non-PPP interface (interfaces whose IFF_POINTOPOINT flags are not set) and whose IP addresses belong to the same network as the CUPS server. Packets from all other hosts are rejected immediately.
240
Reference
in the cups-drivers-stp package. Instead, the PPD files for your PostScript printers can be copied directly to /usr/share/cups/model/ (if they do not already exist in the manufacturer-PPDs package) to achieve an optimum configuration for your printers.
Printer Operation
241
242
Reference
11.7 Troubleshooting
The following sections cover some of the most frequently encountered printer hardware and software problems and ways to solve or circumvent these problems.
Printer Operation
243
If the PPD file is provided as a zip archive (.zip) or a self-extracting zip archive (.exe), unpack it with unzip. First, review the license terms of the PPD file. Then use the cupstestppd utility to check if the PPD file complies with Adobe PostScript Printer Description File Format Specification, version 4.3. If the utility returns FAIL, the errors in the PPD files are serious and are likely to cause major problems. The problem spots reported by cupstestppd should be eliminated. If necessary, ask the printer manufacturer for a suitable PPD file.
244
Reference
If the connection to lpd cannot be established, lpd may not be active or there may be basic network problems. As the user root, use the following command to query a (possibly very long) status report for queue on remote host, provided the respective lpd is active and the host accepts queries:
echo -e "\004queue" \ | netcat -w 2 -p 722 host 515
If lpd does not respond, it may not be active or there may be basic network problems. If lpd responds, the response should show why printing is not possible on the queue on host. If you receive a response like that in Example 11.2, Error Message from the lpd (page 245), the problem is caused by the remote lpd. Example 11.2 Error Message from the lpd
lpd: your host does not have line printer access lpd: queue does not exist printer: spooling disabled printer: printing disabled
Checking a Remote cupsd By default, the CUPS network server should broadcast its queues every 30 seconds on UDP port 631. Accordingly, the following command can be used to test whether there is a CUPS network server in the network.
netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID
Printer Operation
245
If a broadcasting CUPS network server exists, the output appears as shown in Example 11.3, Broadcast from the CUPS Network Server (page 246). Example 11.3 Broadcast from the CUPS Network Server
ipp://host.domain:631/printers/queue
The following command can be used to test if a TCP connection can be established to cupsd (port 631) on host:
netcat -z host 631 && echo ok || echo failed
If the connection to cupsd cannot be established, cupsd may not be active or there may be basic network problems. lpstat -h host -l -t returns a (possibly very long) status report for all queues on host, provided the respective cupsd is active and the host accepts queries. The next command can be used to test if the queue on host accepts a print job consisting of a single carriage-return character. Nothing should be printed. Possibly, a blank page may be ejected.
echo -en "\r" \ | lp -d queue -h host
Troubleshooting a Network Printer or Print Server Box Spoolers running in a print server box sometimes cause problems when they have to deal with a lot of print jobs. Because this is caused by the spooler in the print server box, there is nothing you can do about it. As a work-around, circumvent the spooler in the print server box by addressing the printer connected to the print server box directly via TCP socket. See Section 11.4.2, Network Printers (page 234). In this way, the print server box is reduced to a converter between the various forms of data transfer (TCP/IP network and local printer connection). To use this method, you need to know the TCP port on the print server box. If the printer is connected to the print server box and powered on, this TCP port can usually be determined with the nmap utility from the nmap package some time after the print server box is powered on. For example, nmap IP-address may deliver the following output for a print server box:
Port 23/tcp 80/tcp 515/tcp State open open open Service telnet http printer
246
Reference
631/tcp 9100/tcp
open open
cups jetdirect
This output indicates that the printer connected to the print server box can be addressed via TCP socket on port 9100. By default, nmap only checks a number of commonly known ports listed in /usr/share/nmap/nmap-services. To check all possible ports, use the command nmap -p from_port-to_port IP-address. This may take some time. For further information, refer to the nmap man page. Enter a command like
echo -en "\rHello\r\f" | netcat -w 1 IP-address port cat file | netcat -w 1 IP-address port
to send character strings or files directly to the respective port to test if the printer can be addressed on this port.
Printer Operation
247
248
Reference
3 Some data may still be transferred to the printer even though the print job has been deleted from the queue. Check if a CUPS back-end process is still running for the respective queue and terminate it. For example, for a printer connected to the parallel port, the command fuser -k /dev/lp0 can be used to terminate all processes that are still accessing the printer (more precisely: the parallel port). 4 Reset the printer completely by switching it off for some time. Then insert the paper and turn on the printer.
Printer Operation
249
12
Since version 2.6, the kernel is capable of adding or removing almost any device in the running system. Changes in device state (whether a device is plugged in or removed) need to be propagated to userspace. Devices need to be configured as soon as they are plugged in and discovered. Users of a certain device need to be informed about any state changes of this device. udev provides the needed infrastructure to dynamically maintain the device node files and symbolic links in the /dev directory. udev rules provide a way to plug external tools into the kernel device event processing. This enables you to customize udev device handling, for example, by adding certain scripts to execute as part of kernel device handling, or request and import additional data to evaluate during device handling.
Every device driver carries a list of known aliases for devices it can handle. The list is contained in the kernel module file itself. The program depmod reads the ID lists and creates the file modules.alias in the kernel's /lib/modules directory for all currently available modules. With this infrastructure, module loading is as easy as calling modprobe for every event that carries a MODALIAS key. If modprobe $MODALIAS is called, it matches the device alias composed for the device with the
252
Reference
aliases provided by the modules. If a matching entry is found, that module is loaded. All this is triggered by udev and happens automatically.
253
The UEVENT lines show the events the kernel has sent over netlink. The UDEV lines show the finished udev event handlers. The timing is printed in microseconds. The time between UEVENT and UDEV is the time udev took to process this event or the udev daemon has delayed its execution to synchronize this event with related and already running events. For example, events for hard disk partitions always wait for the main disk device event to finish, because the partition events may rely on the data the main disk event has queried from the hardware. udevmonitor --env shows the complete event environment:
UDEV [1132633002.937243] add@/class/input/input7 UDEV_LOG=3 ACTION=add DEVPATH=/class/input/input7 SUBSYSTEM=input SEQNUM=1043 PHYSDEVPATH=/devices/pci0000:00/0000:00:1d.1/usb2/2-2/2-2:1.0 PHYSDEVBUS=usb PHYSDEVDRIVER=usbhid PRODUCT=3/46d/c03e/2000 NAME="Logitech USB-PS/2 Optical Mouse" PHYS="usb-0000:00:1d.1-2/input0" UNIQ="" EV=7 KEY=70000 0 0 0 0 0 0 0 0 REL=103
udev also sends messages to syslog. The default syslog priority that controls which messages are sent to syslog is specified in the udev configuration file /etc/udev/ udev.conf. The log priority of the running daemon can be changed with udevcontrol log_priority=level/number.
254
Reference
and the assignment keys are assigned the specified value. A matching rule may specify the name of the device node, add symlinks pointing to the node, or run a specified program as part of the event handling. If no matching rule is found, the default device node name is used to create the device node. The rule syntax and the provided keys to match or import data are described in the udev man page.
255
256
Reference
257
13
13.1 Terminology
metadata A file systeminternal data structure that assures all the data on disk is properly organized and accessible. Essentially, it is data about the data. Almost every file system has its own structure of metadata, which is part of why the file systems show different performance characteristics. It is extremely important to maintain metadata intact, because otherwise all data on the file system could become inaccessible. inode Inodes contain various information about a file, including size, number of links, pointers to the disk blocks where the file contents are actually stored, and date and time of creation, modification, and access.
259
journal In the context of a file system, a journal is an on-disk structure containing a kind of log in which the file system stores what it is about to change in the file system's metadata. Journaling greatly reduces the recovery time of a Linux system because it obsoletes the lengthy search process that checks the entire file system at system start-up. Instead, only the journal is replayed.
13.2.1 ReiserFS
Officially one of the key features of the 2.4 kernel release, ReiserFS has been available as a kernel patch for 2.2.x SUSE kernels since SUSE Linux version 6.4. ReiserFS was designed by Hans Reiser and the Namesys development team. It has proven itself to be a powerful alternative to Ext2. Its key assets are better disk space utilization, better disk access performance, and faster crash recovery.
260
Reference
ReiserFS's strengths, in more detail, are: Better Disk Space Utilization In ReiserFS, all data is organized in a structure called B*-balanced tree. The tree structure contributes to better disk space utilization because small files can be stored directly in the B* tree leaf nodes instead of being stored elsewhere and just maintaining a pointer to the actual disk location. In addition to that, storage is not allocated in chunks of 1 or 4 kB, but in portions of the exact size needed. Another benefit lies in the dynamic allocation of inodes. This keeps the file system more flexible than traditional file systems, like Ext2, where the inode density must be specified at file system creation time. Better Disk Access Performance For small files, file data and stat_data (inode) information are often stored next to each other. They can be read with a single disk I/O operation, meaning that only one access to disk is required to retrieve all the information needed. Fast Crash Recovery Using a journal to keep track of recent metadata changes makes a file system check a matter of seconds, even for huge file systems. Reliability through Data Journaling ReiserFS also supports data journaling and ordered data modes similar to the concepts outlined in the Ext3 section, Section 13.2.3, Ext3 (page 262). The default mode is data=ordered, which ensures both data and metadata integrity, but uses journaling only for metadata.
13.2.2 Ext2
The origins of Ext2 go back to the early days of Linux history. Its predecessor, the Extended File System, was implemented in April 1992 and integrated in Linux 0.96c. The Extended File System underwent a number of modifications and, as Ext2, became the most popular Linux file system for years. With the creation of journaling file systems and their astonishingly short recovery times, Ext2 became less important. A brief summary of Ext2's strengths might help understand why it wasand in some areas still isthe favorite Linux file system of many Linux users.
261
Solidity Being quite an old-timer, Ext2 underwent many improvements and was heavily tested. This may be the reason why people often refer to it as rock-solid. After a system outage when the file system could not be cleanly unmounted, e2fsck starts to analyze the file system data. Metadata is brought into a consistent state and pending files or data blocks are written to a designated directory (called lost +found). In contrast to journaling file systems, e2fsck analyzes the entire file system and not just the recently modified bits of metadata. This takes significantly longer than checking the log data of a journaling file system. Depending on file system size, this procedure can take half an hour or more. Therefore, it is not desirable to choose Ext2 for any server that needs high availability. However, because Ext2 does not maintain a journal and uses significantly less memory, it is sometimes faster than other file systems. Easy Upgradability The code for Ext2 is the strong foundation on which Ext3 could become a highlyacclaimed next-generation file system. Its reliability and solidity were elegantly combined with the advantages of a journaling file system.
13.2.3 Ext3
Ext3 was designed by Stephen Tweedie. Unlike all other next-generation file systems, Ext3 does not follow a completely new design principle. It is based on Ext2. These two file systems are very closely related to each other. An Ext3 file system can be easily built on top of an Ext2 file system. The most important difference between Ext2 and Ext3 is that Ext3 supports journaling. In summary, Ext3 has three major advantages to offer: Easy and Highly Reliable Upgrades from Ext2 Because Ext3 is based on the Ext2 code and shares its on-disk format as well as its metadata format, upgrades from Ext2 to Ext3 are incredibly easy. Unlike transitions to other journaling file systems, such as ReiserFS or XFS, which can be quite tedious (making backups of the entire file system and recreating it from scratch), a transition to Ext3 is a matter of minutes. It is also very safe, because recreating an entire file system from scratch might not work flawlessly. Considering the number of existing Ext2 systems that await an upgrade to a journaling file system, you can easily figure out why Ext3 might be of some importance to many system administrators. Downgrading from Ext3 to Ext2 is as easy as the upgrade. Just perform a clean unmount of the Ext3 file system and remount it as an Ext2 file system.
262
Reference
Reliability and Performance Some other journaling file systems follow the metadata-only journaling approach. This means your metadata is always kept in a consistent state, but the same cannot be automatically guaranteed for the file system data itself. Ext3 is designed to take care of both metadata and data. The degree of care can be customized. Enabling Ext3 in the data=journal mode offers maximum security (data integrity), but can slow down the system because both metadata and data are journaled. A relatively new approach is to use the data=ordered mode, which ensures both data and metadata integrity, but uses journaling only for metadata. The file system driver collects all data blocks that correspond to one metadata update. These data blocks are written to disk before the metadata is updated. As a result, consistency is achieved for metadata and data without sacrificing performance. A third option to use is data=writeback, which allows data to be written into the main file system after its metadata has been committed to the journal. This option is often considered the best in performance. It can, however, allow old data to reappear in files after crash and recovery while internal file system integrity is maintained. Unless you specify something else, Ext3 is run with the data=ordered default.
263
changes, run the mkinitrd command. This builds a new initrd and prepares it for use.
13.2.5 Reiser4
Right after kernel 2.6 had been released, the family of journaling file systems was joined by another member: Reiser4. Reiser4 is fundamentally different from its predecessor ReiserFS (version 3.6). It introduces the concept of plug-ins to tweak the file system functionality and a finer grained security concept. Fine Grained Security Concept In designing Reiser4, its developers put an emphasis on the implementation of security-relevant features. Reiser4 therefore comes with a set of dedicated security plug-ins. The most important one introduces the concept of file items. Currently, file access controls are defined per file. If there is a large file containing information relevant to several users, groups, or applications, the access rights had be fairly imprecise to include all parties involved. In Reiser4, you can split those files into smaller portions (the items). Access rights can then be set for each item and each user separately, allowing a much more precise file security management. A perfect example would be /etc/passwd. To date, only root can read and edit the file while non-root users only get read access to this file. Using the item concept of Reiser4, you could split this file in a set of items (one item per user) and allow users or applications to modify their own data but not access other users' data. This concept adds both to security and flexibility. Extensibility through Plug-Ins Many file system functions and external functions normally used by a file system are implemented as plug-ins in Reiser4. These plug-ins can easily be added to the base system. You no longer need to recompile the kernel or reformat the hard disk to add new functionalities to your file system. Better File System Layout through Delayed Allocation Like XFS, Reiser4 supports delayed allocation. See Section 13.2.6, XFS (page 265). Using delayed allocation even for metadata can result in better overall layout.
264
Reference
13.2.6 XFS
Originally intended as the file system for their IRIX OS, SGI started XFS development in the early 1990s. The idea behind XFS was to create a high-performance 64-bit journaling file system to meet the extreme computing challenges of today. XFS is very good at manipulating large files and performs well on high-end hardware. However, even XFS has a drawback. Like ReiserFS, XFS takes great care of metadata integrity, but less of data integrity. A quick review of XFS's key features explains why it may prove a strong competitor for other journaling file systems in high-end computing. High Scalability through the Use of Allocation Groups At the creation time of an XFS file system, the block device underlying the file system is divided into eight or more linear regions of equal size. Those are referred to as allocation groups. Each allocation group manages its own inodes and free disk space. Practically, allocation groups can be seen as file systems in a file system. Because allocation groups are rather independent of each other, more than one of them can be addressed by the kernel simultaneously. This feature is the key to XFS's great scalability. Naturally, the concept of independent allocation groups suits the needs of multiprocessor systems. High Performance through Efficient Management of Disk Space Free space and inodes are handled by B+ trees inside the allocation groups. The use of B+ trees greatly contributes to XFS's performance and scalability. XFS uses delayed allocation. It handles allocation by breaking the process into two pieces. A pending transaction is stored in RAM and the appropriate amount of space is reserved. XFS still does not decide where exactly (speaking of file system blocks) the data should be stored. This decision is delayed until the last possible moment. Some short-lived temporary data may never make its way to disk, because it may be obsolete by the time XFS decides where actually to save it. Thus XFS increases write performance and reduces file system fragmentation. Because delayed allocation results in less frequent write events than in other file systems, it is likely that data loss after a crash during a write is more severe. Preallocation to Avoid File System Fragmentation Before writing the data to the file system, XFS reserves (preallocates) the free space needed for a file. Thus, file system fragmentation is greatly reduced. Performance is increased because the contents of a file are not distributed all over the file system.
265
hpfs
iso9660 minix
msdos
ncpfs nfs
smbfs
sysv
ufs
266
Reference
umsdos
UNIX on MSDOS: Applied on top of a normal fat file system, achieves UNIX functionality (permissions, links, long filenames) by creating special files. Virtual FAT: Extension of the fat file system (supports long filenames). Windows NT file system, read-only.
vfat
ntfs
Ext2 or Ext3 (8 kB block size) (systems with 8 kB pages, like Alpha) ReiserFS v3
267
File System Size (Bytes) 263 (8 EB) 263 (8 EB) 263 (8 EB)
IMPORTANT: Linux Kernel Limits Table 13.2, Maximum Sizes of File Systems (On-Disk Format) (page 267) describes the limitations regarding the on-disk format. The 2.6 kernel imposes its own limits on the size of files and file systems handled by it. These are as follows: File Size 41 On 32-bit systems, files may not exceed the size of 2 TB (2 bytes). File System Size 73 File systems may be up to 2 bytes large. However, this limit is still out of reach for the currently available hardware.
268
Reference
A comprehensive multipart tutorial about Linux file systems can be found at IBM developerWorks: http://www-106.ibm.com/developerworks/library/ l-fs.html. For a comparison of the different journaling file systems in Linux, look at Juan I. Santos Florido's article at Linuxgazette: http://www.linuxgazette .com/issue55/florido.html. Those interested in an in-depth analysis of LFS in Linux should try Andreas Jaeger's LFS site: http://www.suse.de/~aj/linux _lfs.html.
269
14
The following text contains several references to documentation that can be found below /usr/share/doc/packages/Xorg and /usr/share/doc/howto/en. This material along with respective manual pages is available only if the appropriate documentation packages are installed (xorg-x11-doc, xorg-x11-man, and howtoenh).
271
In the left navigation bar, there are six items, each of them showing the respective configuration dialog from the YaST control center. Find the sections mentioned below in Chapter System Configuration with YaST (Start-Up). Monitor For a description of the monitor and graphics card configuration, see Section Card and Monitor Properties (Chapter 2, System Configuration with YaST, Start-Up). Mouse For a description of the mouse configuration in the graphical environment, see Section Mouse Properties (Chapter 2, System Configuration with YaST, StartUp). Keyboard For a description of the keyboard configuration in the graphical environment, see Section Keyboard Properties (Chapter 2, System Configuration with YaST, StartUp). Tablet For a description of the graphics tablet configuration, see Section Tablet Properties (Chapter 2, System Configuration with YaST, Start-Up).
272
Reference
Touchscreen For a description of the touchscreen configuration, see Section Touchscreen Properties (Chapter 2, System Configuration with YaST, Start-Up). VNC For a description of the VNC configuration, see Section Remote Access Properties (Chapter 2, System Configuration with YaST, Start-Up).
273
The available section types are listed in Table 14.1, Sections in /etc/X11/xorg.conf (page 274). Table 14.1 Type Files Sections in /etc/X11/xorg.conf Meaning This section describes the paths used for fonts and the RGB color table. General switches are set here. Input devices, like keyboards and special input devices (touchpads, joysticks, etc.), are configured in this section. Important parameters in this section are Driver and the options defining the Protocol and Device. Describes the monitor used. The individual elements of this section are the name, which is referred to later in the Screen definition, the bandwidth, and the synchronization frequency limits (HorizSync and VertRefresh). Settings are given in MHz, kHz, and Hz. Normally, the server refuses any modeline that does not correspond with the specification of the monitor. This prevents too high frequencies from being sent to the monitor by accident. The modeline parameters are stored here for the specific screen resolutions. These parameters can be calculated by SaX2 on the basis of the values given by the user and normally do not need to be changed. Intervene manually at this point if, for example, you want to connect a fixed frequency monitor. Find details of the meaning of individual number values in the HOWTO files in /usr/share/doc/howto/en/html/ XFree86-Video-Timings-HOWTO.
ServerFlags InputDevice
Monitor
Modes
274
Reference
Type Device
Meaning This section defines a specific graphics card. It is referenced by its descriptive name. This section puts together a Monitor and a Device to form all the necessary settings for X.Org. In the Display subsection, specify the size of the virtual screen (Virtual), the ViewPort, and the Modes used with this screen.
Screen
ServerLayout This section defines the layout of a single or multihead configuration. This section binds the input devices InputDevice and the display devices Screen. Monitor, Device, and Screen are explained in more detail below. Further information about the other sections can be found in the manual pages of X.Org and xorg .conf. There can be several different Monitor and Device sections in xorg.conf. Even multiple Screen sections are possible. The following ServerLayout section determines which one is used.
275
The Identifier line (here Screen[0]) gives this section a defined name with which it can be uniquely referenced in the following ServerLayout section. The lines Device and Monitor specify the graphics card and the monitor that belong to this definition. These are just links to the Device and Monitor sections with their corresponding names or identifiers. These sections are discussed in detail below. Use the DefaultDepth setting to select the color depth the server should use unless it is started with a specific color depth. There is a Display subsection for each color depth. The keyword Depth assigns the color depth valid for this subsection. Possible values for Depth are 8, 15, 16, and 24. Not all X server modules support all these values. After the color depth, a list of resolutions is set in the Modes section. This list is checked by the X server from left to right. For each resolution, the X server searches for a suitable Modeline in the Modes section. The Modeline depends on the capability of both the monitor and the graphics card. The Monitor settings determine the resulting Modeline.
276
Reference
The first resolution found is the Default mode. With Ctrl + Alt + + (on the number pad), switch to the next resolution in the list to the right. With Ctrl + Alt + (on the number pad), switch to the left. This enables you to vary the resolution while X is running. The last line of the Display subsection with Depth 16 refers to the size of the virtual screen. The maximum possible size of a virtual screen depends on the amount of memory installed on the graphics card and the desired color depth, not on the maximum resolution of the monitor. Because modern graphics cards have a large amount of video memory, you can create very large virtual desktops. However, you may no longer be able to use 3D functionality if you fill most of the video memory with a virtual desktop. If the card has 16 MB video RAM, for example, the virtual screen can be up to 4096x4096 pixels in size at 8-bit color depth. Especially for accelerated cards, however, it is not recommended to use all your memory for the virtual screen, because this memory on the card is also used for several font and graphics caches.
If you use SaX2 for configuration, the device section should look something like the above example. Both the Driver and BusID are dependent on the hardware installed in your computer and are detected by SaX2 automatically. The BusID defines the PCI or AGP slot in which the graphics card is installed. This matches the ID displayed by the command lspci. The X server needs details in decimal form, but lspci displays these in hexadecimal form.
277
Wit the Driver parameter, specify the driver to use for this graphics card. If the card is a Matrox Millennium, the driver module is called mga. The X server then searches through the ModulePath defined in the Files section in the drivers subdirectory. In a standard installation, this is the directory /usr/X11R6/lib/modules/ drivers. _drv.o is added to the name, so, in the case of the mga driver, the driver file mga_drv.o is loaded. The behavior of the X server or of the driver can also be influenced through additional options. An example of this is the option sw_cursor, which is set in the device section. This deactivates the hardware mouse cursor and depicts the mouse cursor using software. Depending on the driver module, there are various options available, which can be found in the description files of the driver modules in the directory /usr/X11R6/ lib/X11/doc. Generally valid options can also be found in the manual pages (man xorg.conf and man X.Org).
278
Reference
Manual specification of modelines is rarely required today. If you are using a modern multisync monitor, the allowed frequencies and optimal resolutions can, as a rule, be read directly from the monitor by the X server via DDC, as described in the SaX2 configuration section. If this is not possible for some reason, use one of the VESA modes included in the X server. This will function with practically all graphics card and monitor combinations.
279
280
Reference
14.3.2 Xft
From the outset, the programmers of Xft made sure that scalable fonts including antialiasing are supported well. If Xft is used, the fonts are rendered by the application using the fonts, not by the X server as in the X11 core font system. In this way, the respective application has access to the actual font files and full control of how the glyphs are rendered. This constitutes the basis for the correct display of text in a number of languages. Direct access to the font files is very useful for embedding fonts for printing to make sure that the printout looks the same as the screen output. In SUSE Linux, the two desktop environments KDE and GNOME, Mozilla, and many other applications already use Xft by default. Xft is already used by more applications than the old X11 core font system. Xft uses the fontconfig library for finding fonts and influencing how they are rendered. The properties of fontconfig are controlled by the global configuration file /etc/ fonts/fonts.conf and the user-specific configuration file ~/.fonts.conf. Each of these fontconfig configuration files must begin with
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig>
To add directories to search for fonts, append lines such as the following:
<dir>/usr/local/share/fonts/</dir>
However, this is usually not necessary. By default, the user-specific directory ~/.fonts is already entered in /etc/fonts/fonts.conf. Accordingly, all you need to do to install additional fonts is to copy them to ~/.fonts. You can also insert rules that influence the appearance of the fonts. For example, enter
<match target="font"> <edit name="antialias" mode="assign"> <bool>false</bool> </edit> </match>
281
<match target="font"> <test name="family"> <string>Luxi Mono</string> <string>Luxi Sans</string> </test> <edit name="antialias" mode="assign"> <bool>false</bool> </edit> </match>
to disable antialiasing for specific fonts. By default, most applications use the font names sans-serif (or the equivalent sans), serif, or monospace. These are not real fonts but only aliases that are resolved to a suitable font, depending on the language setting. Users can easily add rules to ~/.fonts.conf to resolve these aliases to their favorite fonts:
<alias> <family>sans-serif</family> <prefer> <family>FreeSans</family> </prefer> </alias> <alias> <family>serif</family> <prefer> <family>FreeSerif</family> </prefer> </alias> <alias> <family>monospace</family> <prefer> <family>FreeMono</family> </prefer> </alias>
Because nearly all applications use these aliases by default, this affects almost the entire system. Thus, you can easily use your favorite fonts almost everywhere without having to modify the font settings in the individual applications. Use the command fc-list to find out which fonts are installed and available for use. For instance, the command fc-list returns a list of all fonts. To find out which of the available scalable fonts (:scalable=true) contain all glyphs required for Hebrew (:lang=he), their font names (family), their style (style), their weight (weight), and the name of the files containing the fonts, enter the following command:
282
Reference
FreeSansBold.ttf: FreeSans:style=Bold:weight=200 FreeMonoBoldOblique.ttf: FreeMono:style=BoldOblique:weight=200 FreeSerif.ttf: FreeSerif:style=Medium:weight=80 FreeSerifBoldItalic.ttf: FreeSerif:style=BoldItalic:weight=200 FreeSansOblique.ttf: FreeSans:style=Oblique:weight=80 FreeSerifItalic.ttf: FreeSerif:style=Italic:weight=80 FreeMonoOblique.ttf: FreeMono:style=Oblique:weight=80 FreeMono.ttf: FreeMono:style=Medium:weight=80 FreeSans.ttf: FreeSans:style=Medium:weight=80 FreeSerifBold.ttf: FreeSerif:style=Bold:weight=200 FreeSansBoldOblique.ttf: FreeSans:style=BoldOblique:weight=200 FreeMonoBold.ttf: FreeMono:style=Bold:weight=200
Important parameters that can be queried with fc-list: Table 14.2 Parameter family foundry style Parameters of fc-list Meaning and Possible Values Name of the font family, for example, FreeSans. The manufacturer of the font, for example, urw. The font style, such as Medium, Regular, Bold, Italic, or Heavy. The language that the font supports, for example, de for German, ja for Japanese, zh-TW for traditional Chinese, or zh-CN for simplified Chinese. The font weight, such as 80 for regular or 200 for bold. The slant, usually 0 for none and 100 for italic. The name of the file containing the font. true for outline fonts or false for other fonts.
lang
283
Meaning and Possible Values true for scalable fonts or false for other fonts. true for bitmap fonts or false for other fonts. Font size in pixels. In connection with fc-list, this option only makes sense for bitmap fonts.
284
Reference
Supported Hardware Intel i810/i815/i830M, Intel 845G/852GM/855GM/865G/915G,915GM/945G Matrox G200/G400/G450/G550, ATI Rage 128(Pro)/Radeon (up to 9250)
If you are installing with YaST for the first time, 3D acceleration can be activated during installation, provided YaST detects 3D support. For nVidia graphics chips, the nVidia driver must be installed first. To do this, select the nVidia driver patch in YOU (YaST Online Update). Due to license restrictions, the nVidia driver is not included in the distribution. If you update your system instead, the procedure for configuring 3D hardware support is different. This depends on which OpenGL driver is used. Further details are provided in the following section.
285
To verify the X.Org configuration, the tool checks if the packages needed for 3D support are installed and if the correct OpenGL library and GLX extension are used. Follow the instructions of 3Ddiag if you receive failed messages. If everything is correct, you only see done messages on the screen.
14.4.5 Troubleshooting
If the OpenGL 3D test results are negative (the games cannot be smoothly played), use 3Ddiag to make sure no errors exist in the configuration (failed messages). If correcting these does not help or if failed messages have not appeared, take a look at the X.Org log files. Often, you will find the line DRI is disabled in the X.Org file /var/log/Xorg .0.log. The exact cause can only be discovered by closely examining the log filea task requiring some experience. In such cases, no configuration error exists, because this would have already been detected by 3Ddiag. Consequently, at this point, the only choice is to use the software rendering fallback of the DRI driver, which does not provide 3D hardware support. You should also go without 3D support if you get OpenGL representation errors or instability. Use SaX2 to disable 3D support completely.
drivers, SUSE cannot offer any installation support for configuring 3D hardware acceleration or provide any further assistance with related problems. The basic configuration of the graphical user interface (X Window System) does not include 3D hardware acceleration configuration. If you experience problems with 3D hardware acceleration, it is recommended to disable 3D support completely.
287
15
FreeNX is a GPL implementation of the NX Server, used for remote access and display of another computer. It provides near-local speed application responsiveness over highlatency, low-bandwidth links.
289
The server runs and running according to the default settings in /etc/ nxserver/node.conf. Any user can remotely connect from another workstation. For advanced NX server configuration, refer to Section 15.2, Advanced FreeNX Configuration (page 291). If you prefer a more secure setup with private keys distributed to each client, refer to the instructions given in Section 15.2.1, Configuring SSH Authentication Using Client Keys (page 292). 3 Configure the firewall on the machine hosting the NX server to allow NX connections. a Log in to the server machine as root and start the YaST Firewall module. b Select Allowed Services to enter the service configuration dialog and select External Zone. c Select Advanced to enter the port details for NX. d Open ports 22 (SSH), 5000 to 5009, and 7000 to 7009 to allow NX traffic. Do this by entering the following in TCP ports:
22 5000:5009 7000:7009
e Store your settings and restart the firewall by selecting OK Next Accept.
TIP For detailed information about firewall configuration for NX, refer to /usr/ share/doc/packages/FreeNX/NX-Firewall.txt. To remotely connect to another workstation and use KDE as your desktop choice, proceed as follows: 1 Start KNX from the main menu. 2 The first time you log in, you need to create a new connection. To create a connection, do the following:
290
Reference
a In KNX Client Login, click Connection Settings. b Enter a name for the connection, such as the name of the server. c Enter the host information, the port number, and the bandwidth for your connection. d From Sessiontype, select UNIX/KDE to start a KDE session. e Select a display resolution. f Click OK. 3 Once you are connected and the remote connection appears on your screen, you can access applications and use the remote computer as though you were sitting at that machine. To remotely connect to another machine running GNOME as your desktop choice, proceed as follows: 1 Download and install the nxclient package from NoMachine via http://www .nomachine.com/download_client_linux.php. 2 Start NX Connection Wizard from the main menu. 3 In three steps, enter the name of the connection, port and host details, and connection type, select the session type Unix/Gnome, decide whether to create a shortcut on your desktop, and click Finish. 4 To connect to the remote desktop, click the NX shortcut on your desktop and provide username and password and click OK. The remote desktop appears on your screen.
291
5 Log out. To configure knx to use this key, proceed as follows: 1 At the server machine, log in as root. 2 Copy the key file to the location on the client machine where knx needs it, replacing client with the client's address.
scp /var/lib/nxserver/home/.ssh/client.id_dsa.key client:/usr/share/knx/
292
Reference
5 Log out.
293
In the following example, assume user joe wants NX automatically to start with a certain application as soon as he opens an NX session. To enable this behavior for this user only, proceed as follows: 1 Log in as root. 2 Enter the /etc/nxserver directory:
cd /etc/nxserver
3 Save a copy of the NX server's configuration file (node.conf) under joe .node.conf in the same directory. 4 Edit the appropriate parameters (NODE_AUTOSTART and ENABLE_AUTORECONNECT) in joe.node.conf. For details on these features, refer to Section 15.2.5, Configuring Autostart Tasks and Exporting Configurations (page 295) and Section 15.2.4, Suspending and Resuming NX Sessions (page 294). 5 Reinstall the NX server to activate the new configuration:
nxsetup --install --clean --purge --setup-nomachine-key
294
Reference
3 Save and exit the configuration file and restart the server with nxserver --restart. 4 Log out. To suspend a session on exit, click the X in the top right corner of your NX window and select Suspend to suspend your session and to exit the client. Upon reconnect, you are asked whether to resume the old session or start a fresh one.
3 Save and exit the configuration file. 4 Restart the server with the nxserver --restart command and log out. The program specified now starts every time a session is started or resumed.
295
You can also export the variables NX_USERIP and NX_SESSIONID to make them accessible in the user's environment. This allows, for example, putting an icon onto the desktop with the generic content and accessing a Samba server running on the user's thin client. To make the contents of a floppy on the thin client's floppy drive available to the user, proceed as follows: 1 Enable the export of the NX_USERIP and NX_SESSIONID variables on the server side: a Log in as root on the server. b Open the server's configuration /etc/nxserver/node.conf and set the following variables:
EXPORT_USERIP="1" EXPORT_SESSIONID="1"
c Save and exit the server's configuration and restart the server using the nxserver --restart command. d Log out. 2 On the client side, open a session, export the floppy drive via SMB and create an icon on the desktop: a Export the contents of your floppy drive through Samba using your file manager (Nautilus or Konqueror). b Create a floppy.desktop file in the Desktop directory and enter the following line:
Exec=smb://$NX_USERIP/floppy
The server exports the thin client's IP address, allowing you to access the thin client's floppy drive with the floppy icon in the NX session.
296
Reference
c Restart the external server to apply the altered configuration with the command nxserver --restart and log out. Any incoming connection is forwared to the internal server.
15.2.7 Installing and Running FreeNX and NoMachine on the Same Server
You can install and run FreeNX and the commercial NoMachine NX server on the same machine without interference. This is implemented in FreeNX by forwarding the connection to the NoMachine installed on the same machine. To enable this feature, proceed as follows: 1 Log in as root on the server machine.
297
2 Open the server's configuration file for FreeNX under /etc/nxserver/node .conf and set the following variable:
ENABLE_NOMACHINE_FORWARD="1"
3 Save this file and restart the FreeNX server with the nserver --restart command. 4 Log out. To connect to the NoMachine server, use the standard username and password credentials. To connect to the FreeNX server, prepend freenx. to the normal username (for example, freenx.joedoe) and use the usual password.
15.3 Troubleshooting
The following sections hint at some of the most frequent problems encountered when using FreeNX and provide possible solutions to these problems.
298
Reference
4 Check the firewall on the server side for SSH and for the NX ports listed in Section 15.1, Getting Started with NX (page 289). Open these ports if they had previously been closed. 5 Retry establishing a connection between knx and the server. 6 Log in to the server as root and proceed as follows: a Enter the /tmp directory and check for lock files of the NX server:
cd / ls -ltr .nX*
b If there are any of these old lock files, remove them. c Log out. 7 Retry establishing a connection between knx and the server. 8 On the client machine, delete and reinstall the knx client using the YaST Software Management module. You should be able to connect to the server now, provided you followed all the instructions above.
To determine the source of this problem, proceed as follows: 1 Log in to the server as root. 2 Check the output of the dmesg command for an entry like the following:
SubDomain: REJECTING r access to /var/lib/nxserver/home/.ssh/authorized_keys2 (sshd(31247) profile /usr/sbin/sshd active /usr/sbin/sshd)
299
This entry tells you that Novell AppArmor running on the server does not allow the ssh daemon to access some NX-specific files. 3 Stop AppArmor on the server machine or Put the sshd profile into learning mode and add permissions for accessing the NX files to the existing profile. This is described in more detail in the Novell AppArmor 2.0 Administration Guide. 4 Reconnect to the server.
The connection failed due to the higher ports used in negotiating the NX remote session not being opened on the server's firewall. To adjust the firewall settings on the server, proceed as described in Section 15.1, Getting Started with NX (page 289).
300
Reference
16
Linux uses PAM (pluggable authentication modules) in the authentication process as a layer that mediates between user and application. PAM modules are available on a systemwide basis, so they can be requested by any application. This chapter describes how the modular authentication mechanism works and how it is configured. System administrators and programmers often want to restrict access to certain parts of the system or to limit the use of certain functions of an application. Without PAM, applications must be adapted every time a new authentication mechanism, such as LDAP or SAMBA, is introduced. This process, however, is rather time-consuming and error-prone. One way to avoid these drawbacks is to separate applications from the authentication mechanism and delegate authentication to centrally managed modules. Whenever a newly required authentication scheme is needed, it is sufficient to adapt or write a suitable PAM module for use by the program in question. Every program that relies on the PAM mechanism has its own configuration file in the directory /etc/pam.d/programname. These files define the PAM modules used for authentication. In addition, there are global configuration files for most PAM modules under /etc/security, which define the exact behavior of these modules (examples include pam_env.conf, pam_pwcheck.conf, pam_unix2.conf, and time.conf). Every application that uses a PAM module actually calls a set of PAM functions, which then process the information in the various configuration files and return the result to the calling application.
301
PAM modules are processed as stacks. Different types of modules have different purposes, for example, one module checks the password, another one verifies the location from which the system is accessed, and yet another one reads user-specific settings. PAM knows about four different types of modules: auth The purpose of this type of module is to check the user's authenticity. This is traditionally done by querying a password, but it can also be achieved with the help of a chip card or through biometrics (fingerprints or iris scan). account Modules of this type check whether the user has general permission to use the requested service. As an example, such a check should be performed to ensure that no one can log in under the username of an expired account. password The purpose of this type of module is to enable the change of an authentication token. In most cases, this is a password. session Modules of this type are responsible for managing and configuring user sessions. They are started before and after authentication to register login attempts in system logs and configure the user's specific environment (mail accounts, home directory, system limits, etc.). The second column contains control flags to influence the behavior of the modules started: required A module with this flag must be successfully processed before the authentication may proceed. After the failure of a module with the required flag, all other
302
Reference
modules with the same flag are processed before the user receives a message about the failure of the authentication attempt. requisite Modules having this flag must also be processed successfully, in much the same way as a module with the required flag. However, in case of failure a module with this flag gives immediate feedback to the user and no further modules are processed. In case of success, other modules are subsequently processed, just like any modules with the required flag. The requisite flag can be used as a basic filter checking for the existence of certain conditions that are essential for a correct authentication. sufficient After a module with this flag has been successfully processed, the calling application receives an immediate message about the success and no further modules are processed, provided there was no preceding failure of a module with the required flag. The failure of a module with the sufficient flag has no direct consequences, in the sense that any subsequent modules are processed in their respective order. optional The failure or success of a module with this flag does not have any direct consequences. This can be useful for modules that are only intended to display a message (for example, to tell the user that mail has arrived) without taking any further action. include If this flag is given, the file specified as argument is inserted at this place. The module path does not need to be specified explicitly, as long as the module is located in the default directory /lib/security (for all 64-bit platforms supported by SUSE Linux, the directory is /lib64/security). The fourth column may contain an option for the given module, such as debug (enables debugging) or nullok (allows the use of empty passwords).
303
The typical PAM configuration of an application (sshd, in this case) contains four include statements referring to the configuration files of four module types: common-auth, common-account, common-password, and common-session. These four files hold the default configuration for each module type. By including them instead of calling each module separately for each PAM application, automatically get an updated PAM configuration if the administrator changes the defaults. In former times, you had to adjust all configuration files manually for all applications when changes to PAM occurred or a new application was installed. Now the PAM configuration is made with central configuration files and all changes are automatically inherited by the PAM configuration of each service. The first include file (common-auth) calls two modules of the auth type: pam_env and pam_unix2. See Example 16.2, Default Configuration for the auth Section (page 304). Example 16.2 Default Configuration for the auth Section
auth auth required required pam_env.so pam_unix2.so
The first one, pam_env, loads the file /etc/security/pam_env.conf to set the environment variables as specified in this file. This can be used to set the DISPLAY variable to the correct value, because the pam_env module knows about the location from which the login is taking place. The second one, pam_unix2, checks the user's login and password against /etc/passwd and /etc/shadow. After the modules specified in common-auth have been successfully called, a third module called pam_nologin checks whether the file /etc/nologin exists. If it does, no user other than root may log in. The whole stack of auth modules is processed before sshd gets any feedback about whether the login has succeeded. Given that all modules of the stack have the required control flag, they must all be processed successfully before sshd receives a message about the positive result. If one of the 304 Reference
modules is not successful, the entire module stack is still processed and only then is sshd notified about the negative result. As soon as all modules of the auth type have been successfully processed, another include statement is processed, in this case, that in Example 16.3, Default Configuration for the account Section (page 305). common-account contains just one module, pam_unix2. If pam_unix2 returns the result that the user exists, sshd receives a message announcing this success and the next stack of modules (password) is processed, shown in Example 16.4, Default Configuration for the password Section (page 305). Example 16.3 Default Configuration for the account Section
account required pam_unix2.so
Again, the PAM configuration of sshd involves just an include statement referring to the default configuration for password modules located in common-password. These modules must successfully be completed (control flag required) whenever the application requests the change of an authentication token. Changing a password or another authentication token requires a security check. This is achieved with the pam _pwcheck module. The pam_unix2 module used afterwards carries over any old and new passwords from pam_pwcheck, so the user does not need to authenticate again. This also makes it impossible to circumvent the checks carried out by pam _pwcheck. The modules of the password type should be used wherever the preceding modules of the account or the auth type are configured to complain about an expired password. Example 16.5 Default Configuration for the session Section
session required session required pam_limits.so pam_unix2.so
As the final step, the modules of the session type, bundled in the common-session file are called to configure the session according to the settings for the user in question. Although pam_unix2 is processed again, it has no practical consequences due to its none option specified in the respective configuration file of this module, pam_unix2 .conf. The pam_limits module loads the file /etc/security/limits.conf,
305
which may define limits on the use of certain system resources. The session modules are called a second time when user logs out.
16.3.1 pam_unix2.conf
The traditional password-based authentication method is controlled by the PAM module pam_unix2. It can read the necessary data from /etc/passwd, /etc/shadow, NIS maps, NIS+ tables, or an LDAP database. The behavior of this module can be influenced by configuring the PAM options of the individual application itself or globally by editing /etc/security/pam_unix2.conf. A very basic configuration file for the module is shown in Example 16.6, pam_unix2.conf (page 306). Example 16.6 pam_unix2.conf
auth: nullok account: password: session:
nullok none
The nullok option for module types auth and password specifies that empty passwords are permitted for the corresponding type of account. Users are also allowed to change passwords for their accounts. The none option for the module type session specifies that no messages are logged on its behalf (this is the default). Learn about additional configuration options from the comments in the file itself and from the manual page pam_unix2(8).
16.3.2 pam_env.conf
This file can be used to define a standardized environment for users that is set whenever the pam_env module is called. With it, preset environment variables using the following syntax: 306 Reference
VARIABLE
[DEFAULT=[value]]
[OVERRIDE=[value]]
VARIABLE Name of the environment variable to set. [DEFAULT=[value]] Default value the administrator wants set. [OVERRIDE=[value]] Values that may be queried and set by pam_env, overriding the default value. A typical example of how pam_env can be used is the adaptation of the DISPLAY variable, which is changed whenever a remote login takes place. This is shown in Example 16.7, pam_env.conf (page 307). Example 16.7 pam_env.conf
REMOTEHOST DISPLAY DEFAULT=localhost OVERRIDE=@{PAM_RHOST} DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
The first line sets the value of the REMOTEHOST variable to localhost, which is used whenever pam_env cannot determine any other value. The DISPLAY variable in turn contains the value of REMOTEHOST. Find more information in the comments in the file /etc/security/pam_env.conf.
16.3.3 pam_pwcheck.conf
This configuration file is for the pam_pwcheck module, which reads options from it for all password type modules. Settings stored in this file take precedence over the PAM settings of an individual application. If application-specific settings have not been defined, the application uses the global settings. Example 16.8, pam_pwcheck.conf (page 307) tells pam_pwcheck to allow empty passwords and modification of passwords. More options for the module are mentioned in the file /etc/security/pam _pwcheck.conf. Example 16.8 pam_pwcheck.conf
password: nullok
307
16.3.4 limits.conf
System limits can be set on a user or group basis in the file limits.conf, which is read by the pam_limits module. The file allows you to set hard limits, which may not be exceeded at all, and soft limits, which may be exceeded temporarily. To learn about the syntax and the available options, read the comments included in the file.
308
Reference
17
Xen makes it possible to run several Linux systems on one physical machine. The hardware for the different systems is provided virtually. This chapter gives an overview of the possibilities and limitations of this technology. Sections about installing, configuring, and running Xen complete this introduction. Virtual machines commonly need to emulate the hardware a system needs. The disadvantage is that the emulated hardware is much slower than the real silicon. Xen has a different approach. It restricts emulation to as few parts as possible. To achieve this, Xen uses paravirtualization. This is a technique that presents virtual machines similarly, but not identically to the underlying hardware. Therefore, host and guest operating systems are adapted on kernel level. The user space remains unchanged. Xen controls the hardware with a hypervisor and a controlling guest, also called Domain-0. These provide all needed virtualized block and network devices. The guest systems use these virtual block and network devices to run the system and connect to other guests or the local network. When several physical machines running Xen are configured in a way that the virtual block and network devices are available, it is also possible to migrate a guest system from one piece of hardware to another while running. Originally, Xen was developed to run up to 100 guest systems on one computer, but this number depends strongly on the system requirements of the running guest systems, especially the memory consumption. To limit the CPU utilization, the Xen hypervisor offers three different schedulers. The scheduler also may be changed while running the guest system, making it is possible to change the priority of the running guest system. On a higher level, migrating a guest may also be used to adjust the available CPU power.
309
The Xen virtualization system also has some drawbacks regarding the supported hardware. Several closed source drivers, like those from Nvidia or ATI, do not work as expected. In these cases, you must use the open source drivers if available, even if they do not support the full capabilities of the chips. Also several WLAN chips and Cardbus bridges are not supported when using Xen. In version 2, Xen does not support PAE (physical address extension), which means that it does not support more than 4 GB of memory. ACPI is not supported. Power management and other modes that depend on ACPI do not work. Another limitation of Xen is that it is currently not possible to just boot a block device. To boot, it is always necessary to have the correct kernel and initrd available in Domain-0. Figure 17.1 Xen Overview
Management Application
Management Host OS
userspace applications
Service Guest OS
userspace applications
Service Guest OS
userspace applications
Linux Kernel
(paravirtualized)
Linux Kernel
(paravirtualized)
NetWare Kernel
(paravirtualized)
IO
CPU
Memory
310
Reference
are python, bridge-utils, xen, xen-tools, xen-tools-ioemu, and a kernel-xen package. When selecting Xen during installation, Xen is added to the GRUB configuration. For other cases, make an entry in boot/grub/menu.lst. This entry should be similar to the following:
title Xen3 kernel (hd0,0)/boot/xen.gz module (hd0,0)/boot/vmlinuz-xen <parameters> module (hd0,0)/boot/initrd-xen
Replace (hd0,0) with the partition that holds your /boot directory. See also Chapter 9, The Boot Loader (page 193). Replace <parameters> with the parameters normally used to boot a Linux kernel. Then reboot into Xen mode. This boots the Xen hypervisor and a slightly changed Linux kernel as Domain-0 that runs most of the hardware. Apart from the exceptions already mentioned, everything should work as normal.
311
The next dialog starts the installation system after doing several setup tasks. This system is identical to a standard installation in text mode as described in Section YaST in Text Mode (Chapter 2, System Configuration with YaST, Start-Up). If you need to change the configuration of a guest domain, you must do that directly in the configuration file. This file is located in /etc/xen and has a name identical to the name of the guest domain.
xm console ID
xm mem-set ID Mem
312
Reference
Start the domain with configuration file domname. The optional -c links the current terminal to the first tty of the new guest. Do a normal shutdown of the guest with ID ID. Terminate the guest with ID ID immediately. Print a list of all running domains with their respective ID, memory, and CPU time values. Display information about the Xen host, including CPU and memory information.
xm info
17.4 Troubleshooting
This section provides some hints about how to solve common problems. It is not meant as an exhaustive step-by-step instruction, but should help get started with solving some issues. There are networking issues in Xen3. The concept of networking has changed considerably from Xen2 to Xen3. Domain0 is no longer directly connected to the bridge to prevent blocking of the bridge. Unfortunately, the initialization scripts of the system cannot handle the current configuration. To restart the network, run /etc/init.d/xend restart. I need to do a file system check. If the file system check did not work automatically, you may do it manually from Domain-0. Shut down your guest and run fsck on the image while it is not mounted. If fsck complains that the file system is mounted, check your mounts with the command mount. DHCP does not get IP addresses. DHCP needs several iptables kernel modules to run. Either those have not been installed or you updated your kernel and forgot to update the kernel modules in the guest system.
313
There is a problem booting the hypervisor and the messages go away too quickly Connect your Xen machine to another workstation with a serial nullmodem cable. Then, on the Xen side, add the following parameter to the line
kernel (hd0,0)/boot/xen.gz com1=115200,8n1
Before you boot Xen, start a terminal program on your workstation. As an example, this may be
screen /dev/ttyS0 115200
314
Reference
Basic Networking
18
Linux offers the necessary networking tools and features for integration into all types of network structures. The customary Linux protocol, TCP/IP, has various services and special features, which are discussed here. Network access using a network card, modem, or other device can be configured with YaST. Manual configuration is also possible. Only the fundamental mechanisms and the relevant network configuration files are discussed in this chapter. Linux and other Unix operating systems use the TCP/IP protocol. It is not a single network protocol, but a family of network protocols that offer various services. The protocols listed in Table 18.1, Several Protocols in the TCP/IP Protocol Family (page 318) are provided for the purpose of exchanging data between two machines via TCP/IP. Networks combined by TCP/IP, comprising a worldwide network are also referred to, in their entirety, as the Internet. RFC stands for Request for Comments. RFCs are documents that describe various Internet protocols and implementation procedures for the operating system and its applications. The RFC documents describe the setup of Internet protocols. To expand your knowledge about any of the protocols, refer to the appropriate RFC documents. They are available online at http://www.ietf.org/rfc.html.
Basic Networking
317
Several Protocols in the TCP/IP Protocol Family Description Transmission Control Protocol: A connection-oriented secure protocol. The data to transmit is first sent by the application as a stream of data then converted by the operating system to the appropriate format. The data arrives at the respective application on the destination host in the original data stream format in which it was initially sent. TCP determines whether any data has been lost during the transmission and that there is no mix-up. TCP is implemented wherever the data sequence matters. User Datagram Protocol: A connectionless, insecure protocol. The data to transmit is sent in the form of packets generated by the application. The order in which the data arrives at the recipient is not guaranteed and data loss is a possibility. UDP is suitable for record-oriented applications. It features a smaller latency period than TCP. Internet Control Message Protocol: Essentially, this is not a protocol for the end user, but a special control protocol that issues error reports and can control the behavior of machines participating in TCP/IP data transfer. In addition, it provides a special echo mode that can be viewed using the program ping. Internet Group Management Protocol: This protocol controls machine behavior when implementing IP multicast.
UDP
ICMP
IGMP
As shown in Figure 18.1, Simplified Layer Model for TCP/IP (page 319), data exchange takes place in different layers. The actual network layer is the insecure data transfer via IP (Internet protocol). On top of IP, TCP (transmission control protocol) guarantees, to a certain extent, security of the data transfer. The IP layer is supported by the underlying hardware-dependent protocol, such as ethernet.
318
Reference
Application Layer
Applications
Application Layer
Transport Layer
TCP, UDP
Transport Layer
Network Layer
IP
Network Layer
Physical Layer
Cable, Fiberglass
Physical Layer
Data Transfer
The diagram provides one or two examples for each layer. The layers are ordered according to abstraction levels. The lowest layer is very close to the hardware. The uppermost layer, however, is almost a complete abstraction from the hardware. Every layer has its own special function. The special functions of each layer are mostly implicit in their description. The data link and physical layers represent the physical network used, such as ethernet. Almost all hardware protocols work on a packet-oriented basis. The data to transmit is packaged in packets, because it cannot be sent all at once. The maximum size of a TCP/IP packet is approximately 64 KB. Packets are normally quite a bit smaller, because the network hardware can be a limiting factor. The maximum size of a data packet on an ethernet is about fifteen hundred bytes. The size of a TCP/IP packet is limited to this amount when the data is sent over an ethernet. If more data is transferred, more data packets need to be sent by the operating system. For the layers to serve their designated functions, additional information regarding each layer must be saved in the data packet. This takes place in the header of the packet. Every layer attaches a small block of data, called the protocol header, to the front of each emerging packet. A sample TCP/IP data packet traveling over an ethernet cable is illustrated in Figure 18.2, TCP/IP Ethernet Packet (page 320). The proof sum is
Basic Networking
319
located at the end of the packet, not at the beginning. This simplifies things for the network hardware. Figure 18.2 TCP/IP Ethernet Packet
When an application sends data over the network, the data passes through each layer, all implemented in the Linux kernel except the physical layer. Each layer is responsible for preparing the data so it can be passed to the next layer. The lowest layer is ultimately responsible for sending the data. The entire procedure is reversed when data is received. Like the layers of an onion, in each layer the protocol headers are removed from the transported data. Finally, the transport layer is responsible for making the data available for use by the applications at the destination. In this manner, one layer only communicates with the layer directly above or below it. For applications, it is irrelevant whether data is transmitted via a 100 MBit/s FDDI network or via a 56-kbit/s modem line. Likewise, it is irrelevant for the data line which kind of data is transmitted, as long as packets are in the correct format.
320
Reference
18.1.1 IP Addresses
Every computer on the Internet has a unique 32-bit address. These 32 bits (or 4 bytes) are normally written as illustrated in the second row in Example 18.1, Writing IP Addresses (page 321). Example 18.1 Writing IP Addresses
IP Address (binary): 11000000 10101000 00000000 00010100 IP Address (decimal): 192. 168. 0. 20
In decimal form, the four bytes are written in the decimal number system, separated by periods. The IP address is assigned to a host or a network interface. It cannot be used anywhere else in the world. There are exceptions to this rule, but these are not relevant in the following passages. The points in IP addresses indicate the hierarchical system. Until the 1990s, IP addresses were strictly categorized in classes. However, this system has proven too inflexible and was discontinued. Now, classless routing (CIDR, classless interdomain routing) is used.
Basic Networking
321
an IP address belongs to the network. All those bits that are 1 mark the corresponding bit in the IP address as belonging to the network. All bits that are 0 mark bits inside the subnetwork. This means that the more bits are 1, the smaller the subnetwork is. Because the netmask always consists of several successive 1 bits, it is also possible to just count the number of bits in the netmask. In Example 18.2, Linking IP Addresses to the Netmask (page 322) the first net with 24 bits could also be written as 192.168.0.0/24. Example 18.2 Linking IP Addresses to the Netmask
IP address (192.168.0.20): 11000000 10101000 00000000 00010100 Netmask (255.255.255.0): 11111111 11111111 11111111 00000000 --------------------------------------------------------------Result of the link: 11000000 10101000 00000000 00000000 In the decimal system: 192. 168. 0. 0 IP address (213.95.15.200): 11010101 10111111 00001111 11001000 Netmask (255.255.255.0): 11111111 11111111 11111111 00000000 --------------------------------------------------------------Result of the link: 11010101 10111111 00001111 00000000 In the decimal system: 213. 95. 15. 0
To give another example: all machines connected with the same ethernet cable are usually located in the same subnetwork and are directly accessible. Even when the subnet is physically divided by switches or bridges, these hosts can still be reached directly. IP addresses outside the local subnet can only be reached if a gateway is configured for the target network. In the most common case, there is only one gateway that handles all traffic that is external. However, it is also possible to configure several gateways for different subnets. If a gateway has been configured, all external IP packets are sent to the appropriate gateway. This gateway then attempts to forward the packets in the same mannerfrom host to hostuntil it reaches the destination host or the packet's TTL (time to live) expires. Table 18.2 Specific Addresses Description This is the netmask AND any address in the network, as shown in Example 18.2, Linking IP Addresses to the Netmask
322
Reference
Address Type
Description (page 322) under Result. This address cannot be assigned to any hosts.
Broadcast Address
This basically says, Access all hosts in this subnetwork. To generate this, the netmask is inverted in binary form and linked to the base network address with a logical OR. The above example therefore results in 192.168.0.255. This address cannot be assigned to any hosts. The address 127.0.0.1 is assigned to the loopback device on each host. A connection can be set up to your own machine with this address.
Local Host
Because IP addresses must be unique all over the world, you cannot just select random addresses. There are three address domains to use if you want to set up a private IPbased network. These cannot get any connection from the rest of the Internet, because they cannot be transmitted over the Internet. These address domains are specified in RFC 1597 and listed in Table 18.3, Private IP Address Domains (page 323). Table 18.3 Private IP Address Domains Domain 10.x.x.x 172.16.x.x 172.31.x.x 192.168.x.x
Basic Networking
323
in the past fifteen years. Since Tim Berners-Lee at CERN (http://public.web .cern.ch) invented the WWW in 1990, the number of Internet hosts has grown from a few thousand to about a hundred million. As mentioned, an IPv4 address consists of only 32 bits. Also, quite a few IP addresses are lostthey cannot be used due to the way in which networks are organized. The number of addresses available in your subnet is two to the power of the number of bits, minus two. A subnetwork has, for example, 2, 6, or 14 addresses available. To connect 128 hosts to the Internet, for example, you need a subnetwork with 256 IP addresses, from which only 254 are usable, because two IP addresses are needed for the structure of the subnetwork itself: the broadcast and the base network address. Under the current IPv4 protocol, DHCP or NAT (network address translation) are the typical mechanisms used to circumvent the potential address shortage. Combined with the convention to keep private and public address spaces separate, these methods can certainly mitigate the shortage. The problem with them lies in their configuration, which is a chore to set up and a burden to maintain. To set up a host in an IPv4 network, you need a number of address items, such as the host's own IP address, the subnetmask, the gateway address, and maybe a name server address. All these items need to be known and cannot be derived from somewhere else. With IPv6, both the address shortage and the complicated configuration should be a thing of the past. The following sections tell more about the improvements and benefits brought by IPv6 and about the transition from the old protocol to the new one.
18.2.1 Advantages
The most important and most visible improvement brought by the new protocol is the enormous expansion of the available address space. An IPv6 address is made up of 128 bit values instead of the traditional 32 bits. This provides for as many as several quadrillion IP addresses. However, IPv6 addresses are not only different from their predecessors with regard to their length. They also have a different internal structure that may contain more specific information about the systems and the networks to which they belong. More details about this are found in Section 18.2.2, Address Types and Structure (page 326). The following is a list of some other advantages of the new protocol:
324
Reference
Autoconfiguration IPv6 makes the network plug and play capable, which means that a newly set up system integrates into the (local) network without any manual configuration. The new host uses its automatic configuration mechanism to derive its own address from the information made available by the neighboring routers, relying on a protocol called the neighbor discovery (ND) protocol. This method does not require any intervention on the administrator's part and there is no need to maintain a central server for address allocationan additional advantage over IPv4, where automatic address allocation requires a DHCP server. Mobility IPv6 makes it possible to assign several addresses to one network interface at the same time. This allows users to access several networks easily, something that could be compared with the international roaming services offered by mobile phone companies: when you take your mobile phone abroad, the phone automatically logs in to a foreign service as soon as it enters the corresponding area, so you can be reached under the same number everywhere and are able to place an outgoing call just like in your home area. Secure Communication With IPv4, network security is an add-on function. IPv6 includes IPSec as one of its core features, allowing systems to communicate over a secure tunnel to avoid eavesdropping by outsiders on the Internet. Backward Compatibility Realistically, it would be impossible to switch the entire Internet from IPv4 to IPv6 at one time. Therefore, it is crucial that both protocols are able to coexist not only on the Internet, but also on one system. This is ensured by compatible addresses (IPv4 addresses can easily be translated into IPv6 addresses) and through the use of a number of tunnels. See Section 18.2.3, Coexistence of IPv4 and IPv6 (page 330). Also, systems can rely on a dual stack IP technique to support both protocols at the same time, meaning that they have two network stacks that are completely separate, such that there is no interference between the two protocol versions. Custom Tailored Services through Multicasting With IPv4, some services, such as SMB, need to broadcast their packets to all hosts in the local network. IPv6 allows a much more fine-grained approach by enabling servers to address hosts through multicastingby addressing a number of hosts as parts of a group (which is different from addressing all hosts through broadcasting
Basic Networking
325
or each host individually through unicasting). Which hosts are addressed as a group may depend on the concrete application. There are some predefined groups to address all name servers (the all name servers multicast group), for example, or all routers (the all routers multicast group).
326
Reference
An IPv6 address is made up of eight four-digit fields, each representing 16 bits, written in hexadecimal notation. They are also separated by colons (:). Any leading zero bytes within a given field may be dropped, but zeros within the field or at its end may not. Another convention is that more than four consecutive zero bytes may be collapsed into a double colon. However, only one such :: is allowed per address. This kind of shorthand notation is shown in Example 18.3, Sample IPv6 Address (page 327), where all three lines represent the same address. Example 18.3 Sample IPv6 Address
fe80 : 0000 : 0000 : 0000 : 0000 : 10 : 1000 : 1a4 fe80 : 0 : 0 : 0 : 0 : 10 : 1000 : 1a4 fe80 : : 10 : 1000 : 1a4
Each part of an IPv6 address has a defined function. The first bytes form the prefix and specify the type of address. The center part is the network portion of the address, but it may be unused. The end of the address forms the host part. With IPv6, the netmask is defined by indicating the length of the prefix after a slash at the end of the address. An address, as shown in Example 18.4, IPv6 Address Specifying the Prefix Length (page 327), contains the information that the first 64 bits form the network part of the address and the last 64 form its host part. In other words, the 64 means that the netmask is filled with 64 1-bit values from the left. Just like with IPv4, the IP address is combined with AND with the values from the netmask to determine whether the host is located in the same subnetwork or in another one. Example 18.4 IPv6 Address Specifying the Prefix Length
fe80::10:1000:1a4/64
IPv6 knows about several predefined types of prefixes. Some of these are shown in Table 18.4, Various IPv6 Prefixes (page 327). Table 18.4 Prefix (hex) 00 Various IPv6 Prefixes Definition IPv4 addresses and IPv4 over IPv6 compatibility addresses. These are used to maintain compatibility with IPv4. Their use still requires a router able to translate IPv6 packets into IPv4 packets. Several special addresses, such as the one for the loopback device, have this prefix as well.
Basic Networking
327
Definition Aggregatable global unicast addresses. As is the case with IPv4, an interface can be assigned to form part of a certain subnetwork. Currently, there are the following address spaces: 2001::/16 (production quality address space) and 2002::/16 (6to4 address space). Link-local addresses. Addresses with this prefix should not be routed and should therefore only be reachable from within the same subnetwork. Site-local addresses. These may be routed, but only within the network of the organization to which they belong. In effect, they are the IPv6 equivalent of the current private network address space, such as 10.x.x.x. These are multicast addresses.
fe80::/10
fec0::/10
ff
A unicast address consists of three basic components: Public Topology The first part (which also contains one of the prefixes mentioned above) is used to route packets through the public Internet. It includes information about the company or institution that provides the Internet access. Site Topology The second part contains routing information about the subnetwork to which to deliver the packet. Interface ID The third part identifies the interface to which to deliver the packet. This also allows for the MAC to form part of the address. Given that the MAC is a globally unique, fixed identifier coded into the device by the hardware maker, the configuration procedure is substantially simplified. In fact, the first 64 address bits are consolidated to form the EUI-64 token, with the last 48 bits taken from the MAC, and the remaining 24 bits containing special information about the token type. This also makes it possible to assign an EUI-64 token to interfaces that do not have a MAC, such as those based on PPP or ISDN.
328
Reference
On top of this basic structure, IPv6 distinguishes between five different types of unicast addresses: :: (unspecified) This address is used by the host as its source address when the interface is initialized for the first timewhen the address cannot yet be determined by other means. ::1 (loopback) The address of the loopback device. IPv4 Compatible Addresses The IPv6 address is formed by the IPv4 address and a prefix consisting of 96 zero bits. This type of compatibility address is used for tunneling (see Section 18.2.3, Coexistence of IPv4 and IPv6 (page 330)) to allow IPv4 and IPv6 hosts to communicate with others operating in a pure IPv4 environment. IPv4 Addresses Mapped to IPv6 This type of address specifies a pure IPv4 address in IPv6 notation. Local Addresses There are two address types for local use: link-local This type of address can only be used in the local subnetwork. Packets with a source or target address of this type should not be routed to the Internet or other subnetworks. These addresses contain a special prefix (fe80::/10) and the interface ID of the network card, with the middle part consisting of zero bytes. Addresses of this type are used during automatic configuration to communicate with other hosts belonging to the same subnetwork. site-local Packets with this type of address may be routed to other subnetworks, but not to the wider Internetthey must remain inside the organization's own network. Such addresses are used for intranets and are an equivalent of the private address space defined by IPv4. They contain a special prefix (fec0::/10), the interface ID, and a 16 bit field specifying the subnetwork ID. Again, the rest is filled with zero bytes. As a completely new feature introduced with IPv6, each network interface normally gets several IP addresses, with the advantage that several networks can be accessed through the same interface. One of these networks can be configured completely autoBasic Networking 329
matically using the MAC and a known prefix with the result that all hosts on the local network can be reached as soon as IPv6 is enabled (using the link-local address). With the MAC forming part of it, any IP address used in the world is unique. The only variable parts of the address are those specifying the site topology and the public topology, depending on the actual network in which the host is currently operating. For a host to go back and forth between different networks, it needs at least two addresses. One of them, the home address, not only contains the interface ID but also an identifier of the home network to which it normally belongs (and the corresponding prefix). The home address is a static address and, as such, it does not normally change. Still, all packets destined to the mobile host can be delivered to it, regardless of whether it operates in the home network or somewhere outside. This is made possible by the completely new features introduced with IPv6, such as stateless autoconfiguration and neighbor discovery. In addition to its home address, a mobile host gets one or more additional addresses that belong to the foreign networks where it is roaming. These are called care-of addresses. The home network has a facility that forwards any packets destined to the host when it is roaming outside. In an IPv6 environment, this task is performed by the home agent, which takes all packets destined to the home address and relays them through a tunnel. On the other hand, those packets destined to the care-of address are directly transferred to the mobile host without any special detours.
330
Reference
However, the configuration and maintenance of static tunnels is often too labor-intensive to use them for daily communication needs. Therefore, IPv6 provides for three different methods of dynamic tunneling: 6over4 IPv6 packets are automatically encapsulated as IPv4 packets and sent over an IPv4 network capable of multicasting. IPv6 is tricked into seeing the whole network (Internet) as a huge local area network (LAN). This makes it possible to determine the receiving end of the IPv4 tunnel automatically. However, this method does not scale very well and is also hampered by the fact that IP multicasting is far from widespread on the Internet. Therefore, it only provides a solution for smaller corporate or institutional networks where multicasting can be enabled. The specifications for this method are laid down in RFC 2529. 6to4 With this method, IPv4 addresses are automatically generated from IPv6 addresses, enabling isolated IPv6 hosts to communicate over an IPv4 network. However, a number of problems have been reported regarding the communication between those isolated IPv6 hosts and the Internet. The method is described in RFC 3056. IPv6 Tunnel Broker This method relies on special servers that provide dedicated tunnels for IPv6 hosts. It is described in RFC 3053. IMPORTANT: The 6bone Initiative In the heart of the old-time Internet, there is already a globally distributed network of IPv6 subnets that are connected through tunnels. This is the 6bone network (http://www.6bone.net), an IPv6 test environment that may be used by programmers and Internet providers who want to develop and offer IPv6-based services to gain the experience necessary to implement the new protocol. More information can be found on the project's Internet site.
Basic Networking
331
Because of the autoconfiguration concept of IPv6, the network card is assigned an address in the link-local network. Normally, no routing table management takes place on a workstation. The network routers can be queried by the workstation, using the router advertisement protocol, for what prefix and gateways should be implemented. The radvd program can be used to set up an IPv6 router. This program informs the workstations which prefix to use for the IPv6 addresses and which routers. Alternatively, use zebra for automatic configuration of both addresses and routing. Consult the ifup(8) man page to get information about how to set up various types of tunnels using the /etc/sysconfig/network files.
332
Reference
Basic Networking
333
at all. The dial-up protocol provides the name server address as the connection is made. The configuration of name server access with SUSE Linux is described in Chapter 20, The Domain Name System (page 367). The protocol whois is closely related to DNS. With this program, quickly find out who is responsible for any given domain.
334
Reference
Basic Networking
335
336
Reference
servers use the card's hardware address to identify an interface. If you have a virtual host setup where different hosts communicate through the same interface, an identifier is necessary to distinguish them. Static Address Setup If you have a static address, enable that option. Then enter the address and subnet mask for your network. The preset subnet mask should match the requirements of a typical home network. Leave this dialog by selecting Next or proceed to configure the hostname, name server, and routing details (see the sections on DNS Server (Start-Up) and Routing (StartUp)). Advanced enables you to specify more complex settings. Under Detailed Settings, use User Controlled to delegate the control over the network card from the administrator (root) to the normal user. For mobile operation, this allows the user to adapt changing network connections in a more flexible way, because he can control the activation or deactivation of the interface. The MTU (maximum transmission unit) and the type of Device Activation can also be set in this dialog.
18.4.2 Modem
In the YaST Control Center, access the modem configuration under Network Devices. If your modem was not automatically detected, open the dialog for manual configuration. In the dialog that opens, enter the interface to which the modem is connected under Modem.
Basic Networking
337
If you are behind a private branch exchange (PBX), you may need to enter a dial prefix. This is often a zero. Consult the instructions that came with the PBX to find out. Also select whether to use tone or pulse dialing, whether the speaker should be on, and whether the modem should wait until it detects a dial tone. The last option should not be enabled if the modem is connected to an exchange. Under Details, set the baud rate and the modem initialization strings. Only change these settings if your modem was not autodetected or if it requires special settings for data transmission to work. This is mainly the case with ISDN terminal adapters. Leave this dialog by clicking OK. To delegate control over the modem to the normal user without root permissions, activate User Controlled. In this way, a user without administrator permissions can activate or deactivate an interface. Under Dial Prefix Regular Expression, specify a regular expression. The Dial Prefix in KInternet, which can be modified by the normal user, must match this regular expression. If this field is left empty, the user cannot set a different Dial Prefix without administrator permissions. In the next dialog, select the ISP (Internet service provider). To choose from a predefined list of ISPs operating in your country, select Country. Alternatively, click New to open a dialog in which to provide the data for your ISP. This includes a name for the dial-up connection and ISP as well as the login and password provided by your ISP. Enable Always Ask for Password to be prompted for the password each time you connect.
338
Reference
In the last dialog, specify additional connection options: Dial on Demand If you enable dial on demand, set at least one name server. Modify DNS when Connected This option is enabled by default, with the effect that the name server address is updated each time you connect to the Internet. Automatically Retrieve DNS If the provider does not transmit its domain name server after connecting, disable this option and enter the DNS data manually. Stupid Mode This option is enabled by default. With it, input prompts sent by the ISP's server are ignored to prevent them from interfering with the connection process. External Firewall Interface and Restart Firewall Selecting these options enables the SUSEfirewall2, which protects you from outside attacks for the duration of your Internet connection. Idle Time-Out (seconds) With this option, specify a period of network inactivity after which the modem disconnects automatically. IP Details This opens the address configuration dialog. If your ISP does not assign a dynamic IP address to your host, disable Dynamic IP Address then enter your host's local IP address and the remote IP address. Ask your ISP for this information. Leave Default Route enabled and close the dialog by selecting OK. Selecting Next returns to the original dialog, which displays a summary of the modem configuration. Close this dialog with Finish.
18.4.3 ISDN
Use this module to configure one or several ISDN cards for your system. If YaST did not detect your ISDN card, manually select it. Multiple interfaces are possible, but several ISPs can be configured for one interface. In the subsequent dialogs, set the ISDN options necessary for the proper functioning of the card.
Basic Networking
339
In the next dialog, shown in Figure 18.5, ISDN Configuration (page 340), select the protocol to use. The default is Euro-ISDN (EDSS1), but for older or larger exchanges, select 1TR6. If you are in the US, select NI1. Select your country in the relevant field. The corresponding country code then appears in the field next to it. Finally, provide your Area Code and the Dial Prefix if necessary. Start Mode defines how the ISDN interface should be started: At Boot Time causes the ISDN driver to be initialized each time the system boots. Manually requires you to load the ISDN driver as root with the command rcisdn start. On Hotplug, used for PCMCIA or USB devices, loads the driver after the device is plugged in. When finished with these settings, select OK. In the next dialog, specify the interface type for your ISDN card and add ISPs to an existing interface. Interfaces may be either the SyncPPP or the RawIP type, but most ISPs operate in the SyncPPP mode, which is described below.
340
Reference
The number to enter for My Phone Number depends on your particular setup: ISDN Card Directly Connected to Phone Outlet A standard ISDN line provides three phone numbers (called multiple subscriber numbers, or MSNs). If the subscriber asked for more, there may be up to 10. One of these MSNs must be entered here, but without your area code. If you enter the wrong number, your phone operator automatically falls back to the first MSN assigned to your ISDN line. ISDN Card Connected to a Private Branch Exchange Again, the configuration may vary depending on the equipment installed: 1. Smaller private branch exchanges (PBX) built for home purposes mostly use the Euro-ISDN (EDSS1) protocol for internal calls. These exchanges have an internal S0 bus and use internal numbers for the equipment connected to them. Use one of the internal numbers as your MSN. You should be able to use at least one of the exchange's MSNs that have been enabled for direct outward dialing. If this does not work, try a single zero. For further information, consult the documentation that came with your phone exchange.
Basic Networking
341
2.
Larger phone exchanges designed for businesses normally use the 1TR6 protocol for internal calls. Their MSN is called EAZ and usually corresponds to the direct-dial number. For the configuration under Linux, it should be sufficient to enter the last digit of the EAZ. As a last resort, try each of the digits from 1 to 9.
For the connection to be terminated just before the next charge unit is due, enable ChargeHUP. However, remember that may not work with every ISP. You can also enable channel bundling (multilink PPP) by selecting the corresponding option. Finally, you can enable SuSEfirewall2 for your link by selecting External Firewall Interface and Restart Firewall. To enable the normal user without administrator permissions to activate or deactivate the interface, select the User Controlled. Details opens a dialog in which to implement more complex connection schemes, which are not relevant for normal home users. Leave the Details dialog by selecting OK. In the next dialog, make IP address settings. If you have not been given a static IP by your provider, select Dynamic IP Address. Otherwise, use the fields provided to enter your host's local IP address and the remote IP address according to the specifications of your ISP. If the interface should be the default route to the Internet, select Default Route. Each host can only have one interface configured as the default route. Leave this dialog by selecting Next. The following dialog allows you to set your country and select an ISP. The ISPs included in the list are call-by-call providers only. If your ISP is not in the list, select New. This opens the Provider Parameters dialog in which to enter all the details for your ISP. When entering the phone number, do not include any blanks or commas among the digits. Finally, enter your login and the password as provided by the ISP. When finished, select Next. To use Dial on Demand on a stand-alone workstation, also specify the name server (DNS server). Most ISPs support dynamic DNS, which means the IP address of a name server is sent by the ISP each time you connect. For a single workstation, however, you still need to provide a placeholder address like 192.168.22.99. If your ISP does not support dynamic DNS, specify the name server IP addresses of the ISP. If desired, specify a time-out for the connectionthe period of network inactivity (in seconds) after which the connection should be automatically terminated. Confirm your settings with Next. YaST displays a summary of the configured interfaces. To make all these settings active, select Finish.
342
Reference
18.4.5 DSL
To configure your DSL device, select the DSL module from the YaST Network Devices section. This YaST module consists of several dialogs in which to set the parameters of DSL links based on one of the following protocols: PPP over Ethernet (PPPoE) PPP over ATM (PPPoATM) CAPI for ADSL (Fritz Cards) Point-to-Point Tunneling Protocol (PPTP)Austria The configuration of a DSL connection based on PPPoE or PPTP requires that the corresponding network card has already been set up in the correct way. If you have not done so yet, first configure the card by selecting Configure Network Cards (see Section 18.4.1, Configuring the Network Card with YaST (page 334)). In the case of a DSL link, addresses may be assigned automatically but not via DHCP, which is why you should not enable the option Automatic address setup (via DHCP). Instead, enter a static dummy address for the interface, such as 192.168.22.1. In Subnet Mask, enter 255.255.255.0. If you are configuring a stand-alone workstation, leave Default Gateway empty.
Basic Networking
343
TIP Values in IP Address and Subnet Mask are only placeholders. They are only needed to initialize the network card and do not represent the DSL link as such. Figure 18.7 DSL Configuration
To begin the DSL configuration (see Figure 18.7, DSL Configuration (page 344)), first select the PPP mode and the ethernet card to which the DSL modem is connected (in most cases, this is eth0). Then use Device Activation to specify whether the DSL link should be established during the boot process. Click User Controlled to authorize the normal user without root permissions to activate or deactivate the interface with KInternet. The dialog also lets you select your country and choose from a number of ISPs operating in it. The details of any subsequent dialogs of the DSL configuration depend on the options set so far, which is why they are only briefly mentioned in the following paragraphs. For details on the available options, read the detailed help available from the dialogs. To use Dial on Demand on a stand-alone workstation, also specify the name server (DNS server). Most ISPs support dynamic DNSthe IP address of a name server is sent by the ISP each time you connect. For a single workstation, however, provide a placeholder address like 192.168.22.99. If your ISP does not support dynamic DNS, enter the name server IP address provided by your ISP. 344 Reference
Idle Time-Out (seconds) defines a period of network inactivity after which to terminate the connection automatically. A reasonable time-out value is between 60 and 300 seconds. If Dial on Demand is disabled, it may be useful to set the time-out to zero to prevent automatic hang-up. The configuration of T-DSL is very similar to the DSL setup. Just select T-Online as your provider and YaST opens the T-DSL configuration dialog. In this dialog, provide some additional information required for T-DSLthe line ID, the T-Online number, the user code, and your password. All of these should be included in the information you received after subscribing to T-DSL.
Basic Networking
345
346
Reference
To disable any active network connection, choose Options Switch to Offline mode from the KNetworkManager menu. To reenable the connection, choose Options Switch to Online mode. To disable wireless network connections, choose Options Disable Wireless from the KNetworkManager menu. To reenable wireless connections, choose Options Enable Wireless. Enabling networking takes a few seconds.
Basic Networking
347
slot) or vpid-0x8086-0x1014-0x0549 (vendor and product ID). The name of the associated interface could be bus-pci-0000:02:01.0 or wlan-id-00:05:4e:42:31:7a (MAC address). To assign a certain network configuration to any card of a certain type (of which only one is inserted at a time) instead of a certain card, select less specific configuration names. For example, bus-pcmcia would be used for all PCMCIA cards. On the other hand, the names can be limited by a preceding interface type. For example, wlan-bus-usb would be assigned to WLAN cards connected to a USB port. The system always uses the configuration that best describes an interface or the device providing the interface. The search for the most suitable configuration is handled by getcfg. The output of getcfg delivers all information that can be used for describing a device. Details regarding the specification of configuration names are available in the manual page of getcfg. With the described method, a network interface is configured with the correct configuration even if the network devices are not always initialized in the same order. However, the name of the interface still depends on the initialization sequence. There are two ways to ensure reliable access to the interface of a certain network card: getcfg-interface configuration name returns the name of the associated network interface. Therefore, the configuration name, such as firewall, dhcpd, routing, or various virtual network interfaces (tunnels), can be entered in some configuration files instead of the interface name, which is not persistent. Persistent interface names are assigned to each interface automatically. You may adjust them to suit your needs. When creating interface names, proceed as outlined in /etc/udev/rules.d/30-net_persistent_names.rules. However, the persistent name pname should not be the same as the name that would automatically be assigned by the kernel. Therefore, eth*, tr*, wlan*, and so on are not permitted. Instead, use net* or descriptive names like external, internal, or dmz. Make sure that the same interface name is not used twice. Allowed characters in interface names are restricted to [a-zA-Z0-9]. A persistent name can only be assigned to an interface immediately after its registration, which means that the driver of the network card must be reloaded or hwup device description must be executed. The command rcnetwork restart is not sufficient for this purpose.
Basic Networking
349
IMPORTANT: Using Persistent Interface Names The use of persistent interface names has not been tested in all areas. Therefore, some applications may not be able to handle freely selected interface names. ifup requires an existing interface, because it does not initialize the hardware. The initialization of the hardware is handled by the command hwup (executed by hotplug or coldplug). When a device is initialized, ifup is automatically executed for the new interface via hotplug and the interface is set up if the start mode is onboot, hotplug, or auto and the network service was started. Formerly, the command ifup interfacename triggered the hardware initialization. Now the procedure has been reversed. First, a hardware component is initialized then all other actions follow. In this way, a varying number of devices can always be configured in the best way possible with an existing set of configurations. Table 18.5, Manual Network Configuration Scripts (page 350) summarizes the most important scripts involved in the network configuration. Where possible, the scripts are distinguished by hardware and interface. Table 18.5 Configuration Stage Hardware Manual Network Configuration Scripts Command Function
hw{up,down,status} The hw* scripts are executed by the hotplug subsystem to initialize a device, undo the initialization, or query the status of a device. More information is available in the manual page of hwup. getcfg getcfg can be used to query the interface name associated with a configuration name or a hardware description. More information is available in the manual page of getcfg.
Interface
Interface
if{up,down,status} The if* scripts start existing network interfaces or return the status of the
350
Reference
Configuration Stage
Command
Function
specified interface. More information is available in the manual page of ifup. More information about hotplug and persistent device names is available in Chapter 12, Dynamic Kernel Device Management with udev (page 251).
/etc/syconfig/hardware/hwcfg-*
These files contain the hardware configurations of network cards and other devices. They contain the needed parameters, such as the kernel module, start mode, and script associations. Refer to the manual page of hwup for details. Regardless of the existing hardware, the hwcfg-static-* configurations are applied when coldplug is started.
/etc/sysconfig/network/ifcfg-*
These files contain the configurations for network interface. They include information such as the start mode and the IP address. Possible parameters are described in the manual page of ifup. Additionally, all variables from the files dhcp, wireless, and config can be used in the ifcfg-* files if a general setting should be used for only one interface.
/etc/sysconfig/network/routes,ifroute-*
The static routing of TCP/IP packets is determined here. All the static routes required by the various system tasks can be entered in the /etc/sysconfig/network/ routes file: routes to a host, routes to a host via a gateway, and routes to a network. For each interface that needs individual routing, define an additional configuration file: /etc/sysconfig/network/ifroute-*. Replace * with the name of the interface. The entries in the routing configuration files look like this:
# Destination # 127.0.0.0 204.127.235.0 default 207.68.156.51 192.168.0.0 Dummy/Gateway 0.0.0.0 0.0.0.0 204.127.235.41 207.68.145.45 207.68.156.51 Netmask 255.255.255.0 255.255.255.0 0.0.0.0 255.255.255.255 255.255.0.0 Device lo eth0 eth0 eth1 eth1
The route's destination is in the first column. This column may contain the IP address of a network or host or, in the case of reachable name servers, the fully qualified network or hostname. The second column contains the default gateway or a gateway through which a host or network can be accessed. The third column contains the netmask for networks or hosts behind a gateway. For example, the mask is 255.255.255.255 for a host behind a gateway. The fourth column is only relevant for networks connected to the local host such as loopback, Ethernet, ISDN, PPP, and dummy device. The device name must be entered here. An (optional) fifth column can be used to specify the type of a route. Columns that are not needed should contain a minus sign - to ensure that the parser correctly interprets the command. For details, refer to the routes(5) man page.
/etc/resolv.conf
The domain to which the host belongs is specified in this file (keyword search). Also listed is the status of the name server address to access (keyword nameserver). Multiple domain names can be specified. When resolving a name that is not fully qualified, an attempt is made to generate one by attaching the individual search entries. Use multiple name servers by entering several lines, each beginning with nameserver.
352
Reference
Precede comments with # signs. YaST enters the specified name server in this file. Example 18.5, /etc/resolv.conf (page 353) shows what /etc/resolv.conf could look like. Example 18.5 /etc/resolv.conf
# Our domain search example.com # # We use sun (192.168.0.20) as nameserver nameserver 192.168.0.20
Some services, like pppd (wvdial), ipppd (isdn), dhcp (dhcpcd and dhclient), pcmcia, and hotplug, modify the file /etc/resolv.conf by means of the script modify_resolvconf. If the file /etc/resolv.conf has been temporarily modified by this script, it contains a predefined comment giving information about the service that modified it, the location where the original file has been backed up, and how to turn off the automatic modification mechanism. If /etc/ resolv.conf is modified several times, the file includes modifications in a nested form. These can be reverted in a clean way even if this reversal takes place in an order different from the order in which modifications were introduced. Services that may need this flexibility include isdn, pcmcia, and hotplug. If a service was not terminated in a normal, clean way, modify_resolvconf can be used to restore the original file. Also, on system boot, a check is performed to see whether there is an uncleaned, modified resolv.conf, for example, after a system crash, in which case the original (unmodified) resolv.conf is restored. YaST uses the command modify_resolvconf check to find out whether resolv .conf has been modified and subsequently warns the user that changes will be lost after restoring the file. Apart from this, YaST does not rely on modify_resolvconf, which means that the impact of changing resolv.conf through YaST is the same as that of any manual change. In both cases, changes have a permanent effect. Modifications requested by the mentioned services are only temporary.
/etc/hosts
In this file, shown in Example 18.6, /etc/hosts (page 354), IP addresses are assigned to hostnames. If no name server is implemented, all hosts to which an IP connection will be set up must be listed here. For each host, enter a line consisting of the IP address, the fully qualified hostname, and the hostname into the file. The IP address
Basic Networking
353
must be at the beginning of the line and the entries separated by blanks and tabs. Comments are always preceded by the # sign. Example 18.6 /etc/hosts
127.0.0.1 localhost 192.168.0.20 sun.example.com sun 192.168.0.0 earth.example.com earth
/etc/networks
Here, network names are converted to network addresses. The format is similar to that of the hosts file, except the network names precede the addresses. See Example 18.7, /etc/networks (page 354). Example 18.7 /etc/networks
loopback localnet 127.0.0.0 192.168.0.0
/etc/host.conf
Name resolutionthe translation of host and network names via the resolver libraryis controlled by this file. This file is only used for programs linked to libc4 or libc5. For current glibc programs, refer to the settings in /etc/nsswitch.conf. A parameter must always stand alone in its own line. Comments are preceded by a # sign. Table 18.6, Parameters for /etc/host.conf (page 354) shows the parameters available. A sample /etc/host.conf is shown in Example 18.8, /etc/host.conf (page 355). Table 18.6 Parameters for /etc/host.conf Specifies in which order the services are accessed for the name resolution. Available arguments are (separated by blank spaces or commas): hosts: Searches the /etc/hosts file bind: Accesses a name server nis: Uses NIS
354
Reference
multi on/off
Defines if a host entered in /etc/hosts can have multiple IP addresses. These parameters influence the name server spoofing, but, apart from that, do not exert any influence on the network configuration. The specified domain name is separated from the hostname after hostname resolution (as long as the hostname includes the domain name). This option is useful if only names from the local domain are in the /etc/hosts file, but should still be recognized with the attached domain names.
trim domainname
/etc/nsswitch.conf
The introduction of the GNU C Library 2.0 was accompanied by the introduction of the Name Service Switch (NSS). Refer to the nsswitch.conf(5) man page and The GNU C Library Reference Manual for details. The order for queries is defined in the file /etc/nsswitch.conf. A sample nsswitch.conf is shown in Example 18.9, /etc/nsswitch.conf (page 356). Comments are introduced by # signs. In this example, the entry under the hosts database means that a request is sent to /etc/hosts (files) via DNS (see Chapter 20, The Domain Name System (page 367)).
Basic Networking
355
The databases available over NSS are listed in Table 18.7, Databases Available via /etc/nsswitch.conf (page 356). In addition, automount, bootparams, netmasks, and publickey are expected in the near future. The configuration options for NSS databases are listed in Table 18.8, Configuration Options for NSS Databases (page 357). Table 18.7 aliases Databases Available via /etc/nsswitch.conf Mail aliases implemented by sendmail; see man 5 aliases. Ethernet addresses. For user groups, used by getgrent. See also the man page for group. For hostnames and IP addresses, used by gethostbyname and similar functions. Valid host and user lists in the network for the purpose of controlling access permissions; see the netgroup(5) man page. Network names and addresses, used by getnetent. User passwords, used by getpwent; see the passwd(5) man page.
ethers group
hosts
netgroup
networks passwd
356
Reference
protocols
Network protocols, used by getprotoent; see the protocols(5) man page. Remote procedure call names and addresses, used by getrpcbyname and similar functions. Network services, used by getservent. Shadow passwords of users, used by getspnam; see the shadow(5) man page.
rpc
services shadow
Configuration Options for NSS Databases directly access files, for example, /etc/aliases access via a database NIS, see also Chapter 21, Using NIS (page 391) can only be used as an extension for hosts and networks can only be used as an extension for passwd, shadow, and group
compat
/etc/nscd.conf
This file is used to configure nscd (name service cache daemon). See the nscd(8) and nscd.conf(5) man pages. By default, the system entries of passwd and groups are cached by nscd. This is important for the performance of directory services, like NIS and LDAP, because otherwise the network connection needs to be used for every access to names or groups. hosts is not cached by default, because the mechanism in nscd to cache hosts makes the local system unable to trust forward and reverse lookup checks. Instead of asking nscd to cache names, set up a caching DNS server. If the caching for passwd is activated, it usually takes about fifteen seconds until a newly added local user is recognized. Reduce this waiting time by restarting nscd with the command rcnscd restart. Basic Networking 357
/etc/HOSTNAME
This contains the hostname without the domain name attached. This file is read by several scripts while the machine is booting. It may only contain one line in which the hostname is set.
/etc/init.d/network This script handles the configuration of the network interfaces. The hardware must already have been initialized by /etc/init.d/coldplug (via hotplug). If the network service was not started, no network interfaces are implemented when they are inserted via hotplug. /etc/init.d/inetd Starts xinetd. xinetd can be used to make server services available on the system. For example, it can start vsftpd whenever an FTP connection is initiated.
/etc/init.d/portmap Starts the portmapper needed for the RPC server, such as an NFS server. /etc/init.d/ nfsserver /etc/init.d/ sendmail /etc/init.d/ypserv /etc/init.d/ypbind Starts the NFS server.
358
Reference
Basic Networking
359
host-range = min ip max ip The parameter host-range defines a network range. Hosts whose IP addresses are within this range are granted access to smpppd. All hosts not within this range are denied access. password = password By assigning a password, limit the clients to authorized hosts. As this is a plaintext password, you should not overrate the security it provides. If no password is assigned, all clients are permitted to access smpppd. slp-register = yes|no With this parameter, the smpppd service can be announced in the network via SLP. More information about smpppd is available in the smpppd(8) and smpppd.conf(5) man pages.
360
Reference
If smpppd is active, you can now try to access it, for example, with cinternet --verbose --interface-list. If you experience difficulties at this point, refer to the smpppd-c.conf(5) and cinternet(8) man pages.
Basic Networking
361
19
The service location protocol (SLP) was developed to simplify the configuration of networked clients within a local network. To configure a network client, including all required services, the administrator traditionally needs detailed knowledge of the servers available in the network. SLP makes the availability of selected services known to all clients in the local network. Applications that support SLP can use the information distributed and be configured automatically. SUSE Linux supports installation using installation sources provided with SLP and contains many system services with integrated support for SLP. YaST and Konqueror both have appropriate front-ends for SLP. You can use SLP to provide networked clients with central functions, such as an installation server, YOU server, file server, or print server on your SUSE Linux.
363
The most important line in this file is the service URL, which begins with service:. This contains the service type (scanner.sane) and the address under which the service is available on the server. $HOSTNAME is automatically replaced with the full hostname. The name of the TCP port on which the relevant service can be found follows, separated by a colon. Then enter the language in which the service should appear and the duration of registration in seconds. These should be separated from the service URL by commas. Set the value for the duration of registration between 0 and 65535. 0 prevents registration. 65535 removes all restrictions. The registration file also contains the two variables watch-tcp-port and description. watch-tcp-port links the SLP service announcement to whether the relevant service is active by having slpd check the status of the service. The second variable contains a more precise description of the service that is displayed in suitable browsers. Static Registration with /etc/slp.reg The only difference from the procedure with /etc/slp.reg.d is the grouping of all services within a central file. Dynamic Registration with slptool If a service should be registered for SLP from proprietary scripts, use the slptool command line front-end.
364
Reference
YaST SLP Browser YaST contains a separate SLP browser that lists all services in the local network announced by SLP in a tree diagram under Network Services SLP Browser. Konqueror When used as a network browser, Konqueror can display all SLP services available in the local network at slp:/. Click the icons in the main window to obtain more detailed information about the relevant service. If you use Konqueror with service:/, click the relevant icon once in the browser window to set up a connection with the selected service.
365
introductory HTML documents. Programmers who want to use the SLP functions should install the openslp-devel package to consult its supplied Programmers Guide.
366
Reference
20
DNS (domain name system) is needed to resolve the domain names and hostnames into IP addresses. In this way, the IP address 192.168.0.0 is assigned to the hostname earth, for example. Before setting up your own name server, read the general information about DNS in Section 18.3, Name Resolution (page 333). The following configuration examples refer to BIND.
367
(not expired) zone data. If the slave cannot obtain a new copy of the zone data, it stops responding for the zone. Forwarder Forwarders are DNS servers to which your DNS server should send queries it cannot answer. Record The record is information about name and IP address. Supported records and their syntax are described in BIND documentation. Some special records are: NS record An NS record tells name servers which machines are in charge of a given domain zone. MX record The MX (mail exchange) records describe the machines to contact for directing mail across the Internet. SOA record SOA (Start of Authority) record is the first record in a zone file. The SOA record is used when using DNS to synchronize data between multiple computers.
368
Reference
1 When starting the module for the first time, the Forwarder Settings dialog, shown in Figure 20.1, DNS Server Installation: Forwarder Settings (page 369), opens. In it, decide whether the PPP daemon should provide a list of forwarders on dialup via DSL or ISDN (PPP Daemon Sets Forwarders) or whether you want to supply your own list (Set Forwarders Manually). Figure 20.1 DNS Server Installation: Forwarder Settings
2 The DNS Zones dialog consists of several parts and is responsible for the management of zone files, described in Section 20.5, Zone Files (page 382). For a new zone, provide a name for it in Zone Name. To add a reverse zone, the name must end in .in-addr.arpa. Finally, select the Zone Type (master or slave). See Figure 20.2, DNS Server Installation: DNS Zones (page 370). Click Edit Zone to configure other settings of an existing zone. To remove a zone, click Delete Zone.
369
3 In the final dialog, you can open the ports for the DNS service in the firewall that is activated during the installation and decide whether DNS should be started. The expert configuration can also be accessed from this dialog. See Figure 20.3, DNS Server Installation: Finish Wizard (page 371).
370
Reference
371
Logging
To set what the DNS server should log and how, select Logging. Under Log Type, specify where the DNS server should write the log data. Use the systemwide log file /var/log/messages by selecting Log to System Log or specify a different file by selecting Log to File. In the latter case, additionally specify the maximum file size in megabytes and the number of log files to store. Further options are available under Additional Logging. Enabling Log All DNS Queries causes every query to be logged, in which case the log file could grow extremely large. For this reason, it is not a good idea to enable this option for other than debugging purposes. To log the data traffic during zone updates between DHCP and DNS server, enable Log Zone Updates. To log the data traffic during a zone transfer from master to slave, enable Log Zone Transfer. See Figure 20.4, DNS Server: Logging (page 372). Figure 20.4 DNS Server: Logging
372
Reference
373
Zone Editor (NS Records) This dialog allows you to define alternative name servers for the zones specified. Make sure that your own name server is included in the list. To add a record, enter its name under Name Server to Add then confirm with Add. See Figure 20.6, DNS Server: Zone Editor (NS Records) (page 374). Figure 20.6 DNS Server: Zone Editor (NS Records)
Zone Editor (MX Records) To add a mail server for the current zone to the existing list, enter the corresponding address and priority value. After doing so, confirm by selecting Add. See Figure 20.7, DNS Server: Zone Editor (MX Records) (page 375).
374
Reference
Zone Editor (SOA) This page allows you to create SOA (start of authority) records. For an explanation of the individual options, refer to Example 20.6, File /var/lib/named/world.zone (page 383).
375
Zone Editor (Records) This dialog manages name resolution. In Record Key, enter the hostname then select its type. A-Record represents the main entry. The value for this should be an IP address. CNAME is an alias. Use the types NS and MX for detailed or partial records that expand on the information provided in the NS Records and MX Records tabs. These three types resolve to an existing A record. PTR is for reverse zones. It is the opposite of an A record.
376
Reference
A simple example of this is included in the documentation in /usr/share/doc/ packages/bind/sample-config. TIP: Automatic Adaptation of the Name Server Information Depending on the type of Internet connection or the network connection, the name server information can automatically be adapted to the current conditions. To do this, set the variable MODIFY_NAMED_CONF_DYNAMICALLY in the file /etc/sysconfig/network/config to yes. However, do not set up any official domains until assigned one by the responsible institution. Even if you have your own domain and it is managed by the provider, you are better off not using it, because BIND would otherwise not forward requests for this domain. The Web server at the provider, for example, would not be accessible for this domain. To start the name server, enter the command rcnamed start as root. If done appears to the right in green, named, as the name server process is called, has been started successfully. Test the name server immediately on the local system with the host or dig programs, which should return localhost as the default server with the address 127.0.0.1. If this is not the case, /etc/resolv.conf probably contains an incorrect name server entry or the file does not exist at all. For the first test, enter host 127.0.0.1, which should always work. If you get an error message, use rcnamed status to see whether the server is actually running. If the name server does not start or behaves unexpectedly, you can usually find the cause in the log file /var/log/messages. To use the name server of the provider or one already running on your network as the forwarder, enter the corresponding IP address or addresses in the options section under forwarders. The addresses included in Example 20.1, Forwarding Options in named.conf (page 377) are just examples. Adjust these entries to your own setup. Example 20.1 Forwarding Options in named.conf
options { directory "/var/lib/named"; forwarders { 10.11.12.13; 10.11.12.14; }; listen-on { 127.0.0.1; 192.168.0.99; }; allow-query { 127/8; 192.168.0/24; }; notify no; };
377
The options entry is followed by entries for the zone, localhost, and 0.0.127.in-addr.arpa. The type hint entry under . should always be present. The corresponding files do not need to be modified and should work as they are. Also make sure that each entry is closed with a ; and that the curly braces are in the correct places. After changing the configuration file /etc/named.conf or the zone files, tell BIND to reread them with rcnamed reload. Achieve the same by stopping and restarting the name server with rcnamed restart. Stop the server at any time by entering rcnamed stop.
378
Reference
379
127.0.0.1 to permit requests from the local host. If you omit this entry entirely, all interfaces are used by default. listen-on-v6 port 53 {any; }; Tells BIND on which port it should listen for IPv6 client requests. The only alternative to any is none. As far as IPv6 is concerned, the server only accepts a wild card address. query-source address * port 53; This entry is necessary if a firewall is blocking outgoing DNS requests. This tells BIND to post requests externally from port 53 and not from any of the high ports above 1024. query-source-v6 address * port 53; Tells BIND which port to use for IPv6 queries. allow-query { 127.0.0.1; net; }; Defines the networks from which clients can post DNS requests. Replace net with address information like 192.168.1/24. The /24 at the end is an abbreviated expression for the netmask, in this case, 255.255.255.0. allow-transfer ! *;; Controls which hosts can request zone transfers. In the example, such requests are completely denied with ! *. Without this entry, zone transfers can be requested from anywhere without restrictions. statistics-interval 0; In the absence of this entry, BIND generates several lines of statistical information per hour in /var/log/messages. Set it to 0 to suppress these statistics completely or set an interval in minutes. cleaning-interval 720; This option defines at which time intervals BIND clears its cache. This triggers an entry in /var/log/messages each time it occurs. The time specification is in minutes. The default is 60 minutes. interface-interval 0; BIND regularly searches the network interfaces for new or nonexisting interfaces. If this value is set to 0, this is not done and BIND only listens at the interfaces detected at start-up. Otherwise, the interval can be defined in minutes. The default is sixty minutes. 380 Reference
notify no; no prevents other name servers from being informed when changes are made to the zone data or when the name server is restarted.
20.4.2 Logging
What, how, and where logging takes place can be extensively configured in BIND. Normally, the default settings should be sufficient. Example 20.3, Entry to Disable Logging (page 381) shows the simplest form of such an entry and completely suppresses any logging. Example 20.3 Entry to Disable Logging
logging { category default { null; }; };
After zone, specify the name of the domain to administer (my-domain.de) followed by in and a block of relevant options enclosed in curly braces, as shown in Example 20.4, Zone Entry for my-domain.de (page 381). To define a slave zone, switch the type to slave and specify a name server that administers this zone as master (which, in turn, may be a slave of another master), as shown in Example 20.5, Zone Entry for other-domain.de (page 381). Example 20.5 Zone Entry for other-domain.de
zone "other-domain.de" in { type slave; file "slave/other-domain.zone"; masters { 10.0.0.1; }; };
381
type master; By specifying master, tell BIND that the zone is handled by the local name server. This assumes that a zone file has been created in the correct format. type slave; This zone is transferred from another name server. It must be used together with masters. type hint; The zone . of the hint type is used to set the root name servers. This zone definition can be left as is. file my-domain.zone or file slave/other-domain.zone; This entry specifies the file where zone data for the domain is located. This file is not required for a slave, because this data is fetched from another name server. To differentiate master and slave files, use the directory slave for the slave files. masters { server-ip-address; }; This entry is only needed for slave zones. It specifies from which name server the zone file should be transferred. allow-update {! *; }; This option controls external write access, which would allow clients to make a DNS entrysomething not normally desirable for security reasons. Without this entry, zone updates are not allowed at all. The above entry achieves the same because ! * effectively bans any such activity.
382
Reference
again. A missing or wrongly placed dot is probably the most frequent cause of name server configuration errors. The first case to consider is the zone file world.zone, responsible for the domain world.cosmos, shown in Example 20.6, File /var/lib/named/world.zone (page 383). Example 20.6 File /var/lib/named/world.zone
$TTL 2D world.cosmos. IN SOA 2003072441 1D 2H 1W 2D ) IN NS IN MX gateway sun moon earth mars www IN IN IN IN IN IN IN A A A A A A CNAME gateway serial refresh retry expiry minimum root.world.cosmos. (
; ; ; ; ;
Line 1: $TTL defines the default time to live that should apply to all the entries in this file. In this example, entries are valid for a period of two days (2 D). Line 2: This is where the SOA (start of authority) control record begins: The name of the domain to administer is world.cosmos in the first position. This ends with a ., because otherwise the zone would be appended a second time. Alternatively, @ can be entered here, in which case the zone would be extracted from the corresponding entry in /etc/named.conf. After IN SOA is the name of the name server in charge as master for this zone. The name is expanded from gateway to gateway.world.cosmos, because it does not end with a .. An e-mail address of the person in charge of this name server follows. Because the @ sign already has a special meaning, . is entered here instead. For
383
[email protected] the entry must read root.world.cosmos.. The . must be included at the end to prevent the zone from being added. The ( includes all lines up to ) into the SOA record. Line 3: The serial number is an arbitrary number that is increased each time this file is changed. It is needed to inform the secondary name servers (slave servers) of changes. For this, a 10 digit number of the date and run number, written as YYYYMMDDNN, has become the customary format. Line 4: The refresh rate specifies the time interval at which the secondary name servers verify the zone serial number. In this case, one day. Line 5: The retry rate specifies the time interval at which a secondary name server, in case of error, attempts to contact the primary server again. Here, two hours. Line 6: The expiration time specifies the time frame after which a secondary name server discards the cached data if it has not regained contact to the primary server. Here, it is a week. Line 7: The last entry in the SOA record specifies the negative caching TTLthe time for which results of unresolved DNS queries from other servers may be cached. Line 9: The IN NS specifies the name server responsible for this domain. gateway is extended to gateway.world.cosmos because it does not end with a .. There can be several lines like thisone for the primary and one for each secondary name server. If notify is not set to no in /etc/named.conf, all the name servers listed here are informed of the changes made to the zone data. Line 10: The MX record specifies the mail server that accepts, processes, and forwards emails for the domain world.cosmos. In this example, this is the host sun.world.cosmos. The number in front of the hostname is the preference value. If there are multiple MX entries, the mail server with the smallest value is
384
Reference
taken first and, if mail delivery to this server fails, an attempt is made with the next higher value. Lines 1217: These are the actual address records where one or more IP addresses are assigned to hostnames. The names are listed here without a . because they do not include their domain, so world.cosmos is added to all of them. Two IP addresses are assigned to the host gateway, because it has two network cards. Wherever the host address is a traditional one (IPv4), the record is marked with A. If the address is an IPv6 address, the entry is marked with A6. The previous token for IPv6 addresses was AAAA, which is now obsolete. NOTE: A6 Syntax The A6 record has a slightly different syntax than AAAA. Because of the fragmentation possibility, it is necessary to provide information about missed bits before the address. You must provide this information even if you want to use a completely unfragmented address. For the old AAAA record with the syntax
pluto IN pluto IN AAAA 2345:00C1:CA11:0001:1234:5678:9ABC:DEF0 AAAA 2345:00D2:DA11:0001:1234:5678:9ABC:DEF0
You need to add information about missing bits in A6 format. Because the example above is complete (does not miss any bits), the A6 format of this record is:
pluto IN pluto IN AAAA 0 2345:00C1:CA11:0001:1234:5678:9ABC:DEF0 AAAA 0 2345:00D2:DA11:0001:1234:5678:9ABC:DEF0
Do not use IPv4 addreses with IPv6 mapping. If a host has an IPv4 address, it uses an A record, not an A6. Line 18: The alias www can be used to address mond (CNAME means canonical name). The pseudodomain in-addr.arpa is used for the reverse lookup of IP addresses into hostnames. It is appended to the network part of the address in reverse notation. So 192.168.1 is resolved into 1.168.192.in-addr.arpa. See Example 20.7, Reverse Lookup (page 386).
385
$TTL 2D 1.168.192.in-addr.arpa. IN SOA gateway.world.cosmos. root.world.cosmos. ( 2003072441 ; serial 1D ; refresh 2H ; retry 1W ; expiry 2D ) ; minimum IN NS 1 2 3 IN PTR IN PTR IN PTR gateway.world.cosmos. gateway.world.cosmos. earth.world.cosmos. mars.world.cosmos.
Line 1: $TTL defines the standard TTL that applies to all entries here. Line 2: The configuration file should activate reverse lookup for the network 192.168.1.0. Given that the zone is called 1.168.192.in-addr.arpa, should not be added to the hostnames. Therefore, all hostnames are entered in their complete formwith their domain and with a . at the end. The remaining entries correspond to those described for the previous world.cosmos example. Lines 37: See the previous example for world.cosmos. Line 9: Again this line specifies the name server responsible for this zone. This time, however, the name is entered in its complete form with the domain and a . at the end. Lines 1113: These are the pointer records hinting at the IP addresses on the respective hosts. Only the last part of the IP address is entered at the beginning of the line, without the . at the end. Appending the zone to this (without the .in-addr.arpa) results in the complete IP address in reverse order. Normally, zone transfers between different versions of BIND should be possible without any problem.
386
Reference
The key itself (a string like ejIkuCyyGJwwuN3xAteKgg==) is found in both files. To use it for transactions, the second file (Khost1-host2.+157+34265.key) must be transferred to the remote host, preferably in a secure way (using scp, for example). On the remote server, the key must be included in the file /etc/named.conf to enable a secure communication between host1 and host2:
key host1-host2. { algorithm hmac-md5;
387
secret ";ejIkuCyyGJwwuN3xAteKgg==; };
WARNING: File Permissions of /etc/named.conf Make sure that the permissions of /etc/named.conf are properly restricted. The default for this file is 0640, with the owner being root and the group named. As an alternative, move the keys to an extra file with specially limited permissions, which is then included from /etc/named.conf. To enable the server host1 to use the key for host2 (which has the address 192.168.2.3 in this example), the server's /etc/named.conf must include the following rule:
server 192.168.2.3 { keys { host1-host2. ;}; };
Analogous entries must be included in the configuration files of host2. Add TSIG keys for any ACLs (access control lists, not to be confused with file system ACLs) that are defined for IP addresses and address ranges to enable transaction security. The corresponding entry could look like this:
allow-update { key host1-host2. ;};
This topic is discussed in more detail in the BIND Administrator Reference Manual under update-policy.
388
Reference
With the command dnssec-makekeyset, all keys generated are packaged into one set, which must then be transferred to the parent zone in a secure manner. On the parent, the set is signed with dnssec-signkey. The files generated by this command are then used to sign the zones with dnssec-signzone, which in turn generates the files to include for each zone in /etc/named.conf.
389
Using NIS
21
As soon as multiple UNIX systems in a network want to access common resources, it becomes important that all user and group identities are the same for all machines in that network. The network should be transparent to users: whatever machines they use, they always find themselves in exactly the same environment. This is made possible by means of NIS and NFS services. NFS distributes file systems over a network and is discussed in Chapter 22, Sharing File Systems with NFS (page 399). NIS (Network Information Service) can be described as a database-like service that provides access to the contents of /etc/passwd, /etc/shadow, and /etc/group across networks. NIS can also be used for other purposes (making the contents of files like /etc/hosts or /etc/services available, for example), but this is beyond the scope of this introduction. People often refer to NIS as YP, because it works like the network's yellow pages.
Using NIS
391
If your NIS master server should export its data to slave servers in other subnets, set up the master server as described in Section 21.1.1, Configuring a NIS Master Server (page 392) and set up slave servers in the subnets as described in Section 21.1.2, Configuring a NIS Slave Server (page 396).
392
Reference
3 Determine basic NIS setup options: a Enter the NIS domain name. b Define whether the host should also be a NIS client, enabling users to log in and access data from the NIS server, by selecting This host is also a NIS client. Select Changing of passwords to allow users in your network (both local users and those managed through the NIS server) to change their passwords on the NIS server (with the command yppasswd). This makes the options Allow Changes to GECOS Field and Allow Changes to Login Shell available. GECOS means that the users can also change their names and address settings with the command ypchfn. SHELL allows users to change their default shell with the command ypchsh, for example, to switch from bash to sh. The new shell must be one of the predefined entries in /etc/shells. c If your NIS server should act as a master server to NIS slave servers in other subnets, select Active Slave NIS Server exists. d Select Open Ports in Firewall to have YaST adapt the firewall settings for the NIS server. Figure 21.2 Master Server Setup
Using NIS
393
e Leave this dialog with Next or click Other global settings to make additional settings. Other global settings include changing the source directory of the NIS server (/etc by default). In addition, passwords can be merged here. The setting should be Yes so the files (/etc/passwd, /etc/shadow, and /etc/group) are used to build the user database. Also determine the smallest user and group ID that should be offered by NIS. Click OK to confirm your settings and return to the previous screen. Figure 21.3 Changing the Directory and Synchronizing Files for a NIS Server
4 If you previously enabled Active Slave NIS Server Exists, enter the hostnames used as slaves and click Next. 5 If you do not use slave servers, the slave configuration is skipped and you continue directly to the dialog for the database configuration. Here, specify the maps, the partial databases to transfer from the NIS server to the client. The default settings are usually adequate. Leave this dialog with Next. 6 Check which maps should be available and click Next to continue.
394
Reference
7 Enter the hosts that are allowed to query the NIS server. You can add, edit, or delete hosts by clicking the appropriate button. Specify from which networks requests can be sent to the NIS server. Normally, this is your internal network. In this case, there should be the following two entries:
255.0.0.0 0.0.0.0 127.0.0.0 0.0.0.0
The first entry enables connections from your own host, which is the NIS server. The second one allows all hosts to send requests to the server.
Using NIS
395
396
Reference
c Set This host is also a NIS client if you want to enable user logins on this server. d Adapt the firewall settings with Open Ports in Firewall. e Click Next. 4 Enter the hosts that are allowed to query the NIS server. You can add, edit, or delete hosts by clicking the appropriate button. Specify from which networks requests can be sent to the NIS server. Normally, this is all hosts. In this case, there should be the following two entries:
255.0.0.0 0.0.0.0 127.0.0.0 0.0.0.0
The first entry enables connections from your own host, which is the NIS server. The second one allows all hosts with access to the same network to send requests to the server. 5 Click Finish to save changes and exit the setup.
Using NIS
397
In the expert settings, disable Answer Remote Hosts if you do not want other hosts to be able to query which server your client is using. By checking Broken Server, the client is enabled to receive replies from a server communicating through an unprivileged port. For further information, see man ypbind. After you have made your settings, click Finish to save them and return to the YaST control center. Figure 21.6 Setting Domain and Address of a NIS Server
398
Reference
22
399
If user directories from the machine sun, for example, should be imported, use the following command:
mount sun:/home /home
400
Reference
Next, activate Start NFS Server and click Next. In the upper text field, enter the directories to export. Below, enter the hosts that should have access to them. This dialog is shown in Figure 22.3, Configuring an NFS Server with YaST (page 402). There are four options that can be set for each host: single host, netgroups, wildcards, and IP networks. A more thorough explanation of these options is provided by man exports. Exit completes the configuration.
401
IMPORTANT: Automatic Firewall Configuration If a firewall is active on your system (SuSEfirewall2), YaST adapts its configuration for the NFS server by enabling the nfs service when Open Ports in Firewall is selected.
402
Reference
For these services to be started by the scripts /etc/init.d/portmap and /etc/init.d/nfsserver when the system is booted, enter the commands insserv /etc/init.d/nfsserver and insserv /etc/init.d/portmap. Also define which file systems should be exported to which host in the configuration file /etc/exports. For each directory to export, one line is needed to set which machines may access that directory with what permissions. All subdirectories of this directory are automatically exported as well. Authorized machines are usually specified with their full names (including domain name), but it is possible to use wild cards like * or ? (which expand the same way as in the Bash shell). If no machine is specified here, any machine is allowed to import this file system with the given permissions. Set permissions for the file system to export in brackets after the machine name. The most important options are shown in Table 22.1, Permissions for Exported File System (page 403). Table 22.1 option ro Permissions for Exported File System meaning The file system is exported with read-only permission (default). The file system is exported with read-write permission. This ensures that the user root of an importing machine does not have root permissions on this file system. This is achieved by assigning user ID 65534 to users with user ID 0 (root). This user ID should be set to nobody (which is the default). Does not assign user ID 0 to user ID 65534, keeping the root permissions valid. Converts absolute links (those beginning with /) to a sequence of ../. This is only useful if the entire file system of a machine is mounted (default).
rw root_squash
no_root_squash
link_relative
403
meaning Symbolic links remain untouched. User IDs are exactly the same on both client and server (default). Client and server do not have matching user IDs. This tells nfsd to create a conversion table for user IDs. The ugidd daemon is required for this to work.
map_daemon
Your exports file might look like Example 22.1, /etc/exports (page 404). /etc/ exports is read by mountd and nfsd. If you change anything in this file, restart mountd and nfsd for your changes to take effect. This can easily be done with rcnfsserver restart. Example 22.1 /etc/exports
# # /etc/exports # /home /usr/X11 /usr/lib/texmf / /home/ftp # End of exports
404
Reference
DHCP
23
The purpose of the dynamic host configuration protocol (DHCP) is to assign network settings centrally from a server rather than configuring them locally on each and every workstation. A host configured to use DHCP does not have control over its own static address. It is enabled to configure itself completely and automatically according to directions from the server. If you use the NetworkManager on the client side, you do not need to configure the client at all. This is useful if you have changing environments and only one interface active at a time. Never use NetworkManager on a machine that runs a DHCP server. One way to configure a DHCP server is to identify each client using the hardware address of its network card (which is fixed in most cases), then supply that client with identical settings each time it connects to the server. DHCP can also be configured to assign addresses to each interested client dynamically from an address pool set up for that purpose. In the latter case, the DHCP server tries to assign the same address to the client each time it receives a request, even over longer periods. This works only if the network does not have more clients than addresses. DHCP makes life easier for system administrators. Any changes, even bigger ones, related to addresses and the network configuration in general can be implemented centrally by editing the server's configuration file. This is much more convenient than reconfiguring numerous workstations. Also it is much easier to integrate machines, particularly new machines, into the network, because they can be given an IP address from the pool. Retrieving the appropriate network settings from a DHCP server is especially useful in the case of laptops regularly used in different networks.
DHCP
405
A DHCP server supplies not only the IP address and the netmask, but also the hostname, domain name, gateway, and name server addresses for the client to use. In addition to that, DHCP allows a number of other parameters to be configured in a centralized way, for example, a time server from which clients may poll the current time or even a print server.
406
Reference
Global Settings In the entry fields, provide the network specifics for all clients the DHCP server should manage. These specifics are the domain name, address of a time server, addresses of the primary and secondary name server, addresses of a print and a WINS server (for a mixed network with both Windows and Linux clients), gateway address, and lease time. See Figure 23.2, DHCP Server: Global Settings (page 408).
DHCP
407
Dynamic DHCP In this step, configure how dynamic IP addresses should be assigned to clients. To do so, specify an IP range from which the server can assign addresses to DHCP clients. All these addresses must be covered by the same netmask. Also specify the lease time during which a client may keep its IP address without needing to request an extension of the lease. Optionally, specify the maximum lease timethe period during which the server reserves an IP address for a particular client. See Figure 23.3, DHCP Server: Dynamic DHCP (page 409).
408
Reference
Finishing the Configuration and Setting the Start Mode After the third part of the configuration wizard, a last dialog is shown in which you can define how the DHCP server should be started. Here, specify whether to start the DHCP server automatically when the system is booted or manually when needed (for example, for test purposes). Click Finish to complete the configuration of the server. See Figure 23.4, DHCP Server: Start-Up (page 410).
DHCP
409
410
Reference
domain-name "cosmos.all"; domain-name-servers 192.168.1.1, 192.168.1.2; broadcast-address 192.168.1.255; routers 192.168.1.254; subnet-mask 255.255.255.0;
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.20; range 192.168.1.100 192.168.1.200; }
This simple configuration file should be sufficient to get the DHCP server to assign IP addresses in the network. Make sure that a semicolon is inserted at the end of each line, because otherwise dhcpd is not started. The sample file can be divided into three sections. The first one defines how many seconds an IP address is leased to a requesting client by default (default-lease-time) before it should apply for renewal. The section also includes a statement of the maximum period for which a machine may keep an IP address assigned by the DHCP server without applying for renewal (max-lease-time). In the second part, some basic network parameters are defined on a global level: The line option domain-name defines the default domain of your network. With the entry option domain-name-servers, specify up to three values for the DNS servers used to resolve IP addresses into hostnames and vice versa. Ideally, configure a name server on your machine or somewhere else in your network before setting up DHCP. That name server should also define a hostname for each DHCP 411
dynamic address and vice versa. To learn how to configure your own name server, read Chapter 20, The Domain Name System (page 367). The line option broadcast-address defines the broadcast address the requesting client should use. With option routers, set where the server should send data packets that cannot be delivered to a host on the local network (according to the source and target host address and the subnet mask provided). In most cases, especially in smaller networks, this router is identical to the Internet gateway. With option subnet-mask, specify the netmask assigned to clients. The last section of the file defines a network, including a subnet mask. To finish, specify the address range that the DHCP daemon should use to assign IP addresses to interested clients. In Example 23.1, The Configuration File /etc/dhcpd.conf (page 411), clients may be given any address between 192.168.1.10 and 192.168.1.20 as well as 192.168.1.100 and 192.168.1.200. After editing these few lines, you should be able to activate the DHCP daemon with the command rcdhcpd start. It will be ready for use immediately. Use the command rcdhcpd check-syntax to perform a brief syntax check. If you encounter any unexpected problems with your configurationthe server aborts with an error or does not return done on startyou should be able to find out what has gone wrong by looking for information either in the main system log /var/log/messages or on console 10 ( Ctrl + Alt + F10 ). On a default SUSE Linux system, the DHCP daemon is started in a chroot environment for security reasons. The configuration files must be copied to the chroot environment so the daemon can find them. Normally, there is no need to worry about this because the command rcdhcpd start automatically copies the files.
412
Reference
To identify a client configured with a static address, dhcpd uses the hardware address, which is a globally unique, fixed numerical code consisting of six octet pairs for the identification of all network devices (for example, 00:00:45:12:EE:F4). If the respective lines, like the ones in Example 23.2, Additions to the Configuration File (page 413), are added to the configuration file of Example 23.1, The Configuration File /etc/dhcpd.conf (page 411), the DHCP daemon always assigns the same set of data to the corresponding client. Example 23.2 Additions to the Configuration File
host earth { hardware ethernet 00:00:45:12:EE:F4; fixed-address 192.168.1.21; }
The name of the respective client (host hostname, here earth) is entered in the first line and the MAC address in the second line. On Linux hosts, find the MAC address with the command ip link show followed by the network device (for example, eth0). The output should contain something like
link/ether 00:00:45:12:EE:F4
In the preceding example, a client with a network card having the MAC address 00:00:45:12:EE:F4 is assigned the IP address 192.168.1.21 and the hostname earth automatically. The type of hardware to enter is ethernet in nearly all cases, although token-ring, which is often found on IBM systems, is also supported.
DHCP
413
/etc/localtime /etc/host.conf /etc/hosts /etc/resolv.conf These files are copied to /var/lib/dhcp/etc/ when starting the init script. Take these copies into account for any changes that they require if they are dynamically modified by scripts like /etc/ppp/ip-up. However, there should be no need to worry about this if the configuration file only specifies IP addresses (instead of hostnames). If your configuration includes additional files that should be copied into the chroot environment, set these under the variable DHCPD_CONF_INCLUDE_FILES in the file /etc/sysconfig/dhcpd. To ensure that the DHCP logging facility keeps working even after a restart of the syslog-ng daemon, there is an additional entry SYSLOGD_ADDITIONAL_SOCKET_DHCP in the file /etc/sysconfig/syslog.
414
Reference
24
The NTP (network time protocol) mechanism is a protocol for synchronizing the system time over the network. First, a machine can obtain the time from a server that is a reliable time source. Second, a machine can itself act as a time source for other computers in the network. The goal is twofoldmaintaining the absolute time and synchronizing the system time of all machines within a network. Maintaining an exact system time is important in many situations. The built-in hardware (BIOS) clock does often not meet the requirements of applications like databases. Manual correction of the system time would lead to severe problems because, for example, a backward leap can cause malfunction of critical applications. Within a network, it is usually necessary to synchronize the system time of all machines, but manual time adjustment is a bad approach. xntp provides an mechanism to solve these problems. It continuously adjusts the system time with the help of reliable time servers in the network. It further enables the management of local reference clocks, such as radio-controlled clocks.
415
In the detailed server selection dialog, determine whether to implement time synchronization using a time server from your local network (Local NTP Server) or an Internetbased time server that takes care of your time zone (Public NTP Server). For a local time server, click Lookup to start an SLP query for available time servers in your network. Select the most suitable time server from the list of search results and exit the dialog with OK. For a public time server, select your country (time zone) and a suitable server from the list under Public NTP Server then exit the dialog with OK. In the main dialog, test the availability of the selected server with Test and quit the dialog with Finish.
416
Reference
In Complex NTP Client Configuration, determine whether xntpd should be started in a chroot jail. This increases the security in the event of an attack over xntpd, because it prevents the attacker from compromising the entire system. Configure NTP Daemon via DHCP sets up the NTP client to get a list of the NTP servers available in your network via DHCP. The servers and other time sources for the client to query are listed in the lower part. Modify this list as needed with Add, Edit, and Delete. Display Log provides the possibility to view the log files of your client. Click Add to add a new source of time information. In the following dialog, select the type of source with which the time synchronization should be made. The following options are available:
417
Server Another dialog enables you to select an NTP server (as described in Section 24.1.1, Quick NTP Client Configuration (page 416)). Activate Use for Initial Synchronization to trigger the synchronization of the time information between the server and the client when the system is booted. An input field allows you to specify additional options for xntpd. Refer to /usr/share/doc/packages/xntp-doc (part of the xntp-doc package) for detailed information. Peer A peer is a machine to which a symmetric relationship is established: it acts both as a time server and as a client. To use a peer in the same network instead of a server, enter the address of the system. The rest of the dialog is identical to the Server dialog. Radio Clock To use a radio clock in your system for the time synchronization, enter the clock type, unit number, device name, and other options in this dialog. Click Driver Calibration to fine-tune the driver. Detailed information about the operation of a local radio clock is available in /usr/share/doc/packages/xntp-doc/ html/refclock.htm. Outgoing Broadcast Time information and queries can also be transmitted by broadcast in the network. In this dialog, enter the address to which such broadcasts should be sent. Do not activate broadcasting unless you have a reliable time source like a radio controlled clock. Incoming Broadcast If you want your client to receive its information via broadcast, enter the address from which the respective packets should be accepted in this fields.
418
Reference
about one hour until the time is stabilized and the drift file for correcting the local computer clock is created. With the drift file, the systematic error of the hardware clock can be computed as soon as the computer is powered on. The correction is used immediately, resulting in a higher stability of the system time. There are two possible ways to use the NTP mechanism as a client: First, the client can query the time from a known server in regular intervals. With many clients, this approach can cause a high load on the server. Second, the client can wait for NTP broadcasts sent out by broadcast time servers in the network. This approach has the disadvantage that the quality of the server is unknown and a server sending out wrong information can cause severe problems. If the time is obtained via broadcast, you do not need the server name. In this case, enter the line broadcastclient in the configuration file /etc/ntp.conf. To use one or more known time servers exclusively, enter their names in the line starting with servers.
419
Other clocks follow the same pattern. Following the installation of the xntp-doc package, the documentation for xntp is available in the directory /usr/share/doc/ packages/xntp-doc/html. The file /usr/share/doc/packages/ xntp-doc/html/refclock.htm provides links to the driver pages describing the driver parameters.
420
Reference
25
The Lightweight Directory Access Protocol (LDAP) is a set of protocols designed to access and maintain information directories. LDAP can be used for numerous purposes, like user and group management, system configuration management, or address management. This chapter provides a basic understanding of how OpenLDAP works and how to manage LDAP data with YaST. While there are several implementations of the LDAP protocol, this chapter focuses entirely on the OpenLDAP implementation. It is crucial within a networked environment to keep important information structured and quickly available. This can be done with a directory service that, like the common yellow pages, keeps information available in a well-structured, quickly searchable form. In the ideal case, a central server keeps the data in a directory and distributes it to all clients using a certain protocol. The data is structured in a way that allows a wide range of applications to access it. That way, it is not necessary for every single calendar tool and e-mail client to keep its own databasea central repository can be accessed instead. This notably reduces the administration effort for the information. The use of an open and standardized protocol like LDAP ensures that as many different client applications as possible can access such information. A directory in this context is a type of database optimized for quick and effective reading and searching: To make numerous (concurrent) reading accesses possible, write access is limited to a small number of updates by the administrator. Conventional databases are optimized for accepting the largest possible data volume in a short time.
421
Because write accesses can only be executed in a restricted fashion, a directory service is employed for administering mostly unchanging, static information. Data in a conventional database typically changes very often (dynamic data). Phone numbers in a company directory do not change nearly as often as, for example, the figures administered in accounting. When static data is administered, updates of the existing data sets are very rare. When working with dynamic data, especially when data sets like bank accounts or accounting are concerned, the consistency of the data is of primary importance. If an amount should be subtracted from one place to be added to another, both operations must happen concurrently, within a transaction, to ensure balance over the data stock. Databases support such transactions. Directories do not. Short-term inconsistencies of the data are quite acceptable in directories. The design of a directory service like LDAP is not laid out to support complex update or query mechanisms. All applications accessing this service should gain access quickly and easily. Many directory services have previously existed and still exist both in Unix and outside it. Novell NDS, Microsoft ADS, Banyan's Street Talk, and the OSI standard X.500 are just a few examples. LDAP was originally planned as a lean flavor of DAP, the directory access protocol, which was developed for accessing X.500. The X.500 standard regulates the hierarchical organization of directory entries. LDAP is a trimmed down version of DAP. Without losing the X.500 entry hierarchy, profit from LDAP's cross-platform capabilities and save resources. The use of TCP/IP makes it substantially easier to establish interfaces between a docking application and the LDAP service. LDAP, meanwhile, has evolved and is increasingly employed as a stand-alone solution without X.500 support. LDAP supports referrals with LDAPv3 (the protocol version in package openldap2), making it possible to have distributed databases. The usage of SASL (simple authentication and security layer) is also new. LDAP is not limited to querying data from X.500 servers, as it was originally planned. There is an open source server slapd, which can store object information in a local database. There is also an extension called slurpd, which is responsible for replicating multiple LDAP servers. The openldap2 package consists of:
422
Reference
slapd A stand-alone LDAPv3 server that administers object information in a BerkeleyDBbased database. slurpd This program enables the replication of modifications to data on the local LDAP server to other LDAP servers installed on the network. additional tools for system maintenance slapcat, slapadd, slapindex
423
This list can be extended because LDAP is extensible, unlike NIS. The clearly-defined hierarchical structure of the data eases the administration of large amounts of data, because it can be searched better.
424
Reference
The complete diagram comprises a fictional directory information tree. The entries on three levels are depicted. Each entry corresponds to one box in the picture. The complete, valid distinguished name for the fictional SUSE employee Geeko Linux, in this case, is cn=Geeko Linux,ou=doc,dc=suse,dc=de. It is composed by adding the RDN cn=Geeko Linux to the DN of the preceding entry ou=doc,dc=suse,dc=de. The global determination of which types of objects should be stored in the DIT is done following a scheme. The type of an object is determined by the object class. The object class determines what attributes the concerned object must or can be assigned. A scheme, therefore, must contain definitions of all object classes and attributes used in the desired application scenario. There are a few common schemes (see RFC 2252 and 2256). It is, however, possible to create custom schemes or to use multiple schemes complementing each other if this is required by the environment in which the LDAP server should operate. Table 25.1, Commonly Used Object Classes and Attributes (page 426) offers a small overview of the object classes from core.schema and inetorgperson.schema used in the example, including required attributes and valid attribute values.
425
Table 25.1
Commonly Used Object Classes and Attributes Meaning Example En- Compulsory try Attributes suse dc
Object Class
dcObject
organizationalUnit inetOrgPerson
doc
ou
sn and cn
Example 25.1, Excerpt from schema.core (page 426) shows an excerpt from a scheme directive with explanations (line numbering for explanatory reasons). Example 25.1 Excerpt from schema.core
#1 attributetype (2.5.4.11 NAME ( 'ou' 'organizationalUnitName') #2 DESC 'RFC2256: organizational unit this object belongs to' #3 SUP name ) ... #4 objectclass ( 2.5.6.5 NAME 'organizationalUnit' #5 DESC 'RFC2256: an organizational unit' #6 SUP top STRUCTURAL #7 MUST ou #8 MAY (userPassword $ searchGuide $ seeAlso $ businessCategory $ x121Address $ registeredAddress $ destinationIndicator $ preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ postalAddress $ physicalDeliveryOfficeName $ st $ l $ description) ) ...
The attribute type organizationalUnitName and the corresponding object class organizationalUnit serve as an example here. Line 1 features the name of the attribute, its unique OID (object identifier) (numerical), and the abbreviation of the attribute.
426
Reference
Line 2 gives brief description of the attribute with DESC. The corresponding RFC on which the definition is based is also mentioned here. SUP in line 3 indicates a superordinate attribute type to which this attribute belongs. The definition of the object class organizationalUnit begins in line 4, like in the definition of the attribute, with an OID and the name of the object class. Line 5 features a brief description of the object class. Line 6, with its entry SUP top, indicates that this object class is not subordinate to another object class. Line 7, starting with MUST, lists all attribute types that must be used in conjunction with an object of the type organizationalUnit. Line 8, starting with MAY, lists all attribute types that are permitted in conjunction with this object class. A very good introduction to the use of schemes can be found in the documentation of OpenLDAP. When installed, find it in /usr/share/doc/packages/openldap2/ admin-guide/index.html.
This first directive in slapd.conf, shown in Example 25.2, slapd.conf: Include Directive for Schemes (page 427), specifies the scheme by which the LDAP directory is organized. The entry core.schema is compulsory. Additionally required schemes
427
are appended to this directive. Information can be found in the included OpenLDAP documentation. Example 25.3 slapd.conf: pidfile and argsfile
pidfile /var/run/slapd/slapd.pid argsfile /var/run/slapd/slapd.args
These two files contain the PID (process ID) and some of the arguments with which the slapd process is started. There is no need for modifications here. Example 25.4 slapd.conf: Access Control
# Sample Access Control # Allow read access of root DSE # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # access to dn="" by * read access to * by self write by users read by anonymous auth # # if no access controls are present, the default is: # Allow read by all # # rootdn can always write!
Example 25.4, slapd.conf: Access Control (page 428) is the excerpt from slapd .conf that regulates the access permissions for the LDAP directory on the server. The settings made here in the global section of slapd.conf are valid as long as no custom access rules are declared in the database-specific section. These would overwrite the global declarations. As presented here, all users have read access to the directory, but only the administrator (rootdn) can write to this directory. Access control regulation in LDAP is a highly complex process. The following tips can help: Every access rule has the following structure:
access to <what> by <who> <access>
what is a placeholder for the object or attribute to which access is granted. Individual directory branches can be protected explicitly with separate rules. It is also possible to process regions of the directory tree with one rule by using regular expressions. slapd evaluates all rules in the order in which they are listed in the configuration file. More general rules should be listed after more specific onesthe first rule slapd regards as valid is evaluated and all following entries are ignored. 428 Reference
who determines who should be granted access to the areas determined with what. Regular expressions may be used. slapd again aborts the evaluation of who after the first match, so more specific rules should be listed before the more general ones. The entries shown in Table 25.2, User Groups and Their Access Grants (page 429) are possible. Table 25.2 Tag * anonymous users self dn.regex=<regex> User Groups and Their Access Grants Scope All users without exception Not authenticated (anonymous) users Authenticated users Users connected with the target object All users matching the regular expression
access specifies the type of access. Use the options listed in Table 25.3, Types of Access (page 429). Table 25.3 Tag none auth compare search read write Types of Access Scope of Access No access For contacting the server To objects for comparison access For the employment of search filters Read access Write access
429
slapd compares the access right requested by the client with those granted in slapd.conf. The client is granted access if the rules allow a higher or equal right than the requested one. If the client requests higher rights than those declared in the rules, it is denied access. Example 25.5, slapd.conf: Example for Access Control (page 430) shows an example of a simple access control that can be arbitrarily developed using regular expressions. Example 25.5 slapd.conf: Example for Access Control
access to dn.regex="ou=([^,]+),dc=suse,dc=de" by dn.regex="cn=administrator,ou=$1,dc=suse,dc=de" write by user read by * none
This rule declares that only its respective administrator has write access to an individual ou entry. All other authenticated users have read access and the rest of the world has no access. TIP: Establishing Access Rules If there is no access to rule or no matching by directive, access is denied. Only explicitly declared access rights are granted. If no rules are declared at all, the default principle is write access for the administrator and read access for the rest of the world. Find detailed information and an example configuration for LDAP access rights in the online documentation of the installed openldap2 package. Apart from the possibility to administer access permissions with the central server configuration file (slapd.conf), there is access control information (ACI). ACI allows storage of the access information for individual objects within the LDAP tree. This type of access control is not yet common and is still considered experimental by the developers. Refer to http://www.openldap.org/faq/data/cache/758.html for information.
430
Reference
The type of database, a Berkeley database in this case, is determined in the first line of this section (see Example 25.6, slapd.conf: Database-Specific Directives (page 431)). checkpoint determines the amount of data (in kb) that is kept in the transaction log before it is written to the actual database and the time (in minutes) between two write actions. cachesize sets the number of objects kept in the database's cache. suffix determines for which portion of the LDAP tree this server should be responsible. The following rootdn determines who owns administrator rights to this server. The user declared here does not need to have an LDAP entry or exist as regular user. The administrator password is set with rootpw. Instead of using secret here, it is possible to enter the hash of the administrator password created by slappasswd. The directory directive indicates the directory (in the file system) where the database directories are stored on the server. The last directive, index objectClass eq, results in the maintenance of an index of all object classes. Attributes for which users search most often can be added here according to experience. Custom Access rules defined here for the database are used instead of the global Access rules.
431
432
Reference
IMPORTANT: Encoding of LDIF Files LDAP works with UTF-8 (Unicode). Umlauts must be encoded correctly. Use an editor that supports UTF-8, such as Kate or recent versions of Emacs. Otherwise, avoid umlauts and other special characters or use recode to recode the input to UTF-8. Save the file with the .ldif suffix then pass it to the server with the following command:
ldapadd -x -D <dn of the administrator> -W -f <file>.ldif
-x switches off the authentication with SASL in this case. -D declares the user that calls the operation. The valid DN of the administrator is entered here just like it has been configured in slapd.conf. In the current example, this is cn=admin,dc=suse,dc=de. -W circumvents entering the password on the command line (in clear text) and activates a separate password prompt. This password was previously determined in slapd.conf with rootpw. -f passes the filename. See the details of running ldapadd in Example 25.8, ldapadd with example.ldif (page 434).
433
The user data of individuals can be prepared in separate LDIF files. Example 25.9, LDIF Data for Tux (page 434) adds Tux to the new LDAP directory. Example 25.9 LDIF Data for Tux
# coworker Tux dn: cn=Tux Linux,ou=devel,dc=suse,dc=de objectClass: inetOrgPerson cn: Tux Linux givenName: Tux sn: Linux mail: [email protected] uid: tux telephoneNumber: +49 1234 567-8
An LDIF file can contain an arbitrary number of objects. It is possible to pass entire directory branches to the server at once or only parts of it as shown in the example of individual objects. If it is necessary to modify some data relatively often, a fine subdivision of single objects is recommended.
434
Reference
Import the modified file into the LDAP directory with the following command:
ldapmodify -x -D cn=admin,dc=suse,dc=de -W -f tux.ldif
Alternatively, pass the attributes to change directly to ldapmodify. The procedure for this is described below: 1. Start ldapmodify and enter your password:
ldapmodify -x -D cn=admin,dc=suse,dc=de -W Enter LDAP password:
2.
Enter the changes while carefully complying with the syntax in the order presented below:
dn: cn=Tux Linux,ou=devel,dc=suse,dc=de changetype: modify replace: telephoneNumber telephoneNumber: +49 1234 567-10
Find detailed information about ldapmodify and its syntax in the ldapmodify(1) man page.
The option -b determines the search basethe section of the tree within which the search should be performed. In the current case, this is dc=suse,dc=de. To perform a more finely-grained search in specific subsections of the LDAP directory (for example, only within the devel department), pass this section to ldapsearch with -b. -x requests activation of simple authentication. (objectClass=*) declares that all objects contained in the directory should be read. This command option can be used after the creation of a new directory tree to verify that all entries have been recorded correctly and the server responds as desired. More information about the use of ldapsearch can be found in the corresponding man page (ldapsearch(1)).
435
436
Reference
When manually configuring additional services to use LDAP, include the PAM LDAP module in the PAM configuration file corresponding to the service in /etc/pam.d. Configuration files already adapted to individual services can be found in /usr/ share/doc/packages/pam_ldap/pam.d/. Copy appropriate files to /etc/ pam.d. glibc name resolution through the nsswitch mechanism is adapted to the employment of LDAP with nss_ldap. A new, adapted file nsswitch.conf is created in /etc/ with the installation of this package. More about the workings of nsswitch .conf can be found in Section 18.6.1, Configuration Files (page 351). The following lines must be present in nsswitch.conf for user administration and authentication with LDAP. See Example 25.12, Adaptations in nsswitch.conf (page 437). Example 25.12 Adaptations in nsswitch.conf
passwd: compat group: compat passwd_compat: ldap group_compat: ldap
These lines order the resolver library of glibc first to evaluate the corresponding files in /etc and additionally access the LDAP server as sources for authentication and user data. Test this mechanism, for example, by reading the content of the user database with the command getent passwd. The returned set should contain a survey of the local users of your system as well as all users stored on the LDAP server. To prevent regular users managed through LDAP from logging in to the server with ssh or login, the files /etc/passwd and /etc/group each need to include an additional line. This is the line +::::::/sbin/nologin in /etc/passwd and +::: in /etc/group.
437
Use the YaST LDAP client to further configure the YaST group and user configuration modules. This includes manipulating the default settings for new users and groups and the number and nature of the attributes assigned to a user or a group. LDAP user management allows you to assign far more and different attributes to users and groups than traditional user or group management solutions. This is described in Section Configuring the YaST Group and User Administration Modules (page 441).
Basic Configuration
The basic LDAP client configuration dialog (Figure 25.2, YaST: Configuration of the LDAP Client (page 438)) opens during installation if you choose LDAP user management or when you select Network Services LDAP Client in the YaST Control Center in the installed system. Figure 25.2 YaST: Configuration of the LDAP Client
To authenticate users of your machine against an OpenLDAP server and enable user management via OpenLDAP, proceed as follows: 1 Click Use LDAP to enable the use of LDAP. Select Use LDAP but Disable Logins instead if you want to use LDAP for authentication, but do not want other users to log in to this client.
438
Reference
2 Enter the IP address of the LDAP server to use. 3 Enter the LDAP base DN to select the search base on the LDAP server. If you want to retrieve the base DN automatically, click Fetch DN. YaST then checks for any LDAP database on the server address specified above. Choose the appropriate base DN from the search results given by YaST. 4 If TLS or SSL protected communication with the server is required, select LDAP TLS/SSL. 5 If the LDAP server still uses LDAPv2, explicitly enable the use of this protocol version by selecting LDAP Version 2. 6 Select Start Automounter to mount remote directories on your client, such as a remotely managed /home. 7 Click Finish to apply your settings. Figure 25.3 YaST: Advanced Configuration
439
To modify data on the server as administrator, click Advanced Configuration. The following dialog is split in two tabs. See Figure 25.3, YaST: Advanced Configuration (page 439): 1 In the Client Settings tab, adjust the following settings to your needs: a If the search base for users, passwords, and groups differs from the global search base specified the LDAP base DN, enter these different naming contexts in User Map, Password Map, and Group Map. b Specify the password change protocol. The standard method to use whenever a password is changed is crypt, meaning that password hashes generated by crypt are used. For details on this and other options, refer to the pam_ldap man page. c Specify the LDAP group to use with Group Member Attribute. The default value for this is member. 2 In Administration Settings, adjust the following settings: a Set the base for storing your user management data via Configuration Base DN. b Enter the appropriate value for Administrator DN. This DN must be identical with the rootdn value specified in /etc/openldap/slapd.conf to enable this particular user to manipulate data stored on the LDAP server. Enter the full DN (such as cn=admin,dc=suse,dc=de) or activate Append Base DN to have the base DN added automatically when you enter cn=admin. c Check Create Default Configuration Objects to create the basic configuration objects on the server to enable user management via LDAP. d If your client machine should act as a file server for home directories across your network, check Home Directories on This Machine. e Click Accept to leave the Advanced Configuration then Finish to apply your settings.
440
Reference
Use Configure User Management Settings to edit entries on the LDAP server. Access to the configuration modules on the server is then granted according to the ACLs and ACIs stored on the server. Follow the procedures outlined in Section Configuring the YaST Group and User Administration Modules (page 441).
The dialog for module configuration (Figure 25.4, YaST: Module Configuration (page 441)) allows the creation of new modules, selection and modification of existing configuration modules, and design and modification of templates for such modules. To create a new configuration module, proceed as follows:
441
1 Click New and select the type of module to create. For a user configuration module, select suseuserconfiguration and for a group configuration choose susegroupconfiguration. 2 Choose a name for the new template. The content view then features a table listing all attributes allowed in this module with their assigned values. Apart from all set attributes, the list also contains all other attributes allowed by the current schema but currently not used. 3 Accept the preset values or adjust the defaults to use in group and user configuration by selecting the respective attribute, pressing Edit, and entering the new value. Rename a module by simply changing the cn attribute of the module. Clicking Delete deletes the currently selected module. 4 After you click OK, the new module is added to the selection menu. The YaST modules for group and user administration embed templates with sensible standard values. To edit a template associated with a configuration module, proceed as follows: 1 In the Module Configuration dialog, click Configure Template. 2 Determine the values of the general attributes assigned to this template according to your needs or leave some of them empty. Empty attributes are deleted on the LDAP server. 3 Modify, delete, or add new default values for new objects (user or group configuration objects in the LDAP tree).
442
Reference
Connect the template to its module by setting the susedefaulttemplate attribute value of the module to the DN of the adapted template. TIP The default values for an attribute can be created from other attributes by using a variable instead of an absolute value. For example, when creating a new user, cn=%sn %givenName is created automatically from the attribute values for sn and givenName. Once all modules and templates are configured correctly and ready to run, new groups and users can be registered in the usual way with YaST.
443
444
Reference
The initial input form of user administration offers LDAP Options. This gives the possibility to apply LDAP search filters to the set of available users or go to the module for the configuration of LDAP users and groups by selecting LDAP User and Group Configuration.
445
Quick Start Guide Brief step-by-step instructions for installing your first LDAP server. Find it at http://www.openldap.org/doc/admin22/quickstart.html or on an installed system in /usr/share/doc/packages/openldap2/ admin-guide/quickstart.html. OpenLDAP 2.2 Administrator's Guide A detailed introduction to all important aspects of LDAP configuration, including access controls and encryption. See http://www.openldap.org/doc/ admin22/ or, on an installed system, /usr/share/doc/packages/ openldap2/admin-guide/index.html. Understanding LDAP A detailed general introduction to the basic principles of LDAP: http://www .redbooks.ibm.com/redbooks/pdfs/sg244986.pdf. Printed literature about LDAP: LDAP System Administration by Gerald Carter (ISBN 1-56592-491-6) Understanding and Deploying LDAP Directory Services by Howes, Smith, and Good (ISBN 0-672-32316-8) The ultimate reference material for the subject of LDAP is the corresponding RFCs (request for comments), 2251 to 2256.
446
Reference
26
With a share of more than 70%, the Apache HTTP Server (Apache) is the world's most widely-used Web server according to the November 2005 Survey from http://www .netcraft.com/. Apache, developed by the Apache Software Foundation (http://www.apache.org/), is available for most operating systems. SUSE Linux includes Apache version 2.2. In this chapter, learn how to install, configure and set up a Web server; how to use SSL, CGI, and additional modules; and how to troubleshoot Apache.
26.1.1 Requirements
Make sure that the following requirements are met before trying to set up the Apache Web server: 1. The machine's network is configured properly. For more information about this topic, refer to Chapter 18, Basic Networking (page 317).
447
2.
The machine's exact system time is maintained by synchronizing with a time server. This is necessary because parts of the HTTP protocol depend on the correct time. See Chapter 24, Time Synchronization with NTP (page 415) to learn more about this topic. The latest security updates are installed. If in doubt, run a YaST Online Update. The default Web server port (port 80) is opened in the firewall. For this, configure the SUSEFirewall2 to allow the service HTTP Server in the external zone. This can be done using YaST. Section Configuring with YaST (page 106) gives details.
3. 4.
26.1.2 Installation
Apache on SUSE Linux is not installed by default. To install it, start YaST and select Software Software Management. Now choose Filters Selections and select Simple Web Server with Apache2. Confirm the installation of the dependent packages to finish the installation process. Apache is installed with a standard, predefined configuration that runs out of the box. The installation includes the multiprocessing module apache2-prefork as well the PHP5 module. Refer to Section 26.4, Installing, Activating, and Configuring Modules (page 465) for more information about modules.
26.1.3 Start
To start Apache and make sure that it is automatically started during boot, start YaST and select System System Services (Runlevel). Search for apache2 and Enable the service. The Web server starts immediately. By saving your changes with Finish, the system is configured to automatically start Apache in runlevels 3 and 5 during boot. For more information about the runlevels in SUSE Linux and a description of the YaST runlevel editor, refer to Section 8.2.3, Configuring System Services (Runlevel) with YaST (page 188). To start Apache using the shell, run rcapache2 start. To make sure that Apache is automatically started during boot in runlevels 3 and 5, use chkconfig -a apache2.
448
Reference
If you have not received error messages when starting Apache, the Web server should be running now. Start a browser and open http://localhost/. You should see an Apache test page starting with If you can see this, it means that the installation of the Apache Web server software on this system was successful. If you do not see this page, refer to Section 26.8, Troubleshooting (page 482). Now that the Web server is running, you can add your own documents, adjust the configuration according to your needs, or add functionality by installing modules.
Configuration Files
Apache configuration files can be found in two different locations: /etc/sysconfig/apache2 /etc/apache2/
449
/etc/sysconfig/apache2
/etc/sysconfig/apache2 controls some global settings of Apache, like modules to load, additional configuration files to include, flags with which the server should be started, and flags that should be added to the command line. Every configuration option in this file is extensively documented and therefore not mentioned here. For a generalpurpose Web server, the settings in /etc/sysconfig/apache2 should be sufficient for any configuration needs. IMPORTANT: No SuSEconfig Module for Apache The SuSEconfig module for Apache has been removed from SUSE Linux. It is no longer necessary to run SuSEconfig after changing /etc/sysconfig/ apache2.
/etc/apache2/
/etc/apache2/ hosts all configuration files for Apache. In the following, the purpose of each file is explained. Each file includes several configuration options (also referred to as directives). Every configuration option in these files is extensively documented and therefore not mentioned here. The Apache configuration files are organized as follows:
/etc/apache2/ | |- charset.conv |- conf.d/ | | | |- *.conf | |- default-server.conf |- errors.conf |- httpd.conf |- listen.conf |- magic |- mime.types |- mod_*.conf |- server-tuning.conf |- ssl-global.conf |- ssl.* |- sysconfig.d | | | |- global.conf | |- include.conf
450
Reference
Apache Configuration Files in /etc/apache2/ charset.conv Specifies which character sets to use for different languages. Do not edit. conf.d/*.conf Configuration files added by other modules. These configuration files can be included into your virtual host configuration where needed. See vhosts.d/vhost .template for examples. By doing so, you can provide different module sets for different virtual hosts. default-server.conf Global configuration for all virtual hosts with reasonable defaults. Instead of changing the values, overwrite them with a virtual host configuration. errors.conf Defines how Apache responds to errors. To customize these messages for all virtual hosts, edit this file. Otherwise overwrite these directives in your virtual host configurations. httpd.conf The main Apache server configuration file. Avoid changing this file. It mainly contains include statements and global settings. Overwrite global settings in the respective configuration files listed here. Change host-specific settings (such as document root) in your virtual host configuration. listen.conf Binds Apache to specific IP addresses and ports. Name-based virtual hosting (see Section Name-Based Virtual Hosts (page 453) is also configured here. magic Data for the mime_magic module that helps Apache automatically determine the MIME type of an unknown file. Do not change.
451
mime.types MIME types known by the system (this actually is a link to /etc/mime.types). Do not edit. If you need to add MIME types not listed here, add them to mod _mime-defaults.conf. mod_*.conf Configuration files for the modules that are installed by default. Refer to Section 26.4, Installing, Activating, and Configuring Modules (page 465) for details. Note that configuration files for optional modules reside in the directory conf.d. server-tuning.conf Contains configuration directives for the different MPMs (see Section 26.4.4, Multiprocessing Modules (page 469)) as well as general configuration options that control Apache's performance. Properly test your Web server when making changes here. ssl-global.conf and ssl.* Global SSL configuration and SSL certificate data. Refer to Section 26.6, Setting Up a Secure Web Server with SSL (page 475) for details. sysconfig.d/*.conf Configuration files automatically generated from /etc/sysconfig/apache2. Do not change any of these filesedit /etc/sysconfig/apache2 instead. Put no other configuration files in this directory. uid.conf Specifies under which user and group ID Apache runs. Do not change. vhosts.d/*.conf Your virtual host configuration should go here.The directory contains template files for virtual hosts with and without SSL. Every file in this directory ending in .conf is automatically included in the Apache configuration. Refer to Section Virtual Host Configuration (page 452) for details.
It is common practice to use virtual hosts to save administrative effort (only a single Web server needs to be maintained) and hardware expenses (each domain does not require a dedicated server). Virtual hosts can be name based, IP based, or port based. Virtual hosts can be configured via YaST (see Section Virtual Hosts (page 460)) or by manually editing a configuration file. By default, Apache in SUSE Linux is prepared for one configuration file per virtual host in /etc/apache2/vhosts.d/. All files in this directory with the extension .conf are automatically included to the configuration. A basic template for a virtual host is provided in this directory (vhost.template or vhost-ssl.template for a virtual host with SSL support). TIP: Always Create a Virtual Host Configuration It is recommended to always create a virtual host configuration file, even if your Web server only hosts one domain. In doing so, you not only have the domain-specific configuration in one file, but you can always fall back to a working basic configuration by simply moving, deleting, or renaming the configuration file for the virtual host. For the same reason, you should also create separate configuration files for each virtual host. The <VirtualHost></VirtualHost> block holds the information that applies to a particular domain. When Apache receives a client request for a defined virtual host, it uses the directives enclosed in this section. Almost all directives can be used in a virtual host context. See http://httpd.apache.org/docs/2.0/mod/ quickreference.html for further information about Apache's configuration directives.
453
The first argument can be a fully qualified domain name, but it is recommended to use the IP address. The second argument is the port and is optional. By default, port 80 is used and is configured via the Listen directive. The wild card * can be used for both the IP address and the port number to receive requests on all interfaces. IPv6 addresses must be enclosed in square brackets. Example 26.1 Variations of Name-Based VirtualHost Entries
# NameVirtualHost IP-address[:Port] NameVirtualHost 192.168.1.100:80 NameVirtualHost 192.168.1.100 NameVirtualHost *:80 NameVirtualHost * NameVirtualHost [2002:c0a8:164::]:80
The opening VirtualHost tag takes the IP address (or fully qualified domain name) previously declared with the NameVirtualHost as an argument in a name-based virtual host configuration. A port number previously declared with the NameVirtualHost directive is optional. The wild card * is also allowed as a substitute for the IP address. This syntax is only valid in combination with the wild card usage in NameVirtualHost * . When using IPv6 addresses, the address must be included in square brackets. Example 26.2 Name-Based VirtualHost Directives
<VirtualHost 192.168.1.100:80> ... </VirtualHost> <VirtualHost 192.168.1.100> ... </VirtualHost> <VirtualHost *:80> ... </VirtualHost> <VirtualHost *> ... </VirtualHost> <VirtualHost [2002:c0a8:164::]> ... </VirtualHost>
454
Reference
Here, VirtualHost directives are only specified for interfaces other than 192.168.0.10. When a Listen directive is also configured for 192.168.0.10, a separate IP-based virtual host must be created to answer HTTP requests to that interfaceotherwise the directives found in the default server configuration (/etc/ apache2/default-server.conf) are applied.
455
DocumentRoot Path to the directory from which Apache should serve files for this host. For security reasons, access to the entire file system is forbidden by default, so you must explicitly unlock this directory within a Directory container. ServerAdmin E-mail address of the server administrator. This address is, for example, shown on error pages Apache creates. ErrorLog The error log file for this virtual host. Although it is not necessary to create separate error log files for each virtual host, it is common practice to do so, because it makes debugging of errors much easier. /var/log/apache2/ is the default directory where Apache's log files should be kept. CustomLog The access log file for this virtual host. Although it is not necessary to create separate access log files for each virtual host, it is common practice to do so, because it allows separate analysis of access statistics for each host. /var/log/apache2/ is the default directory where Apache's log files should be kept. As mentioned above, access to the whole file system is forbidden by default for security reasons. Therefore, explicitly unlock the DocumentRoot directory in which you have placed the files Apache should serve:
<Directory "/srv/www/example.com_htdocs"> Order allow,deny Allow from all </Directory>
The complete configuration file looks like this: Example 26.4 Basic VirtualHost Configuration
<VirtualHost 192.168.0.10> ServerName www.example.com DocumentRoot /srv/www/example.com_htdocs ServerAdmin [email protected] ErrorLog /var/log/apache2/www.example.com_log CustomLog /var/log/apache2/www.example.com-access_log common <Directory "/srv/www/example.com"> Order allow,deny Allow from all </Directory> </VirtualHost>
456
Reference
Modules
The Modules configuration option allows for the activation or deactivation of the script languages, the web server should support. For the activation or deactivation of other modules, refer to Section Server Modules (page 462). Click Next to advance to the next dialog.
457
Default Host
This option pertains to the default Web server. As explained in Section Virtual Host Configuration (page 452), Apache can serve multiple virtual hosts from a single physical machine. The first declared virtual host in the configuration file is commonly referred to as the default host. Each virtual host inherits the default host's configuration. To edit the host settings (also called directives), choose the appropriate entry in the table then click Edit. To add new directives, click Add. To delete a directive, select it and click Delete. Figure 26.1 HTTP Server Wizard: Default Host
Here is list of the default settings of the server: Document Root Path to the directory from which Apache serves files for this host. /srv/www/ htdocs is the default location. Alias With the help of Alias directives, URLs can be mapped to physical file system locations. This means that a certain path even outside the Document Root in the file system can be accessed via a URL aliasing that path.
458
Reference
The default SUSE Linux Alias /icons points to /usr/share/apache2/ icons for the Apache icons displayed in the directory index view. ScriptAlias Similar to the Alias directive, the ScriptAlias directive maps a URL to a file system location. The difference is that ScriptAlias designates the target directory as a CGI location, meaning that CGI scripts should be executed in that location. Directory With the Directory setting, you can enclose a group of configuration options that will only apply to the specified directory. Access and display options for the directories /usr/share/apache2/icons and /srv/www/cgi-bin are configured here. It should not be necessary to change the defaults. Include With include, additional configuration files can be specified. /etc/apache2/ conf.d/ is the directory containing the configuration files that come with external modules. By default, all files in this directory (*.conf) are included. /etc/ apache2/conf.d/apache2-manual?conf is the directory containing all apache2-manual configuration files. Server Name This specifies the default URL used by clients to contact the Web server. Use a fully qualified domain name (FQDN) to reach the Web server at http://FQDN/ or its IP address. You cannot choose an arbitrary name herethe server must be known under this name. Server Administrator E-Mail E-mail address of the server administrator. This address is, for example, shown on error pages Apache creates. Server Resolution This option refers to Section Virtual Host Configuration (page 452). Determine Request Server by HTTP Headers lets a VirtualHost answer on a request to its server name (see Section Name-Based Virtual Hosts (page 453)). Determine Request Server by Server IP Address makes Apache select the requested host by
459
the HTTP header information the client sends. See Section IP-Based Virtual Hosts (page 455) for more details on IP-based virtual hosts. After finishing with the Default Host step, click Next to continue with the configuration.
Virtual Hosts
In this step, the wizard displays a list of already configured virtual hosts (see Section Virtual Host Configuration (page 452)). If you have not made manual changes prior to starting the YaST HTTP wizard, only one virtual host is presentone identical to the default host configured in the previous step. It is marked as default with an asterisk next to the server name. To add a host, click Add to open a dialog in which to enter basic information about the host. Server Identification includes the server name, server contents root (DocumentRoot), and administrator e-mail. Server Resolution is used to determine how a host is identified (name based or IP based). These options are explained in Section Default Host (page 458). Clicking Next advances to the second part of the virtual host configuration dialog. In part two of the virtual host configuration you can specify whether to enable CGI scripts and which directory to use for these scripts. It is also possible to enable SSL. If you do so, you must specify the path to the certificate as well. See Section 26.6.2, Configuring Apache with SSL (page 479) for details on SSL and certificates. With the Directory Index option, you can specify which file to display when the client requests a directory (by default, index.html). Add one or more filenames (space-separated) if you want to change this. With Enable Public HTML, the content of the users public directories (~user/public_html/) is made available on the server under http://www.example.com/~user. IMPORTANT: Creating Virtual Hosts It is not possible to add virtual hosts at will. If using name-based virtual hosts, each hostname must be resolved on the network. If using IP-based virtual hosts, you can assign only one host to each IP address available.
460
Reference
Summary
This is the final step of the wizard. Here, determine how and when the Apache server is started: when booting or manually. Also see a short summary of the configuration made so far. If you are satisfied with your settings, click Finish to complete configuration. If you want to change something, click Back until you have reached the desired dialog. Clicking HTTP Server Expert Configuration opens the dialog described in Section HTTP Server Configuration (page 461). Figure 26.2 HTTP Server Wizard: Summary
461
Server Modules
You can change the status (enabled or disabled) of Apache2 modules by clicking Toggle Status. Click Add Module to add a new module that is already installed but not yet listed. Learn more about modules in Section 26.4, Installing, Activating, and Configuring Modules (page 465).
462
Reference
463
startssl Starts Apache with SSL support if it is not already running. For more information about SSL support, refer to Section 26.6, Setting Up a Secure Web Server with SSL (page 475). restart Stops then restarts Apache. Starts the Web server if it was not running before. try-restart Stops then restarts Apache only if it has been running before. reload or graceful Stops the Web server by advising all forked Apache processes to first finish their requests before shutting down. As each process dies, it is replaced by a newly started one, resulting in complete restart of Apache. TIP rcapache2 reload is the preferred method of restarting Apache in production environments, for example, to activate a change in the configuration, because it allows all clients to be served without causing connection break-offs. configtest Checks the syntax of the configuration files without affecting a running Web server. Because this check is forced every time the server is started, reloaded, or restarted, it is usually not necessary to run the test explicitly (if a configuration error is found, the Web server is not started, reloaded, or restarted). probe Probes for the necessity of a reload (checks whether the configuration has changed) and suggests the required arguments for the rcapache2 command. server-status and full-server-status Dumps a short or full status screen, respectively. Requires either lynx or w3m installed as well as the module mod_status enabled. In addition to that, status must be added to APACHE_SERVER_FLAGS in the file /etc/sysconfig/apache2.
464
Reference
TIP: Additional Flags If you specify additional flags to the rcapache2, these are passed through to the Web server.
465
466
Reference
mod_alias Provides Alias and Redirect directives with which you can map a URl to a specific directory (Alias) or redirect a requested URL to another location. This module is enabled by default. mod_auth* The authentication modules provide different authentication methods: basic authentication with mod_auth_basic or digest authentication with mod_auth_digest. Digest authentication in Apache 2.2 is considered experimental. mod_auth_basic and mod_auth_digest must be combined with an authentication provider module, mod_authn_* (for example, mod_authn_file for text filebased authentication) and with an authorization module mod_authz_* (for example, mod_authz_user for user authorization). More information about this topic is available in the Authentication howto at http://httpd.apache.org/docs/2.2/howto/auth.html mod_autoindex Autoindex generates directory listings when no index file (for example, index .html) is present. The look and feel of these indexes is configurable. This module is enabled by default. However, directory listings are disabled by default via the Options directiveoverwrite this setting in your virtual host configuration. The default configuration file for this module is located at /etc/apache2/mod _autoindex-defaults.conf. mod_cgi mod_cgi is needed to execute CGI scripts. This module is enabled by default. mod_deflate Using this module, Apache can be configured to compress given file types on the fly before delivering them. mod_dir mod_dir provides the DirectoryIndex directive with which you can configure which files are automatically delivered when a directory is requested (index .html by default). It also provides an automatic redirect to the correct URl when a directory request does not contain a trailing slash. This module is enabled by default.
467
mod_expires With mod_expires, you can control how often proxy and browser caches refresh your documents by sending an Expires header. This module is enabled by default. mod_include mod_include lets you use Server Side Includes (SSI), which provide a basic functionality to generate HTML pages dynamically. This module is enabled by default. mod_info Provides a comprehensive overview of the server configuration under http://localhost/server-info/. For security reasons, you should always limit access to this URL. By default only localhost is allowed to access this URL. mod_info is configured at /etc/apache2/mod_info.conf mod_log_config With this module, you can configure the looks of the Apache log files. This module is enabled by default. mod_mime The mime module takes care that a file is delivered with the correct MIME header based on the filename's extension (for example text/html for HTML documents). This module is enabled by default. mod_negotiation Necessary for content negotiation. See http://httpd.apache.org/docs/2.2/content-negotiation.html for more information. This module is enabled by default. mod_rewrite Provides the functionality of mod_alias, but offers more features and flexibility. With mod_rewrite, you can redirect URLs based on multiple rules, request headers, and more. mod_speling mod_speling attempts to automatically correct typographical errors in URLs, such as capitalization errors. mod_ssl Enables encrypted connections between Web server and clients. See Section 26.6, Setting Up a Secure Web Server with SSL (page 475) for details. This module is enabled by default. 468 Reference
mod_status Provides information on server activity and performance under http://localhost/server-status/. For security reasons, you should always limit access to this URL. By default, only localhost is allowed to access this URl. mod_status is configured at /etc/apache2/mod_status.conf mod_suexec mod_suexec lets you run CGI scripts under a different user and group. This module is enabled by default. mod_userdir Enables user-specific directories available under ~user/. The UserDir directive must be specified in the configuration. This module is enabled by default.
Prefork MPM
The prefork MPM implements a nonthreaded, preforking Web server. It makes the Web server behave similarly to Apache version 1.x in that it isolates each request and handles it by forking a separate child process. Thus problematic requests cannot affect others, avoiding a lockup of the Web server. While providing stability with this process-based approach, the prefork MPM consumes more system resources than its counterpart, the worker MPM. The prefork MPM is considered the default MPM for Unix-based operating systems. IMPORTANT: MPMs in This Document This document assumes Apache is used with the prefork MPM.
Worker MPM
The worker MPM provides a multithreaded Web server. A thread is a lighter form of a process. The advantage of a thread over a process is its lower resource consumption.
469
Instead of only forking child processes, the worker MPM serves requests by using threads with server processes. The preforked child processes are multithreaded. This approach makes Apache perform better by consuming fewer system resources than the prefork MPM. One major disadvantage is the stability of the worker MPM: if a thread becomes corrupt, all threads of a process can be affected. In the worst case, this may result in a server crash. Especially when using the Common Gateway Interface (CGI) with Apache under heavy load, internal server errors might occur due to threads unable to communicate with system resources. Another argument against using the worker MPM with Apache is that not all available Apache modules are thread-safe and thus cannot be used in conjunction with the worker MPM. WARNING: Using PHP Modules with MPMs Not all available PHP modules are thread-safe. Using the worker MPM with mod_php is strongly discouraged.
470
Reference
Configuration File: /etc/apache2/conf.d/mod_perl.conf More Information: /usr/share/doc/packages/apache2-mod_perl mod_php5 PHP is a server-side, cross-platform HTML embedded scripting language. Package Name: apache2-mod_php5 Configuration File: /etc/apache2/conf.d/php5.conf More Information: /usr/share/doc/packages/apache2-mod_php5 mod_python mod_python allows embedding Python within the Apache HTTP server for a considerable boost in performance and added flexibility in designing Web-based applications. Package Name: apache2-mod_python More Information: /usr/share/doc/packages/apache2-mod_python mod_ruby mod_ruby embeds the Ruby interpreter into the Apache Web server, allowing Ruby CGI scripts to be executed natively. These scripts start much faster than without mod_ruby. Package Name: apache2-mod_ruby More Information: /usr/share/doc/packages/apache2-mod_ruby mod_jk-ap20 This module provides connectors between Apache and a Tomcat Servlet Container. Package Name: mod_jk-ap20 More Information: /usr/share/doc/packages/mod_jk-ap20
26.4.6 Compilation
Apache can be extended by advanced users by writing custom modules. To develop modules for Apache or compile third-party modules, the package apache2-devel is required along with the corresponding development tools. apache2-devel also contains the apxs2 tools, which are necessary for compiling additional modules for Apache.
471
apxs2 enables the compilation and installation of modules from source code (including the required changes to the configuration files), which creates dynamic shared objects (DSOs) that can be loaded into Apache at runtime. The apxs2 binaries are located under /usr/sbin: /usr/sbin/apxs2suitable for building an extension module that works with any MPM. The installation location is /usr/lib/apache2. /usr/sbin/apxs2-preforksuitable for prefork MPM modules. The installation location is /usr/lib/apache2-prefork. /usr/sbin/apxs2-workersuitable for worker MPM modules. apxs2 installs modules so they can be used for all MPMs. The other two programs install modules so they can only be used for the respective MPMs. apxs2 installs modules in /usr/lib/apache2, apxs2-prefork and apxs2-worker installs modules in /usr/lib/apache2-prefork or /usr/lib/apache2-worker. Install and activate a module from source code with the commands cd /path/to/module/source; apxs2 -cia mod_foo.c (-c compiles the module, -i installs it, and -a activates it). Other options of apxs2 are described in the apxs2(1) man page.
472
Reference
Tells Apache to handle all files within this directory as CGI scripts. Enables CGI script execution Tells the server to treat files with the extensions .pl and .cgi as CGI scripts. Adjust according to your needs. The Order and Allow directives control the default access state and the order in which Allow and Deny directives are evaluated. In this case deny statements are evaluated before allow statements and access from everywhere is enabled.
473
A simple test script available under /usr/share/doc/packages/apache2/ test-cgi is part of the Apache package. It outputs the content of some environment variables as plain text. Copy this script to either /srv/www/cgi-bin/ or the script directory of your virtual host (/srv/www/example.com_cgi-bin/) and name it test .cgi. Files accessible by the Web server should be owned by to the user root (see Section 26.7, Avoiding Security Problems (page 480) for additional information). Because the Web server runs with a different user, the CGI scripts must be world-executable and world-readable. Change into the CGI directory and use the command chmod 755 test.cgi to apply the proper permissions. Now call http://localhost/cgi-bin/test.cgi or http://example.com/cgi-bin/test.cgi. You should see the CGI/1.0 test script report.
26.5.3 Troubleshooting
If you do not see the output of the test program but an error message instead, check the following: CGI Troubleshooting Have you reloaded the server after having changed the configuration? Check with rcapache2 probe. If you have configured your custom CGI directory, is it configured properly? If in doubt, try the script within the default CGI directory /srv/www/cgi-bin/ and call it with http://localhost/cgi-bin/test.cgi. Are the file permissions correct? Change into the CGI directory and execute the ls -l test.cgi. Its output should start with
-rwxr-xr-x 1 root root
Make sure that the script does not contain programming errors. If you have not changed test.cgi, this should not be the case, but if you are using your own programs, always make sure that they do not contain programming errors.
474
Reference
475
TIP: For More Information To learn more about concepts and definitions of SSL/TSL, refer to http://httpd.apache.org/docs/2.2/ssl/ssl_intro.html.
476
Reference
2 Generating RSA private key for CA (1024 bit) No interaction needed. 3 Generating X.509 certificate signing request for CA Create the CA's distinguished name here. This requires you to answer a few questions, such as country name or organization name. Enter valid data, because everything you enter here later shows up in the certificate. You do not need to answer every question. If one does not apply to you or you want to leave it blank, use .. Common name is the name of the CA itselfchoose a significant name, such as My company CA. 4 Generating X.509 certificate for CA signed by itself Choose certificate version
3
(the default).
5 Generating RSA private key for SERVER (1024 bit) No interaction needed. 6 Generating X.509 certificate signing request for SERVER Create the distinguished name for the server key here. Questions are almost identical to the ones already answered for the CA's distinguished name. The data entered here applies to the Web server and does not necessarily need to be identical to the CA's data (for example, if the server is located elsewhere). IMPORTANT: Selecting a Common Name The common name you enter here must be the fully qualified hostname of your secure server (for example, www.example.com). Otherwise the browser issues a warning that the certificate does not match the server when accessing the Web server. 7 Generating X.509 certificate signed by own CA Choose certificate version
3
(the default).
477
8 Encrypting RSA private key of CA with a pass phrase for security It is strongly recommended to encrypt the private key of the CA with a password, so choose Y and enter a password. 9 Encrypting RSA private key of SERVER with a pass phrase for security Encrypting the server key with a password requires you to enter this password every time you start the Web server. This makes it difficult to automatically start the server on boot or to restart the Web server. Therefore, it is common sense to say N to this question. Keep in mind that your key is unprotected when not encrypted with a password and make sure that only authorized persons have access to the key. IMPORTANT: Encrypting the Server Key If you choose to encrypt the server key with a password, increase the value for APACHE_TIMEOUT in /etc/sysconfig/apache2. Otherwise you do not have enough time to enter the passphrase before the attempt to start the server is stopped unsuccessfully. The script's result page presents a list of certificates and keys it has generated. Contrary to what the script outputs, the files have not been generated in the local directory conf, but to the correct locations under /etc/apache2/. The last step is to copy the CA certificate file from /etc/apache2/ssl.crt/ca .crt to a location where your users can access it in order to incorporate it into the list of known and trusted CAs in their Web browsers. Otherwise a browser complains that the certificate was issued by an unknown authority. The certificate is valid for one year. IMPORTANT: Self-Signed Certificates Only use a self-signed certificate on a Web server that is accessed by people who know and trust you as a certificate authority. It is not recommended to use such a certificate on a public shop, for example.
478
Reference
479
To use SSL, it must be activated in the global server configuration. Open /etc/ sysconfig/apache2 in an editor and search for APACHE_MODULES. Add ssl to the list of modules if it is not already present (mod_ssl is activated by default). Next, search for APACHE_SERVER_FLAGS and add SSL. If you have chosen to encrypt your server certificate with a password, you should also increase the value for APACHE_TIMEOUT, so you have enough time to enter the passphrase when Apache starts. Restart the server to make these changes active. A reload is not sufficient. The virtual host configuration directory contains a template /etc/apache2/vhosts .d/vhost-ssl.template with SSL-specific directives that are extensively documented. Refer to Section Virtual Host Configuration (page 452) for the general virtual host configuration. To get started, it should be sufficient to adjust the values for the following directives: DocumentRoot ServerName ServerAdmin ErrorLog TransferLog IMPORTANT: Name-Based Virtual Hosts and SSL It is not possible to run multiple SSL-enabled virtual hosts on a server with only one IP address. Users connecting to such a setup receive a warning message stating that the certificate does not match the server name every time they visit the URL. A separate IP address or port is necessary for every SSL-enabled domain to achieve communication based on a valid SSL certificate.
480
Reference
481
26.8 Troubleshooting
If Apache does not start, the Web page is not accessible, or users cannot connect to the Web server, it is important to find the cause of the problem. Here are some typical places to look for error explanations and important things to check.
482
Reference
First, rcapache2 (described in Section 26.3, Starting and Stopping Apache (page 463)) is verbose about errors, so can be quite helpful if it is actually used for operating Apache. Sometimes it is tempting to use the binary /usr/sbin/httpd2 for starting or stopping the Web server. Avoid doing this and use the rcapache2 script instead. rcapache2 even provides tips and hints for solving configuration errors. Second, the importance of log files cannot be overemphasized. In case of both fatal and nonfatal errors, the Apache log files, mainly the error log file, are the places to look for causes. Additionally, you can control the verbosity of the logged messages with the LogLevel directive if more detail is needed in the log files. By default, the error log file is located at /var/log/apache2/error_log. TIP: A Simple Test Watch the Apache log messages with the command tail -F /var/log/apache2/my_error_log. Then run rcapache2 restart. Now, try to connect with a browser and check the output. A common mistake is not to open the ports for Apache in the firewall configuration of the server. If you configure Apache with YaST, there is a separate option available to take care of this specific issue (see Section 26.2.2, Configuring Apache with YaST (page 457)). If you are configuring Apache manually, open firewall ports for HTTP and HTTPS via YaST's firewall module. If the error cannot be tracked down with the help of any these, check the online Apache bug database at http://httpd.apache.org/bug_report.html. Additionally, the Apache user community can be reached via a mailing list available at http:// httpd.apache.org/userslist.html. A recommended newsgroup is comp .infosystems.www.servers.unix.
483
484
Reference
26.9.3 Development
More information about developing Apache modules or about getting involved in the Apache Web server project are available at the following locations: Apache Developer Information http://httpd.apache.org/dev/ Apache Developer Documentation http://httpd.apache.org/docs/2.2/developer/ Writing Apache Modules with Perl and C http://www.modperl.com/
485
File Synchronization
Today, many people use several computersone computer at home, one or several computers at the workplace, and possibly a laptop or PDA on the road. Many files are needed on all these computers. You may want to be able to work with all computers and modify the files and subsequently have the latest version of the data available on all computers.
27
File Synchronization
487
WARNING: Risk of Data Loss Before you start managing your data with a synchronization system, you should be well acquainted with the program used and test its functionality. A backup is indispensable for important files. The time-consuming and error-prone task of manually synchronizing data can be avoided by using one of the programs that use various methods to automate this job. The following summaries are merely intended to convey a general understanding of how these programs work and how they can be used. If you plan to use them, read the program documentation.
27.1.1 Unison
Unison is not a network file system. Instead, the files are simply saved and edited locally. The program Unison can be executed manually to synchronize files. When the synchronization is performed for the first time, a database is created on the two hosts, containing checksums, time stamps, and permissions of the selected files. The next time it is executed, Unison can recognize which files were changed and propose transmission from or to the other host. Usually all suggestions can be accepted.
27.1.2 CVS
CVS, which is mostly used for managing program source versions, offers the possibility to keep copies of the files on multiple computers. Accordingly, it is also suitable for data synchronization. CVS maintains a central repository on the server in which the files and changes to files are saved. Changes that are performed locally are committed to the repository and can be retrieved from other computers by means of an update. Both procedures must be initiated by the user. CVS is very resilient to errors when changes occur on several computers. The changes are merged and, if changes took place in the same lines, a conflict is reported. When a conflict occurs, the database remains in a consistent state. The conflict is only visible for resolution on the client host.
488
Reference
27.1.3 Subversion
In contrast to CVS, which evolved, Subversion (SVN) is a consistently designed project. Subversion was developed as a technically improved successor to CVS. Subversion has been improved in many respects to its predecessor. Due to its history, CVS only maintains files and is oblivious of directories. Directories also have a version history in Subversion and can be copied and renamed just like files. It is also possible to add metadata to every file and to every directory. This metadata can be fully maintained with versioning. As opposed to CVS, Subversion supports transparent network access over dedicated protocols, like WebDAV (Web-based Distributed Authoring and Versioning). WebDAV extends the functionality of the HTTP protocol to allow collaborative write access to files on remote Web servers. Subversion was largely assembled on the basis of existing software packages. Therefore, the Apache Web server and the WebDAV extension always run in conjunction with Subversion.
27.1.4 mailsync
Unlike the synchronization tools covered in the previous sections, mailsync only synchronizes e-mails between mailboxes. The procedure can be applied to local mailbox files as well as to mailboxes on an IMAP server. Based on the message ID contained in the e-mail header, the individual messages are either synchronized or deleted. Synchronization is possible between individual mailboxes and between mailbox hierarchies.
27.1.5 rsync
When no version control is needed but large directory structures need to be synchronized over slow network connections, the tool rsync offers well-developed mechanisms for transmitting only changes within files. This not only concerns text files, but also binary files. To detect the differences between files, rsync subdivides the files into blocks and computes checksums over them.
File Synchronization
489
The effort put into the detection of the changes comes at a price. The systems to synchronize should be scaled generously for the usage of rsync. RAM is especially important.
For more information about iFolder, see http://www.novell.com/en-en/ documentation/. Find tips and tricks about iFolder at http://www.novell .com/coolsolutions/ifmag/.
490
Reference
27.2.2 Portability
Subversion, CVS, and unison are also available for many other operating systems, including various Unix and Windows systems.
File Synchronization
491
Unison reports conflicts, allowing the affected files to be excluded from the synchronization. However, changes cannot be merged as easily as in Subversion or CVS. As opposed to Subversion or CVS, where it is possible to partially accept changes in cases of conflict, WebDAV only performs a check-in when the complete modification is considered successful. There is no conflict handling in rsync. The user is responsible for not accidentally overwriting files and manually resolving all possible conflicts. To be on safe side, a versioning system like RCS can be additionally employed.
27.2.6 History
An additional feature of Subversion or CVS is that old file versions can be reconstructed. A brief editing remark can be inserted for each change and the development of the files can easily be traced later based on the content and the remarks. This is a valuable aid for theses and program texts.
492
Reference
Binary files require additional space amounting to the size of the file every time the file is changed.
27.2.8 GUI
Unison offers a graphical user interface that displays the synchronization procedures Unison wants to perform. Accept the proposal or exclude individual files from the synchronization. In text mode, interactively confirm the individual procedures. Experienced users normally run Subversion or CVS from the command line. However, graphical user interfaces are available for Linux, such as cervisia, and for other operating systems, like wincvs. Many development tools, such as kdevelop, and text editors, such as emacs, provide support for CVS or Subversion. The resolution of conflicts is often much easier to perform with these front-ends.
File Synchronization
493
494
Reference
CVS/SVN ++/++
rsync +
mailsync +
27.3.1 Requirements
Unison must be installed on the client as well as on the server. In this context, the term server refers to a second, remote host (unlike CVS, explained in Section 27.1.2, CVS (page 488)). In the following section, Unison is used together with ssh. In this case, an SSH client must be installed on the client and an SSH server must be installed on the server.
You want to synchronize these two directories. The user is known as tux on the client and as geeko on the server. The first thing to do is to test if the client-server communication works:
File Synchronization
495
The most frequently encountered problems are: The Unison versions used on the client and server are not compatible. The server does not allow SSH connections. Neither of the two specified paths exists. If everything works, omit the option -testserver. During the first synchronization, Unison does not yet know the relationship between the two directories and submits suggestions for the transfer direction of the individual files and directories. The arrows in the Action column indicate the transfer direction. A question mark means that Unison is not able to make a suggestion regarding the transfer direction because both versions were changed or are new. The arrow keys can be used to set the transfer direction for the individual entries. If the transfer directions are correct for all displayed entries, simply click Go. The characteristics of Unison (for example, whether to perform the synchronization automatically in clear cases) can be controlled by means of command-line parameters specified when the program is started. View the complete list of all parameters with unison --help. Example 27.1 The file ~/.unison/example.prefs
root=/home/tux/dir1 root=ssh://wilber@server//homes/wilber/dir2 batch=true
For each pair, a synchronization log is maintained in the user directory ~/.unison. Configuration sets, such as ~/.unison/example.prefs, can also be stored in this directory. To start the synchronization, specify this file as the command-line parameter as in unison example.prefs.
496
Reference
The command cvs init can be used to initialize the CVS server from the client side. This needs to be done only once. Finally, the synchronization must be assigned a name. Select or create a directory on the client exclusively to contain files to manage with CVS (the directory can also be empty). The name of the directory is also the name of the synchronization. In this example, the directory is called synchome. Change to this directory and enter the following command to set the synchronization name to synchome:
cvs import synchome tux wilber
Many CVS commands require a comment. For this purpose, CVS starts an editor (the editor defined in the environment variable $EDITOR or vi if no editor was defined). The editor call can be circumvented by entering the comment in advance on the command line, such as in the following example:
cvs import -m 'this is a test' synchome tux wilber
File Synchronization
497
498
Reference
? This file does not exist in CVS. The status M indicates a locally modified file. Either commit the local copy to the server or remove the local file and run the update again. In this case, the missing file is retrieved from the server. If you commit a locally modified file and the file was changed in the same line and committed, you might get a conflict, indicated with C. In this case, look at the conflict marks (> and <) in the file and decide between the two versions. As this can be a rather unpleasant job, you might decide to abandon your changes, delete the local file, and enter cvs up to retrieve the current version from the server.
File Synchronization
499
Other options can be listed with svnadmin help. As opposed to CVS, Subversion is not based on RCS, but rather on different types of repository. The Berkeley Database or FSFS (a repository that uses the file system directly) is commonly used. Do not install a repository on remote file systems, like NFS, AFS, or Windows SMB. The database requires POSIX locking mechanisms, which these file systems do not support. The command svnlook provides information about an existing repository.
svnlook info /path/to/repository
A server must be configured to allow different users to access the repository. Either use the Apache Web server with WebDAV to do this or use svnserve, the server packaged with Subversion. Once svnserve is up and running, the repository can be accessed with a URL with svn:// or svn+ssh://. Users that should authenticate themselves when calling svn can be set in /etc/svnserve.conf. A decision for Apache or for svnserve depends on many factors. It is recommended to browse the Subversion book. More information about it can be found in Section 27.5.3, For More Information (page 502).
The content provided by a correctly configured server fitted with a corresponding repository can be accessed by any client with one of the following commands:
svn list http://svn.example.com/path/to/project
or
svn list svn://svn.example.com/path/to/project
500
Reference
Save an existing project in the current directory (check it out) with the command svn checkout:
svn checkout http://svn.example.com/path/to/project nameofproject
Checking out creates a new subdirectory nameofproject on the client. Operations (adding, copying, renaming, deleting) can then be performed on it:
svn svn svn svn add file copy oldfile newfile move oldfile newfile delete file
These commands can also be used on directories. Subversion can additionally record properties of a file or directory:
svn propset license GPL foo.txt
The preceding example sets the value GPL for the property license. Display properties with svn proplist:
svn proplist --verbose foo.txt Properties on 'foo.txt': license : GPL
Save the changes to the server with svn commit Another user can incorporate your changes in his working directory by synchronizing with the server using svn update. Unlike CVS, the status of a working directory in Subversion can be displayed without accessing the repository with svn status. Local changes are displayed in five columns, with the first one being the most important one: '' No changes. 'A' Object is marked for addition. 'D' Object is marked for deletion. 'M' Object was modified.
File Synchronization
501
'C' Object is in conflict. 'I' Object was ignored. '?' Object is not being maintained by versioning control. '!' Object is reported missing. This flag appears when the object was deleted or moved without the svn command. '~' Object was being maintained as a file but has since been replaced by a directory or the opposite has occurred. The second column shows the status of properties. The meaning of all other columns can be read in the Subversion book.
502
Reference
Up to this point, the handling does not differ much from that of a regular copying tool, like scp. rsync should be operated in rsync mode to make all its features fully available. This is done by starting the rsyncd daemon on one of the systems. Configure it in the file /etc/rsyncd.conf. For example, to make the directory /srv/ftp available with rsync, use the following configuration:
gid = nobody uid = nobody read only = true use chroot = no transfer logging = true log format = %h %o %f %l %b log file = /var/log/rsyncd.log [FTP] path = /srv/ftp comment = An Example
Then start rsyncd with rcrsyncd start. rsyncd can also be started automatically during the boot process. Set this up by activating this service in the runlevel editor provided by YaST or by manually entering the command insserv rsyncd. rsyncd can alternatively be started by xinetd. This is, however, only recommended for servers that rarely use rsyncd. The example also creates a log file listing all connections. This file is stored in /var/ log/rsyncd.log. File Synchronization 503
It is then possible to test the transfer from a client system. Do this with the following command:
rsync -avz sun::FTP
This command lists all files present in the directory /srv/ftp of the server. This request is also logged in the log file /var/log/rsyncd.log. To start an actual transfer, provide a target directory. Use . for the current directory. For example:
rsync -avz sun::FTP .
By default, no files are deleted while synchronizing with rsync. If this should be forced, the additional option --delete must be stated. To ensure that no newer files are deleted, the option --update can be used instead. Any conflicts that arise must be resolved manually.
504
Reference
Mail/ is a subdirectory of the user's home directory that contains e-mail folders, including the folder saved-messages. If mailsync is started with mailsync -m saved-messages, it lists an index of all messages in saved-messages. If the following definition is made
store localdir { pat Mail/* prefix Mail/ }
the command mailsync -m localdir lists all messages stored under Mail/. In contrast, the command mailsync localdir lists the folder names. The specifications of a store on an IMAP server appear as follows:
store imapinbox { server {mail.edu.harvard.com/user=gulliver} ref {mail.edu.harvard.com} pat INBOX }
The above example merely addresses the main folder on the IMAP server. A store for the subfolders would appear as follows:
store imapdir { server {mail.edu.harvard.com/user=gulliver} ref {mail.edu.harvard.com} pat INBOX.* prefix INBOX. }
If the IMAP server supports encrypted connections, the server specification should be changed to
server {mail.edu.harvard.com/ssl/user=gulliver}
File Synchronization
505
Now the folders under Mail/ should be connected to the subdirectories on the IMAP server:
channel folder localdir imapdir { msinfo .mailsync.info }
mailsync uses the msinfo file to keep track of the messages that have already been synchronized. The command mailsync folder does the following: Expands the mailbox pattern on both sides. Removes the prefix from the resulting folder names. Synchronizes the folders in pairs (or creates them if they do not exist). Accordingly, the folder INBOX.sent-mail on the IMAP server is synchronized with the local folder Mail/sent-mail (provided the definitions explained above exist). The synchronization between the individual folder is performed as follows: If a message already exists on both sides, nothing happens. If the message is missing on one side and is new (not listed in the msinfo file), it is transmitted there. If the message merely exists on one side and is old (already listed in the msinfo file), it is deleted there (because the message that had obviously existed on the other side was deleted). To know in advance which messages will be transmitted and which will be deleted during a synchronization, start mailsync with a channel and a store with mailsync folder localdir. This command produces a list of all messages that are new on the local host as well as a list of all messages that would be deleted on the IMAP side during a synchronization. Similarly, the command mailsync folder imapdir produces a list of all messages that are new on the IMAP side and a list of all messages that would be deleted on the local host during a synchronization.
506
Reference
File Synchronization
507
Samba
Using Samba, a Unix machine can be configured as a file and print server for DOS, Windows, and OS/2 machines. Samba has developed into a fully-fledged and rather complex product. Configure Samba with YaST, SWAT (a Web interface), or the configuration file.
28
28.1 Terminology
SMB protocol Samba uses the SMB (server message block) protocol that is based on the NetBIOS services. Due to pressure from IBM, Microsoft released the protocol so other software manufacturers could establish connections to a Microsoft domain network. With Samba, the SMB protocol works on top of the TCP/IP protocol, so the TCP/IP protocol must be installed on all clients. CIFS protocol CIFS (common Internet file system) protocol is another protocol supported by Samba. CIFS defines a standard remote file system access protocol for use over the network, enabling groups of users to work together and share documents across the network. NetBIOS NetBIOS is a software interface (API) designed for communication between machines. Here, a name service is provided. It enables machines connected to the network to reserve names for themselves. After reservation, these machines can be addressed by name. There is no central process that checks names. Any machine
Samba
509
on the network can reserve as many names as it wants as long as the names are not already in use. The NetBIOS interface can now be implemented for different network architectures. An implementation that works relatively closely with network hardware is called NetBEUI, but this is often referred to as NetBIOS. Network protocols implemented with NetBIOS are IPX from Novell (NetBIOS via TCP/IP) and TCP/IP. The NetBIOS names sent via TCP/IP have nothing in common with the names used in /etc/hosts or those defined by DNS. NetBIOS uses its own, completely independent naming convention. However, it is recommended to use names that correspond to DNS hostnames to make administration easier. This is the default used by Samba. Samba server Samba server is a server that provides SMB/CIFS services and NetBIOS over IP naming services to clients. For Linux, there are two daemons for Samba server: smnd for SMB/CIFS services and nmbd for naming services. Samba client Samba client is a system that uses Samba services from a Samba server over the SMB protocol. All common operating systems, such as Mac OS X, Windows, and OS/2, support the SMB protocol. The TCP/IP protocol must be installed on all computers. Samba provides a client for the different UNIX flavors. For Linux, there is a kernel module for SMB that allows the integration of SMB resources on the Linux system level. You do not need run any daemon for Samba client. Shares SMB servers provide hardware space to their clients by means of shares. Shares are printers and directories with their subdirectories on the server. It is exported by means of a name and can be accessed by its name. The share name can be set to any nameit does not have to be the name of the export directory. A printer is also assigned a name. Clients can access the printer by its name.
510
Reference
To stop or start running Samba services with YaST, use System System Services (Runlevel). From a command line, stop services required for Samba with rcsmb stop && rcnmb stop and start them with rcnmb start && rcsmb start.
Samba
511
Start Up In the Start Up tab, you can set starting of the Samba server. To start the service every time your system boots, select During Boot. To activate manual start, choose Manually. More information about starting a Samba server is provided in Section 28.2, Starting and Stopping Samba (page 510). In this tab, you can also open ports in your firewall. To do so, select Open Port in Firewall. If you have multiple network interfaces, select the network interface for Samba services by clicking Firewall Details, selecting the interfaces, and clicking OK. Shares In this tab, determine the Samba shares to activate. There are some predefined shares, like homes and printers. Use Toggle Status to switch between Active and Inactive. Click Add to add new shares and Delete to delete the selected share. Identity In the Identity tab, you can determine the domain with which the host is associated (Base Settings) and whether to use an alternative hostname in the network (NetBIOS Host Name). To set expert global settings or set user authentication, click Advanced Settings. Click Finish to close the configuration.
512
Reference
Samba
513
wins support and wins server To integrate your Samba server into an existing Windows network with an active WINS server, enable the wins server option and set its value to the IP address of that WINS server. If your Windows machines are connected to separate subnets and should still be aware of each other, you need to set up a WINS server. To turn a Samba server into such a WINS server, set the option wins support = Yes. Make sure that only one Samba server of the network has this setting enabled. The options wins server and wins support must never be enabled at the same time in your smb.conf file.
Shares
The following examples illustrate how a CD-ROM drive and the user directories (homes) are made available to the SMB clients. [cdrom] To avoid having the CD-ROM drive accidentally made available, these lines are deactivated with comment marks (semicolons in this case). Remove the semicolons in the first column to share the CD-ROM drive with Samba. Example 28.1 A CD-ROM Share
;[cdrom] ; comment = Linux CD-ROM ; path = /media/cdrom ; locking = No
[cdrom] and comment The entry [cdrom] is the name of the share that can be seen by all SMB clients on the network. An additional comment can be added to further describe the share. path = /media/cdrom path exports the directory /media/cdrom. By means of a very restrictive default configuration, this kind of share is only made available to the users present on this system. If this share should be made available to everybody, add a line guest ok = yes to the configuration. This setting gives read permissions to anyone on the network. It is recommended to handle this
514
Reference
parameter with great care. This applies even more to the use of this parameter in the [global] section. [homes] The [home] share is of special importance here. If the user has a valid account and password for the Linux file server and his own home directory, he can be connected to it. Example 28.2 homes Share
[homes] comment = Home Directories valid users = %S browseable = No read only = No create mask = 0640 directory mask = 0750
[homes] As long as there is no other share using the share name of the user connecting to the SMB server, a share is dynamically generated using the [homes] share directives. The resulting name of the share is the username. valid users = %S %S is replaced with the concrete name of the share as soon as a connection has been successfully established. For a [homes] share, this is always the username. As a consequence, access rights to a user's share are restricted exclusively to the user. browseable = No This setting makes the share invisible in the network environment. read only = No By default, Samba prohibits write access to any exported share by means of the read only = Yes parameter. To make a share writable, set the value read only = No, which is synonymous with writable = Yes. create mask = 0640 Systems that are not based on MS Windows NT do not understand the concept of UNIX permissions, so they cannot assign permissions when creating a file. The parameter create mask defines the access permissions assigned to newly created files. This only applies to writable shares. In effect, this setting means the owner has read and write permissions and the members of the Samba 515
owner's primary group have read permissions. valid users = %S prevents read access even if the group has read permissions. For the group to have read or write access, deactivate the line valid users = %S.
Security Levels
To improve security, each share access can be protected with a password. SMB has three possible ways of checking the permissions: Share Level Security (security = share) A password is firmly assigned to a share. Everyone who knows this password has access to that share. User Level Security (security = user) This variation introduces the concept of the user to SMB. Each user must register with the server with his own password. After registration, the server can grant access to individual exported shares dependent on usernames. Server Level Security (security = server): To its clients, Samba pretends to be working in user level mode. However, it passes all password queries to another user level mode server, which takes care of authentication. This setting expects an additional parameter (password server). The selection of share, user, or server level security applies to the entire server. It is not possible to offer individual shares of a server configuration with share level security and others with user level security. However, you can run a separate Samba server for each configured IP address on a system. More information about this subject can be found in the Samba HOWTO Collection. For multiple servers on one system, pay attention to the options interfaces and bind interfaces only.
516
Reference
Samba
517
If encrypted passwords are used for verification purposesthis is the default setting with well-maintained MS Windows 9x installations, MS Windows NT 4.0 from service pack 3, and all later productsthe Samba server must be able to handle these. The entry encrypt passwords = yes in the [global] section enables this (with Samba version 3, this is now the default). In addition, it is necessary to prepare user accounts and passwords in an encryption format that conforms with Windows. Do this with the command smbpasswd -a name. Create the domain account for the computers, required by the Windows NT domain concept, with the following commands: Example 28.4 Setting Up a Machine Account
useradd hostname\$ smbpasswd -a -m hostname
With the useradd command, a dollar sign is added. The command smbpasswd inserts this automatically when the parameter -m is used. The commented configuration example (/usr/share/doc/packages/Samba/examples/smb.conf.SuSE) contains settings that automate this task. Example 28.5 Automated Setup of a Machine Account
add machine script = /usr/sbin/useradd -g nogroup -c "NT Machine Account" \ -s /bin/false %m\$
To make sure that Samba can execute this script correctly, choose a Samba user with the required administrator permissions. To do so, select one user and add it to the ntadmin group. After that, all users belonging to this Linux group can be assigned Domain Admin status with the command:
net groupmap add ntgroup="Domain Admins" unixgroup=ntadmin
More information about this topic is provided in Chapter 12 of the Samba HOWTO Collection, found in /usr/share/doc/packages/samba/ Samba-HOWTO-Collection.pdf.
518
Reference
more online documentation and examples. Find a commented example configuration (smb.conf.SuSE) in the examples subdirectory. The Samba HOWTO Collection provided by the Samba team includes a section about troubleshooting. In addition to that, Part V of the document provides a step-by-step guide to checking your configuration. You can find Samba HOWTO Collection in /usr/share/doc/packages/samba/Samba-HOWTO-Collection.pdf after installing package samba-doc.
Samba
519
29
Squid is a widely-used proxy cache for Linux and UNIX platforms. This means that it stores requested Internet objects, such as data on a Web or FTP server, on a machine that is closer to the requesting workstation than the server. This chapter discusses its configuration, the settings required to get it running, how to configure the system to do transparent proxying, how to gather statistics about using the cache with the help of programs, like Calamaris and cachemgr, and how to filter Web contents with squidGuard. Squid acts as a proxy cache. It redirects object requests from clients (in this case, from Web browsers) to the server. When the requested objects arrive from the server, it delivers the objects to the client and keeps a copy of them in the hard disk cache. One of the advantages of caching is that several clients requesting the same object can be served from the hard disk cache. This enables clients to receive the data much faster than from the Internet. This procedure also reduces the network traffic. Along with the actual caching, Squid offers a wide range of features such as distributing the load over intercommunicating hierarchies of proxy servers, defining strict access control lists for all clients accessing the proxy, allowing or denying access to specific Web pages with the help of other applications, and generating statistics about frequentlyvisited Web pages for the assessment of the users' surfing habits. Squid is not a generic proxy. It normally proxies only HTTP connections. It does also support the protocols FTP, Gopher, SSL, and WAIS, but it does not support other Internet protocols, such as Real Audio, news, or video conferencing. Because Squid only supports the UDP protocol to provide communication between different caches, many other multimedia programs are not supported.
521
522
Reference
HIT code if the object was detected or a MISS if it was not. If multiple HIT responses were found, the proxy server decides from which server to download, depending on factors such as which cache sent the fastest answer or which one is closer. If no satisfactory responses are received, the request is sent to the parent cache. TIP To avoid duplication of objects in different caches in the network, other ICP protocols are used, such as CARP (cache array routing protocol) or HTCP (hypertext cache protocol). The more objects maintained in the network, the greater the possibility of finding the desired one.
523
29.2.3 RAM
The amount of memory (RAM) required by Squid directly correlates to the number of objects in the cache. Squid also stores cache object references and frequently requested objects in the main memory to speed up retrieval of this data. Random access memory is much faster than a hard disk. In addition to that, there is other data that Squid needs to keep in memory, such as a table with all the IP addresses handled, an exact domain name cache, the most frequently requested objects, access control lists, buffers, and more.
524
Reference
It is very important to have sufficient memory for the Squid process, because system performance is dramatically reduced if it must be swapped to disk. The cachemgr.cgi tool can be used for the cache memory management. This tool is introduced in Section 29.6, cachemgr.cgi (page 536). Sites with huge network traffic should consider using an AMD64 or Intel EM64T system with more than 4 GB of memory.
29.2.4 CPU
Squid is not a program that requires intensive CPU usage. The load of the processor is only increased while the contents of the cache are loaded or checked. Using a multiprocessor machine does not increase the performance of the system. To increase efficiency, it is better to buy faster disks or add more memory.
525
so, consider that Squid is made completely accessible to anyone by this action. Therefore, define ACLs that control access to the proxy. More information about this is available in Section 29.4.2, Options for Access Controls (page 530). After modifying the configuration file /etc/squid/squid.conf, Squid must reload the configuration file. Do this with rcsquid reload. Alternatively, completely restart Squid with rcsquid restart. The command rcsquid status can be used to check if the proxy is running. The command rcsquid stop causes Squid to shut down. This can take a while, because Squid waits up to half a minute (shutdown_lifetime option in /etc/squid/ squid.conf) before dropping the connections to the clients and writing its data to the disk. WARNING: Terminating Squid Terminating Squid with kill or killall can damage the cache. To be able to restart Squid, the damaged cache must be deleted. If Squid dies after a short period of time even though it was started successfully, check whether there is a faulty name server entry or whether the /etc/resolv.conf file is missing. Squid logs the cause of a start-up failure in the file /var/log/squid/ cache.log. If Squid should be loaded automatically when the system boots, use the YaST runlevel editor to activate Squid for the desired runlevels. See Section System Services (Runlevel) (Chapter 2, System Configuration with YaST, Start-Up). An uninstall of Squid does not remove the cache hierarchy or the log files. To remove these, delete the /var/cache/squid directory manually.
526
Reference
Dynamic DNS Normally, with dynamic DNS, the DNS server is set by the provider during the establishment of the Internet connection and the local file /etc/resolv.conf is adjusted automatically. This behavior is controlled in the file /etc/ sysconfig/network/config with the sysconfig variable MODIFY_RESOLV_CONF_DYNAMICALLY, which is set to "yes". Set this variable to "no" with the YaST sysconfig editor (see Section 8.3.1, Changing the System Configuration Using the YaST sysconfig Editor (page 190)). Then enter the local DNS server in the file /etc/resolv.conf with the IP address 127.0.0.1 for localhost. This way Squid can always find the local name server when it starts. To make the provider's name server accessible, enter it in the configuration file /etc/named.conf under forwarders along with its IP address. With dynamic DNS, this can be achieved automatically during connection establishment by setting the sysconfig variable MODIFY_NAMED_CONF_DYNAMICALLY to YES. Static DNS With static DNS, no automatic DNS adjustments take place while establishing a connection, so there is no need to change any sysconfig variables. You must, however, enter the local DNS server in the file /etc/resolv.conf as described above. Additionally, the providers static name server must be entered manually in the file /etc/named.conf under forwarders along with its IP address. TIP: DNS and Firewall If you have a firewall running, make sure DNS requests can pass it.
end of the line. The given values almost always correlate with the default values, so removing the comment signs without changing any of the parameters actually has little effect in most cases. If possible, leave the sample as it is and insert the options along with the modified parameters in the line below. This way, the default values may easily be recovered and compared with the changes. TIP: Adapting the Configuration File after an Update If you have updated from an earlier Squid version, it is recommended to edit the new /etc/squid/squid.conf and only apply the changes made in the previous file. If you try to use the old squid.conf, risk that the configuration no longer works, because options are sometimes modified and new changes added.
528
Reference
cache_dir ufs /var/cache/squid/ 100 16 256 The entry cache_dir defines the directory where all the objects are stored on disk. The numbers at the end indicate the maximum disk space in MB to use and the number of directories in the first and second level. The ufs parameter should be left alone. The default is 100 MB occupied disk space in the /var/cache/squid directory and creation of 16 subdirectories inside it, each containing 256 more subdirectories. When specifying the disk space to use, leave sufficient reserve disk space. Values from a minimum of 50% to a maximum of 80% of the available disk space make the most sense here. The last two numbers for the directories should only be increased with caution, because too many directories can also lead to performance problems. If you have several disks that share the cache, enter several cache_dir lines. cache_access_log /var/log/squid/access.log, cache_log /var/log/squid/cache.log, cache_store_log /var/log/squid/store.log These three entries specify the paths where Squid logs all its actions. Normally, nothing is changed here. If Squid is experiencing a heavy usage burden, it might make sense to distribute the cache and the log files over several disks. emulate_httpd_log off If the entry is set to on, obtain readable log files. Some evaluation programs cannot interpret this, however. client_netmask 255.255.255.255 With this entry, mask IP addresses of clients in the log files. The last digit of the IP address is set to zero if you enter 255.255.255.0 here. You may protect the privacy of your clients that way. ftp_user Squid@ With this, set the password Squid should use for the anonymous FTP login. It can make sense to specify a valid e-mail address here, because some FTP servers check these for validity. cache_mgr webmaster An e-mail address to which Squid sends a message if it unexpectedly crashes. The default is webmaster. logfile_rotate 0 If you run squid -k rotate, Squid can rotate secured log files. The files are numbered in this process and, after reaching the specified value, the oldest file is
529
overwritten. The default value is 0 because archiving and deleting log files in SUSE Linux is carried out by a cron job set in the configuration file /etc/logrotate/ squid. append_domain <domain> With append_domain, specify which domain to append automatically when none is given. Usually, your own domain is entered here, so entering www in the browser accesses your own Web server. forwarded_for on If you set the entry to off, Squid removes the IP address and the system name of the client from HTTP requests. Otherwise it adds a line to the header like
X-Forwarded-For: 192.168.0.0
negative_ttl 5 minutes; negative_dns_ttl 5 minutes Normally, you do not need to change these values. If you have a dial-up connection, however, the Internet may, at times, not be accessible. Squid makes a note of the failed requests then refuses to issue new ones, although the Internet connection has been reestablished. In a case such as this, change the minutes to seconds then, after clicking Reload in the browser, the dial-up process should be reengaged after a few seconds. never_direct allow acl_name To prevent Squid from taking requests directly from the Internet, use the above command to force connection to another proxy. This must have previously been entered in cache_peer. If all is specified as the acl_name, force all requests to be forwarded directly to the parent. This might be necessary, for example, if you are using a provider that strictly stipulates the use of its proxies or denies its firewall direct Internet access.
530
Reference
acl <acl_name> <type> <data> An ACL requires at least three specifications to define it. The name <acl_name> can be chosen arbitrarily. For <type>, select from a variety of different options, which can be found in the ACCESS CONTROLS section in the /etc/squid/ squid.conf file. The specification for <data> depends on the individual ACL type and can also be read from a file, for example, via hostnames, IP addresses, or URLs. The following are some simple examples:
acl acl acl acl mysurfers srcdomain .my-domain.com teachers src 192.168.1.0/255.255.255.0 students src 192.168.7.0-192.168.9.0/255.255.255.0 lunch time MTWHF 12:00-15:00
http_access allow <acl_name> http_access defines who is allowed to use the proxy and who can access what on the Internet. For this, ACLs must be given. localhost and all have already been defined above, which can deny or allow access via deny or allow. A list containing any number of http_access entries can be created, processed from top to bottom, and, depending on which occurs first, access is allowed or denied to the respective URL. The last entry should always be http_access deny all. In the following example, the localhost has free access to everything while all other hosts are denied access completely.
http_access allow localhost http_access deny all
In another example using these rules, the group teachers always has access to the Internet. The group students only gets access Monday to Friday during lunch time.
http_access http_access http_access http_access deny localhost allow teachers allow students lunch time deny all
The list with the http_access entries should only be entered, for the sake of readability, at the designated position in the /etc/squid/squid.conf file. That is, between the text
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR # CLIENTS
531
redirect_program /usr/bin/squidGuard With this option, specify a redirector such as squidGuard, which allows blocking unwanted URLs. Internet access can be individually controlled for various user groups with the help of proxy authentication and the appropriate ACLs. squidGuard is a separate package that can be installed and configured. auth_param basic program /usr/sbin/pam_auth If users must be authenticated on the proxy, set a corresponding program, such as pam_auth. When accessing pam_auth for the first time, the user sees a login window in which to enter the username and password. In addition, an ACL is still required, so only clients with a valid login can use the Internet:
acl password proxy_auth REQUIRED http_access allow password http_access deny all
The REQUIRED after proxy_auth can be replaced with a list of permitted usernames or with the path to such a list. ident_lookup_access allow <acl_name> With this, have an ident request run for all ACL-defined clients to find each user's identity. If you apply all to the <acl_name>, this is valid for all clients. Also, an ident daemon must be running on all clients. For Linux, install the pidentd package for this purpose. For Microsoft Windows, free software is available for download from the Internet. To ensure that only clients with a successful ident lookup are permitted, define a corresponding ACL here:
acl identhosts ident REQUIRED http_access allow identhosts http_access deny all
Here, too, replace REQUIRED with a list of permitted usernames. Using ident can slow down the access time quite a bit, because ident lookups are repeated for each request.
532
Reference
533
Define ports or services (see /etc/services) on the firewall that are accessed from the secure (internal) network, both via TCP and UDP:
FW_SERVICES_INT_TCP="domain www 3128" FW_SERVICES_INT_UDP="domain"
This allows accessing Web services and Squid (whose default port is 3128). The service domain stands for DNS (domain name service). This service is commonly used. Otherwise, simply take it out of the above entries and set the following option to no:
FW_SERVICE_DNS="yes"
534
Reference
The comments above show the syntax to follow. First, enter the IP address and the netmask of the internal networks accessing the proxy firewall. Second, enter the IP address and the netmask to which these clients send their requests. In the case of Web browsers, specify the networks 0/0, a wild card that means to everywhere. After that, enter the original port to which these requests are sent and, finally, the port to which all these requests are redirected. Because Squid supports protocols other than HTTP, redirect requests from other ports to the proxy, such as FTP (port 21), HTTPS, or SSL (port 443). In this example, Web services (port 80) are redirected to the proxy port (port 3128). If there are more networks or services to add, they must be separated by a blank space in the respective entry.
FW_REDIRECT_TCP="192.168.0.0/16,0/0,80,3128 192.168.0.0/16,0/0,21,3128" FW_REDIRECT_UDP="192.168.0.0/16,0/0,80,3128 192.168.0.0/16,0/0,21,3128"
To start the firewall and the new configuration with it, change an entry in the /etc/ sysconfig/SuSEfirewall2 file. The entry START_FW must be set to "yes". Start Squid as shown in Section 29.3, Starting Squid (page 525). To check if everything is working properly, check the Squid logs in /var/log/squid/access.log. To verify that all ports are correctly configured, perform a port scan on the machine from any computer outside your network. Only the Web services (port 80) should be open. To scan the ports with nmap, the command syntax is nmap -O IP_address.
535
29.6 cachemgr.cgi
The cache manager (cachemgr.cgi) is a CGI utility for displaying statistics about the memory usage of a running Squid process. It is also a more convenient way to manage the cache and view statistics without logging the server.
29.6.1 Setup
First, a running Web server on your system is required. Configure Apache as described in Chapter 26, The Apache HTTP Server (page 447). To check if Apache is already running, as root enter the command rcapache status. If a message like this appears:
Checking for service httpd: OK Server uptime: 1 day 18 hours 29 minutes 39 seconds
Apache is running on the machine. Otherwise, enter rcapache start to start Apache with the SUSE Linux default settings. The last step to set it up is to copy the file cachemgr.cgi to the Apache directory cgi-bin:
cp /usr/share/doc/packages/squid/scripts/cachemgr.cgi /srv/www/cgi-bin/
These rules assume that the Web server and Squid are running on the same machine. If the communication between the cache manager and Squid originates at the Web
536
Reference
server on another computer, include an extra ACL as in Example 29.2, Access Rules (page 537). Example 29.2 Access Rules
acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl webserver src 192.168.1.7/255.255.255.255 # webserver IP
Then add the rules in Example 29.3, Access Rules (page 537) to permit access from the Web server. Example 29.3 Access Rules
http_access allow manager localhost http_access allow manager webserver http_access deny manager
Configure a password for the manager for access to more options, like closing the cache remotely or viewing more information about the cache. For this, configure the entry cachemgr_passwd with a password for the manager and the list of options to view. This list appears as a part of the entry comments in /etc/squid/squid.conf. Restart Squid every time the configuration file is changed. Do this easily with rcsquid reload.
29.7 squidGuard
This section is not intended to explain an extensive configuration of squidGuard, only to introduce it and give some advice for using it. For more in-depth configuration issues, refer to the squidGuard Web site at http://www.squidguard.org.
537
squidGuard is a free (GPL), flexible, and fast filter, redirector, and access controller plug-in for Squid. It lets you define multiple access rules with different restrictions for different user groups on a Squid cache. squidGuard uses Squid's standard redirector interface. squidGuard can do the following: Limit the Web access for some users to a list of accepted or well-known Web servers or URLs. Block access to some listed or blacklisted Web servers or URLs for some users. Block access to URLs matching a list of regular expressions or words for some users. Redirect blocked URLs to an intelligent CGI-based information page. Redirect unregistered users to a registration form. Redirect banners to an empty GIF. Use different access rules based on time of day, day of the week, date, etc. Use different rules for different user groups. squidGuard and Squid cannot be used to: Edit, filter, or censor text inside documents. Edit, filter, or censor HTML-embedded script languages, such as JavaScript or VBscript. Before it can be used, install squidGuard. Provide a minimal configuration file as /etc/squidguard.conf. Find configuration examples in http://www .squidguard.org/config/. Experiment later with more complicated configuration settings. Next, create a dummy access denied page or a more or less complex CGI page to redirect Squid if the client requests a blacklisted Web site. Using Apache is strongly recommended. Now, configure Squid to use squidGuard. Use the following entry in the /etc/squid/ squid.conf file:
538
Reference
redirect_program /usr/bin/squidGuard
Another option called redirect_children configures the number of redirect (in this case squidGuard) processes running on the machine. squidGuard is fast enough to handle many requests: on a 500 MHz Pentium with 5,900 domains and 7,880 URLs (totalling 13,780), 100,000 requests can be processed within 10 seconds. Therefore, it is not recommended to set more than four processes, because the allocation of these processes would consume an excessive amount of memory
redirect_children 4
Last, have Squid load the new configuration by running rcsquid reload. Now, test your settings with a browser.
539
This puts the report in the directory of the Web server. Apache is required to view the reports. Another powerful cache report generator tool is SARG (Squid Analysis Report Generator). More information about this is available at: http://sarg.sourceforge .net/.
540
Reference
Part V. Mobility
30
Mobile computing is mostly associated with laptops, PDAs, and cellular phones and the data exchange between them. Mobile hardware components, such as external hard disks, flash drives, or digital cameras, can be connected to laptops or desktop systems. A number of software components are involved in mobile computing scenarios and some applications are tailor-made for mobile use.
30.1 Laptops
The hardware of laptops differs from that of a normal desktop system. This is because criteria like exchangeability, occupied space, and power consumption are relevant properties. The manufacturers of mobile hardware have developed the PCMCIA (Personal Computer Memory Card International Association) standard. This standard covers memory cards, network interface cards, ISDN and modem cards, and external hard disks. How the support for such hardware is implemented in Linux, what needs to be taken into account during configuration, what software is available for the control of PCMCIA, and how to troubleshoot any possible problems is described in Chapter 31, PCMCIA (page 555).
543
544
Reference
Printing
?
Mail
? ? ? ?
Proxy X configuration
Network
The services affected in the case of a laptop commuting back and forth between a small home network and an office network are: Network This includes IP address assignment, name resolution, Internet connectivity, and connectivity to other networks. Printing A current database of available printers and an available print server must be present, depending on the network. E-Mail and Proxies As with printing, the list of the corresponding servers must be current. X If your laptop is temporarily connected to a beamer or an external monitor, the different display configurations must be available.
545
SUSE Linux offers several ways of integrating a laptop into existing operating environments: SCPM SCPM (system configuration profile management) allows storage of arbitrary configuration states of a system into a kind of snapshot called a profile. Profiles can be created for different situations. They are useful when a system is operated in changing environments (home network, office network). It is always possible to switch between profiles. Find information about SCPM in Chapter 32, System Configuration Profile Management (page 563). You can use the kicker applet Profile Chooser in KDE to switch between profiles. The application requires the root password before switching. NetworkManager NetworkManager is especially tailored for mobile networking on laptops. It provides a means to easily and automatically switch between network environments or different types of networks, such as wireless LAN and ethernet. NetworkManager supports WEP and WPA-PSK encryption in wireless LANs, dial-up connections (with smpppd). Both desktop environments (GNOME and KDE) include a frontend to NetworkManager. Table 30.1 Use Cases for NetworkManager Use NetworkManager Yes Yes
provides network services (such as DNS or DHCP) No only uses a static IP address No
Use the YaST tools to configure networking whenever NetworkManager should not handle network configuration. For more information about NetworkManager and its applets refer to Section 18.5, Managing Network Connections with NetworkManager (page 345).
546
Reference
SLP The service location protocol (SLP) simplifies the connection of a laptop to an existing network. Without SLP, the administrator of a laptop usually requires detailed knowledge of the services available in a network. SLP broadcasts the availability of a certain type of service to all clients in a local network. Applications that support SLP can process the information dispatched by SLP and be configured automatically. SLP can even be used for the installation of a system, sparing the effort of searching for a suitable installation source. Find detailed information about SLP in Chapter 19, SLP Services in the Network (page 363). The emphasis of SCPM lies on enabling and maintaining reproducible system conditions. SLP makes configuration of a networked computer a lot easier by automating much of it.
System Monitoring
Two KDE system monitoring tools are provided by SUSE Linux: KPowersave KPowersave is an applet that displays the state of the rechargeable battery in the control panel. The icon adjusts to represent the type of power supply. When working on AC power, a small plug icon is displayed. When working on batteries, the icon changes to a battery. The corresponding menu opens the YaST module for power management after requesting the root password. This allows setting the behavior of the system under different types of power supply. Find information about power management and about the corresponding YaST module in Chapter 33, Power Management (page 577). KSysguard KSysguard is an independent application that gathers all measurable parameters of the system into one monitoring environment. KSysguard has monitors for ACPI (battery status), CPU load, network, partitioning, and memory usage. It can also Mobile Computing with Linux 547
watch and display all system processes. The presentation and filtering of the collected data can be customized. It is possible to monitor different system parameters in various data pages or collect the data of various machines in parallel over the network. KSysguard can also run as a daemon on machines without a KDE environment. Find more information about this program in its integrated help function or in the SUSE help pages. Figure 30.2 Monitoring the Battery State with KSysguard
In the GNOME desktop, use the panel applet GNOME ACPI and the application System Monitor.
Synchronizing Data
When switching between working on a mobile machine disconnected from the network and working at a networked workstation in an office, it is necessary to keep processed data synchronized across all instances. This could include e-mail folders, directories, and individual files that need to be present for work on the road as well as at the office. The solution in both cases is as follows:
548
Reference
Synchronizing E-Mail Use an IMAP account for storing your e-mails in the office network. Then access the e-mails from the workstation using any disconnected IMAPenabled e-mail client, like Mozilla Thunderbird Mail, Evolution, or KMail as described in Applications. The e-mail client must be configured so that the same folder is always accessed for Sent messages. This ensures that all messages are available along with their status information after the synchronization process has completed. Use an SMTP server implemented in the mail client for sending messages instead of the systemwide MTA postfix or sendmail to receive reliable feedback about unsent mail. Synchronizing Files and Directories There are several utilities suitable for synchronizing data between a laptop and a workstation. For detailed information, refer to Chapter 27, File Synchronization (page 487).
Wireless Communication
As well as connecting to a home or office network with a cable, a laptop can also wirelessly connect to other computers, peripherals, cellular phones, or PDAs. Linux supports three types of wireless communication: WLAN With the largest range of these wireless technologies, WLAN is the only one suitable for the operation of large and sometimes even spatially disjointed networks. Single machines can connect with each other to form an independent wireless network or access the Internet. Devices called access points act as base stations for WLANenabled devices and act as intermediaries for access to the Internet. A mobile user can switch among access points depending on location and which access point is offering the best connection. Like in cellular telephony, a large network is available to WLAN users without binding them to a specific location for accessing it. Find details about WLAN in Section 34.1, Wireless LAN (page 603). Bluetooth Bluetooth has the broadest application spectrum of all wireless technologies. It can be used for communication between computers (laptops) and PDAs or cellular phones, as can IrDA. It can also be used to connect various computers within visible range. Bluetooth is also used to connect wireless system components, like a keyboard or mouse. The range of this technology is, however, not sufficient to connect remote systems to a network. WLAN is the technology of choice for communicating Mobile Computing with Linux 549
through physical obstacles like walls. Find more information about Bluetooth, its applications, and configuration in Section 34.2, Bluetooth (page 614). IrDA IrDA is the wireless technology with the shortest range. Both communication parties must be within viewing distance of each other. Obstacles like walls cannot be overcome. One possible application of IrDA is the transmission of a file from a laptop to a cellular phone. The short path from the laptop to the cellular phone is then covered using IrDA. The long range transport of the file to the recipient of the file is handled by the mobile network. Another application of IrDA is the wireless transmission of printing jobs in the office. Find more information about IrDA in Section 34.3, Infrared Data Transmission (page 625).
550
Reference
551
552
Reference
In the case of problems with power management with SUSE Linux on laptops, it is advisable to read the file README in /usr/share/doc/packages/powersave. This directory often contains last minute feedback by testers and developers, so provides valuable hints for the solution of problems.
553
PCMCIA
31
PCMCIA is often used to refer the hardware itself, although it originates from the organization that standardized all possible types of PC cards, the PC Memory Card International Association. In the beginning, PCMCIA only included PC cards (using a 16-bit bus like ISA cards), but later on CardBus cards (using a 32-bit bus) were included. A wide range of PCMCIA hardware is supported in Linux. Linux additionally includes tools for managing PCMCIA. PCMCIA cards are mainly used in mobile computing for different purposes. Examples include: Ethernet and wireless LAN adapters Bluetooth cards Memory cards (Flash, SRAM, and others) Memory card adapters (SD, MMC, SmartMedia, CompactFlash, MemoryStick) Modems Most of the card management is silently handled by udev and hotplug. When user interaction is required, you use pccardctl command. For PCMCIA background information, refer to Section 31.2, PCMCIA in Detail (page 556). For details on pccardctl, refer to Section 31.1, Controlling PCMCIA Cards Using pccardctl (page 556).
PCMCIA
555
556
Reference
1.
The PCMCIA bridge (or socket) must be set up properly as described in Section 31.2.1, Bridge Initialization (page 557). Prerequisites are:
an appropriate driver for the bridge additional I/O and memory ranges for PC cards 2. After the bridge is properly set up, the bridge driver detects the presence of a card and triggers its initialization as described in Section 31.2.2, Card Initialization (page 558): a. b. c. d. e. 3. Determine the card type. Supply the proper voltage. Assign I/O and memory ranges and IRQ lines to the card. Trigger the card or device initialization by binding the appropriate card driver. For some cards, the Card Information Structure (CIS) needs to be uploaded.
Finally, the interface itself is set up and ready for use. See Section 31.2.3, Interface Setup (page 559) for details on this.
3. 4.
a.
The pcmcia_socket events trigger udev to call /sbin/hwup and load the pcmcia kernel module. All I/O and memory ranges specified in /etc/pcmcia/config.opts are added to the socket. The card services in the kernel check these ranges. If the memory ranges in /etc/pcmcia/config.opts are wrong, this step may crash your machine. See Section 31.3.1, Machine Crashes on PCMCIA (page 559) for information about how to debug and fix this issue.
b.
c.
After these steps have been successfully completed, the bridge is fully initialized. After this, the card itself is initialized as described in the following section.
2.
3. 4.
After these steps have been completed, the system proceeds with interface setup as described in the next section. If your card is a PC card, you might need some of the following parameters in /etc/ sysconfig/pcmcia to get it fully supported and working flawlessly: PCMCIA_LOAD_CIS A PC card's firmware is referred to as CIS (Card Information Structure). It provides additional implementation details of the card. hwup checks the integrity of the card's built-in CIS and tries to load another CIS from disk if the card's CIS proves
558
Reference
to be defective. The default setting is yes. To disable CIS loading from disk, set this variable to no. PCMCIA_ALLOW_FUNC_MATCH Linux device drivers contain a device ID table that tells drivers which devices to handle. This means that only those devices whose IDs are known to the kernel are supported. To support those cards whose ID is not listed, you can use function matching. This means that the driver is not selected by ID, but by the function of the card (such as a network card) and would be responsible for any PC card inserted with that function (such as network cards). The default setting is yes. To disable function matching, set this variable to no. PCMCIA_COLDPLUG_REINSERT Cards that have been inserted before booting sometimes fail to be detected. To prevent that, cause a soft eject and a soft insert of the card by setting PCMCIA_COLDPLUG_REINSERT to yes. The default setting is no.
31.3 Troubleshooting
The following is a list of the most prominent issues that are occasionally encountered with PCMCIA. More information about this is available in the PCMCIA README (/usr/share/doc/packages/pcmciautils/README.SuSE).
PCMCIA
559
Once the culprit has been identified, you can circumvent the problematic step or component. To manually set up PCMCIA, proceed as follows: 1 Prevent PCMCIA from being started on system boot and enable SysRq for easier debugging by appending the following options to the boot prompt:
init=3 pcmcia=off sysrq=1
For more information about SysRq, refer to /usr/src/linux/ Documentation/sysrq.txt. 2 Boot the system into a text-based environment and log in as root. 3 Add the appropriate PCMCIA modules to the kernel:
/sbin/modprobe yenta_socket /sbin/modprobe pcmcia
Replace N with the number of the socket. Repeat this step for each socket. 5 If the previous step crashed your machine, this might have been caused by wrong I/O or memory ranges specified in /etc/pcmcia/config.opts. To prevent this, do one of the follwing: Exclude ranges in /ect/pcmcia/config.opts and retry the socket setup. Add the ranges manually as described below. After you successfully added the appropriate ranges manually, set them permanently by including them in /etc/pcmcia/config.opts. 6 After the socket setup has been successfully completed, card initialization and interface setup work as described in Section 31.2.2, Card Initialization (page 558) and Section 31.2.3, Interface Setup (page 559). To manually add I/O ranges, proceed as follows (for each socket): 560 Reference
1 Change into the directory that holds the range configurations (in this case, pcmcia_socket0, adapt for other socket numbers):
cd /sys/class/pcmcia_socket/pcmcia_socket0
Replace begin and end with the addresses where the new range should start and end. The correct values can only be determined by trial and error. Manually adding the following ranges:
echo 0x800 - 0x8ff > available_resources_io echo 0xc00 - 0xcff > available_resources_io
The same procedure applies for the memory ranges under available_resources _mem. IMPORTANT: Identifying Faulty Default Settings If you find a faulty range in the default configuration file (/etc/pcmcia/ config.opts) shipped with this product, file a bug against it in http:// bugzilla.novell.com, so that developers can look into this issue.
PCMCIA
561
4 Save the file to apply your settings. If additional modules need to be ejected on suspend, proceed as above and add the module names to the following variables:
UNLOAD_MODULES_BEFORE_SUSPEND2DISK="" UNLOAD_MODULES_BEFORE_SUSPEND2RAM="" UNLOAD_MODULES_BEFORE_STANDBY=""
For general information about the powersave daemon, refer to Section 33.5, The powersave Package (page 589).
562
Reference
32
563
32.1 Terminology
The following are some terms used in SCPM documentation and in the YaST module. system configuration Refers to the complete configuration of the computer. It covers all fundamental settings, such as the use of hard disk partitions, network settings, time zone selection, and keyboard mappings. profile or system profile A state that has been preserved and can be restored at any time. active profile Refers to the profile last selected. This does not mean that the current system configuration corresponds exactly to this profile, because the configuration can be modified at any time. resource An element that contributes to the system configuration. This can be a file or a softlink including metadata (like the user), permissions, or access time. This can also be a system service that runs in this profile, but is deactivated in another one. resource group Every resource belongs to a certain resource group. These groups contain all resources that logically belong togethermost groups would contain both a service and its configuration files. It is very easy to assemble resources managed by SCPM because this does not require any knowledge of the configuration files of the desired service. SCPM ships with a selection of preconfigured resource groups that should be sufficient for most scenarios.
564
Reference
Varying network environments, like wireless LAN at home and an ethernet at work Different printer configuration at home and at work To get SCPM up and running and have it manage your changing system configuration, proceed as follows: 1 Add the Profile Chooser applet to your panel and configure it to allow user switching as described in Section 32.3.1, Configuring the Profile Chooser Panel Applet (page 565). 2 Configure SCPM using the YaST Profile Manager module as described in Section 32.3.2, Configuring Basic SCPM Settings (page 566). 3 Create a profile for each of the different setups using SUMF (SCPM Unified Management Front-End) as described in Section 32.3.3, Creating a New Profile (page 568). 4 Switch to the profile appropriate for your current situation as described in Section 32.3.4, Switching Profiles (page 569). If you prefer to control SCPM with its command line interface, refer to Section 32.4, Configuring SCPM Using the Command Line (page 572) for details.
565
In GNOME, right-click the panel and select Profile Chooser from the list of available applets. In KDE, select System Desktop Applet Profile Chooser to add Profile Chooser to your panel.
566
Reference
To allow users other than root to manage profiles, proceed as follows: 1 Start YaST from the main menu and select the YaST Profile Manager. 2 Check Permit non-root Users to Manage Profiles. See Figure 32.2, YaST: Configure SCPM Users (page 568). 3 Click Configure Users. 4 Click Add to add any user who should be able to manage profiles. 5 For each user, specify whether he should have switch permissions only or whether this user should be allowed to switch, modify, and create profiles. 6 Click Accept to apply your settings and close YaST.
567
568
Reference
1 In your home setup, enable SCPM. 2 Rename the default profile to a more descriptive name by starting SUMF and selecting Profiles Edit and entering the new name. 3 In your setup at work, start SUMF and create the profile for your system environment at work. Once you have all profiles you need, you are ready to switch to them whenever a different system setup is required. Switching profiles is described in Section 32.3.4, Switching Profiles (page 569).
3 Use the arrow keys to select the appropriate profile and hit The system boots into the configuration selected. To switch profiles in a running system, proceed as follows:
1 Make sure that you are allowed to switch profiles as a non-root user. If you are not allowed to do so, refer to Section 32.3.2, Configuring Basic SCPM Settings (page 566). 2 Left-click the Profile Chooser panel applet. 3 Select the profile you need in the menu that opens using the arrow keys and hit Enter . SCPM runs a check for modified resources and prompts you for a confirmation of the switch. If changes have been made to the system configuration before the
569
switch, SCPM asks you to either keep them or discard them when switching to another profile.
570
Reference
All resource groups available on your system are listed as shown in Figure 32.3, Configuring Resource Groups (page 571). 3 To add or edit a resource group: a Set or edit Resource Group and Description. b Enter the appropriate resources (resources, services, or both) and delete those that are not needed. To reset the status of the selected resourcesdiscard any changes made to them and return to the initial configuration valueschoose Reset Group. c Click OK to leave the resource configuration. 4 Click OK to save your changes to the active profile. Figure 32.3 Configuring Resource Groups
571
Activate or deactivate a group with scpm activate_group NAME or scpm deactivate_group NAME. Replace NAME with the relevant group name.
572
Reference
573
SCPM then compares the current system configuration with the profile to which to switch. In this phase, SCPM evaluates which system services need to be stopped or restarted due to mutual dependencies or to reflect the changes in configuration. This is like a partial system reboot that concerns only a small part of the system while the rest continues operating without change. It is only at this point that the system services are stopped, all modified resources, such as configuration files, are written, and the system services are restarted.
574
Reference
WARNING: Integrating a Custom Script Additional scripts to be executed by SCPM must be made readable and executable for the superuser (root). The access to these files must be blocked for all other users. Enter the commands chmod 700 filename and chown root:root filename to give root exclusive permissions to the files. Query all additional settings entered with set with get. The command scpm get poststart, for example, returns the name of the poststart call or simply nothing if nothing has been attached. Reset such settings by overwriting with "". The command scpm set prestop "" removes the attached prestop program. All set and get commands can be applied to an arbitrary profile in the same manner as comments are added. For example, scpm get prestop filename work or scpm get prestop work.
32.5 Troubleshooting
This section covers frequent problems encountered with SCPM. Learn how they can arise and how you can solve these issues.
575
576
Reference
Power Management
33
Power management is especially important on laptop computers, but is also useful on other systems. Two technologies are available: APM (advanced power management) and ACPI (advanced configuration and power interface). In addition to these, it is also possible to control CPU frequency scaling to save power or decrease noise. These options can be configured manually or using a special YaST module. Unlike APM, which was previously used on laptops for power management only, the hardware information and configuration tool ACPI is available on all modern computers (laptops, desktops, and servers). All power management technologies require suitable hardware and BIOS routines. Most laptops and many modern desktops and servers meet these requirements. APM had been used in many older computers. Because APM largely consists of a function set implemented in the BIOS, the level of APM support may vary depending on the hardware. This is even more true of ACPI, which is even more complex. For this reason, it is virtually impossible to recommend one over the other. Simply test the various procedures on your hardware then select the technology that is best supported. IMPORTANT: Power Management for AMD64 Processors AMD64 processors with a 64-bit kernel only support ACPI.
Power Management
577
578
Reference
Shutdown of System Components Switching off the hard disk is the greatest single aspect of the power saving potential of the overall system. Depending on the reliability of the overall system, the hard disk can be put to sleep for some time. However, the risk of losing data increases with the duration of the sleep periods. Other components, like PCI devices that can be put into a special power saving mode, can be deactivated with ACPI (at least theoretically) or permanently disabled in the BIOS setup. Processor Speed Control In connection with the CPU, energy can be saved in three different ways: frequency and voltage scaling (also known as PowerNow! or Speedstep), throttling, and putting the processor to sleep (C states). Depending on the operating mode of the computer, these methods can also be combined.
33.2 APM
Some of the power saving functions are performed by the APM BIOS itself. On many laptops, standby and suspend states can be activated with key combinations or by closing the lid without any special operating system function. However, to activate these modes with a command, certain actions must be triggered before the system is suspended. To view the battery charge level, you need special program packages and a suitable kernel. SUSE Linux kernels have built-in APM support. However, APM is only activated if ACPI is not implemented in the BIOS and an APM BIOS is detected. To activate APM support, ACPI must be disabled with acpi=off at the boot prompt. Enter cat /proc/apm to check if APM is active. An output consisting of various numbers indicates that everything is OK. You should now be able to shut down the computer with the command shutdown -h. BIOS implementations that are not fully standard-compliant can cause problems with APM. Some problems can be circumvented with special boot parameters. All parameters are entered at the boot prompt in the form of apm=parameter. parameter is one of: on or off Enable or disable APM support.
Power Management
579
(no-)allow-ints Allow interrupts during the execution of BIOS functions. (no-)broken-psr The GetPowerStatus function of the BIOS does not work properly. (no-)realmode-power-off Reset processor to real mode prior to shutdown. (no-)debug Log APM events in system log. (no-)power-off Power system off after shutdown. bounce-interval=n Time in hundredths of a second after a suspend event during which additional suspend events are ignored. idle-threshold=n System inactivity percentage from which the BIOS function idle is executed (0=always, 100=never). idle-period=n Time in hundredths of a second after which the system activity is measured. The APM daemon (apmd) is no longer used. Its functionality is now handled by the new powersaved, which also supports ACPI and provides many other features.
33.3 ACPI
ACPI (advanced configuration and power interface) was designed to enable the operating system to set up and control the individual hardware components. ACPI supersedes both PnP and APM. It delivers information about the battery, AC adapter, temperature, fan, and system events, like close lid or battery low. The BIOS provides tables containing information about the individual components and hardware access methods. The operating system uses this information for tasks like assigning interrupts or activating and deactivating components. Because the operating
580
Reference
system executes commands stored in the BIOS, the functionality depends on the BIOS implementation. The tables ACPI can detect and load are reported in /var/log/boot .msg. See Section 33.3.4, Troubleshooting (page 586) for more information about troubleshooting ACPI problems.
Power Management
581
/proc/acpi/event All events are reported here and processed by the Powersave daemon (powersaved). If no daemon accesses this file, events, such as a brief click on the power button or closing the lid, can be read with cat /proc/acpi/event (terminate with Ctrl + C ). /proc/acpi/dsdt and /proc/acpi/fadt These files contain the ACPI tables DSDT (differentiated system description table) and FADT (fixed ACPI description table). They can be read with acpidmp, acpidisasm, and dmdecode. These programs and their documentation are located in the package pmtools. For example, acpidmp DSDT | acpidisasm. /proc/acpi/ac_adapter/AC/state Shows whether the AC adapter is connected. /proc/acpi/battery/BAT*/{alarm,info,state} Detailed information about the battery state. The charge level is read by comparing the last full capacity from info with the remaining capacity from state. A more comfortable way to do this is to use one of the special programs introduced in Section 33.3.3, ACPI Tools (page 586). The charge level at which a battery event (such as warning, low and critical) is triggered can be specified in alarm. /proc/acpi/button This directory contains information about various switches, like the laptop lid and buttons. /proc/acpi/fan/FAN/state Shows if the fan is currently active. Activate or deactivate the fan manually by writing 0 (on) or 3 (off) into this file. However, both the ACPI code in the kernel and the hardware (or the BIOS) overwrite this setting when the system gets too warm. /proc/acpi/processor/* A separate subdirectory is kept for each CPU included in your system. /proc/acpi/processor/*/info Information about the energy saving options of the processor.
582
Reference
/proc/acpi/processor/*/power Information about the current processor state. An asterisk next to C2 indicates that the processor is idle. This is the most frequent state, as can be seen from the usage value. /proc/acpi/processor/*/throttling Can be used to set the throttling of the processor clock. Usually, throttling is possible in eight levels. This is independent of the frequency control of the CPU. /proc/acpi/processor/*/limit If the performance (outdated) and the throttling are automatically controlled by a daemon, the maximum limits can be specified here. Some of the limits are determined by the system. Some can be adjusted by the user. /proc/acpi/thermal_zone/ A separate subdirectory exists for every thermal zone. A thermal zone is an area with similar thermal properties whose number and names are designated by the hardware manufacturer. However, many of the possibilities offered by ACPI are rarely implemented. Instead, the temperature control is handled conventionally by the BIOS. The operating system is not given much opportunity to intervene, because the life span of the hardware is at stake. Therefore, some of the files only have a theoretical value. /proc/acpi/thermal_zone/*/temperature Current temperature of the thermal zone. /proc/acpi/thermal_zone/*/state The state indicates if everything is ok or if ACPI applies active or passive cooling. In the case of ACPI-independent fan control, this state is always ok. /proc/acpi/thermal_zone/*/cooling_mode Select the cooling method controlled by ACPI. Choose from passive (less performance, economical) or active cooling mode (full performance, fan noise). /proc/acpi/thermal_zone/*/trip_points Enables the determination of temperature limits for triggering specific actions, like passive or active cooling, suspension (hot), or a shutdown (critical). The possible actions are defined in the DSDT (device-dependent). The trip points determined in the ACPI specification are critical, hot, passive, active1, and active2. Even if not all of them are implemented, they must always be entered
Power Management
583
in this file in this order. For example, the entry echo 90:0:70:0:0 > trip_points sets the temperature for critical to 90 and the temperature for passive to 70 (all temperatures measured in degrees Celsius). /proc/acpi/thermal_zone/*/polling_frequency If the value in temperature is not updated automatically when the temperature changes, toggle the polling mode here. The command echo X > /proc/acpi/thermal_zone/*/polling_frequency causes the temperature to be queried every X seconds. Set X=0 to disable polling. None of these settings, information, and events need to be edited manually. This can be done with the Powersave daemon (powersaved) and its various front-ends, like powersave, kpowersave, and wmpowersave. See Section 33.3.3, ACPI Tools (page 586).
584
Reference
hardware or in regard to specific processors or drivers, the userspace implementation is still the only working solution. ondemand governor This is the kernel implementation of a dynamic CPU frequency policy and should work on most systems. As soon as there is a high system load, the CPU frequency is immediately increased. It is lowered on a low system load. conservative governor This governor is similar to the ondemand implementation, except that a more conservative policy is used. The load of the system must be high for a specific amount of time before the CPU frequency is increased. powersave governor The cpu frequency is statically set to the lowest possible. performance governor The cpu frequency is statically set to the highest possible. Throttling the Clock Frequency This technology omits a certain percentage of the clock signal impulses for the CPU. At 25% throttling, every fourth impulse is omitted. At 87.5%, only every eighth impulse reaches the processor. However, the energy savings are a little less than linear. Normally, throttling is only used if frequency scaling is not available or to maximize power savings. This technology, too, must be controlled by a special process. The system interface is /proc/acpi/processor/*/throttling. Putting the Processor to Sleep The operating system puts the processor to sleep whenever there is nothing to do. In this case, the operating system sends the CPU a halt command. There are three states: C1, C2, and C3. In the most economic state, C3, even the synchronization of the processor cache with the main memory is halted. Therefore, this state can only be applied if no other device modifies the contents of the main memory via bus master activity. Some drivers prevent the use of C3. The current state is displayed in /proc/acpi/processor/*/power. Frequency scaling and throttling are only relevant if the processor is busy, because the most economic C state is applied anyway when the processor is idle. If the CPU is busy, frequency scaling is the recommended power saving method. Often the processor only works with a partial load. In this case, it can be run with a lower frequency. Usually, dynamic frequency scaling controlled by the kernel ondemand governor or a daemon, Power Management 585
such as powersaved, is the best approach. A static setting to a low frequency is useful for battery operation or if you want the computer to be cool or quiet. Throttling should be used as the last resort, for example, to extend the battery operation time despite a high system load. However, some systems do not run smoothly when they are throttled too much. Moreover, CPU throttling does not make sense if the CPU has little to do. In SUSE Linux these technologies are controlled by the powersave daemon. The configuration is explained in Section 33.5, The powersave Package (page 589).
33.3.4 Troubleshooting
There are two different types of problems. On one hand, the ACPI code of the kernel may contain bugs that were not detected in time. In this case, a solution will be made available for download. More often, however, the problems are caused by the BIOS. Sometimes, deviations from the ACPI specification are purposely integrated in the BIOS to circumvent errors in the ACPI implementation in other widespread operating systems. Hardware components that have serious errors in the ACPI implementation are recorded in a blacklist that prevents the Linux kernel from using ACPI for these components. The first thing to do when problems are encountered is to update the BIOS. If the computer does not boot at all, one of the following boot parameters may be helpful: pci=noacpi Do not use ACPI for configuring the PCI devices. acpi=oldboot Only perform a simple resource configuration. Do not use ACPI for other purposes.
586
Reference
acpi=off Disable ACPI. WARNING: Problems Booting without ACPI Some newer machines (especially SMP systems and AMD64 systems) need ACPI for configuring the hardware correctly. On these machines, disabling ACPI can cause problems. Monitor the boot messages of the system with the command dmesg | grep -2i acpi (or all messages, because the problem may not be caused by ACPI) after booting. If an error occurs while parsing an ACPI table, the most important tablethe DSDTcan be replaced with an improved version. In this case, the faulty DSDT of the BIOS is ignored. The procedure is described in Section 33.5.4, Troubleshooting (page 595). In the kernel configuration, there is a switch for activating ACPI debug messages. If a kernel with ACPI debugging is compiled and installed, experts searching for an error can be supported with detailed information. If you experience BIOS or hardware problems, it is always advisable to contact the manufacturers. Especially if they do not always provide assistance for Linux, they should be confronted with the problems. Manufacturers will only take the issue seriously if they realize that an adequate number of their customers use Linux.
Power Management
587
588
Reference
Apart from these processes, journaling file systems, like ReiserFS and Ext3, write their metadata independently from bdflush, which also prevents the hard disk from spinning down. To avoid this, a special kernel extension has been developed for mobile devices. See /usr/src/linux/Documentation/laptop-mode.txt for details. Another important factor is the way active programs behave. For example, good editors regularly write hidden backups of the currently modified file to the hard disk, causing the disk to wake up. Features like this can be disabled at the expense of data integrity. In this connection, the mail daemon postfix makes use of the variable POSTFIX_LAPTOP. If this variable is set to yes, postfix accesses the hard disk far less frequently. However, this is irrelevant if the interval for kupdated was increased.
Power Management
589
/etc/sysconfig/powersave/common This file contains general settings for the powersave daemon. For example, the amount of debug messages in /var/log/messages can be increased by increasing the value of the variable DEBUG. /etc/sysconfig/powersave/events The powersave daemon needs this file for processing system events. An event can be assigned external actions or actions performed by the daemon itself. For external actions, the daemon tries to run an executable file (usually a Bash script) in /usr/ lib/powersave/scripts/. Predefined internal actions are: ignore throttle dethrottle suspend_to_disk suspend_to_ram standby do_suspend_to_disk do_suspend_to_ram do_standby notify screen_saver reread_cpu_capabilities throttle slows down the processor by the value defined in MAX_THROTTLING. This value depends on the current scheme. dethrottle sets the processor to full performance. suspend_to_disk, suspend_to_ram, and standby trigger the system event for a sleep mode. These three actions are generally responsible for triggering the sleep mode, but they should always be associated with specific system events.
590
Reference
The directory /usr/lib/powersave/scripts contains scripts for processing events: switch_vt Useful if the screen is displaced after a suspend or standby. wm_logout Saves the settings and logs out from GNOME, KDE, or other window managers. wm_shutdown Saves the GNOME or KDE settings and shuts down the system. set_disk_settings Executes the disk settings made in /etc/sysconfig/powersave/disk. If, for example, the variable EVENT_GLOBAL_SUSPEND2DISK="prepare_suspend_to_disk do_suspend_to_disk" is set, the two scripts or actions are processed in the specified order as soon as the user gives powersaved the command for the sleep mode suspend to disk. The daemon runs the external script /usr/lib/ powersave/scripts/prepare_suspend_to_disk. After this script has been processed successfully, the daemon runs the internal action do_suspend_to_disk and sets the computer to the sleep mode after the script has unloaded critical modules and stopped services. The actions for the event of a sleep button could be modified as in EVENT_BUTTON_SLEEP="notify suspend_to_disk". In this case, the user is informed about the suspend by a pop-up window in X or a message on the console. Subsequently, the event EVENT_GLOBAL_SUSPEND2DISK is generated, resulting in the execution of the mentioned actions and a secure system suspend mode. The internal action notify can be customized using the variable NOTIFY_METHOD in /etc/sysconfig/powersave/common. /etc/sysconfig/powersave/cpufreq Contains variables for optimizing the dynamic CPU frequency settings and whether the userspace or the kernel implementation should be used. /etc/sysconfig/powersave/battery Contains battery limits and other battery-specific settings.
Power Management
591
/etc/sysconfig/powersave/sleep In this file, activate the sleep modes and determine which critical modules should be unloaded and which services should be stopped prior to a suspend or standby event. When the system is resumed, these modules are reloaded and the services are restarted. You can even delay a triggered sleep mode, for example, to save files. The default settings mainly concern USB and PCMCIA modules. A failure of suspend or standby is usually caused by certain modules. See Section 33.5.4, Troubleshooting (page 595) for more information about identifying the error. /etc/sysconfig/powersave/thermal Activates cooling and thermal control. Details about this subject are available in the file /usr/share/doc/packages/powersave/README.thermal. /etc/sysconfig/powersave/disk This configuration file controls the actions and settings made regarding the hard disk. /etc/sysconfig/powersave/scheme_* These are the various schemes that adapt the power consumption to certain deployment scenarios. A number of schemes are preconfigured and can be used as they are. Custom schemes can be saved here.
592
Reference
Standby (ACPI S1, APM standby) Switches some devices off (manufacturer-dependent). Make sure that the following default options are set in the file /etc/sysconfig/ powersave/events for the correct processing of suspend, standby, and resume (default settings following the installation of SUSE Linux):
EVENT_GLOBAL_SUSPEND2DISK= "prepare_suspend_to_disk screen_saver do_suspend_to_disk" EVENT_GLOBAL_SUSPEND2RAM= "prepare_suspend_to_ram screen_saver do_suspend_to_ram" EVENT_GLOBAL_STANDBY= "prepare_standby screen_saver do_standby" EVENT_GLOBAL_RESUME_SUSPEND2DISK= "restore_after_suspend_to_disk" EVENT_GLOBAL_RESUME_SUSPEND2RAM= "restore_after_suspend_to_ram" EVENT_GLOBAL_RESUME_STANDBY= "restore_after_standby"
The actions or scripts to execute when the charge levels drop under the specified limits are defined in the configuration file /etc/sysconfig/powersave/events. The standard actions for buttons can be modified as described in Section 33.5.1, Configuring the powersave Package (page 589).
EVENT_BATTERY_NORMAL="ignore" EVENT_BATTERY_WARNING="notify" EVENT_BATTERY_LOW="notify" EVENT_BATTERY_CRITICAL="wm_shutdown"
Power Management
593
increase as soon as the system is connected to the AC power supply. The CPU frequency, the power saving function of IDE, and a number of other parameters can be modified. The actions to execute when the computer is disconnected from or connected to the AC power supply are defined in /etc/sysconfig/powersave/events. Select the schemes to use in /etc/sysconfig/powersave/common:
AC_SCHEME="performance" BATTERY_SCHEME="powersave"
The schemes are stored in files in /etc/sysconfig/powersave. The filenames are in the format scheme_name-of-the-scheme. The example refers to two schemes: scheme_performance and scheme_powersave. performance, powersave, presentation, and acoustic are preconfigured. Existing schemes can be edited, created, deleted, or associated with different power supply states with the help of the YaST power management module described in Section 33.6, The YaST Power Management Module (page 597).
Further throttling of the CPU performance is possible if the CPU load does not exceed a specified limit for a specified time. Specify the load limit in PROCESSOR_IDLE_LIMIT and the time-out in CPU_IDLE_TIMEOUT. If the CPU load stays below the limit longer than the time-out, the event configured in EVENT_PROCESSOR_IDLE is activated. If the CPU is busy again, EVENT_PROCESSOR_BUSY is executed.
33.5.4 Troubleshooting
All error messages and alerts are logged in the file /var/log/messages. If you cannot find the needed information, increase the verbosity of the messages of powersave using DEBUG in the file /etc/sysconfig/powersave/common. Increase the value of the variable to 7 or even 15 and restart the daemon. The more detailed error messages in /var/log/messages should help you to find the error. The following sections cover the most common problems with powersave.
Power Management
595
3 Copy the file DSDT.aml to any location (/etc/DSDT.aml is recommended). Edit /etc/sysconfig/kernel and adapt the path to the DSDT file accordingly. Start mkinitrd (package mkinitrd). Whenever you install the kernel and use mkinitrd to create an initrd, the modified DSDT is integrated and loaded when the system is booted.
596
Reference
If you use suspend or standby in changing network environments or in connection with remotely mounted file systems, such as Samba and NIS, use automounter to mount them or add the respective services, for example, smbfs or nfs, in the above-mentioned variable. If an application accesses the remotely mounted file system prior to a suspend or standby, the service cannot be stopped correctly and the file system cannot be unmounted properly. After resuming the system, the file system may be corrupt and must be remounted.
Power Management
597
In this dialog, select the schemes to use for battery operation and AC operation. To add or modify the schemes, click Edit Schemes, which opens an overview of the existing schemes like that shown in Figure 33.2, Overview of Existing Schemes (page 598). Figure 33.2 Overview of Existing Schemes
598
Reference
In the scheme overview, select the scheme to modify then click Edit. To create a new scheme, click Add. The dialog that opens is the same in both cases and is shown in Figure 33.3, Configuring a Scheme (page 599). Figure 33.3 Configuring a Scheme
First, enter a suitable name and description for the new or edited scheme. Determine if and how the CPU performance should be controlled for this scheme. Decide if and to what extent frequency scaling and throttling should be used. In the following dialog for the hard disk, define a Standby Policy for maximum performance or for energy saving. The Acoustic Policy controls the noise level of the hard disk (supported by few hard disks). The Cooling Policy determines the cooling method to use. Unfortunately, this type of thermal control is rarely supported by the BIOS. Read /usr/share/ doc/packages/powersave/powersave_manual.html#Thermal to learn how you can use the fan and passive cooling methods. Global power management settings can also be made from the initial dialog using Battery Warnings, ACPI Settings, or Enable Suspend. Click Battery Warnings to access the dialog for the battery charge level, shown in Figure 33.4, Battery Charge Level (page 600).
Power Management
599
The BIOS of your system notifies the operating system whenever the charge level drops under certain configurable limits. In this dialog, define three limits: Warning Capacity, Low Capacity, and Critical Capacity. Specific actions are triggered when the charge level drops under these limits. Usually, the first two states merely trigger a notification to the user. The third critical level triggers a shutdown, because the remaining energy is not sufficient for continued system operation. Select suitable charge levels and the desired actions then click OK to return to the start dialog.
600
Reference
Access the dialog for configuring the ACPI buttons using ACPI Settings. It is shown in Figure 33.5, ACPI Settings (page 601). The settings for the ACPI buttons determine how the system should respond to certain switches. Configure the system response to pressing the power button, pressing the sleep button, and closing the laptop lid. Click OK to complete the configuration and return to the start dialog. Click Enable Suspend to enter a dialog in which to determine if and how users of this system may use the suspend or standby functionality. Click OK to return to the main dialog. Click OK again to exit the module and confirm your power management settings.
Power Management
601
Wireless Communication
34
There are several possibilities for using your Linux system to communicate with other computers, cellular phones, or peripheral devices. WLAN (wireless LAN) can be used to network laptops. Bluetooth can be used to connect individual system components (mouse, keyboard), peripheral devices, cellular phones, PDAs, and individual computers with each other. IrDA is mostly used for communication with PDAs or cellular phones. This chapter introduces all three technologies and their configuration.
Wireless Communication
603
Overview of Various WLAN Standards Band (GHz) Maximum Trans- Note mission Rate (MBit/s) 2 Outdated; virtually no end devices available Widespread Less common Backward-compatible with 11b
802.11
2.4
2.4 5 2.4
11 54 54
Additionally, there are proprietary standards, like the 802.11b variation of Texas Instruments with a maximum transmission rate of 22 MBit/s (sometimes referred to as 802.11b+). However, the popularity of cards using this standard is limited.
34.1.1 Hardware
802.11 cards are not supported by SUSE Linux. Most cards using 802.11a, 802.11b, and 802.11g are supported. New cards usually comply with the 802.11g standard, but cards using 802.11b are still available. Normally, cards with the following chips are supported: Aironet 4500, 4800 Atheros 5210, 5211, 5212 Atmel at76c502, at76c503, at76c504, at76c506 Intel PRO/Wireless 2100, 2200BG, 2915ABG Intersil Prism2/2.5/3 Intersil PrismGT Lucent/Agere Hermes 604 Reference
Ralink RT2400, RT2500 Texas Instruments ACX100, ACX111 ZyDAS zd1201 A number of older cards that are rarely used and no longer available are also supported. An extensive list of WLAN cards and the chips they use is available at the Web site of AbsoluteValue Systems at http://www.linux-wlan.org/docs/wlan _adapters.html.gz. http://wiki.uni-konstanz.de/wiki/bin/ view/Wireless/ListeChipsatz provides an overview of the various WLAN chips. Some cards need a firmware image that must be loaded into the card when the driver is initialized. This is the case with Intersil PrismGT, Atmel, and TI ACX100 and ACX111. The firmware can easily be installed with the YaST Online Update. The firmware for Intel PRO/Wireless cards ships with SUSE Linux and is automatically installed by YaST as soon as a card of this type is detected. More information about this subject is available in the installed system in /usr/share/doc/packages/ wireless-tools/README.firmware.
34.1.2 Function
In wireless networking, various techniques and configurations are used to ensure fast, high-quality, and secure connections. Different operating types suit different setups. It can be difficult to choose the right authentication method. The available encryption methods have different advantages and pitfalls.
Operating Mode
Basically, wireless networks can be classified as managed networks and ad-hoc networks. Managed networks have a managing element: the access point. In this mode (also referred to as infrastructure mode), all connections of the WLAN stations in the network run over the access point, which may also serve as a connection to an ethernet. Ad-hoc networks do not have an access point. The stations communicate directly with each other. The transmission range and number of participating stations are greatly limited in ad-hoc networks. Therefore, an access point is usually more efficient. It is even possible to use a WLAN card as an access point. Most cards support this functionality.
Wireless Communication
605
Because a wireless network is much easier to intercept and compromise than a wired network, the various standards include authentication and encryption methods. In the original version of the IEEE 802.11 standard, these are described under the term WEP. However, because WEP has proven to be insecure (see Section Security (page 612)), the WLAN industry (joined under the name Wi-Fi Alliance) has defined a new extension called WPA, which is supposed to eliminate the weaknesses of WEP. The later IEEE 802.11i standard (also referred to as WPA2, because WPA is based on a draft version 802.11i) includes WPA and some other authentication and encryption methods.
Authentication
To make sure that only authorized stations can connect, various authentication mechanisms are used in managed networks: Open An open system is a system that does not require authentication. Any station can join the network. Nevertheless, WEP encryption (see Section Encryption (page 607)) can be used. Shared Key (according to IEEE 802.11) In this procedure, the WEP key is used for the authentication. However, this procedure is not recommended, because it makes the WEP key more susceptible to attacks. All an attacker needs to do is to listen long enough to the communication between the station and the access point. During the authentication process, both sides exchange the same information, once in encrypted form and once in unencrypted form. This makes it possible for the key to be reconstructed with suitable tools. Because this method makes use of the WEP key for the authentication and for the encryption, it does not enhance the security of the network. A station that has the correct WEP key can authenticate, encrypt, and decrypt. A station that does not have the key cannot decrypt received packets. Accordingly, it cannot communicate, regardless of whether it had to authenticate itself. WPA-PSK (according to IEEE 802.1x) WPA-PSK (PSK stands for preshared key) works similarly to the Shared Key procedure. All participating stations as well as the access point need the same key. The key is 256 bits in length and is usually entered as a passphrase. This system does not need a complex key management like WPA-EAP and is more suitable for private use. Therefore, WPA-PSK is sometimes referred to as WPA Home.
606
Reference
WPA-EAP (according to IEEE 802.1x) Actually, WPA-EAP is not an authentication system but a protocol for transporting authentication information. WPA-EAP is used to protect wireless networks in enterprises. In private networks, it is scarcely used. For this reason, WPA-EAP is sometimes referred to as WPA Enterprise. WPA-EAP needs a Radius server to authenticate users. EAP offers three different methods for connecting and authenticating to the server: TLS (Transport Layer Security), TTLS (Tunneled Transport Layer Security), and PEAP (Protected Extensible Authentication Protocol). In a nutshell, these options work as follows: EAP-TLS TLS authentication relies on the mutual exchange of certificates both for server and client. First, the server presents its certificate to the client where it is evaluated. If the certificate is considered valid, the client in turn presents its certificate to the server. While TLS is secure, it requires a working certification management infrastructure in your network. This infrastructure is rarely found in private networks. EAP-TTLS and PEAP Both TTLS and PEAP are two-stage protocols. In the first stage, a secure is established and in the second one the client authentication data is exchanged. They require far less certification management overhead than TLS, if any.
Encryption
There are various encryption methods to ensure that no unauthorized person can read the data packets that are exchanged in a wireless network or gain access to the network: WEP (defined in IEEE 802.11) This standard makes use of the RC4 encryption algorithm, originally with a key length of 40 bits, later also with 104 bits. Often, the length is declared as 64 bits or 128 bits, depending on whether the 24 bits of the initialization vector are included. However, this standard has some weaknesses. Attacks against the keys generated by this system may be successful. Nevertheless, it is better to use WEP than not encrypt the network at all. TKIP (defined in WPA/IEEE 802.11i) This key management protocol defined in the WPA standard uses the same encryption algorithm as WEP, but eliminates its weakness. Because a new key is generated
Wireless Communication
607
for every data packet, attacks against these keys are in vain. TKIP is used together with WPA-PSK. CCMP (defined in IEEE 802.11i) CCMP describes the key management. Usually, it is used in connection with WPAEAP, but it can also be used with WPA-PSK. The encryption takes place according to AES and is stronger than the RC4 encryption of the WEP standard.
608
Reference
Operating Mode A station can be integrated in a WLAN in three different modes. The suitable mode depends on the network in which to communicate: Ad-hoc (peer-to-peer network without access point), Managed (network is managed by an access point), or Master (your network card should be used as the access point). To use any of the WPA-PSK or WPA-EAP modes, the operating mode must be set to managed. Network Name (ESSID) All stations in a wireless network need the same ESSID for communicating with each other. If nothing is specified, the card automatically selects an access point, which may not be the one you intended to use. Authentication Mode Select a suitable authentication method for your network: Open, Shared Key, WPAPSK, or WPA-EAP. If you select WPA authentication, a network name must be set. Expert Settings This button opens a dialog for the detailed configuration of your WLAN connection. A detailed description of this dialog is provided later. After completing the basic settings, your station is ready for deployment in the WLAN. IMPORTANT: Security in Wireless Networks Be sure to use one of the supported authentication and encryption methods to protect your network traffic. Unencrypted WLAN connections allow third parties to intercept all network data. Even a weak encryption (WEP) is better than none at all. Refer to Section Encryption (page 607) and Section Security (page 612) for information. Depending on the selected authentication method, YaST prompts you to fine-tune the settings in another dialog. For Open, there is nothing to configure, because this setting implements unencrypted operation without authentication. WEP Keys Set a key input type. Choose from Passphrase, ASCII, or Hexadecimal. You may keep up to four different keys to encrypt the transmitted data. Click Multiple Keys to enter the key configuration dialog. Set the length of the key: 128 bit or 64 bit. The default setting is 128 bit. In the list area at the bottom of the dialog, up to four
Wireless Communication
609
different keys can be specified for your station to use for the encryption. Press Set as Default to define one of them as the default key. Unless you change this, YaST uses the first entered key as the default key. If the standard key is deleted, one of the other keys must be marked manually as the default key. Click Edit to modify existing list entries or create new keys. In this case, a pop-up window prompts you to select an input type (Passphrase, ASCII, or Hexadecimal). If you select Passphrase, enter a word or a character string from which a key is generated according to the length previously specified. ASCII requests an input of 5 characters for a 64-bit key and 13 characters for a 128-bit key. For Hexadecimal, enter 10 characters for a 64-bit key or 26 characters for a 128-bit key in hexadecimal notation. WPA-PSK To enter a key for WPA-PSK, select the input method Passphrase or Hexadecimal. In the Passphrase mode, the input must be 8 to 63 characters. In the Hexadecimal mode, enter 64 characters. WPA-EAP Enter the credentials you have been given by your network administrator. For TLS, provide the Client Certificate and Server Certificate. TTLS and PEAP require Identity and Password. Server Certificate is optional. YaST searches for any certificate under /etc/cert, so save the certificates given to you to this location and restrict access to these files to 0600 (owner read and write). Click Advanced Settings to enter the advanced authentication dialog for your WPAEAP setup. Select the authentication method for the second stage of EAP-TTLS or EAP-PEAP communication. If you selected TTLS in the previous dialog, choose auto, MD5, GTC, CHAP, PAP, MSCHAPv1, or MSCHAPv2. If you selected PEAP, choose auto, MD5, GTC, or MSCHAPv2. PEAP version can be used to force the use of a certain PEAP implementation if the automatically-determined setting does not work for you. Leave this dialog with OK. Click Expert Settings to leave the dialog for the basic configuration of the WLAN connection and enter the expert configuration. The following options are available in this dialog: Channel The specification of a channel on which the WLAN station should work is only needed in Ad-hoc and Master modes. In Managed mode, the card automatically searches the available channels for access points. In Ad-hoc mode, select one of the 12 offered channels for the communication of your station with the other stations.
610
Reference
In Master mode, determine on which channel your card should offer access point functionality. The default setting for this option is Auto. Bit Rate Depending on the performance of your network, you may want to set a certain bit rate for the transmission from one point to another. In the default setting Auto, the system tries to use the highest possible data transmission rate. Some WLAN cards do not support the setting of bit rates. Access Point In an environment with several access points, one of them can be preselected by specifying the MAC address. Use Power Management When you are on the road, use power saving technologies to maximize the operating time of your battery. More information about power management is available in Chapter 33, Power Management (page 577).
34.1.4 Utilities
hostap (package hostap) is used to run a WLAN card as an access point. More information about this package is available at the project home page (http://hostap .epitest.fi/). kismet (package kismet) is a network diagnosis tool with which to listen to the WLAN packet traffic. In this way, you can also detect any intrusion attempts in your network. More information is available at http://www.kismetwireless.net/ and in the manual page.
Wireless Communication
611
Security
If you want to set up a wireless network, remember that anybody within the transmission range can easily access it if no security measures are implemented. Therefore, be sure to activate an encryption method. All WLAN cards and access points support WEP encryption. Although this is not entirely safe, it does present an obstacle for a potential attacker. WEP is usually adequate for private use. WPA-PSK would be even better, but it is not implemented in older access points or routers with WLAN functionality. On some devices, WPA can be implemented by means of a firmware update. Furthermore, Linux does not support WPA on all hardware components. When this documentation was prepared, WPA only worked with cards using Atheros, Intel PRO/Wireless, or Prism2/2.5/3 chips. On Prism2/2.5/3, WPA only works if the hostap driver is used (see Section Problems with Prism2 Cards (page 613)). If WPA is not available, WEP is better than no encryption. In enterprises with advanced security requirements, wireless networks should only be operated with WPA.
612
Reference
34.1.6 Troubleshooting
If your WLAN card fails to respond, check if you have downloaded the needed firmware. Refer to Section 34.1.1, Hardware (page 604). The following paragraphs cover some known problems.
WPA
WPA support is quite new in SUSE Linux and still under development. Thus, YaST does not support the configuration of all WPA authentication methods. Not all wireless LAN cards and drivers support WPA. Some cards need a firmware update to enable WPA. If you want to use WPA, read /usr/share/doc/packages/ wireless-tools/README.wpa.
Wireless Communication
613
34.2 Bluetooth
Bluetooth is a wireless technology for connecting various devices, such as cellular phones, PDAs, peripheral devices, laptops, or system components like the keyboard or mouse. The name is derived from the Danish king Harold Bluetooth, who united various warring factions in Scandinavia. The Bluetooth logo is based on the runes for H (resembles a star) and B. A number of important aspects distinguish Bluetooth from IrDA. First, the individual devices do not need to see each other directly and, second, several devices can be connected in a network. However, the maximum data rate is 720 Kbps (in the current version 1.2). Theoretically, Bluetooth can even communicate through walls. In practice, however, this depends on the properties of the wall and the device class. There are three device classes with transmission ranges between ten and a hundred meters.
34.2.1 Basics
The following sections outline the basic principles of how Bluetooth works. Learn which software requirements need to be met, how Bluetooth interacts with your system, and how Bluetooth profiles work.
Software
To be able to use Bluetooth, you need a Bluetooth adapter (either a built-in adapter or an external device), drivers, and a Bluetooth protocol stack. The Linux kernel already contains the basic drivers for using Bluetooth. The Bluez system is used as protocol stack. To make sure that the applications work with Bluetooth, the base packages bluez-libs and bluez-utils must be installed. These packages provide a number of needed services and utilities. Additionally, some adapters, such as Broadcom or AVM BlueFritz!, require the bluez-firmware package to be installed. The bluez-cups package enables printing over Bluetooth connections. If you need to debug problems with Bluetooth connections, install the package bluez-hcidump.
General Interaction
A Bluetooth system consists of four interlocked layers that provide the desired functionality:
614
Reference
Hardware The adapter and a suitable driver for support by the Linux kernel. Configuration Files Used for controlling the Bluetooth system. Daemons Services that are controlled by the configuration files and provide the functionality. Applications The applications allow the functionality provided by the daemons to be used and controlled by the user. When inserting a Bluetooth adapter, its driver is loaded by the hotplug system. After the driver is loaded, the system checks the configuration files to see if Bluetooth should be started. If this is the case, it determines the services to start. Based on this information, the respective daemons are started. Bluetooth adapters are probed upon installation. If one or more are found, Bluetooth is enabled. Otherwise the Bluetooth system is deactivated. Any Bluetooth device added later must be enabled manually.
Profiles
In Bluetooth, services are defined by means of profiles, such as the file transfer profile, the basic printing profile, and the personal area network profile. To enable a device to use the services of another device, both must understand the same profilea piece of information that is often missing in the device package and manual. Unfortunately, some manufacturers do not comply strictly with the definitions of the individual profiles. Despite this, communication between the devices usually works smoothly. In the following text, local devices are those physically connected to the computer. All other devices that can only be accessed over wireless connections are referred to as remote devices.
34.2.2 Configuration
This section introduces Bluetooth configuration. Learn which configuration files are involved, which tools are needed, and how to configure Bluetooth with YaST or manually.
Wireless Communication
615
In the first step of the configuration, determine whether Bluetooth services should be started on your system. If you have enabled the Bluetooth services, two things can be configured. First, the Device Name. This is the name other devices display when your computer has been discovered. There are two placeholders available%h stands for the hostname of the system (useful, for example, if it is assigned dynamically by DHCP) and %d inserts the interface number (only useful if you have more than one Bluetooth adapter in your computer). For example, if you enter Laptop %h in the field and DHCP assigns the name unit123 to your computer, other remote devices would know your computer as Laptop unit123.
616
Reference
The Security Manager parameter is related to the behavior of the local system when a remote device tries to connect. The difference is in the handling of the PIN number. Either allow any device to connect without a PIN or determine how the correct PIN is chosen if one is needed. You can enter a PIN (stored in a configuration file) in the appropriate input field. If a device tries to connect, it first uses this PIN. If it fails, it falls back to using no PIN. For maximum security, it is best to choose Always Ask User for PIN. This option allows you to use different PINs for different (remote) devices. Click Advanced Daemon Configuration to enter the dialog for selecting and configuring the available services (called profiles in Bluetooth). All available services are displayed in a list and can be enabled or disabled by clicking Activate or Deactivate. Click Edit to open a dialog in which to specify additional arguments for the selected service (daemon). Do not change anything unless you are familiar with the service. After completing the configuration of the daemons, exit this dialog by clicking OK. Back in the main dialog, click Security Options to enter the security dialog and specify encryption, authentication, and scan settings. Then exit the security dialog to return to the main dialog. After you close the main dialog with Finish, your Bluetooth system is ready for use. From the main dialog, you can reach the Device and Service Classes dialog, too. Bluetooth devices are grouped into various device classes. In this dialog, choose the correct one for your computer, such as Desktop or Laptop. The device class is not very important, unlike the service class, also set here. Sometimes remote Bluetooth devices, like cell phones, only allow certain functions if they can detect the correct service class set on your system. This is often the case for cell phones that expect a class called Object Transfer before they allow the transfer of files from or to the computer. You can choose multiple classes. It is not useful to select all classes just in case. The default selection should be appropriate in most cases. To use Bluetooth to set up a network, activate PAND in the Advanced Daemon Configuration dialog and set the mode of the daemon with Edit. For a functional Bluetooth network connection, one pand must operate in the Listen mode and the peer in the Search mode. By default, the Listen mode is preset. Adapt the behavior of your local pand. Additionally, configure the bnepX interface (X stands for the device number in the system) in the YaST Network Card module.
Wireless Communication
617
Set the name under which the computer is displayed on the other side in the device section. The device class, such as Desktop, Laptop, or Server, is defined in this section. Authentication and encryption are also enabled or disabled here.
hcitool
hcitool can be used to determine whether local and remote devices are detected. The command hcitool dev lists the local devices. The output generates a line in the form interface_name device_address for every detected local device. Search for remote devices with the command hcitool inq. Three values are returned for every detected device: the device address, the clock offset, and the device class. The device address is important, because other commands use it for identifying the target device. The clock offset mainly serves a technical purpose. The class specifies the device type and the service type as a hexadecimal value. The command hcitool name device-address can be used to determine the device name of a remote device. In the case of a remote computer, the class and the device name correspond to the information in its /etc/bluetooth/hcid.conf. Local device addresses generate an error output.
Wireless Communication
619
hciconfig
The command /usr/sbin/hciconfig delivers further information about the local device. If hciconfig is executed without any arguments, the output shows device information, such as the device name (hciX), the physical device address (a 12-digit number in the form 00:12:34:56:78), and information about the amount of transmitted data. hciconfig hci0 name displays the name that is returned by your computer when it receives requests from remote devices. As well as querying the settings of the local device, hciconfig can be used for modifying these settings. For example, hciconfig hci0 name TEST sets the name to TEST.
sdptool
The program sdptool can be used to check which services are made available by a specific device. The command sdptool browse device_address returns all services of a device. Use the command sdptool search service_code to search for a specific service. This command scans all accessible devices for the requested service. If one of the devices offers the service, the program prints the full service name returned by the device together with a brief description. View a list of all possible service codes by entering sdptool without any parameters.
620
Reference
34.2.5 Examples
This section features two typical examples of possible Bluetooth scenarios. The first shows how a network connection between two hosts can be established via Bluetooth. The second features a connection between a computer and a mobile phone.
Instead of 00:12:34:56:89:90, the output should contain the local device address baddr1 or baddr2. Now this interface must be assigned an IP address and activated. On H1, this can be done with the following two commands:
ip addr add 192.168.1.3/24 dev bnep0 ip link set bnep0 up
On H2:
ip addr add 192.168.1.4/24 dev bnep0 ip link set bnep0 up
Now H1 can be accessed from H2 under the IP 192.168.1.3. Use the command ssh 192.168.1.4 to access H2 from H1, assuming H2 runs an sshd, which is activated by default in SUSE Linux. The command ssh 192.168.1.4 can also be run as a normal user.
Wireless Communication
621
Two important parameters are used: --sdp registers the service with sdpd and --path /tmp instructs the program where to save the received datain this case to /tmp. You can also specify any other directory to which you have write access. If you use kbluetooth, you are prompted for a directory when the photograph is received on the laptop. Now the mobile phone must get to know the computer. To do this, open the Connect menu on the phone and select Bluetooth. If necessary, click Turn On before selecting My devices. Select New device and let your phone search for the laptop. If a device is detected, its name appears in the display. Select the device associated with the laptop. If you encounter a PIN query, enter the PIN specified in /etc/bluetooth/pin. Now your phone recognizes the laptop and is able to exchange data with the laptop. Exit the current menu and go to the image menu. Select the image to transfer and press More. In the next menu, press Send to select a transmission mode. Select Via Bluetooth. The laptop should be listed as a target device. Select the laptop to start the transmission. The image is then saved to the directory specified with the opd command. Audio tracks can be transferred to the laptop in the same way.
622
Reference
34.2.6 Troubleshooting
If you have difficulties establishing a connection, proceed according to the following list. Remember that the error can be on either side of a connection or even on both sides. If possible, reconstruct the problem with another Bluetooth device to verify that the device is not defective. Is the local device listed in the output of hcitool dev? If the local device is not listed in this output, hcid is not started or the device is not recognized as a Bluetooth device. This can have various causes. The device may be defective or the correct driver may be missing. Laptops with built-in Bluetooth often have an on and off switch for wireless devices, like WLAN and Bluetooth. Check the manual of your laptop to see if your device has such a switch. Restart the Bluetooth system with the command rcbluetooth restart and check if any errors are reported in /var/log/messages. Does your Bluetooth adapter need a firmware file? If it does, install bluez-bluefw and restart the Bluetooth system with rcbluetooth restart. Does the output of hcitool inq return other devices? Test this command more than once. The connection may have interferences, because the frequency band of Bluetooth is also used by other devices. Do the PINs match? Check if the PIN number of the computer (in /etc/bluetooth/pin) matches that of the target device. Can the remote device see your computer? Try to establish the connection from the remote device. Check if this device sees the computer. Can a network connection be established (see Section Network Connection between Two Hosts (page 621))? The setup described in Section Network Connection between Two Hosts (page 621) may not work for several reasons. For example, one of the two computers may not support the ssh protocol. Try ping 192.168.1.3 or ping 192.168.1.4. If this works, check if sshd is active. Another problem could be that one of the two devices already has network settings that conflict with the address 192.168.1.X
Wireless Communication
623
in the example. If this is the case, try different addresses, such as 10.123.1.2 and 10.123.1.3. Does the laptop appear as a target device (see Section Data Transfer from a Mobile Phone to the Computer (page 622))? Does the mobile device recognize the Obex-Push service on the laptop? In My devices, select the respective device and view the list of Services. If ObexPush is not displayed (even after the list is updated), the problem is caused by opd on the laptop. Is opd active? Do you have write access to the specified directory? Does the scenario described in Section Data Transfer from a Mobile Phone to the Computer (page 622) work the other way around? If the obexftp package is installed, the command obexftp -b device_address -B 10 -p image can be used on some devices. Several Siemens and Sony Ericsson models have been tested and found to be functional. Refer to the documentation in /usr/share/doc/packages/obexftp. If you have installed the bluez-hcidump package, you can use hcidump -X to check what is sent between the devices. Sometimes the output helps give a hint where the problem is, but be aware of the fact that it is only partly in clear text.
624
Reference
34.3.1 Software
The necessary kernel modules are included in the kernel package. The package irda provides the necessary helper applications for supporting the infrared interface. The documentation can be found at /usr/share/doc/packages/irda/README after the installation of the package.
34.3.2 Configuration
The IrDA system service is not started automatically when the system is booted. Use the YaST IrDA module for the activation. Only one setting can be modified in this module: the serial interface of the infrared device. The test window shows two outputs. One is the output of irdadump, which logs all sent and received IrDA packets. This output should contain the name of the computer and the names of all infrared devices in transmission range. An example for these messages is shown in Section 34.3.4, Troubleshooting (page 627). All devices to which an IrDA connection exists are listed in the lower part of the window.
Wireless Communication
625
IrDA consumes a considerable amount of battery power, because a discovery packet is sent every few seconds to detect other peripheral devices. Therefore, IrDA should only be started when necessary if you depend on battery power. Enter the command rcirda start to activate it or rcirda stop to deactivate it. All needed kernel modules are loaded automatically when the interface is activated. Manual configuration can be performed in the file /etc/sysconfig/irda. This file contains only one variable, IRDA_PORT, which determines the interface to use in SIR mode.
34.3.3 Usage
Data can be sent to the device file /dev/irlpt0 for printing. The device file /dev/ irlpt0 acts just like the normal /dev/lp0 cabled interface, except the printing data is sent wirelessly with infrared light. For printing, make sure that the printer is in visual range of the computer's infrared interface and the infrared support is started. A printer that is operated over the infrared interface can be configured with the YaST Printer module. Because it is not detected automatically, configure it manually by clicking Other (not detected). In the following dialog, select IrDA printer. Usually, irlpt0 is the right connection. Details about operating printers in Linux are available in Chapter 11, Printer Operation (page 227). Communication with other hosts and with mobile phones or other similar devices is conducted through the device file /dev/ircomm0. The Siemens S25 and Nokia 6210 mobile phones, for example, can dial and connect to the Internet with the wvdial application using the infrared interface. Synchronizing data with a Palm Pilot is also possible, provided the device setting of the corresponding application has been set to /dev/ ircomm0. If you want, you can address only devices that support the printer or IrCOMM protocols. Devices that support the IROBEX protocol, such as the 3Com Palm Pilot, can be accessed with special applications, like irobexpalm and irobexreceive. Refer to the IRHOWTO (http://tldp.org/HOWTO/Infrared-HOWTO/) for information. The protocols supported by the device are listed in brackets after the name of the device in the output of irdadump. IrLAN protocol support is still a work in progress.
626
Reference
34.3.4 Troubleshooting
If devices connected to the infrared port do not respond, use the command irdadump (as root) to check if the other device is recognized by the computer. Something similar to Example 34.1, Output of irdadump (page 627) appears regularly when a Canon BJC-80 printer is in visible range of the computer: Example 34.1 Output of irdadump
21:41:38.435239 21:41:38.525167 21:41:38.615159 21:41:38.705178 21:41:38.795198 21:41:38.885163 21:41:38.965133 5b62bed5 > ffffffff S=6 s=0 (14) 5b62bed5 > ffffffff S=6 s=1 (14) 5b62bed5 > ffffffff S=6 s=2 (14) 5b62bed5 > ffffffff S=6 s=3 (14) 5b62bed5 > ffffffff S=6 s=4 (14) 5b62bed5 > ffffffff S=6 s=5 (14) 5b62bed5 < 6cac38dc S=6 s=5 BJC-80 hint=8804 [Printer IrCOMM ] (23) 21:41:38.975176 xid:cmd 5b62bed5 > ffffffff S=6 s=* earth hint=0500 [ PnP Computer ] (21) xid:cmd xid:cmd xid:cmd xid:cmd xid:cmd xid:cmd xid:rsp
Check the configuration of the interface if there is no output or the other device does not reply. Verify that the correct interface is used. The infrared interface is sometimes located at /dev/ttyS2 or at /dev/ttyS3 and an interrupt other than IRQ 3 is sometimes used. These settings can be checked and modified in the BIOS setup menu of almost every laptop. A simple video camera can also help in determining whether the infrared LED lights up at all. Most video cameras can see infrared light; the human eye cannot.
Wireless Communication
627
Index
Symbols
64-bit Linux, 173 kernel specifications, 176 runtime support, 173 software development, 174
A
ACLs, 141152 access, 143, 146 check algorithm, 151 default, 144, 149 definitions, 143 effects, 149 handling, 144 masks, 148 permission bits, 145 structure, 144 support, 152 addresses IP, 321 Apache, 447485 CGI scripts, 472 configuring, 449 files, 449 manually, 449456 virtual host, 452 YaST, 457463 YaST HTTP Server Configuration, 461 YaST HTTP wizard, 457 installing, 448 modules, 465472 available, 466 building modules, 471 external modules, 470 installing, 466
multiprocessing modules, 469 quick start, 447 security, 480 Squid, 536 SSL, 475480 configuring Apache with, 479 creating an SSL certificate, 475 starting, 463 stopping, 463 troubleshooting, 482 authentication Kerberos, 80 PAM, 301308
B
Bash .bashrc, 214 .profile, 214 profile, 213 BIND, 376386 Bluetooth, 549, 614 hciconfig, 620 hcitool, 619 network, 617 opd, 622 pand, 621 sdptool, 620 booting, 177 boot sectors, 193194 configuring YaST, 203208 graphic, 209 GRUB, 193212 initramfs, 179 initrd, 179
C
cards graphics, 278
network, 334 cellular phones, 552 chown, 71 CJK, 221 commands chown, 71 fonts-config, 279 free, 218 getfacl, 147 grub, 194 head, 71 ldapadd, 433 ldapdelete, 436 ldapmodify, 435 ldapsearch, 435 lp, 237 nice, 71 rpm, 86 rpmbuild, 86 scp, 112 setfacl, 147 sftp, 112 slptool, 364 smbpasswd, 518 sort, 71 ssh, 111 ssh-agent, 115 ssh-keygen, 114 tail, 71 configuration files, 351 .bashrc, 214, 217 .emacs, 219 .mailsync, 504 .profile, 214 .xsession, 115 acpi, 581 crontab, 214 csh.cshrc, 223 dhclient.conf, 410 dhcp, 351
dhcpd.conf, 411 exports, 403404 group, 66 grub.conf, 201 gshadow, 72 host.conf, 354 HOSTNAME, 358 hosts, 333, 353 ifcfg-*, 351 inittab, 181, 183, 220 inputrc, 221 irda, 626 kernel, 179 language, 221, 223 logrotate.conf, 215 menu.lst, 196 modprobe.conf, 68 modules.conf, 68 named.conf, 377386, 526 network, 351 networks, 354 nscd.conf, 357 nsswitch.conf, 355, 437 pam_unix2.conf, 436 passwd, 66 permissions, 138 powersave, 581 powersave.conf, 77 profile, 213, 217, 223 resolv.conf, 218, 352, 377, 525 routes, 352 samba, 512 services, 512, 534 slapd.conf, 427 smb.conf, 513, 519 smppd.conf, 359 smpppd-c.conf, 360 squid.conf, 525, 527, 531, 533, 536, 538 squidguard.conf, 538
sshd_config, 115 suseconfig, 192 sysconfig, 189192 termcap, 221 wireless, 351 XF86Config, 81 xorg.conf, 81, 273 Device, 277 Monitor, 278 Screen, 275 configuring, 189 cable modem, 343 DNS, 337, 367 DSL, 343 GRUB, 194, 201 IPv6, 331 IrDA, 625 ISDN, 339 modems, 337 networks, 334 manually, 348358 PAM, 81 printing, 230233 routing, 337, 352 Samba, 511516 clients, 517 Squid, 527 SSH, 110 T-DSL, 345 consoles assigning, 220 graphical, 209 switching, 220 core files, 217 cpuspeed, 589 cron, 214 CVS, 488, 497499
D
data security, 550 deltarpm, 90 DHCP, 405414 configuring with YaST, 406 dhcpd, 411412 packages, 410 server, 411412 static address assignment, 412 digital cameras, 551 disks boot, 208 DNS, 333 BIND, 376386 configuring, 337, 367 domains, 353 forwarding, 377 logging, 381 mail exchanger, 333 multicast, 71 name servers, 353 NIC, 333 options, 379 reverse lookup, 385 security and, 137 Squid and, 526 starting, 377 terminology, 367 top level domain, 333 troubleshooting, 377 zones files, 382 domain name system (see DNS) domains .local, 71 DOS sharing files, 509
E
e-mail synchronizing, 489, 549 mailsync, 504507 editors Emacs, 219220 Emacs, 219220 .emacs, 219 default.el, 219 encoding ISO-8859-1, 223 UTF-8, 71 encrypting, 116119 creating partitions, 117 files, 118119 files with vi, 118 partitions, 117118 removable media, 119 YaST, with, 117 Evolution, 552
F
file systems, 259269 ACLs, 141152 cryptofs, 116 encrypting, 116 Ext2, 261262 Ext3, 262264 LFS, 267 limitations, 267 Reiser4, 264 ReiserFS, 260261 selecting, 260 supported, 266267 terms, 259 XFS, 265 files encrypting, 118 finding, 216
synchronizing, 487507 CVS, 488, 497499 iFolder, 490 mailsync, 489, 504507 rsync, 489 Subversion, 489 Unison, 488, 495496 Firefox URL open command, 86 firewalls, 101 packet filters, 101, 104 Squid and, 534 SuSEfirewall2, 101, 105 Firewire (IEEE1394) hard disks, 551 flash drives, 551 fonts, 279 CID-keyed, 284 TrueType, 279 X11 core, 280 Xft, 281 FreeNX, 289300
G
graphics 3D, 284287 3Ddiag, 286 diagnosis, 285 drivers, 284 installation support for, 286 SaX, 285 support for, 284 testing, 286 troubleshooting, 286 cards 3D, 284287 drivers, 278 GLIDE, 284287 OpenGL, 284287
drivers, 284 testing, 286 GRUB, 193212 boot menu, 196 boot password, 202 boot sectors, 194 booting, 194 commands, 194203 device names, 197 device.map, 195, 200 GRUB Geom Error, 210 grub.conf, 195, 201 JFS and GRUB, 210 limitations, 194 Master Boot Record (MBR), 193 menu editor, 199 menu.lst, 195196 partition names, 197 troubleshooting, 210 uninstalling, 208
H
hardware ISDN, 339 hciconfig, 620 hcitool, 619 head, 71 help info pages, 219 man pages, 219 X, 278
scripts, 184187 installation support 3D graphics cards and, 286 installing GRUB, 194 manually, 80 packages, 87 internationalization, 221 Internet cinternet, 360 dial-up, 359361 DSL, 343 ISDN, 339 KInternet, 360 qinternet, 360 smpppd, 359361 TDSL, 345 IP addresses classes, 321 dynamic assignment, 405 IPv6, 323 configuring, 331 masquerading, 103 private, 323 IrDA, 550, 625627 configuring, 625 starting, 625 stopping, 625 troubleshooting, 627
K
kernels caches, 218 limits, 268 modules modprobe.conf, 68 version 2.6, 68 keyboard Asian characters, 221
I
I18N, 221 iFolder, 490 info pages, 219 init, 181 adding scripts, 186 inittab, 181
layout, 220 mapping, 220 compose, 221 multikey, 221 X Keyboard Extension, 221 XKB, 221 Kontact, 552 KPilot, 552 KPowersave, 547 KSysguard, 547
L
L10N, 221 laptops, 543550 hardware, 543 IrDA, 625627 NetworkManager, 546 PCMCIA, 543 power management, 544, 577589 SCPM, 544, 563 SLP, 547 LDAP, 421446 access control, 430 ACLs, 428 adding data, 432 administering groups, 444 administering users, 444 deleting data, 436 directory tree, 424 ldapadd, 432 ldapdelete, 436 ldapmodify, 434 ldapsearch, 435 modifying data, 434 searching data, 435 server configuration, 427 YaST modules, 437 templates, 437
YaST LDAP client, 436 LFS, 267 Lightweight Directory Access Protocol (see LDAP) Linux networks and, 317 sharing files with another OS, 509 uninstalling, 208 linuxrc manual installation, 80 linuxthreads, 69 locale UTF-8, 71 localization, 221 locate, 216 log files, 215 boot.msg, 581 messages, 110, 377 Squid, 526, 529, 535 Unison, 496 XFree86, 286 Logical Volume Manager (see LVM) logrotate, 215 LSB installing packages, 86 LVM YaST, 53
M
man pages, 219 masquerading, 103 configuring with SuSEfirewall2, 105 Master Boot Record (see MBR) MBR, 193194 memory RAM, 218 mobility, 543553 cellular phones, 552 data security, 550
digital cameras, 551 external hard disks, 551 Firewire (IEEE1394), 551 laptops, 543 PDAs, 552 USB, 551 modems cable, 343 YaST, 337 mountd, 404
N
name servers (see DNS) NAT (see masquerading) NetBIOS, 509 Network File System (see NFS) Network Information Service (see NIS) NetworkManager, 546 networks, 317 base network address, 322 Bluetooth, 549, 617 broadcast address, 323 configuration files, 351358 configuring, 334345, 348358 IPv6, 331 DHCP, 405 DNS, 333 IrDA, 550 localhost, 323 netmasks, 321 routing, 321, 337 SLP, 363 TCP/IP, 317 wireless, 549 WLAN, 549 YaST, 334 NFS, 399 clients, 399 exporting, 402
importing, 400 mounting, 400 permissions, 403 servers, 401 nfsd, 404 NGPT, 69 nice, 71 NIS, 391398 clients, 397 masters, 391397 slaves, 391397 notebooks (see laptops) Novell iFolder, 490 NPTL, 6970 NSS, 355 databases, 356
O
opd, 622 OpenLDAP (see LDAP) OpenSSH (see SSH) OS/2 sharing files, 509
P
packages compiling, 94 compiling with build, 96 installing, 87 LSB, 86 package manager, 86 RPMs, 86 uninstalling, 87 verifying, 87 packet filters (see firewalls) PAM, 301308 configuring, 81 pand, 621 partitions
encrypting, 117 partition table, 193 PCMCIA, 543, 555 IrDA, 625627 PDAs, 552 permissions ACLs, 141152 file permissions, 216 Pluggable Authentication Modules (see PAM) ports 53, 379 scanning, 535 PostgreSQL updating, 66 power management, 544, 577597 ACPI, 577, 580587, 592 APM, 577, 579580, 592 battery monitor, 578 charge level, 593 cpufrequency, 589 cpuspeed, 589 hibernation, 578 powersave, 589 standby, 578 suspend, 578 YaST, 597 powersave, 589 configuring, 589 printing, 227, 230233 applications, from, 237 command line, 237 configuring with YaST, 230 connection, 231 CUPS, 237 drivers, 232 GDI printers, 243 Ghostscript driver, 232 IrDA, 626 kprinter, 237
network, 245 port, 231 PPD file, 232 queues, 232 Samba, 510 test page, 232 troubleshooting network, 245 xpp, 237 private branch exchange, 341 protocols CIFS, 509 IPv6, 323 LDAP, 421 SLP, 363 SMB, 509 proxies (see Squid) advantages, 521 caches, 521 transparent, 533
R
RAID YaST, 60 remote computing FreeNX, 289300 removable media subfs, 74 RFCs, 317 routing, 321, 337, 352 masquerading, 103 netmasks, 321 routes, 352 static, 352 RPM, 8697 database rebuilding, 89, 94 deltarpm, 90 dependencies, 87
patches, 89 queries, 91 rpmnew, 87 rpmorig, 87 rpmsave, 87 security, 139 SRPMS, 95 tools, 97 uninstalling, 89 updating, 88 verify, 93 verifying, 87 rpmbuild, 86 rsync, 489, 502 runlevels, 181183 changing, 183 editing in YaST, 188
S
Samba, 509519 CIFS, 509 clients, 510, 516517 configuring, 511516 installing, 511 login, 517 names, 509 permissions, 516 printers, 510 printing, 517 security, 516 server, 510 servers, 511516 shares, 510, 514 SMB, 509 starting, 511 stopping, 511 swat, 512 TCP/IP and, 509 SCPM, 563
advanced settings, 574 laptops, 544 managing profiles, 573 resource groups, 572 starting, 572 switching profiles, 573 screen resolution, 277 scripts init.d, 181, 184187, 358 boot, 185 boot.local, 185 boot.setup, 186 halt, 186 network, 358 nfsserver, 358, 403 portmap, 358, 403 rc, 183184, 186 sendmail, 358 squid, 525 xinetd, 358 ypbind, 358 ypserv, 358 irda, 626 mkinitrd, 179 modify_resolvconf, 218, 353 SuSEconfig, 189192 disabling, 192 sdptool, 620 security, 128140 attacks, 136137 booting, 129, 131 bugs and, 132, 135 DNS, 137 encrypted file system, 550 engineering, 129 firewalls, 101 intrusion detection, 81 local, 130134 network, 134137
passwords, 130131 permissions, 131132 reporting problems, 140 RPM signatures, 139 Samba, 516 serial terminals, 129130 Squid, 522 SSH, 110116 tcpd, 139 telnet, 110 tips and tricks, 137 viruses, 133 worms, 137 X and, 134 Service Location Protocol (see SLP) SGML directories, 74 SLP, 363, 547 browser, 365 Konqueror, 365 registering services, 363 slptool, 364 SMB (see Samba) smpd, 509 soft RAID (see RAID) software compiling, 94 sort, 71 sound mixers, 79 source compiling, 94 spm, 94 Squid, 521 access controls, 536 ACLs, 530 Apache, 536 cachemgr.cgi, 536537 caches, 521522 damaged, 526
size, 524 Calamaris, 539540 configuring, 527 CPU and, 525 directories, 525 DNS, 526 features, 521 firewalls and, 534 log files, 526, 529, 535 object status, 523 permissions, 525, 530 RAM and, 524 reports, 539540 security, 522 squidGuard, 537 starting, 525 statistics, 536537 stopping, 526 system requirements, 523 transparent proxies, 533, 535 troubleshooting, 526 uninstalling, 526 SSH, 110116 authentication mechanisms, 114 daemon, 113 key pairs, 113114 scp, 112 sftp, 112 ssh, 111 ssh-agent, 115 ssh-keygen, 114 sshd, 113 X and, 115 subfs removable media, 74 Subversion, 489, 499 SVN (Subversion), 489 synchronizing data, 549 e-mail, 549 Evolution, 552
Kontact, 552 KPilot, 552 system limiting resource use, 217 localizing, 221 updating, 6568 system monitoring, 547 KPowersave, 547 KSysguard, 547
V
variables environment, 222
T
tail, 71 TCP/IP, 317 ICMP, 318 IGMP, 318 layer model, 318 packets, 319320 TCP, 318 UDP, 318 TEI XSL stylesheets new location, 84 thread packages NPTL, 70 Tripwire replaced by AIDE, 81
W
whois, 334 Windows sharing files, 509 wireless connections Bluetooth, 614 WLAN, 549
X
X character sets, 279 CID-keyed fonts, 284 drivers, 278 font systems, 279 fonts, 279 help, 278 optimizing, 273279 SaX2, 273 security, 134 SSH and, 115 TrueType fonts, 279 virtual screen, 277 X11 core fonts, 280 xf86config, 273 xft, 279 Xft, 281 X Keyboard Extension (see keyboard, XKB) X Window System (see X)
U
ulimit, 217 options, 217 uninstalling GRUB, 208 Linux, 208 updating, 6568 passwd and group, 66 problems, 66 sound mixers, 79 YaST, 66 USB flash drives, 551
X.Org, 273 Xen, 309 overview, 309 Xft, 281 XKB (see keyboard, XKB) XML directories, 74 xorg.conf color depth, 276 Depth, 276 Device, 276 Display, 276 Files, 274 InputDevice, 274 Modeline, 276 modelines, 274 Modes, 274, 276 Monitor, 274, 276 ServerFlags, 274
LVM, 53 modems, 337 network card, 334 NIS clients, 397 power management, 597 printing, 230233 RAID, 60 runlevels, 188 Samba clients, 517 SLP browser, 365 sysconfig editor, 190 T-DSL, 345 updating, 66 YP (see NIS)
Y
YaST 3D, 285 boot configuration, 203 default system, 206 security, 207 time-out, 206 boot loader disk order, 207 location, 205 password, 207 type, 204 cable modem, 343 DHCP, 406 DSL, 343 GRUB, 204 ISDN, 339 LDAP client, 436 LILO, 204