Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> UNIXはどのようにユーザーIDビットを設定しますか?

UNIXはどのようにユーザーIDビットを設定しますか?

  
                

Linuxでは、各プロセスにいくつかのユーザーIDビットがありますが、これらのユーザーIDはファイルアクセスの許可をどのように設定しますか?この記事では、UNIXを例に挙げてUNIXがユーザーIDビットを設定する方法を簡単に紹介します。
ログイン

STAT機能付きファイルのステータス情報を取得するために、このようなプロトタイプは、次のとおり

INTスタット(CONSTのchar *経路、構造体STAT * BUF);

構造体statの構造:

struct stat {

dev_t st_dev; /*ファイルを含むデバイスのID * /

ino_t st_ino; /* inode番号* /

mode_t st_mode; /*保護* /

nlink_t st_nlink; /*ハードリンク数* /

uid_t st_uid; /*所有者のユーザーID * /

gid_t st_gid; /*所有者のグループID * /

dev_t st_rdev; /*デバイスID(特殊ファイルの場合)* /

off_t st_size; /*合計サイズ、バイト* /

blksize_t st_blksize; /*ファイルシステムI /Oのブロックサイズ* /

blkcnt_t st_blocks; /*割り当てられた512Bブロックの数* /

time_t st_atime; /*最終アクセス時刻* /

time_t st_mtime; /*最終修正時刻* /

time_t st_ctime; /*最終ステータス変更時刻* /

}; IDがST_UID、ファイルの所有者ID st_gid表現、および所有者のファイルを取得するために使用することができるの発信グループから

BUFパラメータ。

UNIXプロセスには、IDの概念がいくつかあります。これらは、実際のユーザーID、実際のユーザーグループID、実効ユーザーID、実効ユーザーグループIDなどです。プロセスを開始すると、通常、このプロセスの実効ユーザーIDはプロセスの実際のIDです(たとえば、私はericユーザーでログインします。この有効なユーザーは私のericに対応するIDです)。ただし、「設定ユーザーIDビット」がオンの場合、有効IDはプロセスのプログラムファイルに対応する所有者のIDです。

$ ls -l 1.txt

-rw ------- 1ルートルート16 April 29 14:31 1.txt

現在のディレクトリの下ファイル「1.txt」があり、所有者ルートであり、ルートのみが読み取りおよび書き込み権限を持っています。

1 int main()

2 {

3 int fd;

4 if((fd = open(' 1.txt'、 O_RDONLY))== -1)

5 {

6 printf('開くことができませんでした。\\ n');

7 exit(-1);

8}

9 char buf [1024] = {0};

10 read(fd、buf、1024);

11 printf(buf);

12 printf(' \\ n');

13}

まず、ターミナルでsuコマンドを使用してrootユーザーを使用します。 Gcc read.c - ドメイン。メインプログラムを入手してください。

#gcc read.c -omain

#exit

exit

$ main

開けませんでした。

明らかにmainの所有者もrootですが、メインプログラムはまだ "1.txt"を開くことができません。これは、メイン起動後のプロセスの実効IDがプロセスの実際のユーザーID(つまり、ericアカウントのID)であるためです。 ' 1.txt'はrootユーザーに対する読み取りおよび書き込みアクセス権しか持っていないので、openは失敗します。

メインユーザーIDビットを開いてシェルコマンドを開きます。chmod u + s main

cプログラムを使用します。メインコードは次のとおりです。

1 struct stat Buf = {0};

2 stat(' main'、& buf);

3 buf.st_mode

Copyright © Windowsの知識 All Rights Reserved