Config Webserver Tutorial
Config Webserver Tutorial
Home (/) > Tutorials (/TUTORIALS/) > Linux Website Configuration (/TUTORIALS/LinuxTutorialWebSiteConfig.html)
Tutorial topics:
# Linux Apache web (httpd) server
configuration
# Linux FTPd server and FTP user
accounts
# vsFTPd and FTP user account
configuration
# wu-FTPd and FTP user account
configuration
# Basic "user account" configuration for
maximum security on an Internet based
web server
# Linux DNS (Domain Name Server)
configuration using Bind version 8 or 9
(named)
# Web Server Load Balancing
# Managing web server daemons
(services)
# Links and Resources
1 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
faster A Red Hat 8.0 wu-ftpd RPM may be installed (Newer version 2.6.2 or later with security fix wu-ftpd-
2.6.2-11) or install from source (http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/wily/wu-ftpd/wily
nce DNS
Red Hat 7.x:
cache, low rpm -q apache bind inetd wu-ftpd
TCO DNS
cache from Use wu-ftpd version 2.6.2 or later to avoid security problems.
Contact us. rpm -ivh apache2 apache2-prefork bind bind-chrootenv bind-utils vsftpd
Note: The apache2-MPM is a generic term for Apache installation options for "Multi-Processing Modules
(MPM)s "prefork" or "worker". If you try and only install apache2 you will get the following error:
Web pages are served from the directory as configured by the DocumentRoot directive. The default directory
location is:
(http://yolinux.tradepub.com/ Red Hat 7.x-9, Fedora Core, Red Hat Enterprise 4/5/6, CentOS 4/5/6 /var/www/html/
Red Hat 6.x and older /home/httpd/html/
Suse 9.x /srv/www/htdocs/
Ubuntu (dapper 6.06) / Debian /var/www/html
Ubuntu (hardy 8.04/natty 11.04) / Debian /var/www
The default home page for the default configuration is index.html. Note the pages should not be owned by
user apache as this is the process owner of the httpd web server daemon. If the web server process is
comprimised, it should not be allowed to alter the files. The files should of course be readable by user apache.
Apache may be configured to run as a host for one web site in this fashion or it may be configured to serve for
multiple domains. Serving for multiple domains may be achieved in two ways:
Virtual hosts: One IP address but multiple domains - "Name based" virtual hosting.
Multiple IP based virtual hosts: One IP address for each domain - "IP based" virtual hosting.
2 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
The default configuration will allow one to have multiple user accounts under one domain by using a reference to
the user account: http://www.domain.com/~user1/. If no domain is registered or configured, the IP
address may also be used: http://XXX.XXX.XXX.XXX/~user1/.
[Potential Pitfall] The default umask for directory creation is correct by default but if not use: chmod 755
/home/user1/public_html
[Potential Pitfall] When creating new "Directory" configuration directives, I found that placing them by the
existing "Directory" directives to be a bad idea. It would not use the .htaccess file. This was because the
statement defining the use of the .htaccess file was after the "Directory" statement. Previously in RH 6.x the
files were separated and the order was defined a little different. I now place new "Directory" statements near
the end of the file just before the "VirtualHost" statements.
For users of Red Hat 7.1, the GUI configuration tool apacheconf was introduced for the crowd who like to use
pretty point and click tools.
Start/stop/restart script:
Red Hat/Fedora/CentOS: /etc/rc.d/init.d/httpd
SuSE 9.3: /etc/init.d/apache2
Ubuntu (dapper 6.06/hardy 8.04/natty 11.04) / Debian: /etc/init.d/apache2
Apache main configuration file:
Red Hat/Fedora/CentOS: /etc/httpd/conf/httpd.conf
SuSE: /etc/apache2/httpd.conf
(Need to add directive: ServerName host-name)
Ubuntu (dapper 6.06/hardy 8.04/natty 11.04) / Debian: /etc/apache2/apache2.conf
Apache suplementary configuration files:
Red Hat/Fedora/CentOS: /etc/httpd/conf.d/component.conf
SuSE: /etc/apache2/conf.d/component.conf
Ubuntu (dapper 6.06/hardy 8.04/natty 11.04) / Debian:
Virtual domains: /etc/apache2/sites-enabled/domain
(Create soft link from /etc/apache2/sites-enabled/domain to /etc/apache2
/sites-available/domain to turn on. Use command a2ensite)
Additional configuration directives: /etc/apache2/conf.d/
Modules to load: /etc/apache2/mods-available/
(Soft link to /etc/apache2/mods-enabled/ to turn on)
Ports to listen to: /etc/apache2/ports.conf
/var/log/httpd/access_log and error_log - Red Hat/Fedora Core Apache log files
(Suse: /var/log/apache2/)
Start/Stop/Restart scripts: The script is to be run with the qualifiers start, stop, restart or status.
i.e. /etc/rc.d/init.d/httpd restart. A restart allows the web server to start again and read the
configuration files to pick up any changes. To have this script invoked upon system boot issue the command
chkconfig --add httpd. See Linux Init Process Tutorial (LinuxTutorialInitProcess.html) for a more complete
discussion.
3 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Directive Description
fullstatus Displays a full status report from mod_status. Requires mod_status enabled on your server and a
text-based browser such as lynx available on your system. The URL used to access the status
report can be set by editing the STATUSURL variable in the script.
configtest Run a configuration file syntax test.
-t
Apache control tool: apachectl (http://man.yolinux.com/cgi-bin/man2html?cgi_command=apachectl) - man page
/etc/httpd/conf/httpd.conf: is used to configure Apache. In the past it was broken down into
three files. These may now be all concatenated into one file. See Apache online documentation
(http://www.apache.org/docs/) for the full manual.
/etc/httpd/conf.d/application.conf: All configuration files in this directory are included during
Apache start-up. Used to store application specific configurations.
/etc/sysconfig/httpd: Holds environment variables used when starting Apache.
Giving Apache access to the file system: It is prudent to limit Apache's view of the file system to only those
directories necessary. This is done with the directory statement. Start by denying access to everything, then grant
access to the necessary directories.
1 <Directory />
2 Options None
3 AllowOverride None
4 </Directory>
Set default location of system web pages and allow access: (Red Hat/Fedora/CentOS)
1 DocumentRoot "/var/www/html"
2
3 <Directory "/var/www/html">
4 Options Indexes FollowSymLinks
5 AllowOverride None
6 Order allow,deny
7 Allow from all
8 </Directory>
File: /etc/httpd/conf/httpd.conf
4 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
...
...
<IfModule mod_userdir.c>
#UserDir disable - Add comment to this line
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disable" line above, and uncomment
# the following line instead:
UserDir public_html # Uncomment this line
</IfModule>
...
...
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
Change to a comment (add "#" at beginning of line) from Fedora Core default UserDir disable and
assign the directory public_html as a web server accessible directory.
OR
Assign a single user the specific ability to share their directory:
1 <Directory /home/user1/public_html>
2 AllowOverride None
3 order allow,deny
4 allow from all
5 Options Indexes Includes FollowSymLinks
6 </Directory>
Allows the specific user, "user1" only, the ability to serve the directory /home/user1/public_html/
Also use SELinux command to set the security context: setsebool httpd_enable_homedirs true
Directory permissions: The Apache web server daemon must be able to read your web pages in order to
feed their contents to the network. Use an appropriate umask and file protection. Allow access to web
directory: chmod ugo+rx -R public_html.
Note that the user's directory also has to have the appropriate permissions as it is the parent of
public_html.
Default permissions on user directory: ls -l /home
drwx------ 20 user1 user1 4096 Mar 5 12:16 user1
Allow the web server access to operate the parent directory: chmod ugo+x /home/user1
d-wx--x--x 20 user1 user1 4096 Mar 5 12:16 user1
One may also use groups to control permisions. See the YoLinux tutorial on managing groups
(LinuxTutorialManagingGroups.html).
Example:
[root@node2]# a2enmod
A list of available modules is displayed. Enter "userdir" as the module to enable.
Restart Apache with the following command: /etc/init.d/apache2 force-reload
5 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Note: This is the same as manually generating the following two soft links:
ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-
enabled/userdir.conf
ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/mods-
enabled/userdir.load
Man page: a2enmod/a2dismod (http://man.yolinux.com/cgi-bin/man2html?cgi_command=a2enmod)
[Potential Pitfall]: If the Apache web server can not access the file you will get the error "403 Forbidden"
"You don't have permission to access file-name on this server." Note the default permissions on a user
directory when first created with "useradd" are:
SELINUX=disabled
or using the command setenforce 0 to temporarily disable SELinux until the next reboot.
When using SELinux security features, the security context labels must be added so that Apache can read your
files. The default security context label used is inherited from the directory for newly created files. Thus a copy
(cp) must be used and not a move (mv) when placing files in the content directory. Move does not create a new
file and thus the file does not recieve the directory security context label. The context labels used for the default
Apache directories can be viewed with the command: ls -Z /var/www
The web directories of users (i.e. public_html) should be set with the appropriate context label
(httpd_sys_content_t).
-R: Recursive. Files and directories in current directory and all subdirectories.
-h: Affect symbolic links.
-t: Specify type of security context.
Policy Description
httpd_enable_cgi Allow httpd cgi support.
httpd_enable_homedirs Allow httpd to read home directories.
httpd_ssi_exec Allow httpd to run SSI executables in the same domain as system CGI scripts.
Then restart Apache:
Red Hat/Fedora/Suse and all System V init script based Linux systems: /etc/init.d/httpd restart
Red Hat/Fedora: service httpd restart
6 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
For more on SELinux see the YoLinux Systems Administration tutorial (LinuxTutorialSysAdmin.html#SELINUX).
Virtual Hosts:
The Apache web server allows one to configure a single computer to represent multiple websites as if they were
on separate hosts. There are two methods available and we describe the configuration of each. Choose one
method for your domain:
Name based virtual host: (most common) A single computer with a single IP adress supporting multiple web
domains. The web browser using the http protocol, identifies the domain being addressed.
IP based virtual host: The virtual hosts can be configured as a single multi-homed computer with multiple IP
addresses on a single network card, with each IP address representing a different web domain. This has
the appearance of a web domain supported by a dedicated computer because it has a dedicated IP
address.
NameVirtualHost XXX.XXX.XXX.XXX
<VirtualHost XXX.XXX.XXX.XXX>
ServerName www.your-domain.com - CNAME (DNS alias www) specified in (/var/name
d/...)
ServerAlias your-domain.com - Allows requests without the "www" prefix.
ServerAdmin [email protected]
DocumentRoot /home/user1/public_html
ErrorLog logs/your-domain.com-error_log
TransferLog logs/your-domain.com-access_log
</VirtualHost>
Notes:
You can specify more than one IP address. i.e. if web server is also being used as a firewall/gateway and
you have an external internet IP address as well as a local network IP address.
NameVirtualHost XXX.XXX.XXX.XXX
NameVirtualHost 192.168.XXX.XXX
See the YoLinux Tutorial on configuring a network gateway/firewall using iptables and NAT
(LinuxTutorialIptablesNetworkGateway.html).
Use your IP address for XXX.XXX.XXX.XXX, actual domain name and e-mail address.
One can use DNS views to provide different local network DNS results.
Note that I configure Apache for both requests http://www.domain-name.com and http://domain-name.com.
Once virtual hosts are configured, your default system domain (/var/www/html) will stop working. Your
default domain now must be configured as a virtual domain.
7 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
<Directory "/var/www/html">
</Directory>
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog logs/error_log
TransferLog logs/access_log
</VirtualHost>
# Add a VirtualHost definition for your domain which was once the system default
.
<VirtualHost XXX.XXX.XXX.XXX>
ServerName www.your-domain.com
ServerAlias your-domain.com
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog logs/error_log
TransferLog logs/access_log
</VirtualHost>
...
..
Forwarding to a primary URL. It is best to avoid the appearance of duplicated web content from two URLs
such as http://www.your-domain.com and http://your-domain.com. Supply a forwarding Apache "Redirect".
<VirtualHost XXX.XXX.XXX.XXX>
ServerName www.your-domain.com - Note that no aliases are listed
...
...
</VirtualHost>
<VirtualHost XXX.XXX.XXX.XXX>
ServerName your-domain.com
ServerAlias other-domain.com
ServerAlias www.other-domain.com
Redirect permanent / http://www.your-domain.com.com/
</VirtualHost>
...
..
Note:
See the YoLinux.com Apache "Redirect" Tutorial (ApacheRedirect.html)
When specifying more domains, they may all use the same IP address or some/all may use their own unique IP
address. Specify a "NameVirtualHost" for each IP address.
After the Apache configuration files have been edited, restart the httpd daemon: /etc/rc.d/init.d/httpd
restart (Red Hat) or /etc/init.d/apache2 restart (Ubuntu / Debian)
8 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
/etc/apache2/sites-enabled/.
Example: /etc/apache2/sites-available/supercorp
01 <VirtualHost XXX.XXX.XXX.XXX>
02 ServerName supercorp.com
03 ServerAlias www.supercorp.com
04 ServerAdmin webmaster@localhost
05
06 DocumentRoot /home/supercorp/public_html/home
07 <Directory "/">
08 Options FollowSymLinks
09 AllowOverride None
10 </Directory>
11 <Directory /home/supercorp/public_html/home>
12 Options Indexes FollowSymLinks MultiViews
13 IndexOptions SuppressLastModified SuppressDescription
14 AllowOverride All
15 Order allow,deny
16 allow from all
17 </Directory>
18
19 ScriptAlias /cgi-bin/ /home/supercorp/cgi-bin/
20 <Directory "/home/supercorp/cgi-bin/">
21 AllowOverride None
22 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
23 Order allow,deny
24 Allow from all
25 </Directory>
26
27 ErrorLog /var/log/apache2/supercorp.com-error.log
28
29 # Possible values include: debug, info, notice, warn, error,
30 # crit, alert, emerg.
31 LogLevel warn
32 CustomLog /var/log/apache2/supercorp.com-access.log combined
33 ServerSignature On
34 </VirtualHost>
Enable domain:
Create soft link:
Manually: ln -s /etc/apache2/sites-available/supercorp /etc/apache2
/sites-enabled/supercorp
Use Ubuntu scripts a2ensite/a2dissite. Type command and it will prompt you as to which site
you would like to enable or disable.
Restart Apache:
apache2ctl graceful
or
/etc/init.d/apache2 restart
or
/etc/init.d/apache2 reload
Also note that Apache modules can also be enabled/disabled with scripts a2enmod/a2dismod.
Man pages:
9 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /home/user0/public_html
</VirtualHost>
<VirtualHost XXX.XXX.XXX.101>
ServerAdmin [email protected]
DocumentRoot /home/user1/public_html
</VirtualHost>
<VirtualHost XXX.XXX.XXX.102>
ServerAdmin [email protected]
DocumentRoot /home/user2/public_html
</VirtualHost>
The default <VirtualHost *> block will be used as the default for all IP addresses not specified explicitly. This
default IP (*) may not work for https URL's.
<Directory /var/www/cgi-bin>
Options +ExecCGI
</Directory>
The executable program files must have execute privileges, executable by the process owner (Red Hat 7+/Fedora
Core: apache. Older use nobody) under which the httpd daemon is being run.
NameVirtualHost XXX.XXX.XXX.XXX
<VirtualHost XXX.XXX.XXX.XXX>
ServerName node1.your-domain.com - Allows requests by domain nam
e without the "www" prefix.
ServerAlias your-domain.com www.your-domain.com - CNAME (alias www) specified in
Bind configuration file (/var/named/...)
ServerAdmin [email protected]
DocumentRoot /home/user1/public_html/your-domain.com
ErrorLog logs/your-domain.com-error_log
TransferLog logs/your-domain.com-access_log
10 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
ERROR Pages:
You can specify your own web pages instead of the default Apache error pages:
PHP:
If the appropriate php, perl and httpd RPM's are installed, the default Red Hat Apache configuration and modules
will support PHP content. RPM Packages (RHEL4):
Apache configuration:
...
...
[PHP]
engine = On
...
...
display_errors = Off
include_path = ".:/php/includes"
...
...
memory_limit = 32M ; Default is typically 8MB which is too low.
...
...
[MySQL]
...
...
mysql.default_host = superserver ; Hostname of the computer
mysql.default_user = dbuser
...
11 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Note that changes will not take effect until the apache web server daemon is restarted.
Test you PHP capabilities with this test file: /home/user1/public_html/test.php
<?php
phpinfo();
?>
OR (older format)
<?
phpinfo();
?>
Test: http://localhost/~user1/test.php
For more info see YoLinux list of PHP information web sites (WebPageScripting.html#PHP).
Also see the local online Apache configuration manual: http://localhost/manual/ (http://localhost/manual/).
12 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Adding web site login and password protection: See the YoLinux tutorial on web site password protection
(LinuxTutorialApacheAddingLoginSiteProtection.html).
Scanning the Apache web log files will not provide meaningfull statistics unless they are graphed or presented in
an easy to read fashion. The following packages to a good job of presenting site statistics.
Apache Links:
CgiWrap (http://cgiwrap.sourceforge.net/) - setuid wrapper that allows users to install and execute their own
cgi scripts that get executed as their own userid
WWWThreads.org (http://www.wwwthreads.org/) - Commercial product - Advanced Web Conferencing
Software
Configuring https (mod_ssl):
Mod_SSL.org: Home Page (http://www.modssl.org/)
Mod_SSL.org: Mod_SSL HowTo (http://www.modssl.org/docs/2.8/ssl_howto.html)
Mod_SSL.org: Steps to create SSL server certificate (http://www.modssl.org/docs/2.8
/ssl_faq.html#cert-real)
Installation packages also available from the Analog downloads page (http://www.analog.cx/download.html).
13 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
....
...
..
One can view the settings which be used with your configuration file (also good for debugging): analog
-settings
Make Analog images available to the users report: ln -s /usr/share/analog/images/* /home/user1
/public_html/analog
#!/bin/sh
cp /opt/etc/analog-domain1.com.cfg /etc/analog.cfg
/usr/bin/analog
cp /opt/etc/analog-domain2.com.cfg /etc/analog.cfg
/usr/bin/analog
...
14 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Links:
Analog home page (http://www.analog.cx/)
Analog command reference (http://www.analog.cx/docs/quickref.html)
For hostile environments set up a chrooted environment for an sftp encrypted connection and the rssh
restricted shell for OpenSSH. See the YoLinux.com internet security tutorial for Linux sftp and rssh
configuration (LinuxTutorialInternetSecurity.html#RSSH)
Also see the preferred chrooted sftp configuration for OpenSSH 4.9+ (SFTP-Server-Chroot-Configuration.html)
FTPd and SELinux: To allow FTPd daemon access and FTP access to users home directories:
setsebool (http://man.yolinux.com/cgi-bin/man2html?cgi_command=setsebool)
-P allow_ftpd_full_access=1
Other wise you will get an error in /var/log/messages:
SELinux is preventing the ftp daemon from writing files outside the home directo
ry (./public_html).
setsebool -P ftp_home_dir 1
# vsFTPd: Configuration
# WU-FTPd: Configuration
# FTP Clients: Links
Enable vsftpd:
Red Hat/Fedora Core/CentOS: VsFTPd is a stand alone service and by the default Fedora Core installation,
not controlled by xinetd as is the wu-ftpd default installation.
Thus start service: service vsftpd start (or: /etc/init.d/vsftpd start)
Configure vsftpd to start upon system boot: chkconfig --add vsftpd
SuSE: By default, the vsftpd is an xinetd controlled service. To enable FTP server services edit the file
/etc/xinetd.d/vsftpd and change:
disable = yes
to:
disable = no
Restart the xinetd daemon: /etc/init.d/xinetd restart
Note: vsftpd can also be run as a stand-alone service to achieve a faster response time.
15 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
For more on starting/stopping/configuring Linux services, see the YoLinux tutorial on the Linux init process and
service activation (LinuxTutorialInitProcess.html).
Configuration files:
vsFTPd configuration file:
Fedora Core / Red Hat: /etc/vsftpd/vsftpd.conf
S.u.S.e. / Ubuntu (dapper/hardy/natty) / Debian: /etc/vsftpd.conf
Default for Fedora Core 3:
16 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it, may confu
se older FTP clients.
#async_abor_enable=YES
17 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
pam_service_name=vsftpd
Restart the FTP service if the config file is changed: service vsftpd restart (or: /etc/init.d
/vsftpd restart)
[Potential Pitfall]: vsftp does NOT support comments on the same line as a directive. i.e.:
directive=XXX # comment
user1
user2
...
user-n
root
bin
daemon
adm
lp
sync
shutdown
halt
...
18 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
#%PAM-1.0
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ft
pusers onerr=succeed
auth required pam_stack.so service=system-auth
auth required pam_shells.so
account required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
This causes PAM to check /etc/vsftpd.ftpusers for users who are denied. This duplicates
/etc/vsftpd.user_list. Speciy user in both files as PAM is independent of vsftpd configuration.
root
bin
daemon
adm
lp
sync
shutdown
halt
...
...
...
user6 - Users to deny
user8
...
...
/var/log/xferlog {
# ftpd doesn't handle SIGHUP properly
nocompress
missingok
}
19 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
# Access rights
anonymous_enable=YES - Turn on anonymous FTP
chown_uploads=YES - Uploaded files owned by an assigned user
chown_username=ftp - Uploaded files owned by this assigned user
local_enable=NO
write_enable=NO - No upload of files system changes allowed
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
# Security
anon_world_readable_only=YES
connect_from_port_20=YES
force_dot_files=NO
guest_enable=NO
hide_ids=YES
pasv_min_port=50000
pasv_max_port=60000
# Features
xferlog_enable=YES
ls_recurse_enable=NO
ascii_download_enable=NO
async_abor_enable=YES
# Performance
one_process_model=NO
idle_session_timeout=120
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
max_per_ip=4
anon_max_rate=50000
pam_service_name=vsftpd
userlist_enable=YES
#enable for standalone mode
listen=YES
tcp_wrappers=YES
Anonymous logins use the login name "anonymous" and then the user supplies their email address as a
password. Any password will be accepted. Used to allow the public to download files from an ftp server.
Generally, no upload is permitted.
20 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
# Access rights
anonymous_enable=NO
local_enable=YES - Allow users to ftp to their home
directories
write_enable=YES - Allow users to STOR, DELE, RNFR
, RNTO, MKD, RMD, APPE and SITE
local_umask=022
# Security
connect_from_port_20=YES
force_dot_files=NO
guest_enable=NO - Don't remap user name
ftpd_banner=Welcome to Super Duper Hosting - Customize the login banner strin
g.
chroot_local_user=YES - Limit user to browse their own d
irectory only
chroot_list_enable=YES - Enable list of system / power us
ers
chroot_list_file=/etc/vsftpd.chroot_list - Actual list of system / power us
ers
hide_ids=YES
pasv_min_port=50000
pasv_max_port=60000
# Features
xferlog_enable=YES
ls_recurse_enable=NO
ascii_download_enable=NO
async_abor_enable=YES
dirmessage_enable=YES - Message greeting held in file .m
essage or specify with message_file=...
# Performance
one_process_model=NO
idle_session_timeout=120
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
max_per_ip=4
#
pam_service_name=vsftpd
userlist_enable=YES
#enable for standalone mode
listen=YES
tcp_wrappers=YES
user1
user2
...
user-n
[Potential Pitfall]: Mispelling a directive will cause vsftpd to fail with little warning.
File: .message
21 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Links:
vsFTPd Home Page (http://vsftpd.beasts.org/)
Sample configurations (ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-2.0.3/EXAMPLE/)
vsftp.conf Man page (http://vsftpd.beasts.org/vsftpd_conf.html)
22 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
shutdown /etc/shutmsg
Note:
user1, user2 and user3 refer to login accounts. Use the appropriate login name.
The above configuration disables anonymous FTP which allows anyone to perform an FTP login with the id
anonymous and an email address as a password. To enable anonymous FTP, change the class directive
to:
23 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Red Hat Linux assigns users a user id and group id which is the same. This means that it does not matter if
you use a realuser or realgroup directive as they will act the same.
Red Hat Linux 7.1 and later uses the xinet daemon to manage ftp connections. Thus xinetd must be running
and configured to support ftp. The configuration file is /etc/xinetd.d/wu-ftpd. The command
chkconfig wu-ftpd on will make the ftp server available. See xinet configuration
(LinuxTutorialInternetSecurity.html#SECURITY) for more info.
Allow overide of deny-uid and/or deny-gid:
allow-uid user-to-allow
allow-gid group-to-allow
Optional configuration:
Create a group ftpchroot
Add users to this group
Use directive: guestgroup ftpchroot
[Potential Pitfall]: Flakey ftp behavior, timeouts, etc?? FTP works best with name resolution of the computer it is
communicating with. This requires proper /etc/resolve.conf and name server (bind) configuration,
/etc/hosts or NIS/NFS configuration.
File /home/user1/public_html/etc/pathmsg:
The whole point of the chroot directory is to make the user's home directory appear to be the root of the filesystem
(/) so one could not wander around the filesystem. Configuration of /etc/ftpaccess will limit the user to their
respective directories while still offering access to /bin/ls and other system commands used in FTP operation.
As root:
cd /home/user1
mkdir public_html
chown $1.$1 public_html
touch .rhosts - Security protection
chmod ugo-xrw .rhosts
Man Pages:
Server:
ftpd (http://man.yolinux.com/cgi-bin/man2html?cgi_command=ftpd) - Internet File Transfer Protocol server
File Formats:
/etc/ftpaccess (http://man.yolinux.com/cgi-bin/man2html?cgi_command=ftpaccess) - Configuration file for
ftpd
/etc/ftpservers (http://man.yolinux.com/cgi-bin/man2html?cgi_command=ftpservers) - ftpd virtual hosting
configuration file. (optional)
/etc/ftphosts (http://man.yolinux.com/cgi-bin/man2html?cgi_command=ftphosts) - allow or deny access to
certain accounts from various hosts. (optional)
/etc/ftpconversions (http://man.yolinux.com/cgi-bin/man2html?cgi_command=ftpconversions) - ftpd
conversions database (for tar and compression)
/var/log/xferlog (http://man.yolinux.com/cgi-bin/man2html?cgi_command=xferlog) - FTP server logfile
ftp (http://man.yolinux.com/cgi-bin/man2html?cgi_command=ftp) - File Transfer Client program
24 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
#%PAM-1.0
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers
onerr=succeed
auth required pam_stack.so service=system-auth
auth required pam_shells.so
account required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l -a
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
}
Note: wu-FTPd is controlled by xinetd and not a stand alone service like vsFTPd.
/var/log/xferlog {
nocompress
}
More information:
WU-FTPD release (http://www.wfms.org/wu-ftpd/)
dkftpbench (http://www.kegel.com/dkftpbench/) - FTP benchmark program to give you an idea as to how
many simultaneous dialup clients a server can support.
FTP and text file type conversions: End Of Line Characters (http://peterbenjamin.com/seminars
/crossplatform/texteol.html) - by Peter Benjamin
FTP Pitfalls:
If you get the following error:
ftp> ls
227 Entering Passive Mode (208,188,34,109,208,89)
ftp: connect: No route to host
This means you have firewall issues most probably on the FTP server itself. Start by removing the firewall
25 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
"iptables" rules: iptables -F Add rules until you discover what is causing the problem.
Passive mode:
Passive mode can also help one past the rules:
ftp> passive
Passive mode on.
This toggles passive mode on and off. When on, FTP will be limited to ports specified in the vsftpd configuration
file: vsftpd.conf with the parameters pasv_min_port and pasv_max_port
FTP fails because it can not change to the users home directory:
Error:
This is often a result of SELinux preventing the vsftpd process from accesing the user's home directory. As root,
grant access with the following command:
setsebool -P ftp_home_dir 1
Followed by: service vsftpd restart
26 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
gftp (http://www.gftp.org/): GUI GTK+ Multithreaded client. File transfer directory browsing and compare.
Multiple protocols: FTP, FTPS (control connection only), HTTP, HTTPS, SSH and FSP protocols. Proxy
support. Comes with Red Hat / Fedora Core.
KFTPgrabber (http://www.kde.org/applications/internet/kftpgrabber/): GUI KDE based client.simultaneous
FTP sessions in separate tabs. Ability to limit upload and download speed.
kbear (http://sourceforge.net/projects/kbear/): GUI KDE based client. Connect to multiple servers, transfer
files, directory browsing, file content browsing. Comes with S.U.S.e. Linux.
ftp (http://man.yolinux.com/cgi-bin/man2html?cgi_command=ftp): (/usr/kerberos/bin/ftp) kerberos
enabled console ftp client. (RPM package FC3: krb5-workstation)
[Potential Pitfall]: Red Hat 7.3 server with wu-ftp server 2.6.2-5 does not support this configuration to prevent shell
access. It requires users to have a real user shell. i.e. /bin/bash It works great in older and current Red Hat
versions. If it works for you, use it, as it is more secure to deny the user shell access. You can always deny telnet
access. You should NOT be using this problem ridden version of ftpd. Use the latest wu-ftpd-2.6.2-11 which
supports users with shell /opt/bin/ftponly
[Potential Pitfall]: Ubuntu Dapper/Hardy - Setting the shell to the preconfigured shell /bin/false will NOT allow
vsftp access. One must create the shell "ftponly" as defined below to allow vsftp access with no shell.
...
user1:x:502:503::/home/user1:/opt/bin/ftponly
...
01 #!/bin/sh
02 #
03 # ftponly shell
04 #
05 trap "/bin/echo Sorry; exit 0" 1 2 3 4 5 6 7 10 15
06 #
07 [email protected]
08 #System=`/bin/hostname`@`/bin/domainname`
09 #
10 /bin/echo
11 /bin/echo
"********************************************************************"
12 /bin/echo " You are NOT allowed interactive access."
13 /bin/echo
14 /bin/echo " User accounts are restricted to ftp and web access."
15 /bin/echo
16 /bin/echo " Direct questions concerning this policy to $Admin."
17 /bin/echo
"********************************************************************"
18 /bin/echo
19 #
20 # C'ya
21 #
22 exit 0
The last step is to add this to the list of valid shells on the system.
Add the line /opt/bin/ftponly to /etc/shells.
27 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
/bin/bash
/bin/bash1
/bin/tcsh
/bin/csh
/opt/bin/ftponly
For more on Linux security see the: YoLinux.com Internet web site Linux server security tutorial
(LinuxTutorialInternetSecurity.html)
1. In an ISP configuration for clients (web surfers) conected to the internet, the DNS server must resolve IP
addresses for any URL the user wishes to visit. (See DNS caching server (http://tldp.yolinux.com/HOWTO
/DNS-HOWTO.html#s3))
2. In a purely web hosting configuration, Bind will only resolve for the IP addresses of the domains which are
being hosted. This is the configuration which will be discussed and is often called an "Authoritative-only
Nameserver".
When resolving IP addresses for a domain, Internic is expecting a "Primary" and a "Secondary" DNS name server.
(Sometimes called Master and Slave) Each DNS name server requires the file /etc/named.conf and the files it
points to. This is typically two separate computer systems hosted on two different IP addresses. It is not necesary
that the Linux servers be dedicated to DNS as they may run a web server, mail server, etc.
Note on Bind versions: Red Hat versions 6.x used Bind version 8. Release 7.1 of Red Hat began using Bind
version 9 and the GUI configuration tool bindconf was introduced for those of you that like a pretty point and
click interface for configuration.
Installation Packages:
Red Hat / Fedora Core / CentOS: bind, bind-chroot, bind-libs, bind-utils, system-
config-bind
bind-chroot: Security jail for operation of bind.
bind-utils: Utility commands like nslookup, host, dig
system-config-bind: GUI config tool system-config-bind and related configuration files
(/etc/security/console.apps/bindconf).
caching-nameserver: We will not be covering this as it is not required for web hosting. This is used by
internet providers so their clients can cache the DNS entries of the sites they are visiting.
Ubuntu (dapper/hardy/natty) / Debian: bind9
Configuration files:
Red Hat / Fedora / CentOS:
Chrooted
File Description Directory
Directory
named.conf Primary/Secondary DNS server configuration. /etc/ /var/named
(See default file /usr/share/doc/bind-9.X.X/sample /chroot/etc/
/etc/named.conf)
named.root.hints Configuration for recursive service. Required for all zones. /etc/ /var/named
(See default file /usr/share/doc/bind-9.X.X/sample /chroot/etc/
/etc/named.root.hints)
named Red Hat system variables. /etc/sysconfig/ no change
rndc.key Primary/Secondary DNS server configuration. /etc/ /var/named
/chroot/etc/
28 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Chrooted
File Description Directory
Directory
Zone files Configuration files for each domain. Create this file to resolve /var/named/ /var/named
host name internet queries i.e. define IP address of web (www) /chroot
and mail servers in the domain. /var/named/
Debian / Ubuntu:
File Description Directory Chrooted Directory
named.conf Primary/Secondary DNS server configuration. /etc/bind/ /var/bind/chroot/etc/bind/
named.conf.options
named.conf.local
rndc.key Primary/Secondary DNS server configuration. /etc/ /var/bind/chroot/etc/
Zone files Configuration files for each domain. /var/bind/data/ /var/bind/chroot/var/bind/data/
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
Note:
The omission of zone ".". Required if providing a recursive service.
Ubuntu includes the separated file of zone directives using the directive:
include "/etc/bind/named.conf.local";
29 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
BIND Views: The BIND naming service can support "views" which allow various sub-networks (i.e. private internal
or public external networks) to have a different domain name resolution result.
If no views are specified then use the configuration shown above.
The match-up between the "view" and the view client which receives the DNS information is specified by the
match-clients statement.
If even one view is specified, then ALL zones MUST be associated with a "view".
Bind 9 allows for views which allow different zones to be served to different types of clients, localhost,
private networks and public networks. This maps to the three view names "localhost_resolver",
"internal" and "external":
localhost_resolver: Supports name resolution for the system (localhost) using BIND. Support for use
of bind also has to be configured in /etc/nsswitch.conf
internal: User specified Local Area Network (LAN). If not used to support a local private LAN, remove
(or comment out) this view.
external: The general public internet defined as client "any".
If you are only setting up a caching name server, then only specify the view "localhost_resolver" (delete all
other views).
In order to support a DNS for internet domains using views, one will have to configure an "external" view
Typical Red Hat Enterprise 5 example: (Bind 9.3.4 with three "views")
30 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
options
{
directory "/var/named"; // the default
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
};
logging
{
// By default, SELinux policy does not allow named to modify the /var/named
// directory, so put the default debug log file in data/ :
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view "localhost_resolver"
{
// This view sets up named to be a localhost resolver ( caching only nameserver
).
// If all you want is a caching-only nameserver, then you need only define this
view:
match-clients { localhost; };
...
};
view "internal"
{
// This view will contain zones you want to serve only to "internal" clients
// that connect via your directly attached LAN interfaces - "localnets" .
// For local private LAN. Not covered in this tutorial.
// Delete this view if web hosting with no local LAN.
match-clients { localnets; };
...
};
key ddns_key
{
algorithm hmac-md5;
secret "use /usr/sbin/dns-keygen to generate TSIG keys";
};
view "external"
{
// This view will contain zones you want to serve only to "external"
// public internet clients. This is covered below.
match-clients { any; };
...
..
};
Default configuration files: Red Hat may supply the default configuration in: /usr/share/doc/bind-
9.X.X/sample/etc/named.conf
cp /usr/share/doc/bind-9.X.X/sample/etc/named.conf /var/named/chroot/etc
cp /usr/share/doc/bind-9.X.X/sample/etc/named.root.hints /var/named
/chroot/etc
chcon -u system_u -r object_r -t named_conf_t /var/named/chroot
/etc/named.conf /var/named/chroot/etc/named.root.hints
view "localhost_resolver": If supporting a caching DNS server (not required to support a web domain) you will
also need the files:
cp /usr/share/doc/bind-9.X.X/sample/etc/named.rfc1912.zones /var/named
/chroot/etc
cp /usr/share/doc/bind-9.X.X/sample/var/named/localdomain.zones /var/named
/chroot/var/named
also from /usr/share/doc/bind-9.X.X/sample/var/named/: localhost.zones,
31 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
view "external"
{
/* This view will contain zones you want to serve only to "external" clients
* that have addresses that are not on your directly attached LAN interface subnets:
*/
match-clients { any; };
match-destinations { any; };
allow-transfer { XXX.XXX.XXX.XXX; }; - IP address of secondary DNS
recursion no;
// you'd probably want to deny recursion to external clients, so you don't
// end up providing free DNS service to all takers
zone "your-domain.com" {
type master;
file "/var/named/data/external/named.your-domain.com";
notify yes;
allow-update { none; };
};
// You can also add the zones as a separate file like they do in Ubuntu by ad
ding the following statement
include "/etc/named.conf.local";
};
DNS key:
Use the following command /usr/sbin/dns-keygen to create a key. Add this key to the "secret" statement as
follows:
key ddns_key
{
algorithm hmac-md5;
secret "XlYKYLF5Y7YOYFFFY6YiYYXyFFFFBYYYYFfYYYJiYFYFYYLVrnrWrrrqrrrq";
};
Man Pages:
named.conf (http://man.yolinux.com/cgi-bin/man2html?cgi_command=named.conf)
32 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
$TTL 604800 - Bind 9 (and some of the later versions of Bind 8) requires $TTL
statement.
Measured in seconds. This value is 7 days.
your-domain.com. IN SOA ns1.your-domain.com. hostmaster.your-domain.com. (
2000021600 ; serial - Many people use year+month+day+integer as a system.
86400 ; refresh - How often secondary servers (in seconds) should check in
for changes in serial number. (86400 sec = 24 hrs)
7200 ; retry - How long secondary server should wait for a retry if con
tact failed.
1209600 ; expire - Secondary server to purge info after this length of time
.
86400 ) ; default_ttl - How long data is held in cache by remote servers.
IN A XXX.XXX.XXX.XXX - Note that this is the default IP address of the
domain.
I put the web server IP address here so that dom
ain.com points to the same servers as www.domain.com
;
; Name servers for the domain
;
IN NS ns1.your-domain.com.
IN NS ns2.your-domain.com.
;
; Mail server for domain
;
IN MX 5 mail - Identify "mail" as the node handling mail f
or the domain. Do NOT specify an IP address!
;
; Nodes in domain
;
node1 IN A XXX.XXX.XXX.XXX - Note that this is the IP address of node1
ns1 IN A XXX.XXX.XXX.XXX - Optional: For hosting your own primary name
server. Note that this is the IP address of ns1
ns2 IN A XXX.XXX.XXX.XXX - Optional: For hosting your own secondary na
me server. Note that this is the IP address of ns2
mail IN A XXX.XXX.XXX.XXX - Identify the IP address for node mail.
IN MX 5 XXX.XXX.XXX.XXX - Identify the IP address for mail server nam
ed "mail".
;
; Aliases to existing nodes in domain
;
www IN CNAME node1 - Define the webserver "www" to be node1.
ftp IN CNAME node1 - Define the ftp server to be node1.
DNS
Description and Format
record
33 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
DNS
Description and Format
record
SOA Start of Authority: Primary domain server and contact info
Note that there is a period following the primary domain server and contact email.
Note that the email address is in the form where the first period represents the "@" symbol of the
email address.
or
[Potential Pitfall]: Incorrect specification of the primary name server may result in the following
message in /var/log/messages:
SOA
Description
attribute
serial Never use a value greater than 2147483647 for a 32 bit processor.
Increment to a higher value to indicate an update to the slave server.
refresh Time increment (seconds) between update checks of the serial number with the
primary server
retry Time elapsed before a slave will contact the primary server if a connection failed
expire Time till primary server information is considered invalid and should be refreshed if
there is a new DNS query
minimum Time for DNS servers should hold domain information in their cache before purging
IN Indicate Internet.
NS Specify the Authoratative Name servers for the domain.
A Specify the IP address associated with the host name.
Format: hostname IN A XXX.XXX.XXX.XXX
Note that in my example, no hostname is specified for the first record. This will define the default for
the domain.
CNAME Specify an alias for the host name.
MX Mail exchange record. Specify a priority number for the primary and back-up mail servers. The lowest
number indicates the default mail server for the domain
PTR Used to specify the reverse DNS lookup
your-domain.com. IN MX 10 mail1.offsitemail.com.
your-domain.com. IN MX 20 mail2.offsitemail.com.
Initial configuration: Note that Red Hat may supply the default zone configuration in: /usr/share
/doc/bind-9.X.X/sample/var/named/
cp /usr/share/doc/bind-9.X.X/sample/var/named/localhost.zone /var/named
/chroot/var/named/data/
cp /usr/share/doc/bind-9.X.X/sample/var/named/localdomain.zone /var/named
/chroot/var/named/data/
cp /usr/share/doc/bind-9.X.X/sample/var/named/named.broadcast /var/named
/chroot/var/named/data/
cp /usr/share/doc/bind-9.X.X/sample/var/named/named.ip6.local /var/named
/chroot/var/named/data/
cp /usr/share/doc/bind-9.X.X/sample/var/named/named.zero /var/named/chroot
/var/named/data/
cp /usr/share/doc/bind-9.X.X/sample/var/named/named.local /var/named/chroot
/var/named/data/
cp /usr/share/doc/bind-9.X.X/sample/var/named/named.root /var/named/chroot
34 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
/var/named/data/
cd /var/named/chroot/var/named/data/
chcon -u system_u -r object_r -t named_cache_t localhost.zone
localdomain.zone named.broadcast named.ip6.local named.zero named.root
named.local
zone "your-domain.com"{
type slave;
file "named.your-domain.com"; - Specify slaves/named.your-domain.com for RH
EL4/5 chrooted bind
masters { XXX.XXX.XXX.XXX; }; - IP address of primary DNS
};
zone "your-domain-2.com"{
type slave;
file "named.your-domain-2.com";
masters { XXX.XXX.XXX.XXX; };
};
view "external"
{
match-clients { any; };
match-destinations { any; };
allow-transfer { none; }; - Slave does not transfer to anyone, slave receive
s
recursion no;
include "/etc/named.root.hints";
zone "your-domain.com" {
type slave;
file "/var/named/slaves/external/named.your-domain.com";
notify no; - Slave does not notify, slave is notifie
d by master
masters { XXX.XXX.XXX.XXX; }; - State IP of master server
};
};
Note: RHEL4/5, CentOS 4/5, Fedora 3+ use chrooted directory structure permissions which require the use of the
35 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Slave Zone Files: These are transfered from master to slave and cached by slave. There is no need to generate
a zone file on the slave.
Additional Information:
Man page on named.conf (http://man.yolinux.com/cgi-bin/man2html?cgi_command=named.conf)
Man page on named DNS server (http://man.yolinux.com/cgi-bin/man2html?cgi_command=named(8))
Full DNS manual (http://www.zytrax.com/books/dns/)
[Potential Pitfall]: Ubuntu dapper/hardy/natty - Path names used can not violate Apparmor security rules as
defined in /etc/apparmor.d/usr.sbin.named. Note that the slave files are typically named "/var/lib
/bind/named.your-domain.com" as permitted by the security configuration.
[Potential Pitfall]: Ubuntu dapper/hardy/natty - Create log file and set ownership and permission for file not created
by installation:
touch /var/log/bindlog
chown root.bind /var/log/bindlog
chmod 664 /var/log/bindlog
Named needs write permission on the directory containing the file. This condition often occurs for a new "slave" or
"secondary" name server where the zone files do not yet exist.
The default (RHEL4/5, CentOS 4/5, Fedora Core 3+, ...):
drwxr-x--- 4 root named 4096 Aug 25 2004 named
drwxrwx--- 2 named named 4096 Sep 17 20:37 slaves
file "slaves/named.your-domain.com";
Bind Defaults:
Logging is to /var/log/messages
After the configuration files have been edited, restart the name daemon.
/etc/init.d/named restart
Bind zone transfers work best if the clocks of the two systems are synchronised. See the YoLinux SysAdmin
Tutorial: Time and ntpd (LinuxTutorialSysAdmin.html#TIME)
File: /var/named/named.your-domain.com This is created for you by Bind on the slave (secondary) server when
it replicates from Primary server.
36 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Test DNS:
Must install packages:
37 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
or
nslookup
> server your-nameserver-to-test.domain.com
> node.domain-to-test.com
> exit
OR
host -t mx domain-to-test.com
OR
Test your DNS with the following DNS diagnostics web site: DnsStuff.com (http://dnsstuff.com/)
logging {
channel bindlog {
// Keep five old versions of the log-file (rotates logs)
file "/var/log/bindlog" versions 5 size 1m;
print-time yes;
print-category yes;
print-severity yes;
};
/* If you want to enable debugging, eg. using the 'rndc trace' command,
* named will try to write the 'named.run' file in the $directory (/var/named).
* By default, SELinux policy does not allow named to modify the /var/named dire
ctory,
* so put the default debug log file in data/ :
*/
channel default_debug {
file "data/named.run";
severity dynamic;
};
category xfer-out { bindlog; }; - Zone transfers
category xfer-in { bindlog; }; - Zone transfers
category security { bindlog; }; - Approved/unapproved requests
38 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
The latest RedHat bind updates run the named as user "named" to avoid a lot of earlier hacker exploits. To chroot
the process is to create an even more secure environment by limiting the view of the system that the process can
access. The process is limited to the chrooted directory assigned.
The chroot of the named process to a directory under a given user will prevent the possibility of an exploit which at
one time would result in root access. The original default RedHat configuration (6.2) ran the named process as
root, thus if an exploit was found, the named process will allow the hacker to use the privileges of the root user.
(no longer true)
Example:
When chrooted, the process does not have access to system libraries thus a local lib directory is required with the
appropriate library files - theoretically. This does not seem to be the case here and as noted above in chrooted
FTP. It's a mystery to me but it works???? Another method to handle libraries is to re-compile the named binary
with everything statically linked. Add -static to the compile options. The chrooted process should also require a
local /etc/named.conf etc... but doesn't seem to???
#!/bin/sh
cd /opt
mkdir named
cd named
mkdir etc
mkdir bin
mkdir var
cd var
mkdir named
mkdir run
cd ..
chown -R named.named bin etc var
You can probably stop here. If your system acts like a chrooted system should, then continue with the following:
39 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
cp -p /etc/named.conf etc
cp -p /etc/localtime etc
cp -p /bin/false bin
echo "named:x:25:25:Named:/var/named:/bin/false" > etc/passwd
echo "named:x:25:" > etc/group
touch var/run/named.pid
if [ -f /etc/namedb ]
then
cp -p /etc/namedb etc/namedb
fi
mkdir dev
cd dev
cd ..
chown -R named.named bin etc var
01 #!/bin/bash
02 #
03 # named This shell script takes care of starting and stopping
04 # named (BIND DNS server).
05 #
06 # chkconfig: - 55 45
07 # description: named (BIND) is a Domain Name Server (DNS) \
08 # that is used to resolve host names to IP addresses.
09 # probe: true
10
11 # Source function library.
12 . /etc/rc.d/init.d/functions
13
14 # Source networking configuration.
15 . /etc/sysconfig/network
16
17 # Check that networking is up.
18 [ ${NETWORKING} = "no" ] && exit 0
19
20 [ -f /etc/sysconfig/named ] && . /etc/sysconfig/named
21
22 [ -f /usr/sbin/named ] || exit 0
23
24 [ -f /etc/named.conf ] || exit 0
25
26 RETVAL=0
27
28 start() {
29 # Start daemons.
30 echo -n "Starting named: "
31 daemon named -u named -g named -t /opt/named # Change made here
32 RETVAL=$?
33 [ $RETVAL -eq 0 ] && touch /var/lock/subsys/named
34 echo
35 return $RETVAL
36 }
37 stop() {
38 # Stop daemons.
39 echo -n "Shutting down named: "
40 killproc named
41 RETVAL=$?
42 [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/named
43 echo
44 return $RETVAL
45 }
46 rhstatus() {
47 /usr/sbin/ndc status
48 return $?
49 }
50 restart() {
51 stop
40 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
52 start
53 }
54 reload() {
55 /usr/sbin/ndc reload
56 return $?
57 }
58 probe() {
59 # named knows how to reload intelligently; we don't want linuxconf
60 # to offer to restart every time
61 /usr/sbin/ndc reload >/dev/null 2>&1 || echo start
62 return $?
63 }
64
65 # See how we were called.
66 case "$1" in
67 start)
68 start
69 ;;
70 stop)
71 stop
72 ;;
73 status)
74 rhstatus
75 ;;
76 restart)
77 restart
78 ;;
79 condrestart)
80 [ -f /var/lock/subsys/named ] && restart || :
81 ;;
82 reload)
83 reload
84 ;;
85 probe)
86 probe
87 ;;
88 *)
89 echo "Usage: named
{start|stop|status|restart|condrestart|reload|probe}"
90 exit 1
91 esac
92
93 exit $?
Note: The current version of bind from the RedHat errata updates and security fixes (http://www.redhat.com
/support/errata/ (http://www.redhat.com/support/errata/)) runs the named process as user "named" in the home
(not chrooted) directory /var/named with no shell available. (named -u named) This should be secure
enough. Proceed with a chrooted installation if your are paranoid.
See:
Modern releases of Linux (i.e. Fedore Core 3, Red Hat Enterprise Linux 4) come preconfigured to use "chrooted"
bind. This security feature forces even an exploited version of bind to only operate within the "chrooted" jail
/var/named/chroot which contains the familiar directories:
These directories are generated and configured by the Red Hat/Fedora RPM package "bind-chroot".
If building from source you will have to generate this configuration manually:
mkdir -p /var/named/chroot
mkdir /var/named/chroot/dev
mknod /var/named/chroot/dev/null c 1 3
41 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
mknod /var/named/chroot/dev/zero c 1 5
mknod /var/named/chroot/dev/random c 1 8
chmod 666 -R /var/named/chroot/dev
mkdir -p /var/named/chroot/etc
ln -s /var/named/chroot/etc/named.conf /etc/named.conf
mkdir -p /var/named/chroot/var/named
ln -s /var/named/chroot/var/named/named.XXXX /var/named/named.XXXX
ln -s /var/named/chroot/var/named/named.YYYY /var/named/named.YYYY
...
mkdir -p /var/named/chroot/var/named/slaves
mkdir -p /var/named/chroot/var/named/data
mkdir -p /var/named/chroot/var/run
mkdir -p /var/named/chroot/var/tmp
chown -R named:named /var/named/chroot
chown -R root:named /var/named/chroot/var/named
File: /var/named/data/named.your-domain.com
$TTL 604800
your-domain.com. IN SOA ns1.your-domain.com. hostmaster.your-domain.com.
...
...
www IN A 192.168.1.1
www IN A 192.168.1.2
www IN A 192.168.1.3
www IN A 192.168.1.4
www IN A 192.168.1.5
www IN A 192.168.1.6
Note:
This example will resolve the www.your-domain.com URL to each of the IP addresses listed, one at a time
for each request. First request will resolve to 192.168.1.1, the second request will resolve to 192.168.1.2,
etc.
A perfectly even load balance is not possible becaused network service providers run DNS caching servers
which hold the resolved IP address for a different number of users.
Using multiple CNAME's to rotate records is no longer permissible in bind9.
Listing a record multiple times with the same IP address will not change the load sharing. Bind will ignore
duplicate records.
Reducing the time to live (TTL) will cause load sharing to take place more frequently thus responding to a
change in servers more quickly.
Bind/DNS Links:
Internet Software Consortium (ISC) Home Page (http://www.isc.org) - ISC Bind Home (http://www.isc.org
/downloads/BIND/)
Zytrax Bind 9 manual (http://www.zytrax.com/books/dns/) - Bind for rocket scientists
comp.protocols.tcp-ip.domains FAQ (http://www.intac.com/%7Ecdp/cptd-faq/) - HTML version
mod_rewrite: page forwarding, load balancing and round robin schemes (http://httpd.apache.org/docs/2.2
/rewrite/)
LDP DNS-HOWTO (http://tldp.yolinux.com/HOWTO/DNS-HOWTO.html)
DNS Security best practices (http://www.cricketondns.com/archives.cfm/category/dns-best-practices) -
Cricket Liu (coauthor of DNS and Bind)
DNS Security Paper (http://www.psionic.com/papers/dns/) - Craig Rowland
EveryDNS.net (http://www.everydns.net/) - Free DNS
42 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Note that the Name registrations policies for the registrars are stated at ICANN.org (http://www.icann.org).
You must renew with the same registrar within five days BEFORE the expiration date. There is no rule for
afterwards.
Most free a domain name 30 days after it expires.
This feature is available with the Linux 2.4/2.6 kernel. (If compiling kernel: Networking Options + IP: Virtual Server
Configuration)
Configuration: This example will load balance http traffic to three web servers and ftp traffic to a fourth server.
Enable IP Masquerading:
43 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
For more on IP Masquerading, iptables and subnet addresses, see the YoLinux network gateway tutorial
(LinuxTutorialIptablesNetworkGateway.html).
Enable virtual server:
Create virtual service and choose scheduler for http (80) and ftp (21):
Command directives:
A: Add a virtual service defined by IP address, port number, and protocol.
-t: Use TCP service host:port
-s: scheduler:
rr: Robin Robin: distributes jobs equally amongst the avail- able real servers.
wrr: Weighted Round Robin.
lc: Least-Connection: assigns more jobs to real servers with fewer active jobs.
wlc: (Default) Weighted Least-Connection: assigns more jobs to servers with fewer jobs
and relative to the real server's weight.
lblc, lblcr, dh, sh, sed, nq. See man page.
Configure load balancing cluser.
Command directives:
-r: Real server.
-m: Use masquerading also known as network address translation (NAT)
-w: Weight is an integer specifying the capacity of a server relative to the others in the pool.
The valid values of weight are 0 through to 65535. The default is 1.
Links:
LinuxVirtualServer.org (http://www.linuxvirtualserver.org/)
iptables (http://man.yolinux.com/cgi-bin/man2html?cgi_command=iptables) - Administration tool for IPv4
packet filtering and NAT
ipvsadm (http://man.yolinux.com/cgi-bin/man2html?cgi_command=ipvsadm) - Administer the routing table
on a Linux Virtual Server.
A new installation will most likely NOT start the named background process which may be started manually after
configuration.
See the YoLinux Init Process Tutorial (LinuxTutorialInitProcess.html) for more information.
The inetd (or xinetd) background process is the Internet daemon which starts FTP when an ftp request is made.
44 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
#!/bin/sh
# Author Greg Ippolito
# Requires: /opt/etc/AccountDefaults/pathmsg favicon.ico mwh-mini_tr.gif etc.
# /opt/bin/ftponly
# You must be root to run this script.
#
if [ $# -eq 0 ]
then
echo "Enter user id as a command argument"
else if [ -r /home/$1 ]
then
echo "User's home directory already exists"
else
echo "1) Create user."
adduser -m $1
echo "3) Add read access to user directory so apache can read it."
cd /home
chmod ugo+rx $1
cd $1
45 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
yolinux.com/robots.txt (http://www.yolinux.com/robots.txt)
USC.edu/robots.txt (http://www.usc.edu/robots.txt)
Books:
46 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
/gp/redirect.html?ie=UTF8&location=http:
//www.amazon.com/exec/obidos
/ASIN/0470413395/&tag=yolinux-20)
47 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
/gp/redirect.html?ie=UTF8&location=http:
//www.amazon.com/exec/obidos
/ASIN/047008278X/&tag=yolinux-20)
/gp/redirect.html?ie=UTF8&location=http:
//www.amazon.com/exec/obidos
/ASIN/0672329298/&tag=yolinux-20)
/gp/redirect.html?ie=UTF8&location=http:
//www.amazon.com/exec/obidos
/ASIN/0672327082/&tag=yolinux-20)
/gp/redirect.html?ie=UTF8&location=http:
//www.amazon.com/exec/obidos
/ASIN/1590594940/&tag=yolinux-20)
(http://www.addthis.com/bookmark.php?v=250&pub=yolinux)
48 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Advertisements
Jobs
QA Analyst - Telecom
(http://www.jobthread.com
/jt/jobs
/widget_click.php?id=c0e4b3&
job_id=9950163)
Mississauga, ON,
Canada
Direct IT Recruiting INC.
Java Entwickler (w/m)
(http://www.jobthread.com
/jt/jobs
/widget_click.php?id=c0e4b3&
job_id=9889733)
Düsseldorf, Nordrhein-
Westfalen,...
Robert Half
Software Developers
(C# .NET)...
(http://www.jobthread.com
/jt/jobs
/widget_click.php?id=c0e4b3&
job_id=9950320)
Knutsford, Cheshire,
United Kingdom
- The Resourcing Hub
IT-Allrounder (w/m)
Linux
(http://www.jobthread.com
/jt/jobs
/widget_click.php?id=c0e4b3&
job_id=9818368)
Darmstadt, Hessen,
Germany
Robert Half
49 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Database Systems
Administrator (DBA,...
(http://www.jobthread.com
/jt/jobs
/widget_click.php?id=c0e4b3&
job_id=9545271)
Milton Keynes,
Buckinghamshire,...
White Clarke Group
Java Developer(Angular
J.S)
(http://www.jobthread.com
/jt/jobs
/widget_click.php?id=c0e4b3&
job_id=9806513)
Jersey City, NJ
Libsys INC
Web Developer
(http://www.jobthread.com
/jt/jobs
/widget_click.php?id=c0e4b3&
job_id=9837251)
Altrincham, Cheshire,
United Kingdom
Parity Professionals
Senior Java Developer
(Java,...
(http://www.jobthread.com
/jt/jobs
/widget_click.php?id=c0e4b3&
job_id=9881702)
Warwick, Warwickshire,
United Kingdom
First Utility
Softwareentwickler
(m/w)...
(http://www.jobthread.com
/jt/jobs
/widget_click.php?id=c0e4b3&
job_id=9546114)
Köln, Nordrhein-
Westfalen, Germany
FERCHAU Engineering
GmbH
c++ developer
(http://www.jobthread.com
/jt/jobs
/widget_click.php?id=c0e4b3&
job_id=9870585)
Hilversum, Noord-
Holland, Netherlands
Darwin Recruitment NL
POWERED BY JOBTHREAD
(http://www.lpmagazine.org)
50 of 51 01/07/2016 11:19 AM
Linux Web Server and Domain Configuration Tutorial http://www.yolinux.com/TUTORIALS/LinuxTutori...
Terms.html)
Privacy Policy (http://www.yolinux.com
/privacy.html) | Advertise with us
(http://www.yolinux.com/YoLinux-
Advertising.html) | Feedback Form
(http://www.yolinux.com
/YoLinuxEmailForm.html) |
Unauthorized copying or redistribution
prohibited.
Copyright © 2000 - 2014 by Greg Ippolito
51 of 51 01/07/2016 11:19 AM