本当に短い寿命の一時ディレクトリを作成しました。これを数人のユーザーの間で数時間共有したいと思います:/some/path/tmp
残念ながら、Sudo chown 777 -R /tmp
ではなくSudo chown 777 -R tmp
をリリースしたので、/tmp
ファイルは完全に公開されました。
完全に公開されたので、セキュリティ上の問題はありますかより安全な設定に戻す必要がありますか? /tmp
の正しい権限は何ですか?
/tmp
の通常の設定は1777で、ls
はdrwxrwxrwt
と表示されます。つまり、ファイルの所有者のみがファイルを削除できることを除いて、ワイドオープンです(これは、この余分な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= {})
[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マシンから。