UNIXプロセスに関連するユーザーIDは、ユーザーのグループIDは、詳細


我々はUNIXライクなシステムを使用すると、多くの場合、IDのさまざまなを含み、そのようなファイルは、ユーザーID、グループID、プロセス関連のランタイム6 IDに関連付けられた属性、など:実際のID、実グループID、有効なID、実効グループID 、保存されたユーザーIDは、保存した設定のグループIDを提供しています。

プロセスの実際の使用は、私たちはしばしば簡単にアクセスし、使用するコンテンツを関連レコードのために、この論文よう、様々な基本的な概念と使用のIDを混乱させる。

Unixファイルは、関連する属性

「すべてはファイルである」UNIXの基本理念である、Unixのシステムリソースがファイルを表すために使用することができます。各ファイルに固有の、それはプロパティファイルに含める関連ファイル属性、ファイルを言うために、ユーザID紙、グループID、ファイルにアクセスする必要があります。

運転指令に関連するファイル属性

  1. statコマンドによって表示するファイルすべての属性:

     lhl@ubuntu18:~/develops/linux$ stat test
       文件:test
       大小:0 	块:0  IO 块:4096   普通空文件
     设备:801h/2049d	Inode:5769793 硬链接:1
     权限:(0644/-rw-r--r--)  Uid:( 1000/ lhl)   Gid:( 1000/ lhl)
     最近访问:2020-02-12 12:54:38.006718573 +0800
     最近更改:2020-02-12 12:54:38.006718573 +0800
     最近改动:2020-02-12 12:54:38.006718573 +0800
     创建时间:-
    

    あなたは、ファイルのパーミッション、ユーザーID、グループIDを見ることができます。

  2. IDを介してユーザのコマンドについての情報を表示し、デフォルトでは現在のユーザーです。

     lhl@ubuntu18:~/develops/linux$ id root
     uid=0(root) gid=0(root) 组=0(root)
    
  3. chownコマンドを経由してファイルを所有している変更のユーザーとグループ。

     hl@ubuntu18:~/develops/linux$ chown --help
     用法:chown [选项]... [所有者][:[组]] 文件...
    
     -R选项:用于递归修改各级目录下的文件所属用户和用户组。
    
  4. chmodコマンドでファイルのパーミッションを変更します。

     lhl@ubuntu18:~/develops/linux$ chmod --help
     用法:chmod [选项]... 模式[,模式]... 文件...
    
     其中,模式来自于'[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.
    
  5. USERMODを通じてユーザに関連付けられた情報を変更します。

     比如,将用户lhl添加到docker用户组中。
    
     lhl@ubuntu18:~/develops/docker/docs$ sudo usermod -aG docker lhl
     [sudo] lhl 的密码: 
     lhl@ubuntu18:~/develops/docker/docs$ id lhl
     uid=1000(lhl) gid=1000(lhl) 组=1000(lhl),127(docker)
    

プロセスIDに関連

次のようにプロセスIDに関連付けられているが、6個以上を持っています:

ユーザーIDとグループIDの設定を設定します。

以下は、IDのすべての種類について分析しています。

  • まず、1つのIDは、プロセスの存在に依存しているはっきり以上でなければならない、それはこれらのIDに来る時はいつでも、それはすべてのプロセスに関連します。

  • 私は実ユーザIDと実グループIDを識別します。その後、Unixシステムでは、「誰が」それを来る方法ですか?答えは、我々はシステムを上陸させたとき、確かに、指定したユーザは、その後、ユーザーは、ここで着陸されている「私は。」ログインに成功すると、全体のログインセッション中に、「私は」変更されません。

  • 実効ユーザーIDと実効グループIDは、ファイルにアクセスするときの権限を取得するためのプロセスを決定します。

  • 設定は、ユーザーIDを保存し、プログラムを実行する際に、グループID記憶は有効なのコピーの有効なユーザーIDとグループIDが含まれています。

ユーザーIDとグループIDの設定を設定します。

典型的には、プロセスの実効ユーザIDが有効なIDグループが実際のプロセスグループIDに等しく、実際のユーザIDと同じです。各ファイルは、独自の所有者とグループ所有者を持っている、あなたは、STATコマンドで見ることができます。

