ubuntu 22.04服务器配置多用户与Anaconda隔离与共享
为避免服务器多用户使用时重复下载conda、conda环境莫名其妙被删除等现象,现对不同用户设置不同权限,限定当前用户仅能操作当前/home/xxx内文件,并仅能在该目录下创建和修改ocnda环境,以达到不同用户使用的隔离。
1 安装Anaconda
(1) 下载安装包
由于国内网络环境,官网下载速度较慢,我们可以进入清华大学开源软件界面下载,根据系统和版本选择,我们选择了较新的Anaconda3-5.0.0
但由于服务器没有图形化界面,也可以使用命令行安装
wget --user-agent="Mozilla" https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.0.0-Linux-x86_64.sh
若不加--user-agent="Mozilla"
则会报错,如下图,这是由于服务器正在检查引用者,一些 HTTP 请求也会得到错误响应,它们会拒绝不以 Mozilla 开头或不包含 Wget 的用户代理
下载完成后运行sudo sh Anaconda3-5.0.0-Linux-x86_64.sh
按照提示即可,在提示安装目录时,我们为了让所有用户都能使用,安装在/opt/anaconda3
目录下
最后提示是否加入环境变量,输入no
,我们自己配置
(2) 配置环境变量
由于我们是在服务器下安装,希望达到的效果是每个用户都不需要自己重复安装conda,可以直接使用conda的相关命令,并且创建的环境env和包pkgs都存放在用户自己的目录下,这样就可以达到隔离的效果,彼此不互相干扰。
首先,添加系统环境变量,为了对所有用户都成立,执行sudo vim /etc/bash.bashrc
,而~/.bashrc
只对当前用户(一般~
代表/home/xxx
路径下),注意anaconda所在路径,加入如下:(.bashrc和/etc/profile的区别可看这个链接)
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
. "/opt/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/opt/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
打开/etc/profile也加一下环境变量,执行sudo vim /etc/profile
,加入:
export PATH=/opt/anaconda3/bin:$PATH
再重新载入source /etc/profile
再执行conda info
输出内容,查看配置是否有问题
(3) 换源与更换存储路径
在Anaconda安装的公共目录下新建配置文件,即vim /opt/anaconda3/.condarc
,输入以下内容进行换源和更换存储路径:
channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2/
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults
envs_dirs:
- ~/.conda/envs
pkgs_dirs:
- ~/.conda/pkgs
即可,再次conda info
检查路径是否都设置成功。
2 配置conda用户组权限
ubuntu中的每个文件或文件夹都有创建者、所属组、权限的设置,对于同组的文件可以方便统一管理权限,通过vim /etc/group
查看当前用户组情况,如下图所示,第一个蓝色字体为组的名称,红色为编号,最后的蓝色字体为属于该组的用户
下面针对多用户的conda配置用户组流程如下:
-
创建conda的用户组
groupadd anaconda
,其中anaconda
为名字,可以任意 -
添加用户到刚刚创建的用户组
usermod -a -G anaconda <username>
(注意需要重启才能生效) -
改变conda的安装目录用户组为刚刚创建的anaconda组
chgrp -R anaconda /opt/anaconda3
-
更改conda安装目录权限,即修改该文件夹的拥有者(root)和所属组(anaconda)组员的读写权限
chmod 770 -R /opt/anaconda3
即:对于拥有者、本组、其他组分别为7(可读写运行)、7(可读写运行)、0(什么都不行)的权限)
另外:读、写、执行权限分别对应数字4、2、1
常见组合有:
1.可读写运行 7
2.可读写不可运行 6
3.可读可执行不可写 5
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是
5.设置文件夹目录内的组继承和子目录组继承,使该文件夹下新建文件和文件夹都能在anaconda的组内
chmod g+s /opt/anaconda3
chmod g+s `sudo find /opt/anaconda3/ -type d`
6.创建全局conda环境,作为所有人都可以访问的公共环境
conda create -n public python=3.9
- (可选可不选)设置全局conda环境存放文件夹(
/opt/anaconda3/envs
)内只能由 root 修改,而对于其他用户的环境,则放在每个用户自己的home/xxx/
目录下。
chmod g-w /opt/anaconda3/envs
,其中g-w
为去除当前组其他人的写入权限
3 ubuntu创建多用户
sudo adduser username #该步骤按提示输入密码即可
usermod -a -G sudo username #可选,是否给新用户sudo的权限
usermod -a -G 其他组名称 username #可选,为新用户划分用户组,这样可以获取到对应的权限