本文详细介绍了如何在 Linux 系统中创建一个名为 agent
的新用户,并限制其在特定目录下的权限。通过使用 useradd
命令创建用户,并使用 usermod
命令将新用户添加到现有用户组中,确保其具有适当的权限。接着,通过 chown
和 chmod
命令配置目标目录 /home/yourname/_Project/oh_workspace
的权限,使 agent
用户在该目录下具有读写权限,而在其他目录下只能读取。
为了进一步细化权限控制,文章还介绍了如何使用 ACL(访问控制列表)来限制 agent
用户的写权限,确保其在根目录、/home
目录和 /home/yourname
目录下只能读取。最后,通过复制 .bashrc
文件和更改默认 shell 为 bash,确保 agent
用户获得与主用户相似的使用体验。
本文适合需要对 Linux 系统进行细粒度权限管理的用户,特别是那些希望在特定目录下限制用户访问权限的场景。
第一步:创建用户并且限制权限
创建一个新用户 agent
,并确保其只能在 /home/yourname/_Project/oh_workspace
目录下进行写操作,同时在其他地方只能读取。这确保了系统的安全和灵活性,同时满足了特定的权限要求。
1. 创建用户 agent
sudo useradd -m agent
为 agent
设置密码:
sudo passwd agent
2. 将 agent
添加到 yourname
所属的组
根据你之前的输出,yourname
属于多个组。我们将 agent
添加到这些组中,使其拥有与 yourname
类似的权限。
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
目录下进行读写操作。
-
设置目录的所有者为
yourname
,组为yourname
:sudo chown -R yourname:yourname /home/yourname/_Project/oh_workspace
-
赋予目录的组用户(包括
agent
)读写权限:sudo chmod -R 775 /home/yourname/_Project/oh_workspace
4. 使用 ACL 限制 agent
的写权限
为了确保 agent
只能在 /home/yourname/_Project/oh_workspace
目录下写入,而在其他地方只能读取,我们使用 ACL 进行更细粒度的权限控制。
-
确保
agent
对/home/yourname/_Project/oh_workspace
目录具有读写执行权限:sudo setfacl -m u:agent:rwx /home/yourname/_Project/oh_workspace
-
确保
agent
在/home/yourname
目录只能读取,不能写入:sudo setfacl -m u:agent:rx /home/yourname sudo setfacl -m d:u:agent:rx /home/yourname
这个命令表示
agent
可以读取和进入/home/yourname
,但不能写入。 -
确保
agent
在根目录/
下也只能读取,不能写入:sudo setfacl -m u:agent:rx /
-
确保
agent
在/home
目录下也只能读取,不能写入:sudo setfacl -m u:agent:rx /home
5. 测试权限
切换到 agent
用户,测试在 /home/yourname/_Project/oh_workspace
下是否可以写入,而在其他地方不能写入。
-
切换到
agent
用户:su - agent
-
测试在
/home/yourname/_Project/oh_workspace
目录下创建文件:cd /home/yourname/_Project/oh_workspace touch testfile
如果可以创建文件,则设置成功。
-
测试在其他目录(如
/
和/home/yourname
)是否可以创建文件: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
的权限:
sudo chmod o+rx /home/yourname
这条命令给予其他用户(包括 agent
)对 /home/yourname
目录的读取和执行权限,允许他们进入该目录。
设置 /home/yourname/_Project
的权限:
sudo chmod o+rx /home/yourname/_Project
同样,这条命令允许 agent
进入 /home/yourname/_Project
目录。
2. 确保 agent
对 /home/yourname/_Project/oh_workspace
具有读写权限
现在再次确保 agent
对目标目录 /home/yourname/_Project/oh_workspace
具有读写权限:
sudo setfacl -m u:agent:rwx /home/yourname/_Project/oh_workspace
这条命令确保 agent
可以在该目录下读、写和执行(进入目录)。
3. 测试
重新切换到 agent
用户并测试:
su - agent
cd /home/yourname/_Project/oh_workspace
如果这次可以正常进入该目录,说明权限问题已经解决。
测试创建文件:
touch testfile
如果能成功创建文件,说明 agent
在该目录下具备读写权限。
测试在其他目录是否禁止写入:
cd /
touch testfile
# 应该收到权限错误
cd /home/yourname
touch testfile
# 应该收到权限错误
第三步:把yourname用户的.bashrc复制过去确保获得和主用户相同的使用体验
sudo cp /home/yourname/.bashrc /home/agent/.bashrc
sudo chown agent:agent /home/agent/.bashrc
第四步:把agent的默认shell改成bash
sudo chsh -s /bin/bash agent
第五步:重新登录agent
su - agent
如果没有显示,尝试重新激活conda
source /home/yourname/anaconda3/etc/profile.d/conda.sh
conda activate base