quyền của sudo echo hồi bla ốp >> / etc / sysctl.conf` bị từ chối


16

Tuyên bố từ chối trách nhiệm: Tôi là người mới làm quen với công cụ sysadmin.

Tôi đang cố gắng thiết lập chuyển tiếp cổng trong phiên bản AWS EC2, việc này phải được thực hiện trong dòng lệnh vì tôi không muốn vào và chỉnh sửa bất cứ điều gì, nó phải tự động (đó là một phần của quá trình xây dựng ).

sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

Quyền bị từ chối

Điều kỳ lạ là tôi đã (thành công) sử dụng sudocho hầu hết mọi lệnh yêu cầu suđặc quyền. Nếu tôi làm sudo sutrước lệnh (thử bằng tay trong một sshphiên), thì nó hoạt động.

Lý do đằng sau điều này? Các giải pháp khả thi không liên quan sudo suhoặc chỉnh sửa thủ công?


Vấn đề tương tự ở đây: stackoverflow.com/questions/82256/ Kẻ - Ngoài ra, nếu bạn muốn thực sự mạo hiểm:sudo -i
MirroredFate

Câu trả lời:


46

Bạn không thể sử dụng sudođể ảnh hưởng đến chuyển hướng đầu ra; >>>(và, để hoàn thiện, <) được thực hiện với đặc quyền của người dùng gọi, bởi vì việc chuyển hướng được thực hiện bởi vỏ gọi, chứ không phải quy trình con được gọi.

Hoặc là làm

cp /etc/sysctl.conf /tmp/
echo "net.ipv4.ip_forward = 1" >> /tmp/sysctl.conf
sudo cp /tmp/sysctl.conf /etc/

hoặc là

sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"

15

Bạn có thể thấy đơn giản hơn khi sử dụng lệnh này:

echo net.ipv4.ip_forward = 1 | sudo tee -a /etc/sysctl.conf

12

sudochỉ chạy lệnh của bạn, không phải chuyển hướng, như root. Bạn sẽ cần phải bọc tất cả trong một lệnh trong đó toàn bộ hoạt động như root:

sudo sh -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

3

Lệnh sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confđược hiểu là bạn (nonroot) viết kết quả của sudo echo "net.ipv4.ip_forward = 1"vào /etc/sysctl.conf.

Chạy

sudo -s 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

hoặc là

sudo su -c 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'

để chạy echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confnhư root.


1
sudo sed -i "$ a <text>" <file>
  • -i : chỉnh sửa tập tin tại chỗ.
  • $ a: nối văn bản vào dòng cuối cùng

Sử dụng sedlệnh sẽ tránh cho bạn những rắc rối về chuyển hướng và đường ống.

Trong trường hợp của bạn: sudo sed -i "$ a net.ipv4.ip_forward = 1" /etc/sysctl.conf

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.