以上のことから、プロセスはファイルにアクセスする機能を提供するために、有効なユーザIDと実効グループIDに依存しますプロセスの実効ユーザIDが実行されている達成するために、「設定されたユーザID」スイッチされた実行可能ファイルのst_modeモード単語、特殊なフラグを設定することにより、そのような能力を提供するために、UNIXファイルシステムは、実際のそのユーザIDは、実行可能ファイルの所有者のIDに変換されます。同じst_modeのに有効なユーザーグループ、「ユーザ設定グループID」フラグのために。

例えば、Unixシステムのpasswdコマンド、ユーザーが指定したユーザーのパスワードを変更するには、このコマンドを使用することができ、次のように、実行可能プログラムファイルのパーミッションは以下のとおりです。

lhl@ubuntu18:/usr/bin$ stat passwd 
  文件:passwd
  大小:59640     	块:120        IO 块:4096   普通文件
设备:801h/2049d	Inode:3408705     硬链接:1
权限:(4755/-rwsr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)

発現音符、s内のpasswdオーナー権は、「設定されたユーザID」を有効にし、所有者IDとグループID passwdの所有者は、両方とも0(ルート)です。

最終的には、ユーザパスワード変更の二つの目的は、ユーザIDを達成するには、passwd / etc / passwdと/ etc / shadowファイルを修正し、グループIDは/ etc / passwdと/電気ショック療法/ shadowファイルには、2つのルートです。平均的なユーザーは、あなたは、/ etc目的/ passwdと/ etc / shadowファイルを変更するには、任意の一般ユーザーを達成することができ、後にpasswdの増加旗「ユーザーID」を与えることによって、しかし、二つの文書に転用する権限を持っていません。

実験を行い、フラグ「ユーザーIDを設定する」passwdファイルが削除された場合、その後、平均的なユーザーがパスワードを変更する機能を失うことになります。

  1. フラグ「ユーザーIDを設定する」passwdを削除します。

     lhl@ubuntu18:/usr/bin$ sudo chmod u-s passwd 
     [sudo] lhl 的密码: 
     lhl@ubuntu18:/usr/bin$ stat passwd
       文件:passwd
       大小:59640     	块:120        IO 块:4096   普通文件
     设备:801h/2049d	Inode:3408705     硬链接:1
     权限:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
    

STATであなたは「セットユーザID」のフラグが削除されている見ることができpasswdに。

  1. ユーザーのパスワードを変更するようにしてください。

     lhl@ubuntu18:/usr/bin$ passwd lhl
     更改 lhl 的密码。
     (当前)UNIX 密码: 
     输入新的 UNIX 密码: 
     重新输入新的 UNIX 密码: 
     passwd:认证令牌操作错误
     passwd:密码未更改
    

普通のユーザーは、LHLを参照してくださいユーザーのパスワードを変更する機能を失うことができます。

特別な注意を払って、ので、この機能を使用する場合、追加の権限を取得するために、普通のユーザー、後の実行可能ファイルに「セットユーザID」または「セットのユーザグループID」許可を高め、または可能性が高いとされることに注意してくださいシステムのセキュリティ上の問題が生じ。

ファイルアクセス

これらのファイルへのアクセスは、モードワードst_modeのファイルに保存されているため、上記の、いずれかのファイルがアクセス権限を持っているが、三つのカテゴリーにUnixのシステム・ユーザー:ユーザーファイル、ユーザーのファイル・グループ、他のユーザーが、それぞれ、3つの権利を提供しています。読み出し、書き込み可能、​​実行可能なので、権限の9種類の合計。

