web-dev-qa-db-ja.com

フォルダがsuid権限を持つとはどういう意味ですか?

ファイルがsuid権限を持つことの意味を知っています。これは、他のユーザーが実行権限を持っている場合、ファイルの所有者として実行することを意味します。しかし、フォルダーにsuid権限がある場合、それは何を意味しますか?私はいくつかのテストを行いましたが、フォルダーにとって特別なことは何もないようです。誰かが少し平易にするのを手伝ってもらえますか?ありがとう。

Oracle Linux7.6を使用しています。

root:[~]# cat /etc/*release*
Oracle Linux Server release 7.6
NAME="Oracle Linux Server"
VERSION="7.6"
ID="ol"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.6"
PRETTY_NAME="Oracle Linux Server 7.6"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:Oracle:linux:7:6:server"
HOME_URL="https://linux.Oracle.com/"
BUG_REPORT_URL="https://bugzilla.Oracle.com/"

Oracle_BUGZILLA_PRODUCT="Oracle Linux 7"
Oracle_BUGZILLA_PRODUCT_VERSION=7.6
Oracle_SUPPORT_PRODUCT="Oracle Linux"
Oracle_SUPPORT_PRODUCT_VERSION=7.6
Red Hat Enterprise Linux Server release 7.6 (Maipo)
Oracle Linux Server release 7.6
cpe:/o:Oracle:linux:7:6:server
root:[~]#

以下は、新しくインストールしたサーバーでのテストです。

root:[~]# pwd
/root
root:[~]# ls -lad /root
dr-xr-x---. 9 root root 4096 Aug 16 22:07 /root
root:[~]# mkdir test
root:[~]# ls -lad test
drwxr-xr-x. 2 root root 4096 Aug 16 22:07 test
root:[~]#
root:[~]# useradd a
root:[~]# passwd a
Changing password for user a.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
root:[~]# chmod u+s test
root:[~]#
root:[~]# su - a
[a@localhost ~]$ cd /root/test
-bash: cd: /root/test: Permission denied
[a@localhost ~]$ cd /root
-bash: cd: /root: Permission denied
[a@localhost ~]$ logout
root:[~]#
root:[~]# ls -lad /root
dr-xr-x---. 10 root root 4096 Aug 16 22:07 /root
root:[~]# chmod o+x /root
root:[~]#
root:[~]# su - a
Last login: Fri Aug 16 22:08:54 CST 2019 on pts/0
[a@localhost ~]$ cd /root/test
[a@localhost test]$
[a@localhost test]$ pwd
/root/test
[a@localhost test]$ ls -la .
total 8
drwsr-xr-x.  2 root root 4096 Aug 16 22:07 .
dr-xr-x--x. 10 root root 4096 Aug 16 22:07 ..
[a@localhost test]$ touch file1
touch: cannot touch ‘file1’: Permission denied
[a@localhost test]$ logout
root:[~]#
root:[~]# chmod o+w test/
root:[~]#
root:[~]# su - a
Last login: Fri Aug 16 22:09:31 CST 2019 on pts/0
[a@localhost ~]$
[a@localhost ~]$ cd /root/test
[a@localhost test]$ touch file1
[a@localhost test]$ ls -la
total 8
drwsr-xrwx.  2 root root 4096 Aug 16 22:11 .
dr-xr-x--x. 10 root root 4096 Aug 16 22:07 ..
-rw-rw-r--.  1 a    a       0 Aug 16 22:11 file1
[a@localhost test]$ mkdir folder1
[a@localhost test]$ ls -la
total 12
drwsr-xrwx.  3 root root 4096 Aug 16 22:11 .
dr-xr-x--x. 10 root root 4096 Aug 16 22:07 ..
-rw-rw-r--.  1 a    a       0 Aug 16 22:11 file1
drwxrwxr-x.  2 a    a    4096 Aug 16 22:11 folder1
[a@localhost test]$

ご覧のとおり、ユーザーa/root/testに作成したファイルとフォルダーはその所有者とグループを継承していないようです。所有者とグループはaであり、rootではありません。テストに問題はありますか? Linuxは初めてです。

3
Just a learner

GNU manual、 によると、ディレクトリに作成されたファイル(サブフォルダを含む)がそのグループとユーザーを継承することを意味します:

一部のシステムでは、ディレクトリのset-user-IDビットが、新しいサブファイルの所有権と新しいサブディレクトリのset-user-IDビットに同様の影響を及ぼします。これらのメカニズムにより、chmodまたはchownを使用して新しいファイルを共有する必要性が少なくなるため、ユーザーはファイルをより簡単に共有できます。

6
m242