9.8 KiB
9.8 KiB
title, date, author, top_img, tags, categories
| title | date | author | top_img | tags | categories | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| Linux用户与权限 | 2021-04-07 16:04:58 | 文永达 | https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg |
|
|
Linux用户与权限
用户管理
查看用户
# 查看当前用户
who am i
# 查看当前登录用户数量
who --count
用户组管理
# 创建用户组
groupadd groupname
# 删除用户组
groupdel groupname
用户管理
# 创建用户并指定用户组
useradd username -g usergroup
# 设置用户密码
passwd username
# 切换用户
# 从 root 切换到其他用户不需要输入密码
# 从其他用户切换到 root 需要输入密码
su username
# 退出登录
exit
收回用户 Shell 权限
限制用户登录系统,禁止其使用交互式 Shell。
设置禁止登录的 Shell
# 方法一:使用 /sbin/nologin(推荐)
usermod -s /sbin/nologin username
# 方法二:使用 /bin/false
usermod -s /bin/false username
查看用户当前 Shell
grep username /etc/passwd
# 或
getent passwd username
输出示例:
username:x:1001:1001::/home/username:/sbin/nologin
各 Shell 对比
| Shell | 效果 |
|---|---|
/bin/bash |
正常登录,可执行命令 |
/sbin/nologin |
拒绝登录,提示 This account is currently not available |
/bin/false |
拒绝登录,无提示,退出码为 1 |
/usr/sbin/nologin |
与 /sbin/nologin 相同(部分系统软链接) |
适用场景:数据库用户、服务专用账户、FTP 账户等只需运行服务不需要登录系统的用户。
恢复登录权限
usermod -s /bin/bash username
批量收回
# 读取用户列表文件,批量设置
while read user; do
usermod -s /sbin/nologin "$user"
done < userlist.txt
权限管理
Linux文件权限
Linux 文件有三种权限:
| 权限 | 说明 |
|---|---|
r |
可读 |
w |
可写 |
x |
可执行 |
chmod 命令
修改文件或目录权限。
基本语法
chmod [选项] 模式 文件
符号模式
通过 u(所有者)、g(所属组)、o(其他用户)、a(所有人)配合 +、-、= 操作权限。
操作符区别:
| 操作符 | 作用 | 说明 |
|---|---|---|
+ |
添加权限 | 在原有权限基础上增加,不影响已有权限 |
- |
移除权限 | 从现有权限中移除,不影响未指定的权限 |
= |
直接设置 | 覆盖为指定权限,其余位清零 |
# + 添加权限(累加,不影响其他位)
chmod u+x script.sh # 所有者添加执行权限
chmod a+r file.txt # 所有人添加读权限
chmod g+w,o+r file.txt # 组添加写,其他添加读
# - 移除权限(仅移除指定位,其余保留)
chmod o-w file.txt # 其他用户移除写权限
chmod g-x script.sh # 组移除执行权限
chmod a-w file.txt # 所有人移除写权限
# = 直接设置(覆盖,未指定的位全部清零)
chmod u=r file.txt # 所有者只有读权限(写和执行被清除)
chmod g=r file.txt # 组只有读权限
chmod o= file.txt # 其他用户无任何权限
chmod u=rwx,g=rx,o= file.txt # 精确控制每位权限
# + 重复添加已有权限不会报错,保持不变
chmod u+x file.txt # 如果已有执行权限,不变
chmod a+r file.txt # 如果所有人已有读权限,不变
注意:
+是幂等操作,重复添加已有权限不会产生任何变化,也不会报错。-同理,移除不存在的权限也不会报错。
示例对比:
# 假设文件当前权限为 rw-r--r--(644)
chmod u+x file.txt # 结果:rwxr--r--(654)只给所有者加了执行
chmod u-x file.txt # 结果:rw-r--r--(644)移除执行(本来就没有,不变)
chmod u=r file.txt # 结果:r--r--r--(444)所有者变成只读,写被清掉
chmod u=rw file.txt # 结果:rw-r--r--(644)所有者读写
chmod u=rwx,g=rx,o= file.txt # 结果:rwxr-x---(750)
数字模式
用三位八进制数表示权限,每位对应 u、g、o。
| 数字 | 权限 | 说明 |
|---|---|---|
| 7 | rwx | 读、写、执行 |
| 6 | rw- | 读、写 |
| 5 | r-x | 读、执行 |
| 4 | r-- | 只读 |
| 0 | --- | 无权限 |
# rwxr-xr-x(所有者全权限,组和其他用户读执行)
chmod 755 file.txt
# rw-r--r--(所有者读写,组和其他用户只读)
chmod 644 file.txt
# rw-rw----(所有者和组读写,其他用户无权限)
chmod 660 file.txt
# rwx------(仅所有者有全部权限)
chmod 700 file.txt
# rw-rw-rw-(所有人可读写)
chmod 666 file.txt
常用权限参考
| 权限值 | 含义 | 适用场景 |
|---|---|---|
755 |
rwxr-xr-x | 可执行脚本、程序,公开目录 |
644 |
rw-r--r-- | 普通文件,所有人可读 |
700 |
rwx------ | 私有目录,仅所有者可访问 |
600 |
rw------- | 私有文件,如 SSH 密钥 |
640 |
rw-r----- | 服务配置文件,组可读 |
777 |
rwxrwxrwx | 所有人可读写执行(不推荐) |
常用选项
# 递归修改目录及子目录下所有文件
chmod -R 755 /var/www/html
# 仅修改目录本身的权限
chmod 755 /var/www/html
# 修改符号链接的权限(不常用)
chmod -h 755 link_file
# 显示修改过程
chmod -v 755 file.txt
设置特殊权限
# SUID(4):执行时以文件所有者身份运行
chmod 4755 /usr/bin/passwd
# SGID(2):执行时以文件所属组身份运行
chmod 2755 /shared_dir
# Sticky Bit(1):目录内文件只有所有者能删除
chmod 1777 /tmp
特殊权限数字对照:
| 数字 | 权限 | 说明 |
|---|---|---|
| 4 | SUID | 执行时以所有者身份运行 |
| 2 | SGID | 执行时以组身份运行 |
| 1 | Sticky | 仅文件所有者可删除目录内文件 |
# 同时设置特殊权限和普通权限
chmod 4755 file # SUID + rwxr-xr-x
chmod 2755 dir # SGID + rwxr-xr-x
chmod 1777 /tmp # Sticky + rwxrwxrwx
通过八进制运算理解权限
用户(u) 组(g) 其他(o)
rwx r-x r--
4+2+1 4+0+1 4+0+0
7 5 4 = 754
chown 命令
修改文件或目录的所有者和所属组。
基本语法
chown [选项] 所有者[:所属组] 文件
常用操作
# 修改文件所有者
chown user file.txt
# 修改文件所有者和所属组
chown user:group file.txt
# 修改文件所属组
chown :group file.txt
# 递归修改目录及子文件
chown -R user:group /var/www/html
# 仅修改所有者
chown -R user /var/www/html
# 仅修改所属组
chown -R :group /var/www/html
# 显示修改过程
chown -v user file.txt
常用选项
| 选项 | 说明 |
|---|---|
-R |
递归修改目录及子目录下所有文件 |
-v |
显示修改过程 |
-c |
仅显示更改的文件 |
-f |
静默模式,忽略错误 |
-h |
修改符号链接本身而非链接目标 |
与 chgrp 的区别
# chown 可同时修改所有者和所属组
chown user:group file.txt
# chgrp 只能修改所属组
chgrp group file.txt
实用场景
# 部署 Web 项目
chown -R nginx:nginx /var/www/html
# 将目录交给特定用户管理
chown -R user:user /home/user/projects
# 修改 SSH 密钥权限
chmod 600 ~/.ssh/id_rsa
chown root:root ~/.ssh
chmod 700 ~/.ssh
sudo权限
开启sudo权限
1. 添加sudoers文件写权限
chmod u+w /etc/sudoers
2. 编辑sudoers文件
vim /etc/sudoers
找到 root ALL=(ALL) ALL 这行,在其下面添加:
username ALL=(ALL) ALL
3. sudoers配置选项
# 允许用户执行sudo命令(需要输入密码)
username ALL=(ALL) ALL
# 允许用户组里的用户执行sudo命令(需要输入密码)
%usergroup ALL=(ALL) ALL
# 允许用户执行sudo命令,不需要输入密码
username ALL=(ALL) NOPASSWD: ALL
# 允许用户组里的用户执行sudo命令,不需要输入密码
%usergroup ALL=(ALL) NOPASSWD: ALL
4. 撤销sudoers文件写权限
chmod u-w /etc/sudoers
ACL权限
ACL(访问控制列表)提供更细粒度的权限控制,允许为特定用户或组设置特定权限。
安装ACL工具
# Ubuntu/Debian
sudo apt install acl -y
# Fedora/AlmaLinux
sudo dnf install acl -y
设置ACL权限
# 为指定用户设置读写权限
sudo setfacl -m u:user:rwx /OLAP
验证ACL权限
getfacl /OLAP
输出示例:
getfacl: Removing leading '/' from absolute path names
# file: OLAP
# owner: user
# group: user
user::rwx
group::r-x
other::r-x
设置默认ACL权限
让新创建的文件和子目录自动继承特定权限:
sudo setfacl -dm u:user:rwx /OLAP
目录权限修改
查看目录权限
sudo ls -ld /OLAP
输出示例:
drwxr-xr-x 5 root root 4096 Aug 5 08:27 /OLAP
修改目录权限
# 设置权限为775(rwxrwxr-x)
sudo chmod 775 /OLAP
这样目录的所有者和所属组的用户都可以读写,其他用户只有读取和执行权限。
将用户加入目录所属组
# 将用户加入root组(不推荐,root组权限过高)
sudo usermod -aG root user
重新登录或重启系统以使组变更生效。
更改目录所有者
# 将目录所有者更改为指定用户
sudo chown user:user /OLAP
这样用户将拥有对目录的完全控制权。