如何確認 FTP 掛載的 s3 資料夾

在一台 linux 的主機上有 FTP 的服務,背後其實是傳到 AWS 的 S3 上面,這篇會記錄如何去找到這個背後的 S3 key 和 bucket 心路歷程。

首先要確認 FTP 服務是哪一套,可以在自己電腦透過指令的方式來得知

1
ftp 192.168.100.99
1
2
3
4
5
6
7
8
9
Connected to 192.168.100.99.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 17:43. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
200 OK, UTF-8 enabled
User (192.168.100.99:(none)):

從上面資訊中看到 Welcome to Pure-FTPd [privsep] [TLS] 這行文字,可以得知是 Pure-FTPd 這套

接著連到 linux 主機透過指令來查詢有開放什麼樣的資料夾給使用者

1
cat /etc/pure-ftpd/pureftpd.passwd

看到的內容格式會是

1
2
3
username:$hashed_password:UID:GID::/targetfolder./:permissions

jimmy:hash_password:505:505::/nfs/ftp/./::::::::::::

這邊代表的是 jimmy 這個使用者,可以看到 /nfs/ftp 這個資料夾底下的內容,沒特別設定權限

找到目錄以後,要確認這目錄是不是掛載進來的,可以使用 findmnt 指令來查詢

1
findmnt /nfs/ftp

如果目錄是掛載的,可以看到以下的資訊;如果不是掛載則不會有任何輸出

1
2
TARGET   SOURCE          FSTYPE    OPTIONS
/nfs/ftp s3fs fuse.s3fs rw,relatime,allow_other

從上面的資訊可以看出來,ftp 這個資料夾是用 s3fs-fuse 這個套件做掛載,和 s3 同步

接著問題來了,s3 是哪個 bucket 以及所使用的 access key,我們往下繼續探究
在主機內我使用以下兩個指令可以查到對應的 bucket

  • ps aux
1
ps aux | grep s3fs

可以看到底下的資訊,其中的 bucket1 就是目標

1
root       992  0 0 0 0 ?      Ssl  Feb03  20:07 s3fs bucket1 /nfs/ftp -o rw,allow_other,dev,suid
  • fstab
1
cat /etc/fstab | grep s3fs

這個更簡單的可以看出目標

1
s3fs#bucket1 /nfs/ftp fuse allow_other 0 0

最後就是 access key,最常見的是放在 /.passwd-s3fs,或是有指定檔案則會在前面兩個指令的結果中呈現

到這邊就已經拿到所有一開始所需要的資料,可以往後做其他事情啦!