Running pppd as a server is just a matter of adding the appropriate options to the command line. Ideally, you would create a special account, say ppp, and give it a script or program as a login shell that invokes pppd with these options. For instance, you would add the following line to /etc/passwd:
ppp:*:500:200:Public PPP Account:/tmp:/etc/ppp/ppplogin
Of course, you may want to use different uids and gids than those shown above. You would also have to set the password for the above account using the passwd command.
The ppplogin script might then look like this:
#!/bin/sh # ppplogin - script to fire up pppd on login mesg n stty -echo exec pppd -detach silent modem crtscts
The mesg command disables other users from writing to the tty by using, for instance, the write command. The stty command turns off character echoing. This is necessary because otherwise everything the peer sends would be echoed back to it. The most important pppd option given above is -detach, because it prevents pppd from detaching from the controlling tty. If we didn't specify this option, it would go to the background, making the shell script exit. This in turn would cause the serial line to be hung up and the connection to be dropped. The silent option causes pppd to wait until it receives a packet from the calling system before it starts sending. This prevents transmit timeouts from occurring when the calling system is slow in firing up its PPP client. The modem option makes pppd drive the modem control lines of the serial port. You should always turn this option on when using pppd with a modem. The crtscts option turns on hardware handshake.
Besides these options, you might want to force some sort of authentication, for example, by specifying auth on pppd's command line or in the global options file. The manual page also discusses more specific options for turning individual authentication protocols on and off.
Authentication with PPP