Chroot hosting user sftp + skrypt

Utworzono: 29 styczeń 2015

Od początku do końca... User ma możliwość zapisu tylko w katalogu /home/hosting/<user>/www, dostaje lipnego shella i linkowany jest do /var/www/nazwausera (moze byc np test.pl)

Dodawanie użytkownika, z palca:

useradd -r -s /bin/false test -g hosting -d /home/hosting/test -m

Teraz uprawnienia, zawsze zapominam jak powinny wyglądać, a powinny się przedstawiać następująco :)

 

mkdir /home/hosting/test/www
chmod 755 /home
chown root.root /home
chmod 755 /home/hosting
chown root.hosting /home/hosting
chmod 755 /home/hosting/test/
chown root.hosting /home/hosting/test
chmod 755 /home/hosting/test/www
chown test.hosting /home/hosting/test/www

Edycja /etc/ssh/sshd_config


# zmienić:
Subsystem sftp /usr/lib/openssh/sftp-server
# na:

Subsystem sftp internal-sftp# Po 

UsePAM yes# Wstawic

Match Group hosting
 ChrootDirectory /home/hosting/%u
 AllowTCPForwarding no
 X11Forwarding no
 ForceCommand internal-sftp

 

No i skrypt dodający użytkownika z chrotowanym środowiskiem i linkujący www do /var/www 

#!/bin/bash

homePrefix="/home/hosting"

#echo $1

if [ -z $1 ]; then
 echo ""
 echo "Uzycie: adduser-hosting <username>"
 echo ""
 exit
fi

echo "Katalog domowy: [$homePrefix/$1]:"read homeDirectory

if [ -z $homeDirectory ]; then
 homeDirectory="$homePrefix/$1"
fi

echo "Podaj nazwe grupy: [hosting]"
read groupName

if [ -z $groupName ]; then.
 groupName="hosting"
fi

echo "Wprowadzic dane?: [T/n]"
echo "Nazwa uzytkownika: $1"
echo "Grupa: $groupName"
echo "Katalog domowy: $homeDirectory"

read acceptData
echo $acceptData

if [ -z "$acceptData" ]; then
 acceptData="T"
fi

if [ "$acceptData" != "T" ]; then
 echo "Wychodze!"
 exit;
fi

`useradd -r -s /bin/false $1 -g $groupName -d $homePrefix/$1`
`passwd $1``mkdir $homePrefix/$1`
`chown root.$groupName $homePrefix/$1`
`chmod 755 $homePrefix/$1`
`mkdir $homePrefix/$1/www`
`chmod 755 $homePrefix/$1/www`
`chown $1:$groupName $homePrefix/$1/www` 

`ln -s $homePrefix/$1/www /var/www/$1`