GNU/Linux >> Linux の 問題 >  >> Cent OS

Centos – Centos6とCentos7でハードリンクのアクセス許可の動作が異なりますか?

ハードリンクを作成しようとすると、CentOS7で権限エラーが発生します。 CentOS 6で設定されたのと同じ権限で、エラーは発生しません。問題はグループの権限に集中しています。どのOSバージョンが正しいか、どちらが間違っているかわかりません。

何が起こっているのかを説明しましょう。現在の作業ディレクトリには、sourceとdestinationの2つのディレクトリがあります。開始時、宛先は空です。ソースにはテキストファイルが含まれています。

[[email protected] cwd]# ls -l
total 0
drwxrwxrwx. 2 root root  6 Jun 12 14:33 destination
drwxrwxrwx. 2 root root 21 Jun 12 14:33 source
[[email protected] cwd]# ls -l destination/
total 0
[[email protected] cwd]# ls -l source/
total 4
-rw-r--r--. 1 root root 8 Jun 12 14:20 test.txt
[[email protected] cwd]# 

ご覧のとおり、権限に関しては、2つのディレクトリは777であり、所有者とグループの両方がルートに設定されています。テキストファイルの所有者とグループも両方ともrootに設定されます。ただし、テキストファイルの権限は、所有者には読み取り/書き込みですが、グループには読み取り専用です。

rootとしてログインしている場合、宛先ディレクトリにテキストファイル(ソースディレクトリ内)を指すハードリンクを作成しても問題ありません。

[[email protected] cwd]# ln source/test.txt destination/
[[email protected] cwd]# ls destination/
test.txt

ただし、別のユーザー(この場合はadmin)としてログインすると、リンクを作成できません。 「操作は許可されていません。」

[[email protected] cwd]# rm -f destination/test.txt 
[[email protected] cwd]# su admin
bash-4.2$ pwd
/root/cwd
bash-4.2$ ln source/test.txt destination/
ln: failed to create hard link ‘destination/test.txt’ => ‘source/test.txt’: Operation not permitted

実際に何が起こるかは私には理にかなっていますが、CentOS 6では上記が許可されているので、何かを誤解していないかどうかを確認したいと思いました。私には、CentOS7で修正されたCentOS6のバグのように見えます。

誰が何を与えるか知っていますか?上記の振る舞いが正しい振る舞いであると私は正しく信じていますか?正しいのはCentOS6ですか?または、両方とも正しいので、おそらく私が見逃している微妙なグループ権限の問題がありますか?ありがとう。

編集: 私は今持っているDebianv7VMで同じテストを試しました。 DebianはCentOS7に同意します:「操作は許可されていません。」

編集#2: Mac OS X(Yosemite)でも同じことを試しました。これはCentOS6と同じように機能しました。つまり、リンクを作成することができました。 (注:OS Xでは、ルートグループは「ホイール」と呼ばれます。私が知る限り、これが唯一の違いです。)

承認された回答:

いくつかの新しいCentOS6および7vmを起動し、表示された動作を正確に再現することができました。いくつか掘り下げた後、これは実際にはセキュリティのためにハードリンクとソフトリンクに関するデフォルトの動作に関するカーネルの変更であることがわかりました。次のページは私を正しい方向に向けました:

関連:GNOMEターミナルの背景色をオンザフライで変更しますか?

http://kernel.opensuse.org/cgit/kernel/commit/?id=561ec64ae67ef25cac8d72bb9c4bfc955edfd415

http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1

ファイルを書き込み可能にすると、管理者ユーザーはハードリンクを作成できるようになります。

CentOS 6システム全体の動作に戻すために、新しいカーネルパラメータが追加されました。 /etc/sysctl.confに以下を設定します:

fs.protected_hardlinks = 0
fs.protected_symlinks = 0

次に実行します

sysctl -p

プログラムがファイルをコピーする代わりにリンクを使用することを選択する理由については、元のブロックを指すエントリを作成できるのに、使用する必要のあるファイルの正確なコピーを作成するのはなぜですか?これにより、ディスクスペースが節約され、CPUとI/Oの観点から操作のコストが削減されます。新しいハードリンクは同じファイルですが、メタデータ/iノードが異なります。ハードリンクを作成した後に元のファイルを削除しても、リンクには影響しません。すべてのリンクが削除されると、ファイルは「削除」されます。


Cent OS
  1. Linuxのハードリンクとソフトリンクの説明

  2. Ulimit:ハード制限とソフト制限の違いは?

  3. シンボリックリンクとハードリンクの違いは?

  1. Centos4.8およびGlibc2.5?

  2. Centos –「シンボリックリンクが許可されていないか、リンクターゲットにアクセスできない」/ Centos 6のApache?

  3. CentOS7でSSHルートログインとセキュアSSHアクセスを無効または有効にする

  1. CentOS / RHEL 7 :initramfs イメージを抽出して編集/表示する方法

  2. CentOS / RHEL 5、6、7 で nproc (ハードおよびソフト) 値を設定する方法

  3. CentOS/RHEL で監査ログとメッセージ ファイルがローテーションしない