我正在尝试从端口 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/(图片链接位于顶部)
答案1
当您运行 时sudo netcat -p 9999 -l > /dev/xvdf
,您将把 的标准输出重定向sudo netcat -p 9999 -l
到/dev/xvdf
。此时,您没有超级用户权限,导致当 shell 尝试以写权限打开设备时出现权限被拒绝错误。
你真正想要做的是执行输出重定向后获取超级用户权限。这可以通过在 调用的 shell 实例中执行重定向来实现sudo
。例如:
sudo sh -c 'netcat -p 9999 -l > /dev/xvdf'
或者,以不提升权限的方式运行 netcat,但将其输出传递给特权进程:
netcat -p 9999 -l | sudo tee /dev/xvdf >/dev/null