x
私は通常、特定の実行可能ファイル(悪意のある可能性がある)を選択し、特定のディレクトリ(動的に派生した)に制限された書き込み権限を使用して実行(管理者アカウントで)できるようにしたいと思います"${dirs[@]}"
。
実行可能ファイルは、システムがグローバルにアクセスできるすべてのエントリにアクセスできる必要があります。
私は単純なユーザー切り替えを使用し、専用の状態の非保存システムユーザーがforeveralone
これらの実行可能ファイルを実行できると思いました。
これらの制限の下で実行したいときはいつでもロックファイルをx
作成します。flock
chown -R foreveralone:foreveralone -- "${dirs[@]}"
sudo -u foreveralone -g foreveralone $PWD/x
その後、ファイルシステムに永続ファイルがないようにchown
他の人にディレクトリを作成しました。 ■ファイルのグローバル書き込みディレクトリ(例:)もforeveralone
整理する必要があるようです。/tmp, /dev/shm
foreveralone
私の質問は次のとおりです
- 標準設定* nixシステムを考えると、これは刑務所プロセスのための実行可能で安全なメカニズムですか?
- *nixでグローバルに書き込むことができる標準の場所とファイルは正確に何ですか?
似たようなものより良いものを見つける方法は?
sudo -u Foreveralone -g Foreveraloneを探す/! -type l -書き込み可能 2>/dev/null | -type l -書き込み可能 2>/dev/null | grep -v '^/proc'
(私の
find
ゲームはあまりにも弱いです。/proc/$pid
書き込み可能なように見えますが、そうでないファイルがたくさんあるように見えます。
とにかく私のシステムは3.
character special file /dev/full
character special file /dev/fuse
character special file /dev/net/tun
character special file /dev/null
character special file /dev/ptmx
character special file /dev/random
character special file /dev/tty
character special file /dev/urandom
character special file /dev/zero
character special file /sys/kernel/security/apparmor/.null
directory /run/lock
directory /run/shm
directory /tmp
directory /tmp/.ICE-unix
directory /tmp/.X11-unix
directory /var/local/dumps
directory /var/mail
directory /var/spool/samba
directory /var/tmp
regular empty file /run/sendmail/mta/smsocket
regular empty file /sys/kernel/security/apparmor/.access
socket /dev/log
socket /run/acpid.socket
socket /run/avahi-daemon/socket
socket /run/cups/cups.sock
socket /run/dbus/system_bus_socket
socket /run/gdm_socket
socket /run/mysqld/mysqld.sock
socket /run/samba/nmbd/unexpected
socket /run/sdp
socket /tmp/.ICE-unix/2537
socket /tmp/mongodb-27017.sock
socket /tmp/.X11-unix/X0
- より良い(よりシンプルで柔軟なソリューション)はありますか?
私の特別な場合は、x
誤った場所に書き込んだり、グローバルに読み取れないコンテンツを読み取ったりせずに実行する必要がある潜在的に悪意のあるビルドスクリプトです。
答え1
まず、私の悪い英語のため申し訳ありません。役に立つかもしれないし、そうでないかもしれないので、UNIXの概念を使って何かを見せましょう。
すべてのユーザーがnano実行可能ファイルを実行できるようにしたいが、実行可能ファイルを呼び出したユーザーではなく、Apache構成または特定のグループのファイルのみを編集できる限られた環境、つまりNanoが実行したいと想像してください。 Linux サービスと同様に、特定の仮想ユーザー権限に制限されます。
1- まず nano ユーザーを作成し、ログインを無効にします。
useradd nano -d /var/nano
mkdir /var/nano
chown -R nano:nano /var/nano
passwd -l nano
2 - nanoがユーザーnanoとして実行されるように強制します(たとえば、rootがnanoを呼び出す場合は、rootではなくnanoとして実行する必要があります)
chown nano:nano /usr/bin/nano
chmod a+s /usr/bin/nano
+sは、nanoを呼び出した人ではなく所有者として実行されることを意味します。
3 - テストのためにrootを使用してnanoを呼び出します。
#nano
#ps aux | grep nano
nano 3399 0.0 0.0 13828 3840 pts/0 S+ 08:48 0:00 nano
美しい! Nanoは、ログインしているユーザーに関係なく、nanoユーザーとして実行されます。
4-もう何ですか? nanoに/var/www/apache2のファイルを編集させたいと思います。
chgrp -R www-data /var/www/ (yes i now that is unnecessary in Debian if the group are respected)
chmod -R g+rw /var/www
adduser nano www-data
5-また何ですか?
これで、すべてのユーザーがnano(または特殊コピー「nano-special」;-)を使用して/ var / wwwファイルを編集できるようになり、nanoグループのユーザーだけがこれを実行できるようにするには、次の手順を実行します。これはどうですか?
実行するには、他の権限を削除するだけです。
chmod o-x /usr/bin/nano
ユーザーをナノグループに追加します。
adduser myuser1 nano