pirmdiena, 2013. gada 9. septembris

SFTP only pieejas veidošana

Ja nepieciešams izveidot SFTP/SCP only pieeju pilnas SSH sesijas vietā, un tā, lai lietotājs var piekļūt tikai savai mājas direktorijai, var rīkoties sekojoši:

  1. Izveidot direktorijas, kurās tiek klāt lietotāji un montēt ar bind tajās lietotāja mājas direktorijas.. Direktorijās root lietotājam jābūt īpašnieka tiesībām, tāpēc neder uzreiz chroot'oties uz lietotāja mājas direktoriju. 
  2. Modificēt ssh servera uzstādījumus 
  3. Papildu var uzstādīt pam_umask failu tiesībām. 

Direktoriju veidošana un montēšana

Skripts veido direktorijas domēna lietotājiem, kurus iegūst ar "wbinfo -u". Esošās mājas direktorijas ir ar ceļu /home/domain/username.
Divpakāpju direktorijai jābūt tāpēc, ka augstāka līmeņa direktorijai jābūt root īpašumā, bet apakšdirketorija pēc piemontēšanas  būs ar lietotāja tiesībām.

#!/bin/sh
## === 
#  Skripts, kas taisa lietotājiem mājas direktorijas 
#  priekš SFTP sesijām  /home/domain/username
#  Jābūt root owned
## ===
wbinfo -u | grep -v \\$ | while read USR
 do
 if [ ! -d "/srv/$USR" ] ; then 
  mkdir -p /srv/$USR/$USR
 fi 

 # Ja nav piemontēts, montējam ar bind
 /bin/mountpoint -q /srv/$USR/$USR || /bin/mount -o bind /home/domain/$USR /srv/$USR/$USR 

done 

Skriptu var ielikt gan pie rc.local, gan uzstādīt kā cron darbu.

Servera uzstādijumi.

Visām nepieciešamajām domēna lietotāju (primārajām!) grupām pievieno sekojošus ierakstus failā
/etc/ssh/sshd_config
....
Subsystem sftp internal-sftp

Match Group "Domain Users"
    ChrootDirectory /srv/%u
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp


Match Group "Darbinieki"
    ChrootDirectory /srv/%u
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

Pēc tam pārstartējam openssh serveri
Atverot sftp/scp sesiju uz servera, lietotāji redz tikai vienu direktoriju savā lietotājvārdā, kas ir lietotāja mājas direktorija.

Tiesību - umask - uzstādīšana

Specifiskās tiesības/umask SFTP sesijai uzstāda rediģējot failu /etc/pam.d/sshd un pievienojot sekojošu ierakstu: 
...
session    optional pam_umask.so umask=0066
...