Я пытаюсь получить поток от порта 9999 и записать в / dev / xvdf. Я использую Amazon EC2 с образом сервера Ubuntu 11.10. По умолчанию я вхожу в систему как 'ubuntu', которая имеет привилегии sudo. Однако, когда я запускаю следующую команду 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:~$
Я использую стандартные изображения Ubuntu Amazon EC2 из http: // alestic .com / (ссылки на изображения вверху)
Когда вы запускаете sudo netcat -p 9999 -l > /dev/xvdf
, вы перенаправляете стандартный вывод с sudo netcat -p 9999 -l
на /dev/xvdf
. На этом этапе у вас нет привилегий суперпользователя, что приводит к ошибке «Отказано в доступе», когда оболочка пытается открыть устройство с доступом для записи.
Что вы действительно хотите сделать, так это выполнить перенаправление вывода после получения привилегий суперпользователя. Это можно сделать, выполнив перенаправление в экземпляре оболочки, вызванной sudo
. Например:
sudo sh -c 'netcat -p 9999 -l > /dev/xvdf'
Или, альтернативно, запустите netcat без повышенных привилегий, но передайте его вывод привилегированному процессу:
netcat -p 9999 -l | sudo tee /dev/xvdf >/dev/null