Linux用户权限设置是系统管理的基础内容,不同的权限配置决定了用户或进程对系统资源的可操作范围,下面详细介绍常见的权限设置类型及操作方法。

文件基础权限设置
Linux中每个文件或目录都有读、写、执行三种基础权限,分别对应所有者、所属组、其他用户三个维度,可通过chmod命令调整。
权限可以用数字或符号两种方式表示,数字方式中r对应4,w对应2,x对应1,三个维度的权限值相加就是最终的权限数字。比如所有者读写执行、所属组读执行、其他用户读权限,对应的数字就是754。
以下是使用数字方式修改文件权限的示例:
# 给test.txt文件设置754权限 chmod 754 test.txt # 递归修改dir目录及其下所有文件的权限为755 chmod -R 755 dir
符号方式的格式为[用户][操作][权限],用户部分u代表所有者,g代表所属组,o代表其他用户,a代表所有用户;操作部分+代表添加权限,-代表移除权限,=代表设置权限。
符号方式修改权限的示例如下:
# 给test.txt的所有者添加执行权限 chmod u+x test.txt # 移除其他用户对dir目录的写权限 chmod o-w dir # 给所属组设置读和执行权限 chmod g=rx dir
文件所有者与所属组设置
除了权限本身,文件的所有者和所属组也会影响权限的生效范围,可通过chown命令修改。
chown可以同时修改所有者和所属组,也可以单独修改其中一个,修改目录时加上-R参数可以递归处理目录下的所有内容。
操作示例如下:
# 修改test.txt的所有者为user1,所属组为group1 chown user1:group1 test.txt # 只修改dir目录的所有者为user2,递归处理 chown -R user2 dir # 只修改test.txt的所属组为group2 chown :group2 test.txt
特殊权限设置
除了基础权限,Linux还有三种特殊权限,分别是SUID、SGID、SBIT,对应不同的特殊场景需求。
- SUID:仅对可执行文件生效,执行该文件的用户会临时获得文件所有者的权限,比如
/usr/bin/passwd就设置了SUID,普通用户可以修改自己的密码。 - SGID:对文件生效时,执行该文件的用户会临时获得文件所属组的权限;对目录生效时,在目录下新建的文件会自动继承目录的所属组。
- SBIT:仅对目录生效,目录下的文件只有所有者、目录所有者、root可以删除,比如
/tmp目录就设置了SBIT。
特殊权限的设置方式如下,SUID对应数字4,SGID对应数字2,SBIT对应数字1,放在基础权限数字的前面:
# 给test.sh设置SUID权限 chmod 4755 test.sh # 给dir目录设置SBIT权限 chmod 1755 dir
用户sudo权限设置
sudo允许普通用户以root身份执行特定命令,不需要知道root密码,权限配置在/etc/sudoers文件中,修改该文件需要使用visudo命令,避免语法错误导致sudo不可用。
常见的sudo配置规则如下:
| 配置内容 | 含义 |
|---|---|
| user1 ALL=(ALL) ALL | user1可以在所有主机上以所有用户身份执行所有命令 |
| %group1 ALL=(ALL) /usr/bin/apt | group1组的用户可以在所有主机上以所有用户身份执行apt命令 |
| user2 ALL=(ALL) NOPASSWD: /usr/bin/systemctl | user2执行systemctl命令时不需要输入密码 |
以下是添加用户sudo权限的示例:
# 使用visudo编辑sudoers文件 visudo # 在文件末尾添加如下内容,允许user1无密码执行所有命令 # user1 ALL=(ALL) NOPASSWD: ALL
权限查看方法
设置权限后可以通过ls -l命令查看文件或目录的权限详情,输出内容的第一个字段就是权限标识。
权限标识的格式为[文件类型][所有者权限][所属组权限][其他用户权限],文件类型中-代表普通文件,d代表目录,l代表软链接;特殊权限会在对应位置显示s或t,比如SUID会在所有者执行权限位置显示s。
查看权限的示例如下:
# 查看当前目录下所有文件的权限 ls -l # 查看/etc/passwd文件的权限 ls -l /etc/passwd