我想iptables
在 Ubuntu 16.04 Docker 容器中运行该命令。我已经创建了一个用户,并赋予该用户 root 权限,并将其添加到该sudo
组中,但我仍然被告知我没有iptables
以 root 身份运行。
$ groups
stack root sudo
$ sudo whoami
root
$ sudo iptables --list
iptables v1.6.0: can't initialize iptables table `filter': Permission
denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
在我的/etc/sudoers
文件中,我有一行:%sudo ALL=(ALL:ALL) ALL
,我相信该行应该允许sudo
组中的任何用户(我是)运行任何命令,但我仍然收到权限被拒绝的错误。
我如何iptables
以该用户身份成功运行该命令?
请注意,我是在带有图像的 Docker 容器中执行此操作:ubuntu:16.04
答案1
能力
如果您想iptables
在容器内进行访问,则需要--cap-add=NET_ADMIN
在最初运行容器时通过开关启用特定功能。
例子
$ docker run --cap-add=NET_ADMIN -it ubuntu:16.04
然后在容器中设置iptables
& sudo
:
# apt update -y
# apt-get install iptables sudo -y
然后在容器内,设置一个用户 ,user1
并将其添加到sudo
组中:
# adduser user1
# adduser user1 sudo
然后将用户设置为user1
:
# su - user1
检查user1'
sudo 权限:
$ sudo -l
[sudo] password for user1:
Matching Defaults entries for user1 on 1356bf8bd61a:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User user1 may run the following commands on 1356bf8bd61a:
(ALL : ALL) ALL
检查他们是否可以iptables
通过以下方式访问sudo
:
$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination