web-dev-qa-db-ja.com

/ tmpの正しい権限は何ですか?意図せずにすべてを再帰的に設定しました

本当に短い寿命の一時ディレクトリを作成しました。これを数人のユーザーの間で数時間共有したいと思います:/some/path/tmp

残念ながら、Sudo chown 777 -R /tmpではなくSudo chown 777 -R tmpをリリースしたので、/tmpファイルは完全に公開されました。

完全に公開されたので、セキュリティ上の問題はありますかより安全な設定に戻す必要がありますか? /tmpの正しい権限は何ですか?

84

/tmpの通常の設定は1777で、lsdrwxrwxrwtと表示されます。つまり、ファイルの所有者のみがファイルを削除できることを除いて、ワイドオープンです(これは、この余分なtビットがディレクトリに対して意味することです)。

モード777での/tmpの問題は、作成したファイルを別のユーザーが削除し、選択した内容で置き換えることができることです。

/tmpがtmpfsファイルシステムの場合、再起動するとすべてが復元されます。それ以外の場合は、chmod 1777 /tmpを実行します。

さらに、/tmpの多くのファイルは非公開にする必要があります。ただし、少なくとも1つのディレクトリは世界中で読み取り可能である必要があります:/tmp/.X11-unix、およびおそらく他のいくつかの同様のディレクトリ(/tmp/.XIM-unixなど)。次のコマンドは、ほとんどのことを正しく設定するはずです。

chmod 1777 /tmp
find /tmp -mindepth 1 -name '.*-unix' -exec chmod 1777 {} + -Prune -o -exec chmod go-rwx {} +

つまりすべてのファイルとディレクトリをプライベートにします(グループおよびその他のすべての権限を削除します)が、X11ソケットはすべてにアクセス可能にします。これらのソケットのアクセス制御は、ファイルのアクセス許可ではなく、サーバーによって実行されます。公開する必要がある他のソケットがあるかもしれません。 find /tmp -type s -user 0を実行して、誰もがアクセスできるようにする必要があるルート所有のソケットを検出します。他のシステムユーザーが所有するソケットもある場合があります(システムバスと通信するためなど)。 find /tmp -type s ! -user $UIDで探索します($UIDはユーザーIDです)。

/tmpおよび/var/tmpには、すべてのユーザーに対する読み取り、書き込み、および実行の権限が必要です。ただし、通常はスティッキービット(o+t)も追加して、ユーザーが他のユーザーに属するファイル/ディレクトリを削除できないようにします。したがって、chmod a=rwx,o+t /tmpは機能するはずです。

パーミッションを再帰的に変更することについては...所有者/グループがファイルとディレクトリに対するままである限り、それはそれほど問題にはなりません。ただし、他のユーザーやグループのrx権限を削除することにより、/tmpの下にあるすべての権限(/ tmp自体ではない)を変更して、ユーザーのプライバシーを確​​保できます。

Findはこれを行うための良い方法です。 rootとして、以下を実行します。

cd /tmp
find . -type f -exec chmod u=rw,go= {} \;   # (or u=rw,g=r,o= {})
find . -type d -exec chmod u=rwx,go= {} \;  # (or u=rwx,g=rx,o= {})
11
Baard Kopperud
[root@Niflheim tmp]# ls -alF .
total 1632
drwxrwxrwt 15 root root    4096 Apr  7 04:24 ./
drwxr-xr-x 28 root root    4096 Apr  2 21:02 ../
[root@Niflheim tmp]# stat -c '%A %a %n' .
drwxrwxrwt 1777 .

CentOS 5.9マシンから。

3