特定の実行可能ファイル(悪意のある可能性がある)x
を一般的に選択し、特定のディレクトリに制限された書き込みアクセス(動的に推定)で(管理者アカウントから)実行できるようにしたい"${dirs[@]}"
。
実行可能ファイルは、システム上でグローバルにアクセス可能なものすべてにアクセスできる必要があります。
これらの実行可能ファイルを実行するために、単純なユーザー切り替えを使用して、専用のステートレスシステムユーザーforeveralone
を使用できると考えました。
これらの制限付きでx
を実行したいときはいつでも、flock
ロックファイルchown -R foreveralone:foreveralone -- "${dirs[@]}"
そしてSudo -u foreveralone -g foreveralone $PWD/x
。
その後、他の誰かにディレクトリをchown
書き込むので、foreveralone
はファイルシステム上に永続ファイルを持ちません。グローバル書き込みディレクトリもクリーンアップする必要があると思います(例:/tmp, /dev/shm
)foreveralone
sファイルから。
私の質問は次のとおりです。
どうすれば次のようなものよりもうまくそれらを見つけることができますか
Sudo -u foreveralone -g foreveralone find /! -type l -writable 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
は潜在的に悪意のあるビルドスクリプトであり、間違った場所に書き込んだり、グローバルに読み取れないものを読み取ったりすることなく実行する必要があります。
私の悪い英語を最初に申し訳ありません。 UNIXの概念のみを使用して何かを示しましょう。それが役立つ(または役に立たない)と思うからです。
実行可能ファイルnanoをすべてのユーザーが実行できるようにしたいが、実行可能ファイルを呼び出すユーザーとして実行してはならないが、環境が制限されており、Apache構成のみまたは特定のグループのファイルを編集するためのアクセス権があると想像してください。特定の仮想ユーザー権限に制限されたLinuxサービスのようにnanoを実行したい。
1-最初にユーザーnanoを作成し、ログインを無効にします。
useradd nano -d /var/nano
mkdir /var/nano
chown -R nano:nano /var/nano
passwd -l nano
2-nanoをユーザーnanoとして実行するように強制します(たとえば、ルートがnanoを呼び出す場合、ルートではなく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
そして、ユーザーをグループnanoに追加します
adduser myuser1 nano