この記事では、Ubuntu18.04でMySecureShellを使用してSFTPサーバーをセットアップする方法について説明します。 SFTPは、暗号化されたSSH接続を使用してファイルを転送する安全な方法です。最新のFTPクライアントで広くサポートされていますが、FTP(ファイル転送プロトコル)とはまったく異なるプロトコルです。
従来のFTPサーバーの代わりにMySecureShellを使用する理由を尋ねられるかもしれません。ここにいくつかの機能があります
- SSHを使用した安全なデータ転送
- SSL証明書を管理する必要はありません
- インストールと構成が簡単
- 帯域幅の使用を制限する
- ファイルとフォルダの制限
- IP/ユーザー名/グループ/仮想ホストを使用したアクセス制御リスト
- ユーザーをsftpのみに制限します(シェルアクセスはデフォルトで無効になっています)
- 強化されたロギングシステム
したがって、最初にインストールから始めましょう。このチュートリアルを理解するには、FTPの基本的な知識で十分です。
インストール
ubuntu 15.04以降では、デフォルトのリポジトリでMySecureShellを使用できます。このインストールにはubuntu18.04を使用しています。以下のコマンドを実行して、MySecureShellをインストールします。
apt-get install mysecureshell
利用できない場合は、次の手順に従ってください。次のすべての手順がrootユーザーとして実行されていることを確認してください。
vim /etc/apt/sources.list
次の2行を追加します
deb http://mysecureshell.free.fr/repository/index.php/ubuntu testing main
deb-src http://mysecureshell.free.fr/repository/index.php/ubuntu testing main
次に、gpgキーを次のように追加します
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys E328F22B; gpg --export E328F22B | apt-key add
gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 7601D76CE328F22B: public key "MySecureShell repository " imported
gpg: Total number processed: 1
gpg: imported: 1
OK
リポジトリが追加されたら、インストールを開始できます
apt-get update
apt-get install mysecureshell
これで、サービスを開始してステータスを確認できます
systemctl start mysecureshell.service
systemctl status mysecureshell.service
サンプル出力
# systemctl start mysecureshell.service
root@li1004-153:~# systemctl status mysecureshell.service
* mysecureshell.service - LSB: MySecureShell SFTP Server
Loaded: loaded (/etc/init.d/mysecureshell; generated)
Active: active (exited) since Fri 2018-05-18 01:02:17 UTC; 4min 44s ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 2322)
CGroup: /system.slice/mysecureshell.service
May 18 01:02:17 004-153 systemd[1]: Starting LSB: MySecureShell SFTP Server...
May 18 01:02:17 004-153 mysecureshell[1314]: Starting MySecureShell SFTP Server: mysecureshell is now online with restricted features
May 18 01:02:17 004-153 mysecureshell[1314]: Note: To enable all features you have to change mysecureshell binary rights to 4755
May 18 01:02:17 004-153 systemd[1]: Started LSB: MySecureShell SFTP Server.
# systemctl status mysecureshell.service
* mysecureshell.service - LSB: MySecureShell SFTP Server
Loaded: loaded (/etc/init.d/mysecureshell; generated)
Active: active (exited) since Fri 2018-05-18 01:02:17 UTC; 50min ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 2322)
CGroup: /system.slice/mysecureshell.service
May 18 01:02:17 004-153 systemd[1]: Starting LSB: MySecureShell SFTP Server...
May 18 01:02:17 004-153 mysecureshell[1314]: Starting MySecureShell SFTP Server: mysecureshell is now online with restricted features
May 18 01:02:17 004-153 mysecureshell[1314]: Note: To enable all features you have to change mysecureshell binary rights to 4755
May 18 01:02:17 004-153 systemd[1]: Started LSB: MySecureShell SFTP Server.
#
以下のコマンドを使用して、mysecureshellサービスを停止および再起動します
systemctl stop mysecureshell.service
systemctl restart mysecureshell.service
MySecureShellSFTPユーザーの作成
まず、MySecureShellのインストール場所を見つける必要があります
whereis mysecureshell
以下の出力にあるように、mysecureshellのインストールパスは/ usr / bin/mysecureshellです。
mysecureshell: /usr/bin/mysecureshell /usr/share/man/man8/mysecureshell.8.gz
次に、パスを確認した後、ユーザーを作成します
useradd -m -s /usr/bin/mysecureshell testsftpuser
passwd testsftpuser
上記のコマンドでわかるように、ユーザーを作成し、mysecureshellの場所のパスを割り当てています。また、次のコマンドを使用して、既存のユーザーにMySecureShellへのアクセスと使用を割り当てることができます。
sudo usermod -s /usr/bin/mysecureshell testsftpuser
ユーザー接続
これで、「testsftpuser」ユーザーは、以下に示すように、マシンのIPアドレスを使用してクライアントからSFTPサーバーに接続できます。
sftp [email protected]
マシンのIP
Connected to 45.33.54.153
sftp>
また、クライアントシステムからFileZillaなどのグラフィカルクライアントを使用してSFTPサーバーにログインできます。
MySecureShellコマンド
MySecureShellには、SFTPサーバーを管理するための次の一連のコマンドがあります。
- sftp-admin
- sftp-kill
- sftp-state
- sftp-user
- sftp-verif
- sftp-who
sftp-admin
このコマンドを使用すると、MySecureShellをリモートで管理できます。
sftp-admin [ssh options] user@hostname
sftp-kill
FTPサーバーからユーザーを切断します。
sftp-kill testsftpuser
Kill testsftpuser on PID 1961
(Press "Y" when requested)
sftp-state
FTPサーバーのステータスを表示する
# sftp-state
サンプル出力
# sftp-state
Server is up
#
sftp-user
このコマンドを使用すると、以前に行ったパスを指定せずにSFTPユーザーを作成できます。
sftp-user create test
SFTPユーザーの一覧表示
sftp-user list
test
testsftpuser
コマンドはユーザーテストを削除します
sftp-user delete test
sftp-verif
このコマンドは、MySecureShellサーバーの問題を検証して修正します。
sftp-verif
################################################################################
MySecureShell Verification Tool
################################################################################
### Verifing file existance ###
/bin/MySecureShell [ OK ]
/bin/sftp-who [ OK ]
/bin/sftp-kill [ OK ]
/bin/sftp-state [ OK ]
/bin/sftp-admin [ OK ]
/bin/sftp-verif [ OK ]
/bin/sftp-user [ OK ]
### Verifing rights ###
Verifing file rights of /etc/ssh/sftp_config [ OK ]
Verifing file rights of /bin/sftp-who [ OK ]
Verifing file rights of /bin/sftp-verif [ OK ]
Verifing file rights of /bin/sftp-user [ OK ]
Verifing file rights of /bin/sftp-kill [ OK ]
Verifing file rights of /bin/sftp-state [ OK ]
Verifing file rights of /bin/sftp-admin [ OK ]
Verifing file rights of /bin/MySecureShell [ OK ]
### Verifing rotation logs ###
Rotation logs have been found [ OK ]
### Verifing server status ###
Verifing server status (ONLINE) [ OK ]
[...]
sftp-who
このコマンドは、現在FTPサーバーにログインしているユーザーを示します。
sftp-who
# sftp-who
--- 1 / 10 clients ---
Global used bandwidth : 0 bytes/s / 0 bytes/s
PID: 2207 Name: testsftpuser IP: pa39-178-9-194.pa.nsw.optusnet.com.au
Home: /home/testsftpuser
Status: idle Path: /
File:
Connected: 2018/05/18 01:30:50 [since 03mins 59s]
Speed: Download: 0 bytes/s [5.00 kbytes/s] Upload: 0 bytes/s [unlimited]
Total: Download: 924 bytes Upload: 100 bytes
#
構成
メインのMySecureShell構成ファイルは/etc/ ssh/sftp_configです。構成ファイルで、アップロードとダウンロードの帯域幅、chrootユーザー、接続の最大数などを構成できます。このオプションは、全員または特定のグループのみに設定できます。
cat /etc/ssh/sftp_config
デフォルトタグ
すべてのユーザーに構成を適用する場合は、デフォルトのタグが使用されます
#Default rules for everybody
Default
GlobalDownload 50k #total speed download for all clients
# o -> bytes k -> kilo bytes m -> mega bytes
GlobalUpload 0 #total speed download for all clients (0 for unlimited)
Download 5k #limit speed download for each connection
Upload 0 #unlimit speed upload for each connection
StayAtHome true #limit client to his home
VirtualChroot true #fake a chroot to the home account
LimitConnection 10 #max connection for the server sftp
LimitConnectionByUser 1 #max connection for the account
LimitConnectionByIP 2 #max connection by ip for the account
Home /home/$USER #overrite home of the user but if you want you can use
# environment variable (ie: Home /home/$USER)
IdleTimeOut 5m #(in second) deconnect client is idle too long time
ResolveIP true #resolve ip to dns
LogFile /var/log/sftp-server_ftp.log
# IgnoreHidden true #treat all hidden files as if they don't exist
# DirFakeUser true #Hide real file/directory owner (just change displayed permissions)
# DirFakeGroup true #Hide real file/directory group (just change displayed permissions)
# DirFakeMode 0400 #Hide real file/directory rights (just change displayed permissions)
#Add execution right for directory if read right is set
HideNoAccess true #Hide file/directory which user has no access
# MaxOpenFilesForUser 20 #limit user to open x files on same time
# MaxWriteFilesForUser 10 #limit user to x upload on same time
# MaxReadFilesForUser 10 #limit user to x download on same time
DefaultRights 0640 0750 #Set default rights for new file and new directory
# MinimumRights 0400 0700 #Set minimum rights for files and dirs
ShowLinksAsLinks false #show links as their destinations
# ConnectionMaxLife 1d #limits connection lifetime to 1 day
# Charset "ISO-8859-15" #set charset of computer
Default
注: ログはデフォルトでは有効になっていません。設定ファイルでログファイルの場所を定義できます。
FileSpecタグ
FileSpecタグは、ファイルとディレクトリにフィルタを作成するために作成されています。
# Only check against filenames/folder names only
FileSpec
UseFullPath false
# we can use multiple deny/allow directives for clarity
Order DenyAllow
Deny ".*.exe$"
Deny ".*.sh$"
Allow all
FileSpec
ユーザータグ
ユーザータグは、特定のユーザーのホームフォルダを定義します
User tom
Home /home/tom
User
VirtualHostタグ
VirtualHostタグは、仮想ホスト名に基づいて制限を設定できます
# Set home directory for this virtualhost
VirtualHost
Home /var/www/html/www.mysftpsite.com
# Set dedicated log file
LogFile /var/log/sftp/www.mysftpsite.com
# Override the maximum number of connection per user
LimitConnectionByUser 5
VirtualHost
gFTPのインストール
それでは、Ubuntu18.04にgFTPをインストールしてみましょう。以下の手順に従ってください。
sudo apt-get install gftp
- アプリケーションからgFTPを開く
- SFTPサーバーのIPアドレス、ポート番号(デフォルト/サーバー構成時に指定)、ユーザー名、パスワードを入力し、SSH2を使用します。 Enterキーを押してログインします
- ログイン試行が成功した場合。 gFTPを使用してSFTPに接続しています
それは今のところすべてです。この段階で、SFTPサーバーが機能するようになります。このチュートリアルが気に入っていただければ幸いです。自己学習のためにいくつかの構成部分を残しました。Linoxideコミュニティが学習して成長するのに役立つ、自分で行った構成についてコメントしてください。ありがとうございます。