CentOSサーバーを、顧客ファイルを安全な方法で受信するSFTPサーバーとして構成しました。次に、SMB経由でこれらのファイルにアクセスできるようにする必要があります。
私は許可を期待どおりに機能させることができ、SFTPへの顧客アクセスをサポートするためにすべてがうまく機能しています。重要な側面の1つは、ユーザーを/ var/inbound /ディレクトリに「投獄」したことです。
これで、/ var/inboundディレクトリを作成しました。
Sudo mkdir /var/inbound
Sudo chown root.root /var/inbound #root must be owner of directory
そして、これが私が各顧客のサブディレクトリを作成する方法です:
Sudo mkdir -p /var/inbound/[username]/uploads
Sudo chown root /var/inbound/[username]
Sudo chmod go-w /var/inbound/[username]
Sudo chown [username]: /var/inbound/[username]/uploads
Sudo chmod 770 /var/inbound/[username]/uploads
注:/ var/inbound/[username] /ディレクトリと/ var/inbound/[username]/uploads /ディレクトリの両方に特別な権限のセットが必要です。 [username]を問題のユーザーに置き換えて、次のコマンドを実行します。
ここで、残りのSSH/SFTP構成からあなたを免れます。ただし、ユーザーを自分のディレクトリに投獄させることができ、SCPONLYを使用してSSH /コンソールアクセスを無効にしたと言えば十分です。
今、物事が複雑になるところ...
SMB特定のアカウントへのアクセス(それをfileaccessと呼びましょう)を/ var/inbound /ディレクトリに与える必要があります。 Windows Serverホストからアクセスできます。/var/inboundディレクトリを、そのサブディレクトリを含むWindowsからの共有として表示できます。ただし、一部のファイルが表示されず、目的のファイルへの書き込みアクセス権がありません。どちらかにアクセスできます。
$ ls -l /var/inbound
total 0
drwxr-xr-x. 3 root root 20 Jan 5 11:53 testuser
$ ls -l /var/inbound/testuser
total 0
drwxrwxr-x. 2 testuser sftponly 53 Jan 5 12:26 uploads
これが、fileaccessアカウントでアクセスしたいディレクトリです。
$ ls -la /var/inbound/testuser/uploads/
total 12
drwxrwx---. 2 testuser sftponly 53 Jan 5 15:12 .
drwxr-xr-x. 3 root root 20 Jan 5 11:53 ..
-rw-r--r--. 1 fileaccess sftponly 30 Jan 5 12:26 test2.txt
-rw-r--r--. 1 testuser sftponly 26 Jan 5 12:25 test3.txt
-rw-rw-r--. 1 dmgmadmin dmgmadmin 14 Jan 5 11:53 test.txt
SMBfileaccessアカウントで接続すると、test.txtしか表示されませんが、ファイルを開くことができません(アクセスが拒否されました) 。
これが私のsmb.confです。ご覧のとおり、私は一連のさまざまなオプションを試してきました。
[global]
workgroup = <MYDOMAINNAMEGOESHERE>
security = user
passdb backend = tdbsam
[inbound]
comment = Incoming files (as %u)
path = /var/inbound/
valid users = fileaccess
guest ok = No
read only = No
writeable = Yes
browseable = Yes
create mask = 0640
directory mask = 0750
注:私はドメインを持っていますが、このCentOSマシンはその一部ではありません。 Windows AD DNSにエントリがあり、DNSサーバーを使用するように構成されていますが、これで終わりです。このマシンを分離してほしい。そのため、このサーバーへの接続はローカルのCentOSアカウントで試行されます。
これがLinuxファイルシステムアクセスの問題である可能性があり、必要な変更が必要なSFTPアクセス許可と競合する可能性があることを特に懸念しています(たとえば、SFTPでは/ var/inbound //ディレクトリをrootが所有する必要があります)。
SMB.confで、問題のアカウントのアクセス権を強制して、アカウントに参照/読み取り/権利のアクセス許可を与える方法があるのだろうか。 smb.confであらゆる種類の構成オプションを試しました(smb.confのマニュアルを読んでいます ここ )。
ずっとシマウマを追いかけていたようです。
/ dev/chatチャネルのユーザーderobert、terdonなどの助けのおかげで、問題は確かにSELinuxであることがわかりました。実際、 Sambaに関するCentOS wikiドキュメント は次のように述べています。
"次に、semanageコマンド(SELinuxパッケージの一部)を使用して、ネットワークと共有したいディレクトリを開きます。そうです。これを行わずに、 sambaを起動すると、空白のディレクトリがたくさん表示され、サーバーがすべてのデータを削除したと思ってパニックになります! "
したがって、実行する必要のあるコマンドは次のとおりです。
Sudo semanage fcontext -a -t samba_share_t '/var/inbound(/.*)?'
Sudo restorecon -R /var/inbound
そしてブーム!これで、期待どおりにファイルにアクセスできました。
また、「acl」パッケージを確認することをお勧めします。高度なACLは、従来のUnix ACLと比較してはるかに便利であり、現在は常に使用しています。