如何创建一个非常有限的 Linux 用户

如何创建一个非常有限的 Linux 用户

我需要一个 Linux 机器上的用户来执行 中的一些命令.bash_profile。但我不希望此用户可以访问sftpftp任何其他协议。此外,除了 中的一些命令外,其他任何命令都无法执行.bash_profile

所以我想创建一个用户,该用户不能使用除 ssh 之外的任何协议,也不能执行除 .bash_profile 中的命令之外的任何命令。我该怎么办?

更新:

我已尝试过rbash,但似乎我可以通过输入来摆脱它bash

[root@centos-7 ~]# which rbash
/usr/bin/rbash
[root@centos-7 ~]# ls
a  anaconda-ks.cfg
[root@centos-7 ~]# cd a
[root@centos-7 a]# pwd
/root/a
[root@centos-7 a]# cd
[root@centos-7 ~]# rbash
[root@centos-7 ~]# cd a
rbash: cd: restricted
[root@centos-7 ~]# bash
[root@centos-7 ~]# cd a
[root@centos-7 a]# pwd
/root/a

答案1

1.创建受限shell。

cp /bin/bash /bin/rbash

  1. 修改目标用户的shell为受限shell

创建用户时:

# useradd -s /bin/rbash localuser

对于现有用户:

# usermod -s /bin/rbash localuser

有关此内容的更多详细信息,请查看 KBase 文章 8349

然后用户 localuser 被 chroot 并且无法访问其主目录 /home/localuser 之外的链接

  1. 在 /home/localuser/ 下创建一个目录,例如 programs

    mkdir /home/localuser/programs

  2. 现在,如果您检查一下,用户 localuser 可以访问他/她被允许执行的所有命令。这些命令取自 /home/localuser/.bash_profile 中设置的环境 PATH 变量。按如下方式修改它。

    猫/home/localuser/.bash_profile
    .bash_profile

    获取别名和函数
    if [ -f ~/.bashrc ]; then
    . ~/.bashrc
    fi
    用户特定环境和启动程序
    PATH=$HOME/programs
    export PATH

这里 PATH 变量设置为 ~/programs 目录,因为 /usr/local/bin 绑定到 /home/username/bin 而 /bin 绑定到 /home/username/bin,因此替换它。

  1. 现在,使用用户名 localuser 登录后,用户也无法运行简单命令。输出将如下所示,

    [localuser@example ~]$ ls
    -rbash: ls: 未找到命令
    [localuser@example ~]$ less file1
    -rbash: less: 未找到命令
    [localuser@example ~]$ clear
    -rbash: clear: 未找到命令
    [localuser@example ~]$ date
    -rbash: date: 未找到命令
    [localuser@example ~]$ ping redhat.com
    -rbash: ping: 未找到命令

  2. 现在创建用户 localuser 需要在目录 /home/localuser/programs 中执行的命令的软链接

    ln -s /bin/date /home/localuser/programs/
    ln -s /bin/ls /home/localuser/programs/
    ll /home/localuser/programs/
    total 8
    lrwxrwxrwx 1 root root 9 Oct 17 15:53 date -> /bin/date
    lrwxrwxrwx 1 root root 7 Oct 17 15:43 ls -> /bin/ls

以下是 date 和 ls 命令的示例

  1. 再次以用户 localuser 身份登录并尝试执行命令。

    [localuser@example ~]$ 日期
    2011 年 10 月 17 日星期一 15:55:45 IST
    [localuser@example ~]$ ls
    文件 1 文件 10 文件 2 文件 3 文件 4 文件 5 文件 6 文件 7 文件 8 文件 9 程序
    [localuser@example ~]$ clear
    -rbash: clear: 未找到命令

  2. 可以添加一个步骤来限制用户在其 .bash_profile 中进行任何修改,因为用户可以更改它。

运行以下命令使用户 localuser 的 .bash_profile 文件成为不可变的,以便 root/localuser 无法修改它,直到 root 从中删除不可变权限。

# chattr +i /home/localuser/.bash_profile

要删除不可变标签,

# chattr -i /home/localuser/.bash_profile

使文件 .bash_profile 不可变,以便用户 localuser 无法更改环境路径。

相关内容