\documentclass[a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{t1enc}
\usepackage[french]{babel}
\usepackage{moreverb}
\usepackage{a4wide}
\usepackage{makeidx}

% ------------------- %
% Liste des commandes %
% ------------------- %
%Donne un nom au paragraphe (utile pour les remarques, attention...)
\newcommand{\parname}[1]{\ifhmode\endgraf\noindent\else\fi\removelastskip%
{\bf #1}\hspace*{0.5cm}}
%Antislash en police non proportionnelle
\newcommand{\antislash}{{\tt \textbackslash}}
% Mise en page des exemples de scripts
\newcount\countprog
\countprog=1
% Numérotation des scripts
\newcommand{\debutscriptn}{\ifhmode\par\else\fi\removelastskip%
\goodbreak%
{\hfill\tt script\the\countprog.sh\hfill\null\endgraf}%
\global\advance\countprog by 1%
\null\hfill}
\newcommand{\debutscript}{\ifhmode\par\else\fi\removelastskip%
\null\hfill}
\newcommand{\finscript}{\hfill\null\par\vspace*{0.3cm}}

\title{Proftpd}
\author{Eric BERTHOMIER\\eric.berthomier@free.fr}
\begin{document}
\date{}
\maketitle{}
Débutant dans le monde linux ('newbie'), je ne peux assurer que ce document ne contient pas d'erreurs. Il a simplement le mérite d'exister. Tout commentaire et corrections seront les bienvenus.\\

\section{Installation}
\begin{itemize}
\item {Installation du pakage par {\tt apt-get install proftpd}.}
\item {Modification du fichier {\tt /etc/inetd.conf} en changeant ou ajoutant la ligne concernant le ftp.\\
{\tt ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/proftpd}.}
{\item Relancer {\tt inetd} : {\tt killall -HUP inetd}.\\
Tester avec ftp localhost.}
\end{itemize}
\section{Modification de la configuration}
Le fichier de configuration est {\tt /etc/proftpd.conf}. La documentation se trouve dans /usr/doc/propftpd.\\
Pour qu'une modification soit prise en compte, il faut stopper et redémarrer le démon : \\
\begin{itemize}
{\item {\tt start-stop-daemon -K --exec /usr/sbin/proftpd}}
{\item {\tt start-stop-daemon -S --exec /usr/sbin/proftpd}}
\end{itemize}
ou sur une distribution de type RedHat : 
\begin{itemize}
{\item {\tt /etc/rc.d/init.d/<nom du démon> start}}
{\item {\tt /etc/rc.d/init.d/<nom du démon> stop}}
{\item {\tt /etc/rc.d/init.d/<nom du démon> restart}}
\end{itemize}
De manière générale, on peut forcer un démon à relire son fichier de configuration en tapant la commande :\\
\indent {\tt kill -HUP <no\_process\_daemon>}
\section{Ajout et modifications}
\subsection{Protections}
\noindent
{\tt DefaultRoot \textasciitilde} : l'utilisateur est confiné au répertoire de base qui lui est donné à la connexion.\\
{\tt Umask 0137} : permet d'avoir les droits {\tt -rw-r-----}. Le {\tt w} pour l'utilisateur est obligatoire pour pouvoir réécrire ou supprimer un fichier. Ceci pose un problème dans le cas de la présence de répertoires (nécessite le droit x), d'où un {\tt Umask 0227}.
\subsection{Message de bienvenue}
\begin{verbatim}
<Global>
   DisplayLogin	.welcome.msg
</Global>
\end{verbatim}
Comme {\tt DefaultRoot \textasciitilde}, le message de bienvenue doit se trouver sur le répertoire de connexion de l'utilisateur FTP. Le fait de mettre un {\bf .} devant le nom de fichier permet de le rendre invisible en connexion standard (ce qui peut éviter de le supprimmer par erreur).

\section{Configuration de Linux}

\subsection{Utilisateurs et groupes}
Attention par défaut {\tt proftpd} utilise le groupe {\tt nogroup} pour fonctionner. Pensez à le créer s'il n'existe pas déjà.
\begin{enumerate}

\item{Création d'un utilisateur de base {\tt majeis} qui pourra modifier le contenu du répertoire. Répertoire de base {\tt /home/majeis}. {\tt adduser majeis --home ...}}

\item{Création d'un utilisateur invité {\tt invite} qui pourra lire le répertoire. Répertoire de base {\tt /home/majeis}. {\tt adduser invite --home /home/majeis}}

\item{Création d'un compte ftp wwwftp : {\tt addgrp wwwftp}.}

\item{Affiliation des utilisateurs au groupe wwwftp : édition du fichier {\tt /etc/group} ajout à la fin de la ligne {\tt wwwftp} majeis,invite}
\end{enumerate}
~ \\
\parname{Extrait du fichier {\tt /etc/group}}
\debutscript
\begin{boxedverbatim}
invite:*:1008:
majeis:*:1009:
nogroup:x:1010:
ftpwww:x:1011:majeis,invite
\end{boxedverbatim}
\finscript

\subsection{Ajouts de fichiers, problèmes de groupes}
Afin que les fichiers appartiennent au groupe {\tt wwwftp} et non au groupe {\tt majeis}, il est nécessaire que {\tt majeis} appartiennent d'abord au groupe {wwwftp}. Le but est d'obtenir lors de l'exécution de la commande {\tt id} : {\tt uid=1007(majeis) {\bf gid=1011(wwwftp)} groupes=1011(wwwftp)}. Pour celà on modifie le fichier {\tt /etc/passwd} de manière à ce que le gid de {\tt majeis} soit {\tt wwwftp} (1011).
~ \\
\parname{Extrait du fichier {\tt /etc/passwd}}
\debutscript
\begin{boxedverbatim}
invite:x:1008:1008::/home/majeis:/bin/bash
majeis:x:1007:1011::/home/majeis:/bin/bash
\end{boxedverbatim}
\finscript

\subsection{Prise en compte des modifications dans /etc/group et /etc/passwd}
En root ({\tt su} insuffisant), reconstruire le fichier {\tt /etc/shadow} grâce à la commande {\tt pwconv}.

\subsection{Répertoire}
Vérifiez que le répertoire {\tt /home/majeis } est les droits drwxr-----. Le droit d'exécution est obligatoire au moins pour le propriétaire.\\

\section{Exemple de répertoire configuré}
\debutscript
\begin{boxedverbatim}
total 432
drwxr-x---    2 majeis   ftpwww       4096 sep 28 10:51 .
drwxr-x--x   10 majeis   ftpwww       4096 sep 27 16:54 ..
-rw-r-----    1 majeis   ftpwww     428032 sep 28 10:51 WS_FTP95.exe
\end{boxedverbatim}
\finscript

\section{Erreurs}
{\tt DisplayConnect}, je n'ai pas réussi vraiment à le faire fonctionner, entrainaît le refus de toute connexion.

\section{Accès direct via navigateur}
L'adresse du site sera composé de la façon suivante : \\
\begin{center}
{\bf ftp://<user>:<password>@<ip>}\\
\end{center}
où
\begin{itemize}
\item{{\tt <user>} représent le nom de l'utilisateur.}
\item{{\tt <password>} le mot de passe qui lui est associé.}
\item{{\tt <ip>} l'adresse ip de la machine ou le nom de domaine qui lui est associé.}
\end{itemize}

\section{Exemple de fichier proftpd.conf}
\debutscript
\begin{boxedverbatim}
# This is a basic ProFTPD configuration file (rename it to 
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName			"Serveur FTP EIS"
ServerType			standalone
DefaultServer			on

DefaultRoot			~

# Port 21 is the standard FTP port.
Port				21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
# Droits de 
Umask				0227

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances			30

# Set the user and group that the server normally runs at.
User				nobody
Group				nogroup

# Don't let people pass % character to the server
DenyFilter			%

<Global>
  DisplayLogin .welcome.msg
</Global>

# Limitation des logins
<Limit LOGIN>
  order deny,allow
  DenyUser all
  AllowUser webmaster
  AllowUser majeis
  AllowUser invite
</Limit>

# Normally, we want files to be overwriteable.
<Directory /*>
  AllowOverwrite		on
</Directory>
\end{boxedverbatim}
\finscript
\end{document}