SUDOERSを介して特定のディレクトリで実行されているコマンドを制限する方法は?

SUDOERSを介して特定のディレクトリで実行されているコマンドを制限する方法は?

ユーザーがシステム上のすべてのファイルまたはディレクトリからchownコマンドを実行できるように、sudoersファイルを介してsudoを設定できます。しかし、私はそのディレクトリにあるファイルに対してこれらのコマンドを実行する権限chmodだけをユーザーに与えたいと思います。/var/www/html

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

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

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

今2つのことをしたいと思います。

  1. sudoユーザーが内部chmodで実行されるように制限するchown/var/www/html

  2. ユーザーがシステムの他の場所でこれらのコマンドを実行することを禁止します(たとえば、または/var/wwwでコマンドを実行することはできません/var/ftp)。

答え1

あなたが尋ねる質問は不可能ではなくても難しいです。アプリケーションを特定のディレクトリ内のファイルに制限しても、chown誰かchmodがまだシンボリックリンクを渡して目的の場所のファイルに影響を与える可能性があります。

幸いなことに、現在やろうとしていることが実際の問題を解決する正しい方法ではない可能性が高く、動作する他の方法があります。

通常、ファイルを作成および変更するために追加の権限を必要とするユーザーはグループに追加されます/var/www(通常、www-dataサイトの各部分に異なるグループがある可能性があります)。 setgid ディレクトリでグループ所有権を使用できます。グループ内の誰もがディレクトリに書き込むchgrp www-data /var/www/html; chmod g+ws /var/www/htmlことができ、ディレクトリに作成されたファイルはファイルを作成したユーザーのデフォルトグループではなくそのグループが所有します。しかし、これはあまり柔軟ではありません。www-data/var/www/htmlwww-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

答え2

/etc/sudoersaddコマンドを使用して、ファイル内のすべてのパラメータを「myuser」が使用するコマンドに制限できますvisudo

## 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ユーザーが外部リソースのファイルをリンクおよび変更するのを防ぐ簡単な方法はありません。

答え3

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

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

$ vi /usr/local/bin/mychmod

#!/bin/bash

chmod 777 /var/www/index.html

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

ただし、このスペースにユーザー入力(たとえば、ユーザーがchmoddedファイルやディレクトリを変更できるようにすること)を許可することは非常に危険であり、同様の操作を実行するには注入攻撃をフィルタリングする方法を知る必要があります。攻撃者はこの方法でroot権限ですべてのコマンドを簡単に実行でき、システムセキュリティを効果的に損なう可能性があります。

関連情報