使用 Bind 提供的 DNS 服务器,要想配置和管理,默认情况下需要求以 root
身份进行。如果是多人维护的情况,root
用户权限过高,这导致如果有人做了误操作将会产生十分严重的后果。并且一旦 DNS 服务器被入侵,黑客将有可能直接获取到 root
用户权限,安全代价太高。
Linux 系统规定非 root
用户一般无法启动小于 1024 的端口,而 DNS 服务器使用 named 进程默认监听于 udp 协议的 53 号端口,如果我们将其服务的端口改为非默认的大于 1024 的,就需要修改大量的配置文件,并且影响很大。
普通用户用 passwd
命令修改自己的密码,实际上最终更改的是 /etc/passwd
文件,此文件是用户管理配置文件,并且只有 root
用户才能更改。既然是 root
用户才拥有此权限,为什么我们可以通过 passwd
命令来修改密码呢,那这就要归功于 passwd
设置了 SUID 权限位了。
因此,我们完全可以对启用 DNS 服务的命令 /usr/sbin/named
也添加一个 SUID 权限,这样普通用户就能实现启动一个只有 root
才能启用小于 1024 的端口了。
1 | [root@bogon ~]# useradd user1 |
创建好普通用户和密码,对 named 命令添加 s 位权限后,就使用普通用户启动一个进程。
1 | [user1@bogon ~]$ /usr/sbin/named -c /var/named/named.conf |
一旦配置文件更新了,普通用户也可以使用 pkill -1 PID
来重载对应的进程了。
1 | [user1@bogon ~]$ kill -1 7320 |
一切都配置完成后,使用 dig
命令测试并验证结果。
1 | [user1@bogon ~]$ dig -t A www.baidu.com @192.168.127.136 |