对于 SSH 的最基本配置,我通常执行以下操作:
nano /etc/ssh/sshd_config && service ssh restart # Genral basic configuration like disabling all root logins;
nano ~/.ssh/authorized_keys && service ssh restart # Put your public keys inside;
chmod ~/.ssh 700
chmod ~/.ssh/authorized_keys 600
ssh USER@IP -vvv -L 22:localhost:22 # or [email protected] # Tunnel via SSH with verbose debugging
我想知道我是否应该chmod ~/.ssh 700 -R
这样做。
我在聊天中询问了这个问题,terdon 回答说:
我希望 chmod ~/.ssh 700 -R 能够破坏 ssh,因为您刚刚从配置中删除了读取访问权限
由于700
,与所有者位于同一组的用户和所有其他非 root 用户实际上将无法读取 SSH 数据。
只要拥有者有阅读权就有问题吗?
答案1
我希望 chmod ~/.ssh 700 -R 能够破坏 ssh,因为您刚刚从配置中删除了读取访问权限
呃,不?
-bash-4.2$ chmod -R 700 .ssh
-bash-4.2$ logout
...
% ssh somelinooxbox
...
-bash-4.2$ ls -l .ssh/authorized_keys
-rwx------ 1 jhqdoe xxxxxx 178 Aug 10 2018 .ssh/authorized_keys
-bash-4.2$
所以对于非用户来说这对于 Centos7 测试主机来说并不是真正的问题root
(root
也可以chmod -R 700 ~/.ssh
)。
一个相关的问题是“进程sshd
以什么用户身份运行”,人们可能会猜测是root
或用户。root
通常可以读取所有文件(NFS 或加密主目录有各种例外),并且用户读取标记为它们的文件应该没有问题rwx
。我们不需要猜测:
% ssh -o ControlMaster=no somelinooxbox
...
-bash-4.2$ sudo sysdig -p %user.uid fd.name = ~/.ssh/authorized_keys
然后在别处建立新的联系;显示sysdig
的进程读取~/.ssh/authorized_keys
为正在连接的用户运行,即使在chmod -R 700 ...
运行后该用户也具有足够的权限。
诚然,添加杂散+x
位充其量是不必要的,更糟糕的是可能会产生一些实际上不应该的可执行文件,因此请参阅该X
技巧的其他答案,或者以其他方式确保目录获得 0700 和文件 0600。
(selinux 或 apparmour 等软件可能会带来一些麻烦,但这只是一个额外的问题罐头蜜蜂在通常的权限之上。)
答案2
符号模式怎么样。大多数现代的chmod
(但不是全部)都能做到这一点。
chmod -R go=,u=rwX ~/.ssh
这将仅授予对目录的执行权限,删除对组和其他人的权限,并授予您完整的权限。