setuidおよび8進数4000を使用したファイル権限

setuidおよび8進数4000を使用したファイル権限

ファイルを設定するときは、setuid端末で次の操作を行います。

chmod u+s filename

これは素晴らしい作品です。ただし、8進数4000は常にsetuidに関連付けられています(本など)。

私はファイル権限、umask、setuidなどの概念を(ある程度)理解していますchmodが、8進数4000とsetuidの間の関係はまだ把握できません。説明してください。

ベストアンサー1

これは合意にすぎません。すべての定数識別子は、Linuxソースコードの数字に関連付けられています。そのうちのいくつかはカーネルの最初のバージョンでは非常に古いものですが、いくつかは最近追加されました。

「setuid」に関連する定数は、S_ISUID以下で定義されます。/uapi/linux/stat.hを含む、多くのLinuxヘッダーの一つです。任意の値で定義できますが、偶然04000になります。

@steeldriverが述べたように、man 2 statファイル権限に使用されるさまざまな定数の意味を理解するのに役立ちます。

       S_IFMT     0170000   bit mask for the file type bit fields
       S_IFSOCK   0140000   socket
       S_IFLNK    0120000   symbolic link
       S_IFREG    0100000   regular file
       S_IFBLK    0060000   block device
       S_IFDIR    0040000   directory
       S_IFCHR    0020000   character device
       S_IFIFO    0010000   FIFO
       S_ISUID    0004000   set-user-ID bit
       S_ISGID    0002000   set-group-ID bit (see below)
       S_ISVTX    0001000   sticky bit (see below)
       S_IRWXU    00700     mask for file owner permissions
       S_IRUSR    00400     owner has read permission
       S_IWUSR    00200     owner has write permission
       S_IXUSR    00100     owner has execute permission
       S_IRWXG    00070     mask for group permissions
       S_IRGRP    00040     group has read permission
       S_IWGRP    00020     group has write permission
       S_IXGRP    00010     group has execute permission
       S_IRWXO    00007     mask for permissions for others (not in group)
       S_IROTH    00004     others have read permission
       S_IWOTH    00002     others have write permission
       S_IXOTH    00001     others have execute permission

この例では、定数とその値だけでなく、それらの選択方法も確認できます。開発者/デザイナーが定数を選択し、次のことができます。結合するそれらを。たとえば、S_ISUID and S_IRWXU and S_IRUSR and S_IRGRP = 04740権限とは、04740「所有者に対する setuid およびすべての権限と所有グループに対する読み取り権限」を意味します。

おすすめ記事