Linuxでsetuidディレクトリを尊重するにはどうすればよいですか?


8

少し前に、IRCでの会話中に、他の誰かが抱えていた問題を解決するためにファイルのユーザーIDを継承するために、誰かがディレクトリにsetuidするように勧められたチャネルの1人のユーザーがいました。当時私は声を上げて「Linuxはsetuidディレクトリをサポートしていない」と言っていました。その後、アドバイスを与える人から、ディレクトリに設定されたsetuidアクセス権を尊重するシステムのペーストビン(http://codepad.org/4In62f13)が表示されました。

ただ説明すると、「Linuxがsetuidディレクトリをサポートしていない」と言ったとき、「chmod u + sディレクトリ」に移動すると、ディレクトリにビットが設定されます。ただし、(私が理解しているように)Linuxは(ディレクトリ上で)このビットを無視します。

私が思うに、そのペーストビンを完全に複製することはできません。誰かがselinuxで動作をエミュレートすることが可能かもしれないと私に一度提案しました-そしてルールをいじって、ファイルにuidを強制することは可能ですが、(私が見ることができる)setuidディレクトリ許可からではありません。インターネット上で読むことはかなり有益ではありません-ほとんどの場所は「いいえ、ディレクトリのsetuidはlinuxでは機能しません」と時折「特定の状況下で行うことができます」と主張します(http://arstechnica.com/など)。 etc / linux / 2003 / linux.ars-12032003.html

元の人物が誰だったかは覚えていませんが、元のシステムはdebian 6システムで、実行していたファイルシステムは「default、acl」でマウントされたxfsでした。私はそれを複製しようとしましたが、今のところ運がありません(これまでにさまざまなバージョンのdebian、ubuntu、fedora、centosで試してみました)

誰かがシステムでディレクトリのsetuidを尊重するようにするにはどうすればよいのか、私に手掛かりを与えることができますか?


XFSには確かにマウントオプション(grpid|bsdgroupsまたはnogrpid|sysvgroups)があります。つまり、ディレクトリ内のファイルは、所有者のグループではなく、ディレクトリのグループで作成されます。たぶんそれで遊ぶ?
Zanchey

回答:


7

ディレクトリのSetuidはsetgidのように動作しません。シェルの出力がFreeBSDからのものでない限り、一部は退屈していて、あなたの費用で少し楽しんでいました。

ディレクトリに設定されたsetuidアクセス権は、UNIXおよびLinuxシステムでは無視されます。[4] FreeBSDは、setgidと同様に解釈するように構成できます。つまり、すべてのファイルとサブディレクトリをトップディレクトリの所有者が所有するように強制できます。[5]

FreeBSDでは、ディレクトリは実際の値に関係なく、setgidビットが常に設定されているかのように動作します。open(2)で述べられているように、「新しいファイルが作成されると、そのファイルを含むディレクトリのグループが与えられます。」

http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories


私はそうだと思います...しかし、彼は彼が目標を達成したことをかなり確信していました...彼はdebianを使用していたので、私は次にdebianフォーラムに目を向け、そして応答のためにこれを得ました:forums.debian.net /…アイデアの状態よりも少ない状態で投稿して、コールドショルダーを取得した可能性があります。約1か月後、少し調査した後、それが確実に実行できないことは確かではありませんが、何も変更せずにdebianの連中がその可能性を信じている理由を理解できません。
Takigama

彼がそれを達成した場合、彼はそれがどのように行われたかについての最高の情報源になるでしょう。私はそのトピックを自分で調べましたが、何も見つかりませんでした。
アーロンコプリー

@AaronCopley:ディレクトリに設定されたsetuid権限がLinuxシステムでは無視されるという事実について、ウィキペディア以外のソースがありますか?
Martin Thoma 2013年

いいえ。しかし、それを試して、自分の目で確かめることは大歓迎です。:)
アーロンコプリ2013年

2

部分的な回答/回避策:

私は同じことをやろうとしていたので、それと戦わずに別の方法を試すことにしました。私が試したのは、デフォルトのアクセス許可を設定するためのアクセス制御リストです。(注:最初に有効にする必要がある場合があります)。

setfacl -R --set-file=- . <<EOF
# file: testdir/
# owner: testuser
# group: testgroup
user::rwx
group::rwx
group:normaluser:rwx
mask::rwx
other::r-x
default:group::rwx
default:group:normaluser:rwx
default:mask::rwx
default:other::r-x
EOF

ここではtestuserを使用してテストを実行し、通常のユーザーは結果を削除できますが、rootを使用する必要はありません(毎回)。


これにより新しいグループが追加されますが、グループIDの設定は正常に機能します。
ctrl-alt-delor 2013

-2

RHELから man chmod

特に指定しない限り、chmodはディレクトリのset-user-IDおよびset-group-IDビットを保持します。u + sやgsなどのシンボリックモードでビットを設定またはクリアできます。また、数値モードでビットを設定できます(ただしクリアはできません)。

数値的にchmod 4711 ./dirは、正しく思い出せば、set UIDビットをchmod 2711 ./dir追加し、set gidビットを追加して6711、ペーストビンのデモンストレーションに従ってuid + gid継承を設定します。

マニュアルページchmod u+s== chmod 4XXXおよびchmod g+s==chmod 2XXX


1
いいえ、私はそれらを適用する方法を理解しています、それは問題ではありません。
Takigama

(誤って入力してください)問題は、ディレクトリに対して何をするかです。私の信じるところは、ディレクトリのsetuidはLinuxが実行するものではないということです。たとえば(ubuntu 10.10システム):testuser @ boson:〜$ ls -ald〜drwsrwsrwx 3 testuser testuser 4096 2012-03-21 01:55 / home / testuserそのディレクトリには、setuidとsetgidの両方があります。ここで、ユーザーtt @ boson:〜$ touch〜testuser / file t @ boson:〜$ ls -la!$ ls -la〜testuser / file -rw-r--r-- 1 t testuser 0 2012-03として-21 01:57 / home / testuser / fileディレクトリのsetuidビットがどのように影響しないかに注意してください(期待通り)。Linuxシステムでディレクトリのsetuidを使用するにはどうすればよいですか?
Takigama

数値のようなものを使用する=75500755、数値を使用してそれらをクリアできます
Steve Buzonas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.