用户、组和权限管理(包含特殊权限以及 install / mktemp / finger)

本文详细介绍了Linux系统中的用户和组管理,包括用户类别、安全上下文、组标识等概念,以及用户和组的创建、修改和删除。此外,还深入探讨了权限管理,如ls -l、SUID、SGID、Sticky位,以及访问控制列表(facl)。最后,提到了一些实用命令,如`install`、`mktemp`和`finger`。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关概念

Linux 是多任务多用户的系统。

用户

用户标识、密码:
	Authentication
	Authorization
	Audition

组:用户组,用户容器

1、用户类别

用户类别包括管理员和普通用户(系统用户和登录用户)。

系统用户:为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户;这类用户从不用登录系统。

2、安全上下文

安全上下文 是指进程以其发起者的身份运行,进程对文件的访问权限,取决于发起此进程的用户的权限。

3、用户标识

用户标识即UserID 、UID 。
用户标识是用16bits二进制数字标识的,范围为 0-65535 。

管理员:0
普通用户:1-65635
	系统用户:1-499(CentOS6), 1-999(CentOS7)
	登录用户:500-60000(CentOS6), 1000-60000(CentOS7)

4、名称解析

用户的名称解析,也就是名称转换。是名称解析库进行的/etc/passwd

Username <--> UID

1、组类别1

管理员组
普通用户组
	系统组
	登录组

2、组标识

管理员组:0
普通用户组:1-65635
	系统用户组:1-499(CentOS6), 1-999(CentOS7)
	登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)	

3、名称解析

名称解析:groupname <--> gid
解析库:/etc/group

4、组类别2

用户的基本组
用户的附加组

5、组类别3

私有组:组名同用户名,且只包含一个用户
公共组:组内包含了多个用户

认证信息

通过比对事先存储的,与登录时提供的信息是否一致,一致的话才允许登陆。

1、储存认证信息的文件

password:
	/etc/shadow
	/etc/gshadow

2、密码的使用策略

1、使用随机密码
2、最短长度不要低于8位
3、应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类
4、定期更换

3、加密算法

对称加密:加密和解密使用同一个密码
非对称加密:加密和解密使用的一对儿密钥
	密钥对儿:
		公钥:public key
		私钥: private key
单向加密:只能加密,不能解密;提取数据特征码
	定长输出
	雪崩效应

4、算法

md5: message digest, 128bits
sha:secure hash algorithm, 160bits
sha224
sha256
sha384
sha512

再对密码进行加密计算的时候,会添加salt,添加的随机数;两个用户的密码虽然相同,但是计算之时加salt,会使结果大不相同,所以在 /etc/shadow 里加密过后的字段大不一样。

文件信息

1、/etc/passwd:用户的信息库

格式:

name:password:UID:GID:GECOS:directory:shell

解释:

name: 用户名
password:可以是加密的密码,也可是占位符x;/etc/shadow
UID:用户ID
GID:用户所属的主组的ID号
GECOS:注释信息
directory:用户的家目录
shell:用户的默认shell,登录时默认shell程序

示例:

root@LeeMumu:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

2、/etc/shadow:用户密码

格式:

用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段

示例:

root@LeeMumu:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

3、/etc/group:组的信息库

格式:

group_name:password:GID:user_list

解释:

user_list:该组的用户成员;以此组为附加组的用户的用户列表

示例:

root@LeeMumu:~# cat /etc/group
root:x:0:
daemon:x:1:

管理命令

1、groupadd:添加组

groupadd [选项] group_name
	-g GID:指定GID;默认是上一个组的GID+1
	-r: 创建系统组

2、groupmod:修改组属性

groupmod [选项] GROUP
	-g GID:修改GID
	-n new_name:修改组名

3、groupdel:删除组

groupdel [选项] GROUP

4、useradd:创建用户

useradd [选项] 登录名
	-u, --uid UID:指定UID;
	-g, --gid GROUP:指定基本组ID,此组得事先存在
	-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;
	-c, --comment COMMENT:指明注释信息;
	-d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现
		指定的家目录路径如果事先存在,则不会为用户复制环境配置文件
		创建家目录时,最好不要是已经存在的目
		
	-s, --shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;
	-r, --system:创建系统用户

注意:创建用户时的诸多默认设定配置文件为 /etc/login.defs	
useradd -D:显示创建用户的默认配置
useradd -D 选项: 修改默认选项的值

