Answers:
通常,由于其他人列出的原因,这样做是不安全的做法。但是,我认为,分配的重点是要告诉您可以基于各种条件来有条件配置部分。
做到这一点的方法是使用Match
条件块*。
Match User bob
Subsystem sftp /bin/false
有关更多信息,请参见sshd_config(5)
本Match
部分下方的内容,并在上进行匹配Group
。
*有多种方法可以做到这一点。
这没有任何意义,这是通过无用的默默无闻来实现的安全性。可以使用SSH的任何用户都将能够传输他们可以通过SSH会话读取的任何文件。如果您有写权限,则也可以写。
作为示例,您可以使用以下方法(不需要scp / sftp会话)通过ssh下载/ etc / passwd:ssh foo@bar.com“ cat / etc / passwd”> passwdcopy
如果您可以通过SSH在屏幕上看到它,则可以轻松地将其复制为文件。
唯一有意义的方法是,如果您具有实施安全策略的自定义受限外壳。
但是,这样做的反义是有道理的(禁用ssh shell但启用了scp / sftp),因为您无法通过ssh shell通过sftp / scp执行任意命令。
PS:我假设您授予的SSH Shell是允许任意执行的标准Shell。如果不是这种情况,请参见以下内容:如何为特定用户或组禁用sftp子系统?并查看sshd_config的Subsystem config选项。
Match Group nosft
Subsystem sftp /bin/false
我更喜欢为此使用一个组。
与具有受限制的shell的用户一起使用时很有用。有时我给ssh访问客户端,以便他们可以通过将shell设置为转储数据的脚本来访问数据库的sql-dump。从scp中删除它们似乎也是一个聪明的主意。他们无权运行cat
通过ssh传输文件的权限。
Directive 'Subsystem' is not allowed within a Match block
可以全局启用SFTP,并且仅对某些用户禁用SFTP。
如果您希望用户获得常规的shell提示,则此方法不起作用。这也没有任何意义,因为如果您具有shell访问权限,则可以绕开大多数内容。 仅当您只想授予对特定程序的访问权限时,它才起作用。
我个人需要这样做,因为我想允许通过SSH访问某些git存储库,而且我想禁用不需要的系统。在这种情况下,不需要SFTP。
要匹配一组用户,可以使用Match
关键字配置SSH 。从sshd_config(5)
手册中:
Match
...
The arguments to Match are one or more criteria-pattern pairs or the
single token All which matches all criteria. The available criteria
are User, Group, Host, LocalAddress, LocalPort, and Address. The
match patterns may consist of single entries or comma-separated
lists and may use the wildcard and negation operators described in
the PATTERNS section of ssh_config(5).
...
几个例子:
Match User eva
匹配“ eva”用户Match User stephen,maria
匹配“斯蒂芬”和“玛丽亚”用户Match Group wheel,adams,simpsons
与“ wheel”,“ adams”,“ simpsons”组匹配如果需要更多信息,请在sshd_config(5)
手册中进行加载。
通常,通过SSH连接时,您会获得用户的登录Shell,但可以将SSH配置为强制执行特定命令。该命令对于任何SSH连接(包括SFTP)都是强制执行的,因此您可以选择强制执行所需的命令。
可以使用ForceCommand
关键字配置强制命令。从
sshd_config(5)
手册中:
ForceCommand
Forces the execution of the command specified by ForceCommand,
ignoring any command supplied by the client and ~/.ssh/rc if
present. The command is invoked by using the user's login shell
with the -c option. This applies to shell, command, or subsystem
execution. It is most useful inside a Match block. The command
originally supplied by the client is available in the
SSH_ORIGINAL_COMMAND environment variable. Specifying a command of
“internal-sftp” will force the use of an in-process sftp server that
requires no support files when used with ChrootDirectory. The
default is “none”.
因此,您可以强制使用要使用的受限命令ForceCommand <your command>
。例如:
Match User kim
ForceCommand echo 'successful login man, congrats'
在我要授予git访问权限的情况下,我只需要用户有权访问git-shell
。这是为我的git用户禁用SFTP的部分,以及一些安全选项:
Match Group git
# have to do this instead of setting the login shell to `git-shell`,
# to disable SFTP
ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"
# disable stuff we don't need
AllowAgentForwarding no
AllowTcpForwarding no
AllowStreamLocalForwarding no
PermitOpen none
PermitTunnel no
PermitTTY no
X11Forwarding no
owner
出站访问的模块。假设您将由一支红队进行笔测试。如果每个访问您系统的人都始终遵守规则,并且从来没有恶意,那么我的方法将是繁重的工作并且过于复杂。