共有しようとしているgit(実際にはgit-annex)リポジトリがあり、そのいくつかはいくつかのディレクトリにset-group-idビットを設定することに関連しています。これはDebian GNU / Linux Stretchボックスのext4ファイルシステムにあります。奇妙な理由でchmod g+s DIRECTORY
省略されます(chmod
読みやすくするためにブロックの周りに空白行が追加されます):
$ stat objects
File: objects
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd06h/64774d Inode: 12353692 Links: 260
Access: (0775/drwxrwxr-x) Uid: ( 1000/ anthony) Gid: ( 1025/git-books)
Access: 2018-07-30 14:43:13.831641743 -0400
Modify: 2018-07-28 14:28:14.970667931 -0400
Change: 2018-07-30 14:46:38.179597449 -0400
Birth: -
$ chmod g+s objects
$ echo $?
0
$ stat objects
File: objects
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd06h/64774d Inode: 12353692 Links: 260
Access: (0775/drwxrwxr-x) Uid: ( 1000/ anthony) Gid: ( 1025/git-books)
Access: 2018-07-30 14:43:13.831641743 -0400
Modify: 2018-07-28 14:28:14.970667931 -0400
Change: 2018-07-30 14:50:43.355539381 -0400
Birth: -
これまでに確認した内容は次のとおりです。
nosuid
動作を妨げる可能性のある奇妙なインストールオプション(例:)はないようです。 fstabを確認しましたが/proc/mounts
、表示されます。/dev/mapper/slow-srv /srv ext4 rw,relatime,nobarrier,errors=remount-ro,stripe=384,data=ordered 0 0
- ディレクトリに奇妙なACLがないようです
setfacl -b objects
。これを行うと、chmodはまだ機能しません。 strace
on は、chmod
システムコールが成功し、sgid ビットがセットされたことを示します。fchmodat(AT_FDCWD, "annex", 02775) = 0
- 同じファイルシステムの他のディレクトリには set-group-id ビットが設定されています。実際には、同じセッションの他のgit-annexリポジトリに以前にいくつかを設定しました。
答え1
知ってみたら、数日前にグループを作って本人も追加したが、私の考え新しいSSH接続ですが、そうではありません。 OpenSSHの接続再利用機能(ControlMaster
//など)を使用しているので、ControlPath
実際に約10日前から接続にログインしていて、私のセッション(プロセス)に新しいグループが設定されていません。でこれを確認しましたid
。
ログイン後、ssh -o ControlPath=none HOST
私のセッションにグループがあり、有効であることをid
確認しました。git-books
chmod g+s
許可拒否エラーが表示されない理由は、標準でこれらの動作を要求しているようです。ファイル用実装では、次のビットを無視できます。
呼び出しプロセスに適切な権限がなく、ファイルのグループIDが有効なグループIDまたは補足グループIDのいずれかに一致せず、ファイルが通常のファイルである場合)実行から)をクリアする必要があります。
他の実装定義の制限により、モードの S_ISUID および S_ISGID ビットが無視される可能性があります。
シングルUnix仕様v4 2018バージョン、chmod。http://pubs.opengroup.org/onlinepubs/9699919799/functions/chmod.html(登録が必要な場合があります)。
おそらくエラーを返すのは正常で一貫性がないかもしれません☹。