SFTP сервер на ЦентОС са по једним chroot-ованим RW и RO корисником

SFTP (скраћено од SSH File Transfer Protocol а неки га викају и Secure File Transfer Protocol) је мрежни протокол који омогућава сигуран приступ и пренос података кроз мрежу путем SSH (Secure Shell) тако да ако се било ко постави између вас и рутера или вам ослушкује саобраћај – може само да кука и проклиње дан кад је Мијатовић погодио стативу.

У овом задатку на ЦентОС 7 минимал Линуксu, потребно је подићи SFTP сервер за два chroot-ована корисника која ће приступати истој локацији – али да један корисник буде RO (read-only) корисник а други RW (read-write) корисник. Ти корисници не треба да имају приступ shell-у и привилегије треба решити мимо ACL (Access Control List) ако је могуће.

Зашто chroot? Па да корисник, било да има или нема приступ shell-у (а овде ћемо их направити да немају) не може да се шврћка по туђим и системским фајловима већ да би био ограничен само на оно – што му ми дамо. Фирме иначе ово користе кад желе да неке фајлове поделе са својим партнерима или клијентима а не би баш да буде за свачије очи ако неко скида фајлове са јавне мреже из МекДоналдса.

Све ћемо радити кроз променљиве како би се олакшало праћење „да нешто не зајебем“ и све што треба то је да у првом кораку дефинишете RW и RO корисника, локацију коју сте замислили за SFTP као и иницијални назив фолдера где сте мислили да ће RW корисник смештати фајлове (у овом примеру Budzet). Све можете copy-paste, али наравно као и увек – ако радите на продукционом серверу будите пажљиви и са четворо отворених очију.

Дакле овако би отприлике то требало да изгледа…

############## PRVI KORAK #################
#------ PROMENLjIVE (unesite sami) -------#
KORISNICKO_IME_RW=NarodSrbije
KORISNICKO_IME_RO=VladaSrbije
LOKACIJA_ZA_SFTP="/home/Srbija/NarodnaBanka"
IME_SFTP_FOLDERA="Budzet"
#-----------------------------------------#
############### DRUGI KORAK ###############
CHROOT_FOLDER="${LOKACIJA_ZA_SFTP}/${KORISNICKO_IME_RW}_sftp"
mkdir -p ${CHROOT_FOLDER}

groupadd ${KORISNICKO_IME_RW}_sftp
useradd -g ${KORISNICKO_IME_RW}_sftp ${KORISNICKO_IME_RW} -d ${CHROOT_FOLDER}/${IME_SFTP_FOLDERA} --shell=/sbin/nologin
useradd -g ${KORISNICKO_IME_RW}_sftp ${KORISNICKO_IME_RO} -d ${CHROOT_FOLDER}/${IME_SFTP_FOLDERA} --shell=/sbin/nologin #Ignore error

#################################################################
PROVERA=`grep "#Subsystem" /etc/ssh/sshd_config | wc -l`
if [ ${PROVERA} -eq 0 ] ; then $(sed -i s/"Subsystem"/"#Subsystem"/g /etc/ssh/sshd_config) ; fi
if [ ${PROVERA} -eq 0 ] ; then $(echo "#--------------------------#" >> /etc/ssh/sshd_config) ; fi
if [ ${PROVERA} -eq 0 ] ; then $(echo "Subsystem sftp internal-sftp" >> /etc/ssh/sshd_config) ; fi
if [ ${PROVERA} -eq 0 ] ; then $(echo "#--------------------------#" >> /etc/ssh/sshd_config) ; fi
##################################################################

echo "Match Group ${KORISNICKO_IME_RW}_sftp" >> /etc/ssh/sshd_config
echo " X11Forwarding no" >> /etc/ssh/sshd_config
echo " AllowTcpForwarding no" >> /etc/ssh/sshd_config
echo " ChrootDirectory ${CHROOT_FOLDER}" >> /etc/ssh/sshd_config
echo " ForceCommandinternal-sftp" >> /etc/ssh/sshd_config

chown ${KORISNICKO_IME_RW}:${KORISNICKO_IME_RW}_sftp ${CHROOT_FOLDER}/${IME_SFTP_FOLDERA}
chmod g=rx ${CHROOT_FOLDER}/${IME_SFTP_FOLDERA}

systemctl restart sshd
passwd ${KORISNICKO_IME_RW} ; passwd ${KORISNICKO_IME_RO} ;

Након првог log-off ће све привремене варијабле бити обрисане тако да ако желите то да урадите пре времена само укуцајте exit и притисните ентер. Ове горе скрипте можете креирати и за нове кориснике мимо постојећих, само промените податке у првом кораку,

Препорука је и променити SSH порт са дифолтног 22 на неки безвезе као и поставити надгледање покушаја пробијања лозинке и заштиту кроз fail2ban – све објашњено у овом тексту.