我想知道是否有任何方法可以阻止用户执行任何命令行(即使是一些简单的命令行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
并找到的which
是which
:
~$ 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