ユーザーがシステム上のすべてのファイルまたはディレクトリからchown
コマンドを実行できるように、sudoersファイルを介してsudoを設定できます。しかし、私はそのディレクトリにあるファイルに対してこれらのコマンドを実行する権限chmod
だけをユーザーに与えたいと思います。/var/www/html
ユーザーが事前に指定されたディレクトリでのみ実行できるように特権コマンドを制限する方法は?
例: 次のコマンドはindex.html
ファイルに 777 権限を付与します。
sudo chmod 777 /var/www/html/index.html
今2つのことをしたいと思います。
sudo
ユーザーが内部chmod
で実行されるように制限するchown
/var/www/html
ユーザーがシステムの他の場所でこれらのコマンドを実行することを禁止します(たとえば、または
/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/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
答え2
/etc/sudoers
addコマンドを使用して、ファイル内のすべてのパラメータを「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権限ですべてのコマンドを簡単に実行でき、システムセキュリティを効果的に損なう可能性があります。