【Linux】用户权限管理:创建受限用户并配置特定目录访问权限

本文详细介绍了如何在 Linux 系统中创建一个名为 agent 的新用户,并限制其在特定目录下的权限。通过使用 useradd 命令创建用户,并使用 usermod 命令将新用户添加到现有用户组中,确保其具有适当的权限。接着,通过 chownchmod 命令配置目标目录 /home/yourname/_Project/oh_workspace 的权限,使 agent 用户在该目录下具有读写权限,而在其他目录下只能读取。

为了进一步细化权限控制,文章还介绍了如何使用 ACL(访问控制列表)来限制 agent 用户的写权限,确保其在根目录、/home 目录和 /home/yourname 目录下只能读取。最后,通过复制 .bashrc 文件和更改默认 shell 为 bash,确保 agent 用户获得与主用户相似的使用体验。

本文适合需要对 Linux 系统进行细粒度权限管理的用户,特别是那些希望在特定目录下限制用户访问权限的场景。

第一步:创建用户并且限制权限

创建一个新用户 agent,并确保其只能在 /home/yourname/_Project/oh_workspace 目录下进行写操作,同时在其他地方只能读取。这确保了系统的安全和灵活性,同时满足了特定的权限要求。

1. 创建用户 agent

bash 复制代码
sudo useradd -m agent

agent 设置密码:

bash 复制代码
sudo passwd agent

2. agent 添加到 yourname 所属的组

根据你之前的输出,yourname 属于多个组。我们将 agent 添加到这些组中,使其拥有与 yourname 类似的权限。

bash 复制代码
sudo usermod -aG adm,tty,cdrom,sudo,dip,video,plugdev,users,lpadmin,ollama,docker agent

3. 配置 /home/yourname/_Project/oh_workspace 目录的权限

agent 能够在 /home/yourname/_Project/oh_workspace 目录下进行读写操作。

  1. 设置目录的所有者为 yourname,组为 yourname

    bash 复制代码
    sudo chown -R yourname:yourname /home/yourname/_Project/oh_workspace
  2. 赋予目录的组用户(包括 agent)读写权限:

    bash 复制代码
    sudo chmod -R 775 /home/yourname/_Project/oh_workspace

4. 使用 ACL 限制 agent 的写权限

为了确保 agent 只能在 /home/yourname/_Project/oh_workspace 目录下写入,而在其他地方只能读取,我们使用 ACL 进行更细粒度的权限控制。

  1. 确保 agent/home/yourname/_Project/oh_workspace 目录具有读写执行权限:

    bash 复制代码
    sudo setfacl -m u:agent:rwx /home/yourname/_Project/oh_workspace
  2. 确保 agent/home/yourname 目录只能读取,不能写入:

    bash 复制代码
    sudo setfacl -m u:agent:rx /home/yourname
    sudo setfacl -m d:u:agent:rx /home/yourname

    这个命令表示 agent 可以读取和进入 /home/yourname,但不能写入。

  3. 确保 agent 在根目录 / 下也只能读取,不能写入:

    bash 复制代码
    sudo setfacl -m u:agent:rx /
  4. 确保 agent/home 目录下也只能读取,不能写入:

    bash 复制代码
    sudo setfacl -m u:agent:rx /home

5. 测试权限

切换到 agent 用户,测试在 /home/yourname/_Project/oh_workspace 下是否可以写入,而在其他地方不能写入。

  1. 切换到 agent 用户:

    bash 复制代码
    su - agent
  2. 测试在 /home/yourname/_Project/oh_workspace 目录下创建文件:

    bash 复制代码
    cd /home/yourname/_Project/oh_workspace
    touch testfile

    如果可以创建文件,则设置成功。

  3. 测试在其他目录(如 //home/yourname)是否可以创建文件:

    bash 复制代码
    cd /
    touch testfile
    # 应该返回权限错误
    
    cd /home/yourname
    touch testfile
    # 应该返回权限错误

第二步:确保agent用户能够进入yourname用户的文件夹

为了确保 agent 用户可以访问 /home/yourname/_Project/oh_workspace 目录,但只能在该目录下进行写操作,而在其他目录只能读取,以下是详细的步骤来修复权限问题。

1. 确保 agent 有权限访问 /home/yourname/home/yourname/_Project

即使你已经为 /home/yourname/_Project/oh_workspace 设置了权限,agent 仍然需要读取和执行(进入)的权限才能导航到这个目录。你需要确保 agent 用户对上级目录 /home/yourname/home/yourname/_Project 具有读取和执行权限。

设置 /home/yourname 的权限:
bash 复制代码
sudo chmod o+rx /home/yourname

这条命令给予其他用户(包括 agent)对 /home/yourname 目录的读取和执行权限,允许他们进入该目录。

设置 /home/yourname/_Project 的权限:
bash 复制代码
sudo chmod o+rx /home/yourname/_Project

同样,这条命令允许 agent 进入 /home/yourname/_Project 目录。

2. 确保 agent/home/yourname/_Project/oh_workspace 具有读写权限

现在再次确保 agent 对目标目录 /home/yourname/_Project/oh_workspace 具有读写权限:

bash 复制代码
sudo setfacl -m u:agent:rwx /home/yourname/_Project/oh_workspace

这条命令确保 agent 可以在该目录下读、写和执行(进入目录)。

3. 测试

重新切换到 agent 用户并测试:

bash 复制代码
su - agent
cd /home/yourname/_Project/oh_workspace

如果这次可以正常进入该目录,说明权限问题已经解决。

测试创建文件:
bash 复制代码
touch testfile

如果能成功创建文件,说明 agent 在该目录下具备读写权限。

测试在其他目录是否禁止写入:
bash 复制代码
cd /
touch testfile
# 应该收到权限错误

cd /home/yourname
touch testfile
# 应该收到权限错误

第三步:把yourname用户的.bashrc复制过去确保获得和主用户相同的使用体验

bash 复制代码
sudo cp /home/yourname/.bashrc /home/agent/.bashrc
sudo chown agent:agent /home/agent/.bashrc

第四步:把agent的默认shell改成bash

bash 复制代码
sudo chsh -s /bin/bash agent

第五步:重新登录agent

bash 复制代码
su - agent

如果没有显示,尝试重新激活conda

bash 复制代码
source /home/yourname/anaconda3/etc/profile.d/conda.sh
bash 复制代码
conda activate base
相关推荐
A小辣椒7 小时前
TShark:基础知识
linux
AlfredZhao9 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux