web-dev-qa-db-ja.com

新しいユーザーが危険なことをするのを防ぐ方法は?

最近、サーバーにUbuntuサーバーをインストールして、新しいユーザーとしてLinuxを試しました。 Webサーバーをセットアップする方法についてのチュートリアルに従って、Webサーバーのディレクトリにchmod 777を書き込む必要があると述べました。

とにかく、私は彼のホームディレクトリに置いたサーバー上のいくつかのファイルを見ることができるように、1人の男の新しいアカウントを作成しました:

adduser francis

アカウントを作成した後、彼が持っているアクセス権を確認しました

groups francis

「francis:francis」と言われたので、問題ではないと思いましたが、ubuntuはデフォルトでどのグループにも彼を含めていません。これは理にかなっています。 1週間後、絶対的かつまったくの恐怖の中で、システムディレクトリでSudoや混乱のようなことをすることはできなかったにもかかわらず、彼はサーバー上のほとんどすべてに完全にアクセスできることがわかりました。たとえば、/ var/wwwにある私のWebサーバーファイル(したがって、php configsファイルなどに保存されているパスワード)への完全な読み取り/書き込みアクセス権がありましたが、そのディレクトリはホームディレクトリになく、私はグループに追加できませんでしたそのディレクトリにアクセスしません。また、adduserを実行した後、彼に何か特別なアクセスを許可しませんでした。

とにかく、ここで何が起こっていますか?重要なものへの彼のアクセスをどのように殺すのですか?彼は/ mediaや/ var/wwwのようなものにアクセスできないはずです。新しいユーザーは、デフォルトでは、危険なことをしたり、theyしてはいけないことをすることを禁止されていると思いました。

要約すると、適切に機能する必要があるディレクトリ(彼のホームディレクトリ、vim、nanoなど)に手動で指定するディレクトリへのアクセスのみを許可する必要があります。

ありがとうございました

31
Askerman

これは設計どおりです。さらに悪いことに。 chmod 777の意味は...「所有者、グループ内のすべての人、すべての人に読み取り、書き込み、実行の許可を与えたい」

それはかなりひどいです。

また、Webサーバーの場合、777は最適ではありません。 755(所有者には完全な許可グループがあり、他には読み取り+実行があります)は一般的なデフォルトですが、少なくとも読み取り/書き込みが必要だと言ったものから 、または所有者(Webサーバーのユーザー)、および場合によってはグループの読み取り/書き込み実行で、ユーザーの権限はありません。 serverfault の適切なアクセス許可レベルについては、より完全な質問がありますが、640や740などを検討してください。

つまり、ユーザーを自分の小さな世界に置くこともできます-ユーザーをシステム内に自分のスペースinを保持するようにchrootをセットアップします。これを行うためのガイドが浮かんでいます-例えば oliの優れた答え これはあなたのニーズに応じたオプションかもしれません。

41
Journeyman Geek

基本的に、次のように分類されます。

R = 4 (read)
W = 2 (write)
X = 1 (execute)

したがって、読み取り許可のみ4、読み取りおよび書き込み6、読み取りおよび実行5、すべて(読み取り、書き込み、実行)は7です。これは、所有者、所有者のグループの許可オクテット値を計算する方法です。 、または全員。

chmodを使用してこれらのアクセス許可をファイルまたはディレクトリの場所に適用する場合、上記で計算された数値は、所有者、グループ、および全員にそれぞれオクテットで適用されます。

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

したがって、自分とグループに自分が所有するフォルダーの読み取り、書き込み、実行の権限を与えたいが、everyoneそれを読むことができる、私は使用します:

$ chmod 770 myDirectory

詳細については、 chmodのマニュアルページ を確認してください。

$ man chmod
19
Aaron

他の人が述べたように、アクセス許可を777に設定しないでください。

ここに私が使用する便利なリファレンスシートがあります。

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+
6
WhyAyala

ログインしたユーザーとファイルを共有するために、特に何もする必要はありません。デフォルトのDebianインストールでは、ユーザーは互いのホームディレクトリにアクセスできます。

例えば、

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

私のホームディレクトリのアクセス許可は、システム上のすべてのユーザーの読み取り(r)およびアクセス(x)です。さらに私だけがwrite(w)にアクセスできます。

また、Ubuntuのデフォルトのumaskは、ユーザーが作成するファイルとディレクトリが誰でも読み取り可能なものですデフォルト。必要ない場合は、umask077に設定できます。

これは、デフォルトの設定で、ユーザーyouがドキュメント~/README.txtを私と共有したい場合、youは何もする必要がないことを意味します。私は単にそれを見ることができます:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

ファイルを編集または削除することはできませんが、書き込み権限がある場所にコピーすることはできます。その後、私はコピーを所有します:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

AskUbuntuの別の回答 で説明したように、ほとんどのシステムがデフォルトで誰でも読み取り可能な理由があります。ただし、共有システムでは、非所有者がホームディレクトリにアクセスできないようにすることが理にかなっている場合があります。

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

...明らかに多くのユーザーがデフォルトに気付いていないので-QED ;-)。ただし、ファイルのアクセス許可ではシークレットが保護されないことをユーザーに認識させる方が賢明です。

3
zwets

Ubuntuでは、すべてのユーザーがグループ「Sudo」に追加されたスーパーユーザー特権を持っています。このグループに他のユーザーが追加されていないことを確認してください。

他のユーザーからファイルとディレクトリを保護するために、上記の回答でJourneyman Geek氏によって提案された許可を設定できます。

特別な権限を使用して、ファイルやディレクトリを他のユーザーから保護することもできます。

1
Puneet Dixit