|
|
Line 1: |
Line 1: |
| __TOC__
| | {{DISPLAYTITLE:schat}} |
| | {{Core Module}} |
| | This module allows you to have a secure DCC chat with someone else who uses this module as well. |
|
| |
|
| '''Note: if you just want to run ZNC automatically, when server is turned on, don't use this page, look <u>[[FAQ#How_can_I_restart_ZNC_automatically_.28in_case_of_a_machine_reboot.2C_crash.2C_etc..29.3F|here]]</u> instead.
| | == Usage == |
| | {{Module arguments}} |
|
| |
|
| ==New User== | | === Commands === |
| | To request a secure chat use one of the following commands: |
| | /schat <nick> |
| | /msg *schat chat <nick> |
| | To list all initiated chats use: |
| | /msg *schat list |
| | To close a chat use: |
| | /msg *schat close <nick> |
|
| |
|
| '''Note: if you just want to run ZNC automatically, when server is turned on, don't use this page, look <u>[[FAQ#How_can_I_restart_ZNC_automatically_.28in_case_of_a_machine_reboot.2C_crash.2C_etc..29.3F|here]]</u> instead.
| | Once a chat is initiated you can chat with the other person via a query that looks like <code>(s)<nick></code>. |
| | | [[de:Schat]] |
| We first create a new user so that there is a separation of concerns. This separation gives us many security benefits. The new user will have a shell that cannot be logged into so there is no threat of a remote attack or someone sitting at the computer. Also the user will have reduced privileges and therefore can only access files for which it has ownership or is part of the group. We create this new user by issuing the following command (I added a comment field for later system administrators):
| |
| sudo useradd --create-home -d /var/lib/znc --system --shell /sbin/nologin --comment "Account to run ZNC daemon" --user-group znc
| |
| | |
| Though we cannot ourselves login to this user, we can have the system assign the user a process. This also helps identify who is running which processes in the "Task Manager" per se. Creating a new user is not necessary, but as you can see there are many reasons for doing so.
| |
| | |
| ===Making a new home===
| |
| | |
| '''Note: if you just want to run ZNC automatically, when server is turned on, don't use this page, look <u>[[FAQ#How_can_I_restart_ZNC_automatically_.28in_case_of_a_machine_reboot.2C_crash.2C_etc..29.3F|here]]</u> instead.
| |
| | |
| Now that we have a new user, we have to create the data directory that our ZNC server will store its configurations. Since our initialization scripts will be looking for the configuration in <code>/var/lib/znc</code> that's where we have to tell ZNC to make them.
| |
| * Make the configuration we will run at startup:
| |
| sudo -u znc /usr/bin/znc --datadir=/var/lib/znc --makeconf
| |
| | |
| ==Create the <code>init.d</code> Scripts==
| |
| | |
| '''Note: if you just want to run ZNC automatically, when server is turned on, don't use this page, look <u>[[FAQ#How_can_I_restart_ZNC_automatically_.28in_case_of_a_machine_reboot.2C_crash.2C_etc..29.3F|here]]</u> instead.
| |
| | |
| Once our new user and configuration files have been created, we have to create the initialization script. These scripts might have already been created for you by the package manager. There are two main platforms for Linux, Fedora and Debian. Fedora is like your CentOS and Red Hat distros, while Debian's most notable distro is Ubuntu. There is a difference between the two scripts, so only use the one you need.
| |
| ===Fedora-based machines===
| |
| | |
| '''Note: if you just want to run ZNC automatically, when server is turned on, don't use this page, look <u>[[FAQ#How_can_I_restart_ZNC_automatically_.28in_case_of_a_machine_reboot.2C_crash.2C_etc..29.3F|here]]</u> instead.
| |
| | |
| * Here is the <code>/etc/init.d/znc</code> for Fedora-based machines:
| |
| #!/bin/sh
| |
| #
| |
| # znc - Advanced IRC Bouncer INIT script #
| |
| # description: An Advanced IRC bouncer INIT script for
| |
| # Source function library.
| |
| . /etc/rc.d/init.d/functions
| |
|
| |
| exec=/usr/bin/znc
| |
| prog=znc
| |
| config=/var/lib/znc
| |
| runas=znc
| |
|
| |
| lockfile=/var/lock/subsys/$prog
| |
|
| |
| start() {
| |
| [ -x $exec ] || exit 5
| |
| echo -n $"Starting $prog: "
| |
| # if not running, start it up here, usually something like "daemon $exec"
| |
| daemon --user $runas "$exec -d $config >/dev/null 2>&1"
| |
| # If you're reckless with your system, comment the line above and
| |
| # uncomment this one below... I just don't get it why
| |
| # daemon "$exec -r -d $config >/dev/null 2>&1"
| |
| retval=$?
| |
| echo
| |
| [ $retval -eq 0 ] && touch $lockfile
| |
| return $retval
| |
| }
| |
|
| |
| stop() {
| |
| echo -n $"Stopping $prog: "
| |
| # stop it here, often "killproc $prog"
| |
| killproc $prog -TERM
| |
| retval=$?
| |
| echo
| |
| [ $retval -eq 0 ] && rm -f $lockfile
| |
| return $retval
| |
| }
| |
|
| |
| reload() {
| |
| echo -n $"Reloading $prog: "
| |
| # stop it here, often "killproc $prog"
| |
| killproc $prog -HUP
| |
| retval=$?
| |
| echo
| |
| }
| |
|
| |
| restart() {
| |
| stop
| |
| start
| |
| }
| |
|
| |
| rh_status() {
| |
| # run checks to determine if the service is running or use generic status
| |
| status $prog
| |
| }
| |
|
| |
| rh_status_q() {
| |
| rh_status >/dev/null 2>&1
| |
| }
| |
|
| |
| case "$1" in
| |
| start)
| |
| rh_status_q && exit 0
| |
| $1
| |
| ;;
| |
| stop)
| |
| rh_status_q || exit 0
| |
| $1
| |
| ;;
| |
| restart)
| |
| $1
| |
| ;;
| |
| reload)
| |
| rh_status_q || exit 7
| |
| $1
| |
| ;;
| |
| status)
| |
| rh_status
| |
| ;;
| |
| condrestart|try-restart)
| |
| rh_status_q || exit 0
| |
| restart
| |
| ;;
| |
| *)
| |
| echo $"Usage: $0 {start|stop|status|reload|restart|condrestart|try-restart}"
| |
| exit 2
| |
| esac
| |
| exit $?
| |
| | |
| ===Debian-based machines===
| |
| | |
| '''Note: if you just want to run ZNC automatically, when server is turned on, don't use this page, look <u>[[FAQ#How_can_I_restart_ZNC_automatically_.28in_case_of_a_machine_reboot.2C_crash.2C_etc..29.3F|here]]</u> instead.
| |
| | |
| * Here is the <code>/etc/init.d/znc</code> for Debian-based machines:
| |
| #! /bin/sh
| |
| ### BEGIN INIT INFO
| |
| # Provides: znc
| |
| # Required-Start: $remote_fs $syslog
| |
| # Required-Stop: $remote_fs $syslog
| |
| # Default-Start: 2 3 4 5
| |
| # Default-Stop: 0 1 6
| |
| # Short-Description: ZNC IRC bouncer
| |
| # Description: ZNC is an IRC bouncer
| |
| ### END INIT INFO
| |
|
| |
| PATH=/sbin:/usr/sbin:/bin:/usr/bin
| |
| DESC="ZNC daemon"
| |
| NAME=znc
| |
| DAEMON=/usr/bin/$NAME
| |
| DATADIR=/var/lib/znc
| |
| DAEMON_ARGS="--datadir=$DATADIR"
| |
| PIDDIR=/var/run/znc
| |
| PIDFILE=$PIDDIR/$NAME.pid
| |
| SCRIPTNAME=/etc/init.d/$NAME
| |
| USER=znc
| |
| GROUP=znc
| |
|
| |
| # Exit if the package is not installed
| |
| [ -x "$DAEMON" ] || exit 0
| |
|
| |
| # Read configuration variable file if it is present
| |
| [ -r /etc/default/$NAME ] && . /etc/default/$NAME
| |
|
| |
| # Load the VERBOSE setting and other rcS variables
| |
| . /lib/init/vars.sh
| |
|
| |
| # Define LSB log_* functions.
| |
| # Depend on lsb-base (>= 3.2-14) to ensure that this file is present
| |
| # and status_of_proc is working.
| |
| . /lib/lsb/init-functions
| |
|
| |
| #
| |
| # Function that starts the daemon/service
| |
| #
| |
| do_start()
| |
| {
| |
| # Return
| |
| # 0 if daemon has been started
| |
| # 1 if daemon was already running
| |
| # 2 if daemon could not be started
| |
| if [ ! -d $PIDDIR ]
| |
| then
| |
| mkdir $PIDDIR
| |
| fi
| |
| chown $USER:$GROUP $PIDDIR
| |
| start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test --chuid $USER > /dev/null || return 1
| |
| start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --chuid $USER -- $DAEMON_ARGS > /dev/null || return 2
| |
| }
| |
|
| |
| #
| |
| # Function that stops the daemon/service
| |
| #
| |
| do_stop()
| |
| {
| |
| # Return
| |
| # 0 if daemon has been stopped
| |
| # 1 if daemon was already stopped
| |
| # 2 if daemon could not be stopped
| |
| # other if a failure occurred
| |
| start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME --chuid $USER
| |
| RETVAL="$?"
| |
| [ "$RETVAL" = 2 ] && return 2
| |
| # Wait for children to finish too if this is a daemon that forks
| |
| # and if the daemon is only ever run from this initscript.
| |
| # If the above conditions are not satisfied then add some other code
| |
| # that waits for the process to drop all resources that could be
| |
| # needed by services started subsequently. A last resort is to
| |
| # sleep for some time.
| |
| start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON --chuid $USER
| |
| [ "$?" = 2 ] && return 2
| |
| # Many daemons don't delete their pidfiles when they exit.
| |
| rm -f $PIDFILE
| |
| return "$RETVAL"
| |
| }
| |
|
| |
| #
| |
| # Function that sends a SIGHUP to the daemon/service
| |
| #
| |
| do_reload() {
| |
| start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME --chuid $USER
| |
| return 0
| |
| }
| |
|
| |
| case "$1" in
| |
| start)
| |
| [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
| |
| do_start
| |
| case "$?" in
| |
| 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
| |
| 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
| |
| esac
| |
| ;;
| |
| stop)
| |
| [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
| |
| do_stop
| |
| case "$?" in
| |
| 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
| |
| 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
| |
| esac
| |
| ;;
| |
| status)
| |
| status_of_proc -p $PIDFILE "$DAEMON" "$NAME" && exit 0 || exit $?
| |
| ;;
| |
| reload)
| |
| log_daemon_msg "Reloading $DESC" "$NAME"
| |
| do_reload
| |
| log_end_msg $?
| |
| ;;
| |
| restart)
| |
| log_daemon_msg "Restarting $DESC" "$NAME"
| |
| do_stop
| |
| case "$?" in
| |
| 0|1)
| |
| do_start
| |
| case "$?" in
| |
| 0) log_end_msg 0 ;;
| |
| 1) log_end_msg 1 ;; # Old process is still running
| |
| *) log_end_msg 1 ;; # Failed to start
| |
| esac
| |
| ;;
| |
| *)
| |
| # Failed to stop
| |
| log_end_msg 1
| |
| ;;
| |
| esac
| |
| ;;
| |
| *)
| |
| echo "Usage: $SCRIPTNAME {status|start|stop|reload|restart}" >&2
| |
| exit 3
| |
| ;;
| |
| esac
| |
|
| |
| After you've created the script, you must give it the proper permissions to run
| |
| sudo chmod 755 /etc/init.d/znc
| |
| | |
| == Create the systemd script==
| |
| | |
| '''Note: if you just want to run ZNC automatically, when server is turned on, don't use this page, look <u>[[FAQ#How_can_I_restart_ZNC_automatically_.28in_case_of_a_machine_reboot.2C_crash.2C_etc..29.3F|here]]</u> instead.
| |
| | |
| * Create the file: /etc/systemd/system/znc.service
| |
| | |
| [Unit]
| |
| Description=ZNC, an advanced IRC bouncer
| |
| After=network.target
| |
|
| |
| [Service]
| |
| ExecStart=/usr/bin/znc -f --datadir=/var/lib/znc
| |
| User=znc
| |
|
| |
| [Install]
| |
| WantedBy=multi-user.target
| |
| | |
| ==Get the daemon up and running==
| |
| | |
| '''Note: if you just want to run ZNC automatically, when server is turned on, don't use this page, look <u>[[FAQ#How_can_I_restart_ZNC_automatically_.28in_case_of_a_machine_reboot.2C_crash.2C_etc..29.3F|here]]</u> instead.
| |
| | |
| Everything is now in place! Once we insert the daemon, you can either start the service yourself (as shown below) or restart the computer for the daemon to take its place.
| |
| | |
| * Insert the script into the boot sequence:
| |
| sudo update-rc.d znc defaults # For Debian systems
| |
| * Start the service:
| |
| sudo service znc start
| |
| * Verify that the service is running:
| |
| sudo service znc status
| |
This module allows you to have a secure DCC chat with someone else who uses this module as well.
Usage
Arguments
This user module takes no arguments.
Read loading modules to learn more about loading modules.
Commands
To request a secure chat use one of the following commands:
/schat <nick>
/msg *schat chat <nick>
To list all initiated chats use:
/msg *schat list
To close a chat use:
/msg *schat close <nick>
Once a chat is initiated you can chat with the other person via a query that looks like (s)<nick>
.
de:Schat