我是系统管理员。在生产环境中,我需要管理数千台服务器。我和我的同事使用中央管理服务器并通过其他服务器分发其公钥。所以我们可以使用这个管理服务器ssh到其他服务器。
有时我们需要使用root密码,例如服务器宕机时,我们需要使用iLO来确定原因。
目前,我们使用共享的 root 密码。这是不安全的。我还查看了一些单服务器解决方案,例如OPIE(一次性密码在一切中),但由于我们有这么多服务器,这不是一个好主意。
编辑:
我想从密码管理解决方案中得到的是:
因此,将 root 密码设置为长而随机的字符串并不是一个好主意,尽管它是从一些已知命令(如openssl passwd)生成的。很难记住,有时很难生成(没有我的笔记本电脑)
长话短说:大型老公司,大量 UNIX/Linux 服务器。
我继承了几年前留下的一堆脚本的责任。其中之一是一个脚本,该脚本每 X 个月运行一次,以全局更新我们所有服务器上的 root 密码。
该脚本是一堆 Shell 脚本和 Expect,它在我们所有服务器和中央命令和控制服务器之间建立的 SSH 信任上工作。
问题是,剧本一团糟。Expect 命令试图说明存在于任何 UNIX/Linux 机器上的每个可能版本的“passwd”——它们差异很大。
随着我们扩展和升级很多基础设施,脚本变得非常难以管理。
我的问题是:有没有更好的方法来做到这一点?假设已经建立了 SSH 信任,同时更改 3000 多台服务器上的 root 密码的最佳方法是什么?
我有 ubuntu 8.04,我想编写一个 bash 脚本,root每个用户都可以运行该脚本。
我自己可以做 sudo。
我怎么做?
澄清:我不想用 sudo 来做,因为那样用户将不得不输入他们的密码。我只是想让他们以 root 身份运行脚本,也许是 setuid,不知道。
为什么要禁用 ssh 的 root 访问权限?我总是听说这是出于安全原因。但我不明白。然后以非 root 用户身份登录有什么不同sudo su -?处理需要特权权限的任务的首选方法是什么?
谢谢
托马斯
问题是:我们通过外部提供商托管我们的网站,该提供商不给我们 IP 地址,而是给我们一个域,我们将 www CNAME 记录指向该域。我假设他们正在使用某种类型的虚拟主机来读取请求域的标题并显示该网站。
无论如何,我们的许多用户抱怨网站已关闭,实际上并不是因为他们在浏览器中输入 example.com 而不是 www.example.com。
有没有办法在我们的 DNS 中完成这项工作?
哪种方法更好?
对于桌面使用,似乎 sudo 更好,因为:
但是在服务器管理方面呢?
在服务器中,您通常已经创建了一个 root 帐户,并且您可能经常进行管理工作。所以 sudo 的优势似乎不再成立。
更重要的是,在大多数发行版中,在命令行上配置 su 很容易,只需将用户添加到轮组中即可。(你甚至可以-G wheel在useradding时通过。)因此配置 su 可以很容易地自动化到 shell 脚本中。
但是对于sudo?您需要先添加用户,然后以visudo交互方式运行。这很糟糕,因为您无法将其自动化为 shell 脚本。
(嗯,你可以。例如,
echo '%wheel ALL=(ALL) ALL' >> /tmp/sudoers.tmp
cp /etc/sudoers /etc/sudoers.old
visudo -c -f /tmp/sudoers.tmp && mv /tmp/sudoers.tmp /etc/sudoers
Run Code Online (Sandbox Code Playgroud)
但至少没有那么容易。)
那么你有什么看法呢?对于服务器环境,您更喜欢 sudo 还是 su root?
这似乎是一个愚蠢的问题,但我可以认为这是令人困惑的。例如:
“进入根目录”
可以解释为:
去 /
去~root(通常/root/)
我认为类似的东西是super为了更好的默认管理员用户名。这将避免目录结构的歧义。
再次:愚蠢的问题,但我真的很好奇。
df -h报告“/”分区已 100% 已满。在du -hs *该分区的每个目录上运行时显示仍有很多空间。
tune2efs它报告只有一个块是免费的。Ranfsck也是如此,它还显示了所有正在使用的块。
“/”分区上的 ionode 使用率为 14%。
请注意,/var、/usr、/dev、/tmp、/home 挂载在不同的分区上,并且其中有可用空间。
你能否让我知道所有块被占用和磁盘报告已满的可能原因,即使有很多空间。
我有一个 MySQL 数据库,当以 root 身份登录时,我无法向新创建的数据库上的用户授予权限。
mysql> create database test1;
Query OK, 1 row affected (0.00 sec)
mysql> grant usage on *.* to 'test'@'%' identified by 'test';
ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
mysql> show grants for root;
+--------------------------------------------------------------------------------------------------------------+
| Grants for root@% |
+--------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*hash_is_here' |
+--------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select user();
+-----------------+
| user() |
+-----------------+
| root@172.17.0.4 | …Run Code Online (Sandbox Code Playgroud)