07/05/2018 - LINUX
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.
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.
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.
Bu kısmı sadece bir kez yapacaksınız ve bir daha asla yapamayacaksınız.
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 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
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.
ubuntu@linux:~$ sudo mkdir /sftp/inanzzz
ubuntu@linux:~$ ls -l /sftp
drwxr-xr-x 2 root root 4096 May 7 20:25 inanzzz
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
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 tosftp
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.
ubuntu@linux:~$ echo -e "123123\n123123" | sudo passwd inanzzz
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
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
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
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>
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
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