SUDOERSを使用して特定のディレクトリでコマンドの実行を制限するにはどうすればよいですか?


13

sudoを(sudoersファイルを介して)構成して、ユーザーがシステム内の任意のファイルまたはディレクトリでchownand chmodコマンドを実行できるようにすることができます。ただし、/var/www/htmlディレクトリの下にあるファイルに対してこれらのコマンドを実行する権限をユーザーに付与したいだけです。

ユーザーが事前に指定されたディレクトリでのみ実行できるように、特権コマンドを制限するにはどうすればよいですか?

例:次のコマンドは、index.htmlファイルに777許可を付与します。

sudo chmod 777 /var/www/html/index.html

今、私は2つのアクションを実行したい

  1. 制限sudoユーザーがのみ実行できるようなchmodchown内から/var/www/html

  2. ユーザーがシステム内の他の場所でこれらのコマンドを実行できないようにします(たとえば、コマンドは/var/wwwまたはで実行できません/var/ftp


1
クロスポストしないでください- superuser.com/questions/456662/...
ウルリッヒDangel

7
これは本当に正しい方法ですか?どの程度www-dataまで必要性を排除するグループchmod/ chown何?
sr_

涼しい。そうすれば、ルートを簡単に取得できます。配るのは非常に悪い考えですchown。それとは別に、chmodルートとして実行しなければならない理由はわかりません。
ニルス

回答:


13

あなたが求めていることは不可能ではないにしても難しいです。あなたがアプリケーションを制限しなかった場合でも、chownおよびchmod特定のディレクトリ下のファイルには、誰かがまだシンボリックリンクを渡し、そのファイルはどこにでも彼らが好き影響を及ぼす可能性があります。

幸いなことに、あなたがやろうとしていることは実際の問題に対する正しい解決策ではない可能性が高く、別の方法が有効です。

通常、ファイルを作成および変更するために追加のアクセス許可が必要なユーザー/var/wwwはグループに追加されます(多くの場合www-data、サイトのさまざまな部分に異なるグループがある場合があります)。グループ所有権とsetgidディレクトリを使用できます。グループchgrp www-data /var/www/html; chmod g+ws /var/www/html内の全員がディレクトリwww-dataに書き込むことが/var/www/htmlでき、そのディレクトリwww-dataで作成されたファイルは、ファイルを作成したユーザーのプライマリグループではなくグループによって所有されます。ただし、これはあまり柔軟ではありません。

おそらくあなたがすべきことは、以下のファイルのアクセス制御リストを設定することです/var/www。まず、ACLが有効になっていることを確認します。/var/wwwオンになっているファイルシステムは、aclオプションでマウントする必要があります。そのヘルプについては、グループ内のディレクトリにあるすべての新しいファイルをアクセス可能にするをご覧ください。ACLユーティリティ(getfaclおよびsetfacl)もインストールします。次に、ツリーを追加する/var/www/html必要があるユーザーに、ツリーの下に追加のアクセス許可を与えます。ユーザーごとのACLを設定できますが、多くの場合、グループ内のファイルシステムの一部に対して同じ権限を持つユーザーを配置し、そのグループにACLを設定する方が簡単です。たとえば、グループ内のユーザーが次html-writersのツリーに読み取り/書き込みアクセスできる必要がある場合/var/www/html

setfacl -d -m group:html-writers:rwx /var/www/html
setfacl -m group:html-writers:rwx /var/www/html

「これは非常に柔軟ではない」(第3段落の最後) -なぜそうではありませんか?人々が特定のグループに属している必要があるからでしょうか?(アクセス許可とACLおよび関連するものについてほとんど何も知りません。)
KajMagnus

3
@KajMagnus rootはグループを管理する必要があり、ファイルは単一のグループにのみ属することができるため、柔軟性がありません。ACLを使用すると、ユーザーは自分が所有するファイルにアクセスできるユーザーを選択でき、ACLで複数のユーザーとグループに言及できます。
ジル「SO-悪であるのをやめる」

2

/etc/sudoersコマンドvisudoaddを使用して、ファイル内のすべての引数で「myuser」が使用するコマンドを制限できます。

## Allows myuser to chmod the html dir and chmod 755 the html2 dir
myuser  ALL=NOPASSWD:/bin/chmod [0-7][0-5][0-5] /var/www/html/*,/bin/chown myuser:mygroup /var/www/html/*,/bin/chmod 755 /var/www/html2/myapp/*.txt 

以下を追加するすべての操作のロギングを有効にします。

Defaults logfile=/var/log/sudo.log

サンプル出力:

[root@myhost /]# su - myuser
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/index.html 
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/*
-sh-3.1$ sudo /bin/chmod 777 /var/www/html2/myapp/*.txt
Sorry, user myuser is not allowed to execute '/bin/chmod 777 /var/www/html2/myapp/*.txt' as root on myhost.mydomain.
-sh-3.1$ sudo /bin/chmod 755 /var/www/html2/myapp/*.txt 
-sh-3.1$ 

sudoを使用する場合、「myuser」は信頼できる人であることが前提になります。ファイルのアクセス許可に注意してください。悪意のあるsudoユーザーが外部リソースからファイルをリンクして変更するのを止める簡単な方法はありません。


以前に試しましたが、次のようなエラーが表示されました。申し訳ありませんが、ユーザーprashantは、prashant.xyz.comでrootとして「/ bin / chmod 777 / var / www / html / a」を実行できません。
PrashantB

su - prashantまたはでユーザーを切り替えましたかsu prashant
tombolinux

はい、prashantユーザーがコマンドを実行しています。私はフォーラムを読んで、コマンドはシステム全体で実行されると言っています。誰もそのような問題について書いていない。
PrashantB

whooo :)を実行します。しかし、これは静的コマンドになります。/ var / www / htmlの下の任意のファイルに許可を適用できるように、一般化することはできますか?
PrashantB

3
これは完全に安全ではありません。sudo /bin/chmod 666 /var/www/html/../../../etc/passwdそして、あなたがそれをどうにかして修正するなら、ln -s /etc /var/www/html/foo/etc; sudo /bin/chmod 666 /var/www/html/foo/etc/passwd
ジル「SO-悪であるのを止めてください」

1

実際には、Bash(または選択したシェル)スクリプトを作成して特定のファイルまたはディレクトリに加えられた変更を制限することにより、これを行うためのかなり簡単な方法があります。

あなたの例では、次のようになります。

$ vi /usr/local/bin/mychmod

#!/bin/bash

chmod 777 /var/www/index.html

次に、sudoersファイルを変更して、www-dataが/ usr / local / bin / mychmodを実行できるようにします。

ただし、このスペースへのユーザー入力(たとえば、ユーザーが変更するファイルまたはディレクトリを変更できるようにする)をこのスペースに許可することは非常に危険です。それ。攻撃者はこの方法でルートとして任意のコマンドを簡単に実行し、システムのセキュリティを効果的に侵害する可能性があります。


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