背景
我知道其中的差别之间su -,sudo su -以及sudo <command>:
su - - 将用户切换到 root,需要 root 密码sudo su - - 将用户切换到 root,只需要当前用户的密码sudo <command>- 仅授予特定命令的 root 访问权限;只需要当前用户的密码我的问题是sudo su -在生产环境中使用是否是一种安全的做法。
一些想法:
sudo su -通过根据个人用户密码访问 root 帐户,似乎允许会带来安全风险。当然,这可以通过执行严格的密码策略来缓解。我认为su -没有更好的办法,因为它需要管理员共享实际的 root 密码。
允许用户完全切换到 root 帐户使得跟踪谁对系统进行了更改变得更加困难。我在日常工作中看到过多个用户被授予sudo su -访问权限的情况。用户登录系统后做的第一件事是运行sudo su -,然后再开始工作。然后,有一天发生了一些事情,并且无法追踪谁跑到rm -rf *了错误的目录中。
问题
鉴于上述问题,允许用户使用sudo su -甚至su -根本不使用是否是一个好主意?
管理员是否有任何理由为sudo su -或su -代替 …
我正在自动化部署过程,我希望能够在我的机器上调用一个 .sh 文件,让它完成我的构建并将 .zip 上传到服务器,然后在服务器上做一些事情。我需要做的一件事要求我是 root。所以,我想做的是:
ssh user@172.1.1.101 <<END_SCRIPT
su -
#password... somehow...
#stop jboss
service server_instance stop
#a bunch of stuff here
#all done!
exit
END_SCRIPT
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
有没有办法只允许指定用户使用 su(例如对 sudo 使用 visudo)。
这样做的原因是我想为我的 root 帐户保留一个简单(弱)密码,并且拥有 su/sudo 只能使用 pub/private 密钥登录到机器的帐户。
然后,所有其他帐户将无法以 root 或可以 su 的帐户身份 su。
我正在尝试通过 SSH 检查服务器的 BIOS 版本,该命令需要 root 权限:
ssh remote-server su -c dmidecode
Run Code Online (Sandbox Code Playgroud)
但这当然会因错误而失败:
标准输入必须是 tty
我如何使这项工作?我无法使用 sudo,当我尝试以 root@remote-server 身份登录时,它不会接受我用于“su”命令的密码。我正在使用 RedHat Enterprise Linux 4。
我正在构建一个容器来调整负载均衡器的内核设置。我更喜欢使用单个特权容器将这些更改部署到映像中的主机。例如:
docker run --rm --privileged ubuntu:latest sysctl -w net.core.somaxconn=65535
Run Code Online (Sandbox Code Playgroud)
在测试中,更改生效但仅适用于该容器。我的印象是,使用完全特权的容器更改 /proc 实际上会更改底层操作系统。
$docker run --rm --privileged ubuntu:latest \
sysctl -w net.core.somaxconn=65535
net.core.somaxconn = 65535
$ docker run --rm --privileged ubuntu:latest \
/bin/bash -c "sysctl -a | grep somaxconn"
net.core.somaxconn = 128
Run Code Online (Sandbox Code Playgroud)
这是特权容器应该如何工作吗?
我只是在做一些愚蠢的事情吗?
做出持久改变的最佳方法是什么?
版本信息:
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
Run Code Online (Sandbox Code Playgroud)
挂载 /proc …
哪种方法更好?
对于桌面使用,似乎 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?
我正在使用 drupal 和 Aegir。Aegir 自动化了许多站点创建任务。Aegir 控制了 Apache,我以 root 身份登录,我想重新启动 Apache 服务器,但我想代表 Aegirs 执行此操作。不幸的是,我不知道 Aegir 密码,所以基本上我想知道如何以其他用户身份执行某些操作。
无法将用户切换到 postgres。
postgres 用户的 Ulimit 设置设置了合理的限制。我们没有达到最大值。
/var/log/messages 中没有错误。
错误:
BETA -bash-4.2# sudo su - postgres
su: /bin/bash: Resource temporarily unavailable
Run Code Online (Sandbox Code Playgroud)
设置:
BETA -bash-4.2# ps -auxww | grep -i postgr | wc -l
503
BETA -bash-4.2# lsof | grep -i postgr | wc -l
35225
BETA -bash-4.2#
Run Code Online (Sandbox Code Playgroud)
postgres 进程的 Ulimit。
BETA -bash-4.2# cat /proc/26230/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size …Run Code Online (Sandbox Code Playgroud) 我希望能够让su另一个用户以减少的权限运行脚本。不幸的是,我每次都必须输入密码,有没有办法在不需要密码提示的情况下创建用户?
可能的重复:
sudo -i 和 sudo su - 有什么区别
我知道这两个命令都会导致获得 root-shell。但也有一些区别。在某些服务器上,例如提示不同:
nomike@testerver:~> sudo -i
root@testerver:~> logout
nomike@testerver:~> sudo su -
[root@testerver ~]#
Run Code Online (Sandbox Code Playgroud)
所以我猜“.bashrc”、“.bash_profile”和“.profile”的处理方式有些不同。
一个会调用登录 shell 而另一个不调用吗?