スポンサーリンク

このドキュメントの内容は、以下の通りです。

Unixのカーネルは、3つのユーザIDを管理する。
  • 実ユーザID
  • 実行ユーザID
  • 保存セットユーザID
3つのユーザIDをプログラムから取得するには、 getresuid() システムコール
を利用します。

Makefile


getresuid: getresuid.c
	$(CC) $(CFLAGS) $< -o $@

suid_getresuid: getresuid
	cp $< $@
	sudo chown root:wheel $@
	sudo chmod u+s $@

getresuid.c


#include <stdio.h>
#include <stdlib.h>
#include <err.h>

#include <sys/types.h>
#include <unistd.h>

int
main (int argc, char *argv[])
{
	int	r	= 0;

	uid_t	ruid, euid, suid;
	
	r	= getresuid (&ruid, &euid, &suid);

	if ( r == -1 )
	{
		err (EXIT_FAILURE, "getresuid");
	}

	(void) printf (
			"ruid: %d\n"
			"euid: %d\n"
			"suid: %d\n",
			ruid, euid, suid);

	exit (EXIT_SUCCESS);
}

実行例


suid されてない、コマンドの場合。

薫% ./getresuid
ruid: 500
euid: 500
suid: 500

suid ビットがオンになっているコマンドの場合。
uid=500 のユーザでコマンド(suid_getresuid)を実行した場合、
ruid だけ 500 になり、euidとsuidは0になる。

薫% ./suid_getresuid
ruid: 500
euid: 0
suid: 0

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー