Bu örnekte Ubuntu 16.04'te bir SFTP sunucusu ve kullanıcıları oluşturacağız. Her kullanıcı kendi klasörlerine sahip olacak, bunlarla sınırlı olacak ve "etkileşimli olmayan kabuk kullanıcısı" olarak tanımlanacaktır, yani "normal" kullanıcı olarak Ubuntu sunucusuna giriş yapamayacaklar. Sadece sftp protokolünü kullanabilecekler. Bu örneğin sonunda, kullanıcılar kendi klasörlerine FileZilla gibi bir FTP/SFTP istemcisi aracılığıyla dosya yükleyebilecekler.


OpenSSH


Varsayılan olarak OpenSSH, Linux sistemlerinin çoğunda yüklü olarak gelir ve kullanılmaya hazırdır. Kontrol edelim.


$ ssh -v localhost
OpenSSH_7.2p2 Ubuntu-4ubuntu2.4, OpenSSL 1.0.2g 1 Mar 2016
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: Connection established.

OpenBSD Secure Shell server


OpenSSH gibi, OpenBSD Secure Shell sunucusu da Linux sistemlerinin çoğunda varsayılan olarak yüklü olarak gelir ve kullanılmaya hazırdır. Kontrol edelim.


$ sudo service ssh status
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-05-07 12:30:47 BST; 18min ago
Process: 1742 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
Main PID: 1155 (sshd)
Tasks: 1
Memory: 4.5M
CPU: 171ms
CGroup: /system.slice/ssh.service
└─1155 /usr/sbin/sshd -D

May 07 12:30:51 linux systemd[1]: Reloading OpenBSD Secure Shell server.
May 07 12:30:51 linux systemd[1]: Reloaded OpenBSD Secure Shell server.

Sisteme özgü kurulum


Bu kısmı sadece bir kez yapacaksınız ve bir daha asla yapamayacaksınız.


Sftp kullanıcı grubu ekleme


Yalnızca SFTP sunucusunu kullanmasına izin verilen kullanıcılar bu grubun bir parçası olacaktır.


# Check if group exists yet.
ubuntu@linux:~$ grep sftp /etc/group

# Create the group.
ubuntu@linux:~$ sudo addgroup sftp

# Check if group exists now.
ubuntu@linux:~$ grep sftp /etc/group
sftp:x:1001:

Ana sftp klasörünü oluşturma


Ana klasör root:root tarafından sahiplenilmeli ve izinlerin 755 olması gereklidir. Tüm sftp grup kullanıcılarının kendi klasörleri, bu ana klasör altında oluşturulacaklardır.


ubuntu@linux:~$ sudo mkdir /sftp

ubuntu@linux:~$ ls -l /
drwxr-xr-x 2 root root 4096 May 7 12:59 sftp

Kullanıcıya özel kurulum


Buradaki adımlar kullanıcı bazında yapılır, bu nedenle yeni bir sftp kullanıcısı oluşturduğunuz zaman bu adımları tekrarlamanız gerekecektir.


Kullanıcının ana klasörünü oluşturma


ubuntu@linux:~$ sudo mkdir /sftp/inanzzz

ubuntu@linux:~$ ls -l /sftp
drwxr-xr-x 2 root root 4096 May 7 20:25 inanzzz

Kullanıcının upload klasörünü oluşturma


ubuntu@linux:~$ sudo mkdir /sftp/inanzzz/upload

ubuntu@linux:~$ ls -l /sftp/inanzzz
drwxr-xr-x 2 root root 4096 May 7 20:28 upload

Kullanıcı oluşturma


Bu komut, "interaktif olmayan bir kabuk kullanıcısı" olan inanzzz'yi oluşturur, ana klasörünü /sftp/inanzzz olarak ayarlar ve onu sftp grubuna atar.


ubuntu@linux:~$ sudo useradd -d /sftp/inanzzz -G sftp inanzzz --shell /usr/sbin/nologin

# Confirm changes
ubuntu@linux:~$ grep inanzzz /etc/passwd
inanzzz:x:1001:1002::/sftp/inanzzz:/usr/sbin/nologin

# User has been assigned to sftp group
ubuntu@linux:~$ grep sftp /etc/group
sftp:x:1001:inanzzz

# Confirm that user cannot login to system like normal users
ubuntu@linux:~$ sudo su inanzzz
This account is currently not available.

Şifreyi belirleme


ubuntu@linux:~$ echo -e "123123\n123123" | sudo passwd inanzzz
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

İzinler


ubuntu@linux:~$ sudo chown inanzzz:sftp -R /sftp/inanzzz/upload

ubuntu@linux:~$ ls -l /sftp/inanzzz
drwxr-xr-x 2 inanzzz sftp 4096 May 7 20:28 upload

SFTP konfigürasyon


Yapılandırma dosyasının sonuna aşağıdaki satırları ekleyin, kaydedin, çıkın ve SSH sunucusunu yeniden başlatın. Eğer grup olarak sftp haricinde başka bir isim kullandıysanız, Match Group sftp satırını değiştirmeniz gereken tek şeydir.


ubuntu@linux:~$ sudo nano /etc/ssh/sshd_config

Subsystem sftp internal-sftp # Use in-process SFTP server
Match Group sftp
ChrootDirectory %h # Prevent user access to anything beyond their home folder
X11Forwarding no # Disable X11 forwarding
AllowTcpForwarding no # Disable tunneling
AllowAgentForwarding no # Disable port forwarding
PermitTunnel no # Disable network tunneling
ForceCommand internal-sftp # Force the connection to use the built-in SFTP server

ubuntu@linux:~$ sudo service ssh restart

Testler


Uzaktan ulaşım


ssh komutuyla uzak bir bilgisayardan SFTP sunucusuna erişmeyi deneyin.


remote-pc:linux$ ssh inanzzz@192.168.99.20
This account is currently not available.
Connection to 192.168.99.20 closed.

sftp komutuyla uzak bir bilgisayardan SFTP sunucusuna erişmeyi deneyin.


remote-server:linux$ sftp inanzzz@192.168.99.20
inanzzz@192.168.99.20's password:
Connected to 192.168.99.20.
sftp>

Ana klasörün içeriğini listeleme


sftp> pwd
Remote working directory: /

sftp> ls -l
drwxr-xr-x 2 1001 1001 4096 May 7 19:28 upload

sftp> ls -l upload
# Empty

FileZilla


Bir kullanıcı giriş yaptığında görebileceği tek şey upload klasörü ve içeriğidir.


Host: 192.168.99.20
Port: 22
Protocol: SFTP
User: inanzzz
Password: 123123

inanzzz'ın bir dosya yüklediğini varsayalım ve izinleri görelim.


ubuntu@linux:~$ ls -l /sftp/inanzzz/upload/
-rw-r--r-- 1 inanzzz inanzzz 5083 May 7 20:41 sftp.txt