修改的结果保存于/etc/default/useradd文件中
root@ubuntu:/home# useradd -D
GROUP=100
HOME=/home 
INACTIVE=-1
EXPIRE=              永久有效,默认是9999天
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no 创建邮筒,如果是yes参数的话,
					 每次新创建用户时,会在 /var/spool/mail 下创建一个用户自己的邮筒

示例:

root@ubuntu:~# useradd docker                                          
root@ubuntu:~# tail -1 /etc/passwd                                     
docker:x:1009:8889::/home/docker:                                      
root@ubuntu:~# tail -1 /etc/group                                      
docker:x:8889:                                                         
                                                                       
                                                                       
root@ubuntu:~# useradd ceshi1 -u 3333 -g 8888 -G NEO11,NEO12 -c woaini 
root@ubuntu:~# tail -1 /etc/passwd                                     
ceshi1:x:3333:8888:woaini:/home/ceshi1:                                
root@ubuntu:~# tail /etc/group                                         
jc:x:1002:                     
<think>我们聚焦于解决JupyterServer的权限错误问题,特别是通过配置指定一个用户有写入权限的目录位置。用户的核心诉求:避免PermissionError:[Errno13]Permissiondenied错误,通过指定一个用户权限的目录。根据之前的信息,我们知道错误发生在:C:\Users\Lcy\AppData\Roaming\jupyter\runtime\jpserver-23000.json解决方案的核心是:让JupyterServer将运行时文件(包括server-info文件)写入到一个当前用户权限的目录。有两种主要方法:1.修改现有运行时目录的权限(之前已经介绍过)2.配置JupyterServer使用一个新的、用户权限的目录(本次重点)我们重点讲解第二种方法:通过配置文件指定新的运行时目录。步骤:(1)确定一个用户有完全控制权限的目录。例如:-在Windows下,可以在用户主目录下创建一个新目录,比如:`C:\Users\Lcy\jupyter_runtime`-在Linux/macOS下,可以是:`/home/username/jupyter_runtime`(2)创建该目录(如果不存在)。(3)修改Jupyter的配置文件,设置`runtime_dir`为该目录。具体操作如下:###步骤1:创建新目录在合适的位置创建一个新目录,例如:```bash#对于Windows用户(在命令提示符或PowerShell中执行)mkdirC:\Users\Lcy\jupyter_runtime#对于Linux/macOS用户mkdir~/jupyter_runtime```###步骤2:查找或创建Jupyter配置文件JupyterServer的配置文件是`jupyter_server_config.py`,通常位于:-Windows:`C:\Users\<用户名>\.jupyter\jupyter_server_config.py`-Linux/macOS:`~/.jupyter/jupyter_server_config.py`如果该文件不存在,可以使用以下命令生成:```bashjupyterserver--generate-config```注意:如果之前生成过,可以跳过此步骤。###步骤3:编辑配置文件打开配置文件,添加或修改以下配置项:```python#设置运行时目录(注意将路径替换为你创建的目录)c.ServerApp.runtime_dir='你的新目录路径'```例如:-Windows示例:```pythonc.ServerApp.runtime_dir=r'C:\Users\Lcy\jupyter_runtime'```-Linux/macOS示例:```pythonc.ServerApp.runtime_dir='/home/username/jupyter_runtime'```###步骤4:保存配置文件并重启JupyterServer修改保存后,重启JupyterServer即可生效。###验证启动JupyterServer,检查新目录下是否有运行时文件生成(如`jpserver-*.json`)。###注意事项1.确保新目录的权限:当前运行JupyterServer的用户必须对该目录有读写权限(通常自己创建的目录默认就有)。2.配置文件可以有多个,但修改用户目录下的配置文件(`~/.jupyter/jupyter_server_config.py`)优先级较高。3.如果使用虚拟环境,确保配置文件位于正确的用户目录下,而不是虚拟环境目录下。###原理说明JupyterServer在启动时需要写入一些运行时信息(如服务器进程ID、连接文件等)到`runtime_dir`指定的目录。默认情况下,该目录是`~/.local/share/jupyter/runtime`(Linux/macOS)或`%APPDATA%\jupyter\runtime`(Windows)。通过修改`c.ServerApp.runtime_dir`,我们将其重定向到自定义目录,从而避免权限问题。###其他相关问题如果修改配置后仍然出现权限问题,请检查:-新目录的路径是否拼写正确(特别是Windows的路径分隔符转义,建议使用原始字符串`r'...'`)-新目录是否确实有写入权限(可以手动创建一个文件测试)-是否修改了正确的配置文件(可以通过`jupyter--paths`查看配置路径)###引用参考我们在引用[1]中注意到有关于权限错误的类似描述,引用[4]则提到了在运行Jupyter时指定目录需要有权限[^1][^4]。通过以上步骤,通常可以解决因默认运行时目录权限不足导致的问题。§§相关问题§§1.如何查看JupyterServer的配置路径?2.如何确认当前JupyterServer使用的运行时目录?3.在Windows系统下,如何测试一个目录的写入权限?4.为什么在修改配置后仍然出现权限问题?</think> ### 解决 Jupyter Server 权限错误:指定用户目录的完整方案 以下通过配置指定用户权限的目录位置,彻底解决 `PermissionError: [Errno 13] Permission denied` 错误: --- #### **核心原理** Jupyter Server 默认将运行时文件(如 `jpserver-23000.json`)写入系统预设的 `runtime` 目录(`jupyter --runtime-dir` 的输出路径)。当该目录**权限不足**时,需通过配置文件重定向到用户权限的目录[^1][^4]。 --- #### **步骤 1:创建新运行时目录** 新建用户完全控制的目录(示例路径): ```bash # Windows(在 PowerShell 或 CMD 执行) mkdir C:\Users\Lcy\jupyter_custom_runtime # Linux/macOS mkdir ~/jupyter_custom_runtime ``` > ✅ 验证目录所有权: > ```bash > ls -ld ~/jupyter_custom_runtime # Linux/macOS > icacls "C:\Users\Lcy\jupyter_custom_runtime" # Windows > ``` > 确保当前用户是所有者(`Owner: Lcy`)。 --- #### **步骤 2:修改 Jupyter 配置文件** 1. **查找配置文件路径**: ```bash jupyter --config-dir # 输出:C:\Users\Lcy\.jupyter 或 ~/.jupyter ``` 2. **修改配置文件**: 编辑 `jupyter_server_config.py`(若不存在则创建): ```python # 指定自定义运行时目录(Windows 示例) c.ServerApp.runtime_dir = r'C:\Users\Lcy\jupyter_custom_runtime' # Linux/macOS 示例 # c.ServerApp.runtime_dir = '/home/Lcy/jupyter_custom_runtime' ``` > 💡 关键语法: > - `r''` 防止 Windows 路径转义错误 > - 路径使用**绝对路径** --- #### **步骤 3:应用配置并重启服务** ```bash # 重启 Jupyter Server(若已运行则先终止进程) jupyter server stop # 或 taskkill /IM jupyter-server.exe /F(Windows) jupyter server start ``` > ✅ 验证是否生效: > ```bash > jupyter --runtime-dir # 应输出新目录路径 > ls /path/to/custom_runtime # 检查是否有 jpserver-*.json 文件生成 > ``` --- #### **故障排查** | 现象 | 解决方案 | |------|----------| | 配置文件未生效 | 确保文件位于 `--config-dir` 输出路径且文件名正确 | | 路径权限仍报错 | 手动测试目录写入权限:<br>`echo test > /path/custom_runtime/test.txt` | | Windows 路径错误 | 使用原始字符串 `r'C:\path'` 或双反斜杠 `C:\\path` | --- #### **配置优先级解析** Jupyter 按顺序加载配置[^2]: 1. 命令行参数(最高优先级) ```bash jupyter server --ServerApp.runtime_dir='C:/custom_path' ``` 2. 用户级配置文件 `~/.jupyter/jupyter_server_config.py` 3. 系统级配置文件 `/etc/jupyter/jupyter_server_config.py` > 📌 **推荐用户级配置**:避免影响其他用户,且无管理员权限也可操作[^4]。 --- #### **典型场景扩展** 1. **多用户共享服务器**: 为每个用户单独配置运行时目录,隔离权限: ```python import getpass c.ServerApp.runtime_dir = f'/jupyter_runtime/{getpass.getuser()}' ``` 2. **Docker 环境**: 挂载卷时指定用户权限: ```bash docker run -v ~/jupyter_custom_runtime:/runtime \ -u $(id -u):$(id -g) jupyter/base-image ``` 3. **临时覆盖配置**: 单次启动时指定目录(不修改文件): ```bash jupyter server --ServerApp.runtime_dir=$(mktemp -d) ``` --- ### **引用说明** - 配置目录路径可通过 `jupyter --config-dir` 验证 [^2] - Windows 路径需用原始字符串避免转义错误 - 权限隔离是解决多用户环境的关键 [^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值