• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 25, comments - 7, trackbacks - 0, articles - 0
            一個進程的 real user ID 是指運行此進程的用戶角色的 ID。
            一個進程的 effective user ID 是指此進程目前實際有效的用戶 ID(也就是權限的大小),effective user ID 主要用來校驗權限時使用,比如打開文件、創建文件、修改文件、kill 別的進程,等等。
            如果一個進程是以 root 身份來運行的,那么上面這兩個 ID 可以用 setuid/seteuid 隨便修改,想怎么改就怎么改,改來改去都可以。
            但是如果一個進程是以普通用戶身份來運行的,那么上面這兩個 ID 一般來說是相同的,并且也不能隨便修改。只有一種情況例外:此進程的可執行文件的權限標記中,設置了“設置用戶 ID”位!
            在命令行中,設置一個可執行文件的“設置用戶 ID”位的最簡單的方法,就是用
            chmod +s /path/to/file

            這個命令。
            一旦用了這個命令之后,再執行這個文件,
            那么生成的進程的 effective user ID 就變成了這個可執行文件的 owner user ID(屬主用戶 ID),
            而 real user ID 仍然是啟動這個程序時所用的用戶的 ID。
            打個比方來說,如果有這樣的一個文件:
            引用:-rw[color=red]s[/color]r-[color=red]s[/color]r-x 1 susesuse susesuse 7902 2006-08-31 13:22 tuid

            注意這個文件已經用 chmod +s 命令設置過“設置用戶 ID”位了。
            然后我用 flw 這個用戶來執行它,那么生成的進程它的 real user ID 就是 flw(因為我是用 flw 運行的),但是 effective user ID 就變成了 susesuse(因為這個可執行文件被設置了“設置用戶 ID”位,并且它的 owner user ID 是 susesuse)。
            這時,這個進程實際上就有兩個用戶權限了。只不過目前生效的是 susesuse,因此它目前能夠且只能夠操作 susesuse 用戶的文件,如果現在我又想要操作 flw 用戶的文件怎么辦?
            很簡單,只需要 seteuid( getuid() ) 就可以了。執行完這句之后,effective user ID 就變成和 real user ID 一樣了,都變成 flw 了。

            可是如果過了一會兒我又想要變回來怎么辦?因為 effective user ID 和 real user ID 此時都變成了 flw 了,所以操作系統必須得有一個地方保存住原來的“設置用戶 ID”(也就是可執行文件的 owner user ID),不然等你再想要 seteuid 的時候,操作系統就不知道你有沒有那個權利了。(總不能再去訪問一次文件系統吧?那樣也太沒有效率了)

            操作系統為了能夠在設置了 seteuid 之后,再次設置回來,所以特地將原來的“設置用戶 ID”保存下來了,這個保存下來的設置用戶 ID 自然就叫做“保存的設置用戶 ID”。

            下面看一段寫的例子程序:
            flw@Sleeper:~$ whoami
            
            flw
            flw@Sleeper:~$ cat tuid.c
            # include <stdio.h>
            # include <sys/types.h>
            # include <pwd.h>

            int main( void )
            {
                struct passwd *pwd;

                pwd = getpwuid( geteuid() );
                printf( "effective UID: [%s]\n", pwd->pw_name );

                system( "touch /tmp/foo.txt; ls -l /tmp/foo.txt; rm -rf /tmp/foo.txt" );

                printf( "\nset EUID to `flw'..\n" );
                pwd = getpwnam( "flw" );
                seteuid(pwd->pw_uid);

                pwd = getpwuid( geteuid() );
                printf( "effective UID: [%s]\n", pwd->pw_name );

                system( "touch /tmp/foo.txt; ls -l /tmp/foo.txt; rm -rf /tmp/foo.txt" );

                printf( "\nset EUID to `root'..\n" );
                seteuid(0);

                pwd = getpwuid( geteuid() );
                printf( "effective UID: [%s]\n", pwd->pw_name );

                system( "touch /tmp/foo.txt; ls -l /tmp/foo.txt; rm -rf /tmp/foo.txt" );

                return 0;
            }
            flw@Sleeper:~$ su root -c "cc -o tuid tuid.c; chmod +s tuid; ls -al tuid"
            Password:
            -rwsr-sr-x 1 root root 7902 2006-08-31 13:55 tuid
            flw@Sleeper:~$ ./tuid
            effective UID: [root]
            -rw-r--r-- 1 root root 0 2006-08-31 13:55 /tmp/foo.txt

            set EUID to `flw'..
            effective UID: [flw]
            -rw-r--r-- 1 flw root 0 2006-08-31 13:55 /tmp/foo.txt

            set EUID to `root'..
            effective UID: [root]
            -rw-r--r-- 1 root root 0 2006-08-31 13:55 /tmp/foo.txt
            flw@Sleeper:~$
            93精91精品国产综合久久香蕉| 国产精品久久久久9999| 亚洲国产成人久久综合一 | 精品一久久香蕉国产线看播放| 午夜欧美精品久久久久久久| 久久久久亚洲AV无码专区首JN| 久久久久99精品成人片| 久久久久久久国产免费看| 色婷婷狠狠久久综合五月| 亚洲精品成人网久久久久久| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产精品美女久久久网AV| 精品久久777| 国产精品99久久精品爆乳| 精品水蜜桃久久久久久久| 久久丝袜精品中文字幕| 久久久久久久久久久| 久久久久亚洲AV成人片| 久久成人精品视频| 精品久久人人做人人爽综合| 久久91精品国产91久| 无码人妻精品一区二区三区久久 | 亚洲AV日韩AV天堂久久| .精品久久久麻豆国产精品| 91久久九九无码成人网站| 一本久道久久综合狠狠躁AV | 人妻少妇久久中文字幕 | 亚洲欧美日韩久久精品第一区 | 亚洲国产精品久久久天堂| 热99re久久国超精品首页| 久久精品免费网站网| 久久青青草原亚洲av无码app| 欧美精品一区二区精品久久 | 久久久久久久波多野结衣高潮| 久久免费的精品国产V∧| 色综合久久精品中文字幕首页| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 国产69精品久久久久观看软件| 国产精品久久成人影院| 亚洲精品国产第一综合99久久 | 香蕉久久夜色精品国产尤物|