グローバルに書き込み可能なファイルとユーザーベースのプロセス刑務所

グローバルに書き込み可能なファイルとユーザーベースのプロセス刑務所

x私は通常、特定の実行可能ファイル(悪意のある可能性がある)を選択し、特定のディレクトリ(動的に派生した)に制限された書き込み権限を使用して実行(管理者アカウントで)できるようにしたいと思います"${dirs[@]}"

実行可能ファイルは、システムがグローバルにアクセスできるすべてのエントリにアクセスできる必要があります。

私は単純なユーザー切り替えを使用し、専用の状態の非保存システムユーザーがforeveraloneこれらの実行可能ファイルを実行できると思いました。

これらの制限の下で実行したいときはいつでもロックファイルをx作成します。flockchown -R foreveralone:foreveralone -- "${dirs[@]}"sudo -u foreveralone -g foreveralone $PWD/x

その後、ファイルシステムに永続ファイルがないようにchown他の人にディレクトリを作成しました。 ■ファイルのグローバル書き込みディレクトリ(例:)もforeveralone整理する必要があるようです。/tmp, /dev/shmforeveralone

私の質問は次のとおりです

  1. 標準設定* nixシステムを考えると、これは刑務所プロセスのための実行可能で安全なメカニズムですか?
  2. *nixでグローバルに書き込むことができる標準の場所とファイルは正確に何ですか?
  3. 似たようなものより良いものを見つける方法は?

    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
  1. より良い(よりシンプルで柔軟なソリューション)はありますか?

私の特別な場合は、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

関連情報