ファイルのパーミッションを理解するために、次の点に注意を払う必要があります。

  • ディレクトリファイル:ディレクトリのファイルと呼ばれるディレクトリへのファイルの種類として、Unixシステム。以下のように、多くの場合、ディレクトリのファイルの3社の許可を意味誤解、正しい意味は次のとおりです。
    • 読み取りアクセス:読み込み、現在のディレクトリのすべてのファイル名をカレントディレクトリと呼ばれる権威は、適切な権限を持つディレクトリを指します。
    • 書き込み許可:変更は、現在のディレクトリのすべてのファイル名の権限は、そのファイルをディレクトリに新しいファイルを作成または削除、あなたが書き込み権限を持っていると、ファイルが置かれているディレクトリへのアクセスを実行する必要があります。
    • 権限を実行します。検索カレントディレクトリ下のすべてのファイル名、権限、いわゆる検索、のディレクトリのパーミッションを。この特権のために、あなたがディレクトリ実行権限への参照が存在しない場合は、PATH環境変数コマンドのディレクトリに注意を払う必要があり、その後、シェルは、ディレクトリ内の目的のコマンドを検索しません。
  • ファイルの読み取りアクセス許可は、私たちがO_RSONLYとO_RDWRフラグopen関数に関連付けられている読書のためのファイルを開くことができると判断しました。
  • ファイルへの書き込みアクセスは、私たちがO_WRONLYとO_RDWRフラグopen関数に関連付けられている書き込み用のファイルを開くことができると判断しました。
  • 機能の幹部の家族はどんな正常なファイルを実行すると、ファイルに実行権限を持っている必要があります。

プロセス操作のファイルのパーミッション

あなたが開くたびに処理し、作成し、ファイルを削除して、カーネルは、ファイルのアクセス権と一致します。次の図に示すファイルfooのファイルfile1へのアクセスのプロセスは、検査工程へのアクセスは、カーネルによって行わ。

メカニズムをテストプロセスのファイルのパーミッション

これは、有効なユーザIDとプロセスグループ101の実効ユーザID、およびファイル100のためのユーザIDとグループIDが原因で見られるようにアクセス権限がRXファイルを一致させるプロセス、およびプロセスFOOコールオープンシステムコールオープンファイルfile1、アクセスが必要とされているがO_RDWRであるときに障害が権限の欠如であるので、そのため、ファイルを開くプロセスに失敗しました。

更改用户ID和组ID

Unix系统中,进程的权限依赖于文件本身的权限、进程的有效用户ID、有效组ID以及内核中进程关于文件权限的验证系统。实际情况下,进程可能为了获得对于某些资源的访问权限,需要提权;同样,为了系统安全,进程也会放弃对于某些敏感资源的访问权限,所以,需要降权。一般情况下,在设计应用程序时,我们应该本着“最小特权”的原则设计我们的应用程序,即,应用程序应该只具有完成自身任务所需的最小特权。

那么,Unix如何实现“提权”和“降权”呢?主要依赖于两个函数和一套规则,先说两个函数。

  1. 设置函数

     #include <unistd.h>
     
     int setuid(uid_t uid);
     int setguid(uid_t gid);
     			两个函数,执行成功返回0,出错返回-1,可以通过perror查看具体的错误信息。
    
  2. 规则

    • 若进程具有root权限,则setuid函数将实际用户ID、有效用户ID,以及保存的设置用户ID设置为uid;
    • 若进程没有root权限,但uid等于实际用户ID或保存的设置用户ID,则setuid只将有效用户ID设置为uid,不改变实际用户ID和保存的设置用户ID;
    • 若上面两个条件都不满足,则将errno设置为EPERM,并返回-1。
  3. 注意事项

    • 只有root用户可以修改进程的实际用户ID;
    • 仅当进程文件设置了设置用户ID标志位时,exec函数才会设置有效用户ID,并且将有效用户ID设置为文件的用户ID。否则,exec不会改变有效用户ID,而是将其维持原值。任何时候,都可以调用setuid,将有效用户ID设置为实际用户ID和保存的设置用户ID。自然,有效用户ID不能任意设置值;
      修改进程的实际用户ID;
    • 保存的设置用户ID是由exec复制有效用户ID而来的。若设置了进程文件的设置用户ID位,则在执行exec时,其会将文件的用户ID设置为保存的设置用户ID,然后保存这个副本。
121元記事公開 ウォンの賞賛130 ビューに45万+を

おすすめ

転載: blog.csdn.net/linux_embedded/article/details/104288134