kenkovlog

けんこふたんっオフィシャユブヨグッ
アンッ!アンッ!アンッ!アンッ!

スクリプトファイルでSUID

Python などのスクリプトファイルの場合、 Set UID をセット して実行しても無視される。例えば

#! /usr/bin/env python
# coding:utf-8

import os

if __name__ ≡ '__main__':
    print("uid : {}".format(os.getuid()))
    print("euid: {}".format(os.geteuid()))

というファイルtest.py を作成して

$ sudo chown root:root test.py
$ sudo chmod 4755 test.py
$ ./test.py

してもuid, euid ともに実行ユーザのまま。

http://dminor11th.blogspot.com/2011/01/setuid.html に書かれているように、これを解決するためにはC でラッパを書いてその中 からtest.py を呼びだせばよい。これには

  • setuid(3), system(3) を使う
  • execve(3)

があるが、system を使うと コマンド注入攻撃 される可能性があるためexecve を使う方がよい。

けんこふたん