ポート9999からストリームを取得し、/ dev/xvdfに書き込もうとしています。 Ubuntu 11.10サーバーイメージでAmazon EC2を使用しています。デフォルトでは、Sudo特権を持つ「ubuntu」としてログインします。ただし、次のnetcatコマンドを実行すると、このエラーが発生します
ubuntu@ip-10-252-35-122:~$ ls -al /dev/xv*
brw-rw---- 1 root disk 202, 1 2011-11-30 22:22 /dev/xvda1
brw-rw---- 1 root disk 202, 80 2011-11-30 22:27 /dev/xvdf
ubuntu@ip-10-252-35-122:~$ Sudo netcat -p 9999 -l > /dev/xvdf
bash: /dev/xvdf: Permission denied
ubuntu@ip-10-252-35-122:~$
許可が拒否されたエラーが表示される理由と回避方法
更新:パーミッションをリセットする不可解な何かがバックグラウンドで実行されていますか?以下のスニペットを確認すると、/ dev/xvdf!?!を使用しようとすると、許可フラグが自動的にリセットされるようです。
ubuntu@ip-10-252-35-122:~$ Sudo chmod 777 /dev/xvdf
ubuntu@ip-10-252-35-122:~$ ls -al /dev/xvdf
brwxrwxrwx 1 root disk 202, 80 2011-11-30 22:43 /dev/xvdf
ubuntu@ip-10-252-35-122:~$ Sudo nc -p 9999 -l > /dev/xvdf
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [hostname] [port[s]]
ubuntu@ip-10-252-35-122:~$ ls -al /dev/xvdf
brw-rw---- 1 root disk 202, 80 2011-11-30 22:43 /dev/xvdf
ubuntu@ip-10-252-35-122:~$
http://alestic.com/ のUbuntu Ubuntu EC2のストックイメージを使用しています(上部のイメージへのリンク)
Sudo netcat -p 9999 -l > /dev/xvdf
を実行すると、Sudo netcat -p 9999 -l
の標準出力が/dev/xvdf
にリダイレクトされます。この時点では、スーパーユーザーの特権はないため、シェルが書き込みアクセスでデバイスを開こうとすると、アクセス許可拒否エラーが発生します。
本当にやりたいことは、出力リダイレクトを実行することですafterスーパーユーザー特権を取得します。これは、Sudo
によって呼び出されたシェルインスタンスでリダイレクトを実行することで実行できます。例えば:
Sudo sh -c 'netcat -p 9999 -l > /dev/xvdf'
または、昇格された特権なしでnetcatを実行し、その出力を特権プロセスに渡します。
netcat -p 9999 -l | Sudo tee /dev/xvdf >/dev/null