关于第三个建议策略,除了仔细阅读useradd -o -u userXXX
@jlliagre推荐的选项外,我不熟悉将多个用户作为同一个uid运行。(因此,如果您继续这样做,那么如果您可以将出现的任何问题(或成功情况)更新为最新消息,我将不感兴趣。)
我想我对第一个选项“每个人的SSH公钥都放入〜root / .ssh / authorized_keys2”的第一个观察结果是,除非您绝对不会在任何其他系统上工作,否则,请参见。
- 然后至少在某些时候,您将不得不使用用户帐户并
sudo
第二个观察结果是,如果您在渴望实现HIPAA,PCI-DSS兼容或CAPP和EAL之类的系统上工作,那么您将不得不解决sudo问题。
- 提供非root用户个人帐户的行业标准,该帐户通常可以使用某些集中式用户数据库进行审核,禁用,过期等。
所以; 使用个性化帐户和sudo
不幸的是,作为系统管理员,几乎需要在远程计算机上执行的所有操作都需要某些提升的权限,但是令人讨厌的是,大多数基于SSH的工具和实用程序在您进入时都被破坏了。 sudo
因此,我可以传递一些我用来解决sudo
您提到的烦恼的技巧。第一个问题是,如果使用阻止了root登录,PermitRootLogin=no
或者如果您没有使用ssh key进行root登录,那么它将使SCP文件有点像PITA。
问题1:您想从远程端对文件进行scp,但是它们需要root访问权限,但是您不能直接以root用户身份登录到远程文件夹。
无聊的解决方案:将文件复制到主目录,chown和scp下。
ssh userXXX@remotesystem
,sudo su -
等等,cp /etc/somefiles
来/home/userXXX/somefiles
,chown -R userXXX /home/userXXX/somefiles
,使用SCP从远程检索文件。
确实很无聊。
减少烦人的解决方案:sftp支持该-s sftp_server
标志,因此您可以执行以下操作(如果已在中配置了无密码的sudo /etc/sudoers
);
sftp -s '/usr/bin/sudo /usr/libexec/openssh/sftp-server' \
userXXX@remotehost:/etc/resolv.conf
(您也可以在sshfs中使用这种hack-around,但是我不确定它是否建议使用... ;-)
如果您没有无密码的sudo权限,或者出于某种配置原因,上述方法被破坏,我可以建议使用一种更无聊的文件传输方法来访问远程根文件。
忍者港前进法:
登录到远程主机,但指定要将远程端口3022(可以是任何免费端口,并且不保留给管理员使用,即> 1024)将转发回本地端的端口22。
[localuser@localmachine ~]$ ssh userXXX@remotehost -R 3022:localhost:22
Last login: Mon May 21 05:46:07 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------
以正常方式扎根...
-bash-3.2$ sudo su -
[root@remotehost ~]#
现在,您可以从另一个方向对文件进行压缩,从而避免了制作文件中间副本的无聊步骤。
[root@remotehost ~]# scp -o NoHostAuthenticationForLocalhost=yes \
-P3022 /etc/resolv.conf localuser@localhost:~
localuser@localhost's password:
resolv.conf 100%
[root@remotehost ~]#
问题2:SSH代理转发:如果通过例如指定登录shell加载根配置文件,SSH_AUTH_SOCK
则会重置SSH代理转发所必需的环境变量,例如,因此SSH代理转发在“下” sudo su -
。
半生不死的答案:
凡是正确地加载一个root shell,将会理所当然重置环境,但有轻微的工作-在你可以用,当你既需要root权限,并使用SSH代理的能力,在同一时间
这实现了一种实际上不应该使用的嵌合体配置文件,因为它是一个令人讨厌的hack,但是当您需要将远程主机的SCP文件作为root用户传输到其他远程主机时,此配置很有用。
无论如何,通过在sudoers中设置以下内容,可以使用户可以保留其ENV变量;
Defaults:userXXX !env_reset
这样您就可以创建讨厌的混合登录环境;
正常登录;
[localuser@localmachine ~]$ ssh userXXX@remotehost
Last login: Mon May 21 12:33:12 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------
-bash-3.2$ env | grep SSH_AUTH
SSH_AUTH_SOCK=/tmp/ssh-qwO715/agent.1971
创建的bash shell下,运行/root/.profile
和/root/.bashrc
。但保留SSH_AUTH_SOCK
-bash-3.2$ sudo -E bash -l
因此,此外壳具有root权限和root $PATH
(但主目录很烦...)
bash-3.2# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
bash-3.2# echo $PATH
/usr/kerberos/sbin:/usr/local/sbin:/usr/sbin:/sbin:/home/xtrabm/xtrabackup-manager:/usr/kerberos/bin:/opt/admin/bin:/usr/local/bin:/bin:/usr/bin:/opt/mx/bin
但是您可以使用该调用来执行需要远程sudo root和SSH代理访问的操作;
bash-3.2# scp /root/.ssh/authorized_keys ssh-agent-user@some-other-remote-host:~
/root/.ssh/authorized_keys 100% 126 0.1KB/s 00:00
bash-3.2#
-o
标记useradd
。该标志在那里允许多个用户共享相同的uid。