web-dev-qa-db-ja.com

読み取り不可のフォルダーを非表示/一覧表示しない

Ubuntuサーバー14.04を共有ドライブとして使用するマルチユーザー環境

すべてのユーザーはFilezilla/WinSCPを使用してSFTP経由で接続し、/home/company-folder/にchrootします

各ユーザーは、/home/company-folder/users/の下に独自の個人フォルダーも持っています。例えば。 /home/company-folder/users/username-1/home/company-folder/users/username-2など...

username-1は他のユーザーの個人フォルダー(/home/company-folder/users/username-2/home/company-folder/users/username-3など)を見ることができるようになり、他のユーザーフォルダーにアクセスできませんが、リストに表示されます。

質問:ユーザーが/home/company-folder/users/の下にある互いの個人ディレクトリを表示できないようにするにはどうすればよいですか?とにかく、Ubuntu-Linuxに読み取り不可のフォルダーを隠す方法はありますか?

100人以上のユーザーがいるシステムでは、ユーザーがユーザーフォルダーのリスト全体を参照して自分の個人フォルダーを見つけるのは便利ではないためです。

3
berriop

一般的に、いいえ。 (あなたの観点から)parentディレクトリの許可のみが、そのコンテンツを特定のユーザーがリストできるかどうかを決定します。これには、このユーザーが開いたり読んだりできないディレクトリエントリが含まれます。 SSH/SFTPサーバーは各セッションのサブプロセスを生成し、サブプロセスの所有権をそれぞれのユーザーに正常に認証されるとすぐに変更するため、SSH/SFTPアクセスのメカニズムはローカルツールと同じです。

次の例を考えてみましょう。

david@localhost:~$ ls -la /home
dr-xr-xr-x  1  root   root    80 Nov 10 09:05 .
drwxr-xr-x 23  root   root  4,0K Dec 17 11:09 ..
drwxr-xr-x  1 guest  guest   836 Sep  4 20:58 guest
drwxr-x---  1 david  users  4,2K Dec 14 22:07 david
drwx------  1  root   root   614 Nov 10 12:42 root

ご覧のとおり、davidは、誰でも読むことができるため、所有者ではありませんが、/homeのコンテンツをリストできます(.エントリの前にある許可マスクを参照)。同じ理由で/home/guestの内容をリストできます。私はその所有者であり、所有者が読み取り許可を持っているため、/home/davidのコンテンツをリストすることもできます。ただし、私は所有者ではなく、誰もそのディレクトリの読み取り権限を持たないため、/home/rootのコンテンツをリストすることはできません。

david@localhost:~$ ls /home/root
ls: cannot open directory /home/root: Permission denied

非所有者の読み取り許可を削除するために/homeの所有権を変更した場合、/homeのコンテンツをリストできなくなりました。

david@localhost:~$ Sudo chmod o-r /home
david@localhost:~$ ls -ld /home
drwxr-x--x 2 root root 40 Dez 17 21:17 /home
david@localhost:~$ ls -l /home
ls: cannot open directory /home: Permission denied

ただし、/home(および/home/david)でトラバース許可(ディレクトリの「実行」ビットのセマンティクス)が設定されているため、/homeをトラバースして、/を読み取ることができます。

david@localhost:~$ ls -l /home/david
total 732K
drwx------  1 david users 4,2K Dec 14 22:07 .
dr-xr-x--x  1 root  root    80 Nov 10 09:05 ..
drwx------  1 david users   60 Aug 24  2014 .Adobe
-rw-------  1 david users   83 Dec  6 19:49 .bash_aliases
-rw-------  1 david users   66 May 12  2011 .bash_completion
-rw-------  1 david users  703 Nov 23 05:41 .bash_exports
[etc...]

あなたの基本的な目的への可能な代替アプローチについては Jakujeの答え を参照してください。

2
David Foerster

あなたが説明することをする方法はわかりませんが、openssh -dにはsftp-serverオプションがあります。これは、ディレクトリを開始するユーザーを指定します。

[...]ユーザーフォルダーのリスト全体を参照して、個人フォルダーを見つけます。

次のようなsftp-serverを指定した場合:

Subsystem sftp internal-sftp -d /users/%u

/home/company-folder/は省略する必要があります。すでにchrootされているためです)。

1
Jakuje