KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

KEIS BLOG

suid が利かなくてはまった

perl スクリプトの中で secure ログを cat するような処理を書いていて、secure ログを cat するには root 権限が必要なので、

その perl スクリプトを suid すればいいよね、と軽く考えていた。

suid はほぼ使う機会が無いので知らなかったのだけど、実はスクリプト系のものには suid は無効らしい。

perl やら ruby やら sh やらのスクリプトは、chmod u+s しても効果がない。バイナリな実行ファイルでないと、OS は setuid/gid フラグを無視してしまって意図した権限で実行してくれない。それを許すと 穴になるからしかたないというのは承知してるけどさ、どーしてもやりたいこともあるわけで、そのたびごとに C のラッパーを書くのはめんどくさい。仕事だからやるけどさ

http://ya.maya.st/d/200908a.html

で、suid で変更したidは起動したプロセスでのみ有効で、内部で別プロセスを生成するときには変更前のidが使われる、と同僚が教えてくれたので、これも初耳。以下、ちょっと検証として、あってるのかあってないのか、微妙なコード。

#include <unistd.h>
#include <pwd.h>
#include <stdio.h>

void main (char* args) {
        struct passwd* pw;
        pw=getpwuid(geteuid());
        printf("%s\n",pw->pw_name);
        system("id");
}

$ gcc a.c;sudo chown root:root a.out; sudo chmod u+s a.out;./a.out
root
uid=501(kamei) gid=501(kamei) groups=501(kamei),10(wheel)

「system("id");」のとこは、合ってるのかどうか自信ない。

ちなみに、perl では、昔は suidperl ってのをインストールすると、suid を使えたようだが、今はたぶん使えなさそう。

あんまりこれをまじめに調べるモチベーションが無いので、すみません、適当にぐぐった結果ですmm

 

エンジニア募集中!

採用情報はこちら

CATEGORY

技術情報

思考

便利サービス

社内イベント

採用担当の戦い

その他

メンバー

LATEST ENTRY

2026.07.08

見慣れないIPアドレスの正体を調べる4つの方法

技術情報

2026.07.08

「providerを固定したのになぜ直らない?」Terraform初心者がハマる落とし穴

技術情報

2026.07.08

【KEISのメンバー #1】入社2年目・若手エンジニアに聞く、未経験からの1年と「続けられるエンジニア」

メンバー

2026.06.21

{% partial %} 文法リファレンス ― 名前・属性・型解決・スコープの全仕様

技術情報

2026.06.21

Liquid に自作タグを足す ― partial タグで見る作り方

技術情報

TAG