web-dev-qa-db-ja.com

LinuxおよびSMB権限が期待どおりに機能しない

CentOSサーバーを、顧客ファイルを安全な方法で受信するSFTPサーバーとして構成しました。次に、SMB経由でこれらのファイルにアクセスできるようにする必要があります。

  • 私のSFTPの「ルート」は/ var/inbound /にあります
  • 次に、/ var/inbound /の下に、顧客ごとに1つのディレクトリがあります(例:/ var/inbound/customer1 /
  • 次に、ユーザーを投獄するために、各顧客ディレクトリの下にuploadsというサブディレクトリがあります(例:/ var/inbound/customer1/uploads /)

私は許可を期待どおりに機能させることができ、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のマニュアルを読んでいます ここ )。

6
pmdci

ずっとシマウマを追いかけていたようです。

/ 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

そしてブーム!これで、期待どおりにファイルにアクセスできました。

1
pmdci

また、「acl」パッケージを確認することをお勧めします。高度なACLは、従来のUnix ACLと比較してはるかに便利であり、現在は常に使用しています。

1
Tim Connor