阻止 SSH 用户执行任何命令行

阻止 SSH 用户执行任何命令行

我想知道是否有任何方法可以阻止用户执行任何命令行(即使是一些简单的命令行ls -la,例如正常运行时间...)我尝试了一些方法,例如删除用户的 bash 文件,但它不起作用。

所有用户都可以使用管理员用户创建的自己的 SSH 密钥登录服务器。该服务器仅用于身份验证,因此我不想授予用户执行任何命令的权限。我想要得到的是:用户可以登录服务器并留在那里,不能做任何其他事情。

答案1

您是否尝试过更改用户外壳?

chsh -s /bin/true username

对于不需要 shell 的服务来说很常见,例如 VsFTP

答案2

您可以将登录 shell 更改为 nologin:

~# chsh -s /usr/sbin/nologin 

列出 shell:

~# chsh -l

但是,阅读您的评论,您希望允许访问并拒绝任何可执行文件。您可以做的是从目录中的二进制文件中删除“other s”执行位/usr/bin。我已经uptime使用以下内容对其进行了测试:

~# chmod o-x /usr/bin/uptime

然后,对于普通用户,您会得到

user@laptop ~$ uptime
bash: /usr/bin/uptime: Permission denied

要撤消更改:

 ~# chmod o+x /usr/bin/uptime

例如,要查找可执行文件的目标,ls您将使用以下命令which

user@laptop ~$ which ls
/usr/bin/ls

并找到的whichwhich

~$ which which

要了解有关 Linux 目录的更多信息,请参阅手册页:

~$ man hier
   hier - description of the file system hierarchy

编辑:

这可能会错过您的系统(或者不会,我这样做是为了拒绝用户通过命令进行切换su),使用 ACL 权限(控制列表),您将为每个用户添加他/她的特定权限。例如,拒绝用户1使用uptime

# setfacl -m u:user1:--- uptime

您可以递归地执行此操作,但需要您自担风险。并注意更新,可能会恢复原始权限。

答案3

我会用它chmod来实现这一点。

例如,如果您想撤销用户的读、写和执行权限,您可以执行以下操作:

sudo chmod 770 <filehere>

下面详细介绍了它的实际作用:

1st Determines the permissions in which the owner of the file has
7 = rwx (Read-Write-Execute)

2nd Determines the permissions in which the owner's group has
7 = rwx (Read-Write-Execute)

3rd Determines the permissions in which everyone else has
0 = --- (No permissions)

这是一种限制“其他人”读取、写入和执行的方法/bin/cat

sudo chmod 770 /bin/cat

您可以通过执行来验证您的更改ls -la /bin/cat

相关内容