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


78

私は虐待しましたsudo

数時間の間、何人かのユーザー間で共有したい本当に短命の一時ディレクトリを作成しました...このディレクトリに名前を付けました /some/path/tmp

残念ながら、のsudo chown 777 -R /tmp代わりに起動したsudo chown 777 -R tmpため、/tmpファイルは完全に公開されています。

私は、/tmp短命のファイル、スクリプト、多くのスクリプトに対して、かなり頻繁に(毎日、ほぼ1時間ごとに)共通を使用します。

完全に公開された今、それはセキュリティ上の懸念ですか?より安全な設定に戻すか、DebianまたはUbuntuディストリビューションの一般的なデフォルト設定のように変更する必要がありますか?正しい権限は/tmp何ですか?


最初の答えで重要なことを忘れてしまったことに注意してください。X11ソケットは一般にアクセスできる必要があります。そうしないと、新しいGUIアプリケーションを起動できません。回答を更新しました。
ジル

それchownchmod
メレビウス

@Melebius私はあなたの質問に少し困惑しています:私は言及しませんでしたchmod。chown(ch-ownなど)は、ユーザーがファイルを所有するファイルの所有権に関するものです。chmod(ch-modififyなど)は、誰がファイルの内容を実行、書き込み、または読み取りできるかについての詳細です。
ステファンローランド

2
@StephaneRollandはい、それは私を混乱させたものです。chown 777これを使用して、ファイルの所有権をID 777のユーザーに設定できます。ただし、受け入れられたものを含むすべての回答はで機能しchmodます。それらはすべて、すべてのユーザー(所有者、グループ、その他)に対して同じ値のアクセス許可を設定するため、ファイル所有権の影響はほとんど関係ありません。ただし、の結果を修正する正しいコマンドはであるsudo chown 777 -R /tmp必要がありますsudo chown root -R /tmp
メレビウス

回答:


117

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

/tmpwithモード777 の問題は、作成したファイルを別のユーザーが削除して、選択したコンテンツを置き換える可能性があることです。

あなたの場合は/tmptmpfsファイルシステムで、再起動はすべてのものを復元します。それ以外の場合は、を実行し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して、誰でもアクセスできるようにする必要があるかもしれないルート所有のソケットを発見します。他のシステムユーザーが所有するソケットもあります(たとえば、システムバスと通信するため)。探索します(ユーザーIDはfind /tmp -type s ! -user $UIDどこ$UIDですか)。


1
2番目のchmodについて詳しく説明してください。
バルトロミエレヴァンドフスキ

@BartlomiejLewandowski go-rwx:グループおよびその他のユーザーには権限がありません。これにより、アクセス許可が設定rwx------されます(ただし、作成されたファイルは、アクセス許可chmodが少なくなる可能性があるため、たとえばを除くrw-------)。つまり、ファイルには所有者のみがアクセスできます。/tmp/.[!.]*一般的に存在するドットファイルを含めることです/tmp
ジル

@BartlomiejLewandowski:chmod -go-rwx:「rwx」権限を所有者とグループに設定します。r = read、w = write、x = execute(ファイルの場合)またはenter / traverse(ディレクトリの場合)。777 = rwxrwxrwx(右側の部分は、「set 'r' set 'w' set 'x'、set 'r' set 'w' set 'x'、set 'r' set 'w' set 'xとして見ることができます'"はバイナリで" 111111111 "(設定する場合は1、設定を解除する場合は0)で表され、バイナリで" 111111111 "は8進数で" 777 "として表されます(8進数= 3ビットのグループ。 7)。「rwxr-xr--」の場合、8進数で「754」である「111101100」
オリビエデュラック

2
+ tは、スティッキービットと呼ばれます。それが、所有者以外の誰かがファイルを削除できないようにする理由です。スティッキービットはもともと、カーネルが終了時に一般的にプログラムをメモリに残すようにするためのもので、次回の実行時にディスクからフェッチする必要がありません。私たちは、PDP11日を話している....
kurtm

1
@GabrielFairワイルドカードを使用するコマンドを、その問題が発生しないfindを使用するコマンドに置き換えました。
ジル

10

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

再帰的にアクセス許可を変更する場合...所有者/グループがファイルやディレクトリの場合と同じままである限り、それほど問題になることはありません。ただし、他のユーザーやグループの権限を/tmp削除することにより、ユーザーのプライバシーを確​​保するために、(/ tmp自体ではなく)すべての権限を変更することができますrx

Findはこれを行う良い方法です。ルートとして:

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= {})

典型的なデスクトップシステムでは、誰でも/tmp/.X11-unix/*読めるようにした方がいいでしょう。さもないと、Xアプリケーションを起動できなくなります。
ジル

chmod a=rwX,o+t /tmp -Rfind魔法を行う必要があります。
-dhill

3
[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マシンから。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.