作者:上村崇 フリーランスのIT系エンジニア
twitter:@uemera facebook:uemura

Linuxの権限について解説。setuidとかsetgidとかスティッキービットとか


setuidとは

setuidは、一般ユーザーがrootユーザー権限でプログラムを実行できる仕組みです
例えば一般ユーザー”vpsuser“が実行可能ファイルhogehoge をroot権限で実行したいとします。
通常ならばvpsuserがhogehogeを実行すると、一般ユーザーvpsuserの権限で実行されますので、root権限で実行することはできません。
しかし、hogehogeにsetuidをつけてあげると、
一般ユーザーvpsuserがhogehogeをroot権限で実行することが可能になります。
ただし、実行ファイルはシェルスクリプトではダメです。バイナリ実行ファイルである必要があります。

実験してみます。
例として、以下のc言語プログラムsetuid_test.cを用意します。
setuid_test.txt という空のファイルをつくるプログラムです。
一般ユーザーvpsuserでコンパイルして、setuid_testという実行ファイル(=バイナリの実行ファイル)を作ります。
$ gcc -o setuid_test setuid_test.c
実行ファイルは以下のように、所有者=vpsuser、グループ=vpsuserになっています。
$ ls -l
-rwxr-xr-x 1 vpsuser vpsuser 6579  3月 15 16:38 2016 setuid_test
ここで、この実行ファイルの所有者をrootにして、setuidを設定してみます。
(rootユーザーで作業してください)
# chown root setuid_test
# chmod 4755 setuid_test
# ls -l 
-rwsr-xr-x 1 root vpsuser 6579  3月 15 16:38 2016 setuid_test
lsで確認すると、所有者がroot、rwxのユーザーの部分がrwsとなり、setuidが有効になっていることが分かります。

この状態で一般ユーザーvpsuserでsetuid_testを実行します。
$ ./setuid_test
$ ls -l 
-rwsr-xr-x 1 root vpsuser 6579  3月 15 16:38 2016 setuid_test
-rw-r--r-- 1 root vpsuser    0  3月 15 17:04 2016 setuid_test.txt
vpsuserで実行したsetuid_testはroot権限で実行されますので、そのプログラム内で作られた空ファイルは所有者がrootになります。

setuidの設定の方法

先ほど紹介した
chmod 4755 setuid_test
の4がsetuidセットを意味します。そのあとの755は通常の権限の設定です。

setuidを無効化するには、
chmod 0755 setuid_test
のように0をセットすれば良いです。

また、
chmod u+s setuid_test
chmod u-s setuid_test
のような書き方もできます。

参考:
setuid, setgid, sticky bit:太陽と月:So-netブログ setuid は慎重に


setgidとは

setgidは、setuidのグループ版です。
setgidをセットすると、実行ファイルの所有グループの権限で実行することができます。

コマンドは
chmod 2755 setgid_test
のように、2をセットすることでsetgidが有効になります。

chmod g+s setgid_test
chmod g-s setgid_test
のような書き方もできます。

また、setgidをディレクトリに対してセットした場合、
そのディレクトリの下に作られるファイルは、ディレクトリの所有グループの名前になります。

スティッキービットとは

スティッキービット(Sticky Bit)とは、ディレクトリに設定される特殊なアクセス権の事です。
スティッキービット(Sticky Bit)が設定されたディレクトリでは、すべてのユーザーがファイルやディレクトリを作成・更新できますが、所有者だけ(rootは除く)しか削除できなくなります。

chmod 1755 dirname
のように1をセットすることでスティッキービットが有効になります。

chmod o+t dirname
chmod o-t dirname
のような書き方もできます。

参考
スティッキービット(Sticky Bit) – 特殊なアクセス権

関連記事


Postfixメールサーバー:送信不可のユーザーを設定する
メールサーバーPostfixにて、送受信ができないユーザーを設定をする方法です。Linux、debian環境です。特定のメールアドレスを送受信不可にします。メールを許可しないLinuxユーザーを作るときに有効です。

Web開発・Web制作のツールや用語を初心者向けに大量紹介。これだけ知っておけば安心。
Webページ製作やWebのシステム開発ではいろんなツールやテクニック、用語を使いますが、全体像がなかなか掴みにくいと思ったので、初心者向けに用語をたくさんまとめました。これさえ押さえておけば業界の常識用語はだいたい網羅できると思います。

KVM仮想マシンをWebからアクセスできるKimchiをdebianにインストール
自宅サーバーにてKVMの仮想マシンを動かしていますが、外からでもリモートで操作できるようにkimchiを導入しました。 GitHub – kimchi-project/kimchi: An HTML5 man …

MySQL、MariaDB サブクエリ付きSELECT文SQLを高速化するノウハウ
MariaDBの SELECT(参照系)高速化のために試したことを記録しておきます。 2700万件対象のサブクエリ含むSQLに100秒近くかかっていたのが、10秒を切るところまで高速化できました。 環境: さくらのVPS …

Raspberry Pi を買ってLチカ(LEDライトを点灯)するまで
Raspberry Piを買ってからLチカ(LEDライトを点灯)するまでのノウハウを書きます。 買ったもの Raspberry Pi 3 Model B+ ヤフオクで4400円で買いました。定価は5300円くらい。 Ra …

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です