使用 ls -l 查看,输出格式如下:
plaintext
-rwxr-xr-x 1 root root 1234 Mar 31 15:00 script.sh第一段 rwxr-xr-x 共 10 个字符:
-= 文件,d= 目录,l= 软链接)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-xchmod 644 document.txt # 所有者:rw-,组和其他:r--chmod 700 ~/private/ # 仅所有者可访问private目录通过字母指定用户和权限
❝格式:
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 # 同时给所有者和组添加执行权限,移除其他用户的读权限chmod u+s 文件名# 或数字法chmod 4755 文件名+s:设置 SUID/SGID(执行文件时继承所有者 / 组权限,如passwd命令)chmod u+s /usr/bin/passwd # 普通用户执行passwd时临时获得root权限chmod g+s 目录名# 或数字法chmod 2775 目录名chmod +t 目录名# 或数字法chmod 1777 目录名+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的所有者改为alicechown :dev team/ # 将team目录的所属组改为dev组chown bob:dev project/ # 将project目录的所有者改为bob,所属组改为devchown -R root:/var/log# 递归将/var/log目录及内容的所有者改为root,组改为log组su # 切换到root(需要root密码)su - root # 完全切换root环境(推荐)su alice # 切换到alice用户普通用户默认无系统级操作权限(如修改系统配置、安装软件),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的所属组改为devchgrp users file1.txt file2.txt file3.txt # 将file1.txt file2.txt file3.txt的所属组改为userschgrp -R admin docs/ # 递归将docs目录及内容的所属组改为adminchgrp -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 可写)。ls -l /usr/bin/passwd-rwsr-xr-x 1 root root ...ls -l 文件名 | ls -l /usr/bin/passwd,输出中-rwsr-xr-x的s在所有者权限位,代表有 SUID。 | |
chmod u+s 文件名chmod 4755 文件名 | test.sh添加 SUID:chmod u+s test.sh,此时文件权限会显示为-rwsr-xr-x。 | |
chmod u-s 文件名 | test.sh的 SUID:chmod u-s test.sh,权限会恢复为-rwxr-xr-x。 |
注意事项
bash)加 SUID,可能导致权限泄露,被恶意利用获取 root权限。SGID 既可以作用于可执行文件,也可以作用于目录,日常使用中作用于目录的场景更常见。当用户在带有 SGID 权限的目录下创建文件 / 子目录时,新文件 / 子目录的组会自动继承该目录的组,而非创建者的默认组。
chmod 2775 /sharedchmod g+s /sharedls -ld 目录名 | ls -ld /opt/dev,输出中drwxr-sr-x的s在组权限位,代表有 SGID。 | |
chmod g+s 目录名chmod 2755 目录名 | /opt/dev添加 SGID:chmod g+s /opt/dev,目录权限变为drwxr-sr-x。 | |
chmod g-s 目录名 | /opt/dev的 SGID:chmod g-s /opt/dev,权限恢复为drwxr-xr-x。 |
注意事项:
g+w),需配合umask确保新文件默认有组写权限(如umask 002),否则协作仍会受影响。/tmp设置:
chmod 1777 /tmpchmod +t /sharedumask指定在建立文件时预设的权限掩码。
umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
语法:
❝umask [-S][权限掩码]
参数说明:
以文字的方式来表示权限掩码。
示例:
查看:
umask #获取当前权限掩码 输出信息如下:0022置团队共享(新建文件默认为 664,目录 775),接下来,使用指令"mkdir"创建一个目录,并使用指令"ls"获取该目录的详细信息,输入命令如下:
$ mkdir test1 #创建目录 $ ls –d –l test1/ #显示目录的详细信息执行上面的命令后,将显示新创建目录的详细信息,如下所示:
drwxr-xr-x 2 rootlocal rootlocal 4096 2011-9-19 21:46 test1/ 注意:在上面的输出信息中,"drwxr-xr-x"="777-022=755"。
chmod +x backup.sh./backup.shmkdir /sharedchmod 2775 /sharedchown -R :dev /shared所有人可进入,同组可读写,文件自动继承 dev 组。
chmod 600 ~/.ssh/id_rsachmod 700 ~/.sshchmod 1777 /public快速查看权限
ls -l 文件名 # 看文件权限ls -ld 目录名 # 看目录权限stat 文件名 # 看详细权限(含数字)