
博客主页:christine-rr-CSDN博客 hi,大家好,我是christine-rr ! 今天来分享一下linux常用命令——权限管理
Linux 权限分为所有者(user)、所属组(group)、其他用户(others) 三类,每类用户可拥有读(r)、写(w)、执行(x) 三种权限。
格式:chmod [3 位数字] [文件名]
每类权限对应一个数字值,通过组合数字可快速设置权限:
r(读):4w(写):2x(执行):1无权限:0组合方式:将三类用户的权限值相加,形成 3 位数字组合(如755):
常见权限组合:
777: rwxrwxrwx所有人拥有读、写、执行权限(危险,不建议)755:rwxr-xr-x所有者全权限,所属组和其他用户可读、执行(常用于脚本、程序)644:rw-r–r--所有者可读、写,所属组和其他用户只读(常用于普通文件)700:rwx------仅所有者有全权限(常用于私密文件 / 目录)示例(数字形式):
chmod 755 script.sh # 所有者:rwx,组和其他:r-x
chmod 644 document.txt # 所有者:rw-,组和其他:r--
chmod 700 ~/private/ # 仅所有者可访问private目录数字 | 权限 | rwx | 二进制 |
|---|---|---|---|
7 | 读 + 写 + 执行 | rwx | 111 |
6 | 读 + 写 | rw- | 110 |
5 | 读 + 执行 | r-x | 101 |
4 | 只读 | r– | 100 |
3 | 写 + 执行 | -wx | 011 |
2 | 只写 | -w- | 010 |
1 | 只执行 | –x | 001 |
0 | 无 | — | 000 |
通过字母指定用户和权限
格式:
chmod [用户][操作][权限] 文件名
u(所有者)、g(所属组)、o(其他用户)、a(所有用户)+(添加权限)、-(移除权限)、=(设置权限,覆盖原有)r(读)、w(写)、x(执行)示例(字母形式):
chmod u+x file.sh # 给所有者添加执行权限
chmod g-rw document.txt # 移除所属组的读、写权限
chmod o=rx temp/ # 给其他用户设置读和执行权限(覆盖原有)
chmod a-w data.csv # 移除所有用户的写权限(保护文件不被修改)
chmod ug+x,o-r script.py # 同时给所有者和组添加执行权限,移除其他用户的读权限特殊权限
+s:设置 SUID/SGID(执行文件时继承所有者 / 组权限,如passwd命令)chmod u+s /usr/bin/passwd # 普通用户执行passwd时临时获得root权限+t:粘滞位(仅目录所有者可删除其中文件,如/tmp)chmod +t /shared/ # 防止共享目录中文件被非所有者删除chown(英文全拼:change owner)命令用于设置文件所有者和文件关联组的命令。
格式:
chown [所有者][:所属组] 文件名
chown 新用户 文件名chown :新组 文件名(或用chgrp 新组 文件名)chown 新用户:新组 文件名常用参数:
-R,–recursive:递归修改目录及其中所有内容的所有者 / 组-v, --verbose: 显示详细操作信息-c, --changes: 只显示实际发生更改的文件-f, --silent, --quiet: 抑制错误信息-h, --no-dereference: 影响符号链接本身,而不是链接指向的文件示例:
chown alice file.txt # 将file.txt的所有者改为alice
chown :dev team/ # 将team目录的所属组改为dev组
chown bob:dev project/ # 将project目录的所有者改为bob,所属组改为dev
chown -R root:/var/log # 递归将/var/log目录及内容的所有者改为root,组改为log组普通用户默认无系统级操作权限(如修改系统配置、安装软件),sudo允许授权用户临时使用 root 权限(需输入当前用户密码,默认 5 分钟内无需重复验证)。
常用场景:
sudo apt install nginx # 以root权限安装nginx(Debian/Ubuntu)
sudo systemctl restart sshd # 重启ssh服务(需root权限)
sudo vim /etc/passwd # 编辑系统用户配置文件(普通用户无权限)
sudo su # 切换到root用户(需sudo权限,谨慎使用)sudo 配置(/etc/sudoers):
只有在/etc/sudoers文件中被授权的用户才能使用sudo,由 root 用户通过visudo命令编辑(安全的编辑方式,避免语法错误):
sudo visudo # 打开sudo配置文件添加授权(例如允许alice用户执行所有 root 命令):
alice ALL=(ALL:ALL) ALL # 格式:用户名 主机=(可切换的用户:可切换的组) 允许执行的命令chgrp是修改文件所属组的专用命令,功能类似chown :组名,格式:
chgrp dev file.txt # 将file.txt的所属组改为dev
chgrp users file1.txt file2.txt file3.txt # 将file1.txt file2.txt file3.txt的所属组改为users
chgrp -R admin docs/ # 递归将docs目录及内容的所属组改为admin
chgrp -v dev file.txt #显示详细操作信息chmod 600 ~/.ssh/id_rsa # 仅自己可读写私钥文件chmod 775 /shared/ # 所有者和组有全权限,其他用户只读/执行
chown -R :team /shared/ # 将共享目录所属组设为team,方便团队协作chmod +x backup.sh # 给脚本添加执行权限,之后可直接用./backup.sh运行SUID 让普通用户临时拥有程序所有者权限,SGID 则让用户在特定目录下创建的文件继承目录的组权限。
SUID 是一种文件特殊权限,仅对可执行文件有效。当普通用户执行带有 SUID 权限的程序时,会临时获得该程序所有者(通常是 root)的权限,执行完成后权限自动收回。
passwd命令(普通用户需修改自己的密码,而密码文件/etc/shadow仅 root 可写)。操作目标 | 命令 | 案例说明 |
|---|---|---|
查看文件是否有 SUID 权限 | ls -l 文件名 | 执行ls -l /usr/bin/passwd,输出中-rwsr-xr-x的s在所有者权限位,代表有 SUID。 |
给文件添加 SUID 权限 | chmod u+s 文件名 或 chmod 4755 文件名 | 给test.sh添加 SUID:chmod u+s test.sh,此时文件权限会显示为-rwsr-xr-x。 |
移除文件 SUID 权限 | chmod u-s 文件名 | 移除test.sh的 SUID:chmod u-s test.sh,权限会恢复为-rwxr-xr-x。 |
注意事项
bash)加 SUID,可能导致权限泄露,被恶意利用获取 root权限。SGID 既可以作用于可执行文件,也可以作用于目录,日常使用中作用于目录的场景更常见。当用户在带有 SGID 权限的目录下创建文件 / 子目录时,新文件 / 子目录的组会自动继承该目录的组,而非创建者的默认组。
操作目标 | 命令 | 案例说明 |
|---|---|---|
查看目录是否有 SGID 权限 | ls -ld 目录名 | 执行ls -ld /opt/dev,输出中drwxr-sr-x的s在组权限位,代表有 SGID。 |
给目录添加 SGID 权限 | chmod g+s 目录名 或 chmod 2755 目录名 | 给/opt/dev添加 SGID:chmod g+s /opt/dev,目录权限变为drwxr-sr-x。 |
移除目录 SGID 权限 | chmod g-s 目录名 | 移除/opt/dev的 SGID:chmod g-s /opt/dev,权限恢复为drwxr-xr-x。 |
注意事项:
g+w),需配合umask确保新文件默认有组写权限(如umask 002),否则协作仍会受影响。