私が読んでいる内容はWikipediaのsetuid。例の一つ次のように:
4700
「root」が所有する実行ファイルのSUID
「tails」というユーザーがファイルを実行しようとしました。ファイルの所有者は「root」で、所有者の権限は実行可能なので、ファイルはrootとして実行されます。
SUIDがないと、グループまたは他のユーザーがファイルに対する権限を付与できないため、ユーザー「tails」はファイルを実行できません。基本的な使い方はバイナリで見ることができます
/usr/bin/passwd
。
私は理解できません。ユーザーがファイルやグループの所有者ではなく他の権限を使用できないため、どのようにファイルを「tails」実行しますか?
私はこのシナリオを再現しようとしましたが、実際には次のようになります。
$ su -c 'install -m 4700 /dev/null suidtest'
$ ls -l suidtest
-rws------ 1 root root 0 21 dec 07:48 suidtest*
$ ./suidtest
bash: ./suidtest: Permission denied
権限がある場合にのみこの機能を使用できます4755
。また、ウィキペディアの例で言及されているデフォルトの使用()には/usr/bin/passwd
実際に4755
権限があります。
この例は正しいですか?私が逃した部分はありますか?それともバグですか?
答え1
あなたは正しいです。 Wikipediaの記事は間違っていました。以下の例をご覧ください。
$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
$ sudo cp /usr/bin/passwd /tmp/
$ cd /tmp
$ ls -l passwd
-rwxr-xr-x 1 root root 30768 Dec 21 07:43 passwd
$ sudo chmod 4700 passwd
$ ls -l passwd
-rws------ 1 root root 30768 Dec 21 07:43 passwd
$ ./passwd
bash: ./passwd: Permission denied
$ sudo chmod 4701 passwd
$ ./passwd
Changing password for user vagrant.
Changing password for vagrant.
(current) UNIX password:
$