chmod g s oracle,chmod

chmod(1)

名称chmod - 更改文件的权限模式

用法概要

chmod [-fR] absolute-mode file...

chmod [-fR] symbolic-mode-list file...

chmod [-fR] acl_operation file...

chmod [-fR] [-@ named_attribute]...attribute_specification_list file...

描述

chmod 实用程序可更改或分配文件的模式。

chmod 也可用于修改文件和目录的访问控制列表 (Access Control List, ACL),并修改正规文件、目录和不透明扩展属性文件的布尔读写系统属性。

绝对模式

绝对模式命令行格式如下:

chmod [options] absolute-mode file . . .

其中 absolute-mode 使用八进制数字 nnnn 指定,定义如下:

n

一个从 0 到 7 的数字。绝对模式通过以下任意模式的 OR 运算构建而成:

4000

执行时设置用户 ID。

20#0

如果 # 为 7、5、3 或 1,则在执行时设置组 ID。

如果 # 为 6、4、2 或 0,则启用强制性锁定。

对于目录,通过用于传播组 ID 的 BSD 语义创建文件。使用该选项,在目录中创建的文件和子目录将继承目录而非当前进程的组 ID。对于目录,只能使用符号模式设置或清除 setgid 位(分别使用 g+s 或 g-s)。

1000

启用 sticky 位。请参见 chmod(2)。

0400

允许所有者读取。

0200

允许所有者写入。

0100

允许所有者执行(在目录中搜索)。

0700

允许所有者读取、写入和执行(搜索)。

0040

允许组读取。

0020

允许组写入。

0010

允许组执行(在目录中搜索)。

0070

允许组读取、写入和执行(搜索)。

0004

允许其他用户读取。

0002

允许其他用户写入。

0001

允许其他用户执行(在目录中搜索)。

0007

允许其他用户读取、写入和执行(搜索)。

对于目录,无法在绝对模式 (chmod 20#0 ...) 下设置(或清除)setgid 位;必须在符号模式下使用 'chmod g+s ...'(或 'chmod g-s ...')进行设置。

符号模式

符号模式命令行格式如下:

chmod [options] symbolic-mode-list file . . .

其中 symbolic-mode-list 是符号模式表达式的逗号分隔列表(中间无空格),格式如下:

[who] operator [permissions]

将按指定顺序执行运算。如果一个运算符后跟多个 permissions 字母,将同时执行相应的多项运算。

who

零个或多个字符 u、g、o 和 a,指定要更改或分配谁的权限:

u

用户的权限

g

组的权限

o

其他用户的权限

a

所有权限(用户、组和其他用户)

如果省略了 who,则缺省为 a,但是会考虑文件模式创建掩码(有关更多信息,请参见 sh(1) 或 csh(1) 中的 umask)的设置。如果省略了 who,chmod 不会覆盖用户掩码的限制。

operator

+、− 或 =,指定要如何更改权限:

+

添加权限。

如果省略了 permissions,将不添加任何内容。

如果省略了 who,将添加由 permissions 表示的文件模式位,文件模式创建掩码中有相应位的 except。

如果指定了 who,将添加由 permissions 表示的文件模式位。

解除权限。

如果省略了 permissions,将不执行任何操作。

如果省略了 who,将清除由 permissions 表示的文件模式位,文件模式创建掩码中有相应位的 except。

如果指定了 who,将清除由 permissions 表示的文件模式位。

=

绝对分配权限。

如果省略了 who,将清除所有文件模式位;如果指定了 who,将清除由 who 表示的文件模式位。

如果省略了 permissions,将不执行其他任何操作。

如果省略了 who,将添加由 permissions 表示的文件模式位,文件模式创建掩码中有相应位的 except。

如果指定了 who,将添加由 permissions 表示的文件模式位。

= 有一种绝对效应,即重置由 who 表示的其他所有位,这与其他符号运算不同。省略 permissions 只在使用 = 解除所有权限时有用。

permission

以下字母的任意兼容组合:

l

强制性锁定

r

读取权限

s

用户或组 set-ID

t

sticky 位

w

写入权限

x

执行权限

X

执行权限,如果文件为目录或者如果其他用户类之一具有执行权限

u、g、o

分别表示将从当前用户、组或其他用户模式中解除 permission。

文件的权限可能会因用户标识号 (user identification number, UID) 或组标识号 (group identification number, GID) 而异。权限以三个序列描述,每个序列包含三个字符:

用户

其他用户

rwx

rwx

rwx

本例(用户、组和其他用户都具有读取、写入和执行指定文件的权限)说明了授予权限的两个类别:访问类和权限本身。

字母 s 只有与 u 或 g 一起使用才有意义,而 t 只有与 u 一起使用才起作用。

文件和记录强制性锁定 (l) 是指某个文件能够在程序访问该文件的同时锁定其读取或写入权限。

在设置了 set-group-ID 位(反映为 'ls -ld' 输出中的 -----s--- 或 -----l---)的目录中,将使用父目录而非当前进程的组 ID 创建文件和子目录。

无法在允许组执行的同时锁定文件禁止执行。此外,也无法在启用 set-group-ID 位的同时锁定文件禁止执行。因此,以下示例中的命令无效,将导致显示错误消息:

chmod g+x,+l file

chmod g+s,+l file

只有某个文件或目录的所有者(或超级用户)可更改该文件或目录的模式。只有超级用户可设置非目录文件的 sticky 位。如果您不是超级用户,chmod 将屏蔽 sticky 位,但是不会返回错误。要启用某个文件的 set-group-ID 位,您自己的组 ID 必须对应于该文件的组 ID,并且必须设置组执行。

ACL 运算

访问控制列表 (Access Control List, ACL) 是访问控制条目 (Access Control Entries, ACE) 的列表,每个 ACE 定义特定某个用户类的访问权限。ACE 列表将从零开始进行编号。ACE 在 ACL 中的位置称为 index。该索引将用作下方所述多个 chmod 命令的参数。有关 ACL 和 ACE 的详细说明,请参见在 Oracle Solaris 11.2 中管理 ZFS 文件系统。

Oracle Solaris 实用程序(包括 chmod)既支持 NFSv4,也支持较新的 POSIX 样式的 ACL 规范。这些规范阐明了下方所示 acl_specification 字段的语法和语义。这两种 ACL 规范将在下文各自相应的小节进行介绍。

ACL 运算命令行格式如下:

chmod [options] A[index]- file ...

chmod [options] A-acl_specification file ...

chmod [options] A[index]{+|=}acl_specification file ...

其中 acl_specification 是逗号分隔列表(中间无空格),格式如下:

A[index]+acl_specification

将 acl_specification 中指定的访问控制条目 (Access Control Entries, ACE) 附加到文件 ACL 的开头。根据文件系统,ACL 应用于文件时可进行重新排序。如果指定了可选 index,则将在指定的 index 前面插入新 ACE。

A-

删除文件当前 ACL 的所有 ACE,将当前的 ACL 替换为仅表示当前文件模式的新 ACL。

Aindex-

删除 index 编号指定的 ACE。

A-acl_specification

删除 acl_specification 指定的 ACE(如果当前文件的 ACL 中存在)。

A=acl_specification

将文件的整个 ACL 替换为 acl_specification。

A[index]=acl_specification

从特定索引编号开始替换文件当前 ACL 中的 ACE。如果指定了多个 ACE,则 acl_specification 中的每个后续 ACE 替换当前 ACL 中的相应 ACE。

POSIX 样式的 ACL 规范(由 UFS 支持)

POSIX 样式的 ACL(由 UFS 支持)指定为以下冒号 (:) 分隔字段。

user::perms

文件所有者权限。

user:username:perms

特定用户的权限。

group::perms

文件组成员权限。

group:groupname:perms

特定组的权限。

other::perms

文件所有者或文件组成员以外的其他用户的权限。

mask:perms

ACL 掩码。掩码条目指定允许用户(所有者除外)和组具有的最大权限。

default:user::perms

缺省文件所有者权限。

default:user:username:perms

特定用户的缺省权限。

default:group::perms

缺省文件组成员权限。

default:group:groupname:perms

特定组的缺省权限。

default:other:perms

文件所有者或文件组成员之外的其他用户的缺省权限。

default:mask:perms

缺省 ACL 掩码。

使用以上规范可指定 ACL,例如:

user:tom:rw-,mask:rwx,group:staff:r-x

NFSv4 ACL 规范(由 NFSv4 和 ZFS 支持)

NFSv4 ACL 可提供更丰富的 ACL 语义。这种规范可提供允许和拒绝条目、更精细的权限和增强的继承控制。

NFSv4 ACL 指定为以下冒号 (:) 分隔字段。

owner@:[:inheritance flags]:

文件所有者的权限。

group@:[:inheritance flags]:

文件组成员的权限。

everyone@:[:inheritance flags]:

所有人(包括文件所有者和组成员)的权限。

user::[:inheritance flags]:

特定用户的权限。

usersid::[:inheritance flags]:

特定用户的权限,但是用户由 SID 指定。

group::[:inheritance flags]:

特定组的权限。

groupsid::[:inheritance flags]:

特定组的权限,但是组由 SID 指定。

sid::[:inheritance flags]:

特定 SID 的权限,但是 SID 是用户还是组无关紧要。

可采用三种不同 chmod ACL 格式指定权限:详细、紧凑或位置。详细格式使用字词指示用正斜杠 (/) 字符分隔权限。紧凑格式使用权限字母标识权限,位置格式使用权限字母标识权限,或使用连字符 (-) 标识没有任何权限。

详细模式的权限以及其括号中的缩写形式(紧凑和位置模式)如下所述:

read_data (r)

读取文件数据的权限。

list_directory (r)

列出目录内容的权限。

write_data (w)

在文件的偏移范围内任意位置修改文件数据的权限。

add_file (w)

向目录中添加新文件的权限。

append_data (p)

修改文件数据的能力,但仅从 EOF 开始。

当前不支持此权限。

add_subdirectory (p)

在目录中创建子目录的权限。

read_xattr (R)

读取文件扩展属性的能力。

write_xattr (W)

创建扩展属性或向扩展属性目录写入的能力。

execute (x)

执行文件的权限。

read_attributes (a)

读取文件的基本属性(非 ACL)的能力。

write_attributes (A)

将与文件或目录关联的时间更改为任意值的权限。

delete (d)

delete_child (D)

read_acl (c)

读取文件 ACL 的权限。

write_acl (C)

写入文件 ACL 的权限。

write_owner (o)

更改文件所有者的权限。

synchronize (s)

在支持同步读写的服务器上本地访问文件的权限。

当前不支持此权限。

使用紧凑 ACL 格式时,将通过使用指示权限的 14 个唯一字母来指定权限。

使用位置 ACL 格式时,将权限指定为类似于 ls –V 格式的位置参数。连字符 (-) 指示在该位置未授予任何权限,可以忽略它,只需指定必需的字母。

将按照位置表示法中指定的顺序列出上面的字母。

使用这些字母指定权限的方式如下:

rwx--D--------

可以删除连字符,按如下方式压缩字符串:

rwxD

还支持多个特殊权限集或别名。以下权限集的使用方式与指定详细权限的方式相同。

full_set

所有权限。

modify_set

除 write_acl 和 write_owner 以外的所有权限。

read_set

read_data、read_acl、read_attributes 和 read_xattr。

write_set

write_data、append_data、write_attributes 和 write_xattr

可以采用三种格式指定可选继承标志。第一种格式使用字词指明各种继承标志,以正斜杠 (/) 字符分隔不同的标志。

file_inherit (f)

继承到所有新创建的文件。

dir_inherit (d)

继承到所有新创建的目录。

inherit_only (i)

如果放置到某个目录上,不应用于该目录,仅继承到新创建的文件和目录。该标志要求还要指定 file_inherit 和/或 dir_inherit。

no_propagate (n)

表示 ACL 条目应该继承到目录中的对象,但是向下一个级别后继承应该停止。该标志要求还要指定 file_inherit 和/或 dir_inherit。

列出的继承标志也可以采用紧凑格式指定,或指定为类似于 ls –V 格式的位置参数。连字符表示该位置的继承标志未以 ACL 位置格式指定。

使用这些字母,可以按以下任意等效方式指定继承标志。

file_inherit/dir_inherit/no_propagate

fd-n--

fdn

使用这种继承模型时,可以指定 ACL 条目,例如:

user:tom:read_data/write_data/read_attributes:file_inherit:allow

user:fred:read_data:file_inherit/dir_inherit:deny

user:bob:read_data:allow

属性运算

属性运算命令行格式如下:

chmod [options] attribute_specification_list file ...

其中 attribute_specification_list 是指字符 S 后跟一个或多个 attribute_specifications 的逗号分隔列表。每个 attribute_specification 格式如下:

[operator]attribute_specifier

operator 为以下运算符之一:

+

将关联 attribute_specifier 指定的每个属性调整为与 attribute_specifier 指定的值匹配。

-

将关联 attribute_specifier 指定的每个属性调整为与 attribute_specifier 指定的值的逆向值匹配。

=

将关联 attribute_specifier 指定的每个属性调整为与 attribute_specifier 指定的值匹配。将清除与当前文件关联且并非由 attribute_specifier 指定的任何布尔读写扩展系统属性。

如果未在 attribute_specification 中指定 operator,则 chmod 的行为方式如同指定了 + 一样。

attribute_specifier 采用以下几种格式之一:

a

设置与当前文件关联的所有布尔读写扩展系统属性。

c[compact_attribute_list]c'{'compact_attribute_list'}'

设置由 compact_attribute_list 标识的每个布尔读写扩展系统属性。

v[verbose_attribute_setting]v['{'verbose_attribute_setting_list'}']

设置由 verbose_attribute_setting 标识的每个布尔读写扩展系统属性。

compact_attribute_list 是本节后面属性名称和缩写字符列表中的零个或多个相邻属性缩写字符的列表。compact_attribute_list 中可以包含任意数量的连字符 (-)。系统将忽略这些连字符。

verbose_attribute_setting 是本节后面属性名称和缩写字符列表中的属性名称,也可以选择紧接其前面添加 no。如果属性名称未与 no 一起使用,将设置属性;否则将清除属性。

verbose_attribute_setting_list 是零个或多个逗号分隔 verbose_attribute_setting。

将累积为一个文件指定的多项运算,将其全部设置为一个文件操作数的一项属性设置运算。如果某个属性在 attribute_specification_list 中指定了多次,将应用最后一次指定的运算。

以下是属性名称和缩写字符列表:

属性名称

缩写字符

hidden

H

sparse

s

system

S

readonly

R

archive

A

nounlink

u

immutable

i

appendonly

a

nodump

d

av_quarantined

q

av_modified

m

sensitive

T

选项

支持以下选项:

–f

强制。如果无法更改文件模式,chmod 不会报告错误。

–R

向下递归目录参数,在此过程中设置每个文件的模式。如果遇到符号链接,将更改目标文件的模式,但是不执行递归。

–@ named_attribute

对每个文件操作数的指定扩展属性文件而非文件操作数本身执行属性运算。如果提供了多项 –@ 运算,属性规范模式将应用于每个指定的属性文件。

* 的指定属性会将含义转至 chmod,该命令将认为表示与文件操作数关联的所有扩展属性文件。这不适用于特殊文件 . 和 ..。

.. 的指定属性会将特殊含义转至 chmod,该命令将认为表示文件操作数本身。这样,调用一次 chmod 即可将属性规范模式应用于文件操作数的指定属性文件和文件操作数本身。

操作数

支持下列操作数:

absolute-modesymbolic-mode-list

表示将对 file 操作数之一指定的每个文件的文件模式位做出的更改。有关更多信息,请参见本手册页“描述”部分中的“绝对模式”和“符号模式”。

acl_operation

表示要对文件 ACL 执行的修改。有关更多信息,请参见“描述”部分中的“ACL 运算”。

acl_operation 采用以下几种格式之一:

A[number] -

A-acl_specification

A[index]{+|=}acl_specification

attribute_specification_list

表示要对文件属性执行的修改。有关更多信息,请参见本手册页“描述”部分中的“属性运算”。

file

要修改其文件模式位的文件的路径名。

用法

有关 chmod 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)。

示例

示例 1拒绝执行权限

以下示例将拒绝所有人的执行权限:

% chmod a-x file

示例 2允许只读权限

以下示例将允许所有人的只读权限:

% chmod 444 file

示例 3使文件可读可写

以下示例将使文件可由组和其他用户读写:

% chmod go+rw file

% chmod 066 file

示例 4锁定文件拒绝访问

以下示例将锁定文件拒绝访问:

$ chmod +l file

示例 5授予对文件的读取、写入、执行和设置组 ID 权限

以下示例将授予所有人对文件的读取、写入和执行权限并启用设置组 ID:

$ chmod a=rwx,g+s file

$ chmod 2777 file

示例 6在 ZFS 文件中附加新 ACL 条目

以下示例将在 ZFS 文件中附加新 ACL 条目:

首先,显示当前 ACL:

$ ls -v file.3

-rw-r--r-- 1 marks staff 0 Oct 9 15:49 file.3

0:owner@:execute:deny

1:owner@:read_data/write_data/append_data/write_xattr/

write_attributes/write_acl/write_owner:allow

2:group@:write_data/append_data/execute:deny

3:group@:read_data:allow

4:everyone@:write_data/append_data/write_xattr/execute/

write_attributes/write_acl/write_owner:deny

5:everyone@:read_data/read_xattr/read_attributes/read_acl/

synchronize:allow

执行以下命令:

$ chmod A+user:lp:read_data:deny file.3

显示新 ACL:

$ ls -v file.3

-rw-r--r--+ 1 marks staff 0 Oct 9 15:49 file.3

0:user:lp:read_data:deny

1:owner@:execute:deny

2:owner@:read_data/write_data/append_data/write_xattr/

write_attributes/write_acl/write_owner:allow

3:group@:write_data/append_data/execute:deny

4:group@:read_data:allow

5:everyone@:write_data/append_data/write_xattr/execute/

write_attributes/write_acl/write_owner:deny

6:everyone@:read_data/read_xattr/read_attributes/read_acl/

synchronize:allow

示例 7在 UFS 文件中附加 POSIX 样式的新 ACL 条目

以下示例将在 UFS 文件中附加 POSIX 样式的新 ACL 条目:

首先,显示当前 ACL:

$ ls -v file.2

-rw-r--r-- 1 marks staff 0 Oct 9 15:52 file.2

0:user::rw-

1:group::r-- #effective:r--

2:mask:r--

3:other:r--

执行以下命令:

$ chmod A+user:lp:-wx file.2

显示新 ACL:

$ ls -v file.2

-rw-r--r--+ 1 marks staff 0 Oct 9 15:52 file.2

0:user::rw-

1:user:lp:-wx #effective:---

2:group::r-- #effective:r--

3:mask:r--

4:other:r--

示例 8在 ZFS 文件中的特定位置插入 ACL 条目

以下示例将在 ZFS 文件系统中的特定位置插入 ACL 条目:本例还说明了紧凑 ACL 格式的使用方法。

首先,显示 ACL 从中选择要插入新 ACE 的位置。

% ls -V file.1

-rw-r--r--+ 1 root root 0 Oct 6 12:16 file.1

user:lp:rw------------:------:allow

owner@:--x-----------:------:deny

owner@:rw-p---A-W-Co-:------:allow

group@:-wxp----------:------:deny

group@:r-------------:------:allow

everyone@:-wxp---A-W-Co-:------:deny

everyone@:r-----a-R-c--s:------:allow

接下来,在位置 3 插入一个新条目。这样会下推当前在位置 3 至 6 的条目。

执行以下命令:

$ chmod A3+user:marks:r:deny file.1

显示新 ACL:

$ ls -V file.1

-rw-r--r--+ 1 root staff 0 Feb 3 14:13 file.1

user:lp:rw------------:------:allow

owner@:--x-----------:------:deny

owner@:rw-p---A-W-Co-:------:allow

user:marks:r-------------:------:deny

group@:-wxp----------:------:deny

group@:r-------------:------:allow

everyone@:-wxp---A-W-Co-:------:deny

everyone@:r-----a-R-c--s:------:allow

示例 9在 UFS 文件中的特定位置插入 POSIX 样式的 ACL

将 ACL 存储到文件系统中时,文件系统将对其进行重新排序。以下示例说明了这种行为。

$ ls -v file.1

-rw-r--r--+ 1 root root 0 Sep 29 16:10 file.1

0:user::rw-

1:user:lp:rw- #effective:r--

2:group::r-- #effective:r--

3:mask:r--

4:other:r--

现在,在索引位置 3 插入一个条目。命令正常执行,但是文件系统会对 ACL 进行重新排序。

$ chmod A3+user:marks:rw- file.1

$ ls -v file.1

-rw-r--r--+ 1 root root 0 Sep 29 16:10 file.1

0:user::rw-

1:user:lp:rw- #effective:r--

2:user:marks:rw- #effective:r--

3:group::r-- #effective:r--

4:mask:r--

5:other:r--

实际上最终是在位置 2 插入了 ACL 条目,而不是按要求在位置 3 插入。

示例 10从 ZFS 文件中删除 ACL 条目

以下示例将从 ACL 中删除 lp 条目:

$ ls -v file.3

-rw-r--r--+ 1 marks staff 0 Oct 9 15:49 file.3

0:user:lp:read_data:deny

1:owner@:execute:deny

2:owner@:read_data/write_data/append_data/write_xattr/

write_attributes/write_acl/write_owner:allow

3:group@:write_data/append_data/execute:deny

4:group@:read_data:allow

5:everyone@:write_data/append_data/write_xattr/execute/

write_attributes/write_acl/write_owner:deny

6:everyone@:read_data/read_xattr/read_attributes/read_acl/

synchronize:allow

$ chmod A-user:lp:read_data:deny file.3

$ ls -v file.3

-rw-r--r-- 1 marks staff 0 Oct 9 15:49 file.3

0:owner@:execute:deny

1:owner@:read_data/write_data/append_data/write_xattr/

write_attributes/write_acl/write_owner:allow

2:group@:write_data/append_data/execute:deny

3:group@:read_data:allow

4:everyone@:write_data/append_data/write_xattr/execute/

write_attributes/write_acl/write_owner:deny

5:everyone@:read_data/read_xattr/read_attributes/read_acl/

synchronize:allow

示例 11从 UFS 文件中删除 POSIX 样式的 ACL

以下示例将从 ACL 中删除 lp 条目:

$ ls -v file.2

-rw-r--r--+ 1 marks staff 0 Oct 9 15:52 file.2

0:user::rw-

1:user:lp:-wx #effective:---

2:group::r-- #effective:r--

3:mask:r--

4:other:r--

$ chmod A-user:lp:-wx file.2

$ ls -v file.2

-rw-r--r-- 1 marks staff 0 Oct 9 15:52 file.2

0:user::rw-

1:group::r-- #effective:r--

2:mask:r--

3:other:r--

示例 12按索引编号从 ZFS 文件中删除特定 ACL 条目

请考虑以下 ACL:

$ ls -v file

0:group:staff:read_data/write_data/execute/read_acl:allow

1:user:bin:read_data:deny

2:user:bin:read_data:allow

3:owner@:write_data/append_data:deny

4:owner@:read_data/write_xattr/execute/write_attributes/write_acl

/write_owner:allow

5:group@:write_data/append_data:deny

6:group@:read_data/execute:allow

7:everyone@:write_data/append_data/write_xattr/write_attributes

/write_acl/write_owner:deny

8:everyone@:read_data/read_xattr/execute/read_attributes/read_acl

/synchronize:allow

删除 bin 的第二个用户条目。

$ chmod A2- file

$ ls -v file

0:group:staff:read_data/write_data/execute/read_acl:allow

1:user:bin:read_data:deny

2:owner@:write_data/append_data:deny

3:owner@:read_data/write_xattr/execute/write_attributes/write_acl

/write_owner:allow

4:group@:write_data/append_data:deny

5:group@:read_data/execute:allow

6:everyone@:write_data/append_data/write_xattr/write_attributes

/write_acl/write_owner:deny

7:everyone@:read_data/read_xattr/execute/read_attributes/read_acl

/synchronize:allow

示例 13从 UFS 文件中删除 POSIX 样式的特定 ACL 条目

下面的示例将按索引编号从以下 ACL 中删除 lp 条目:

$ ls -v file.1

-rw-r--r--+ 1 root root 0 Sep 29 16:10 file.1

0:user::rw-

1:user:lp:rw- #effective:r--

2:group::r-- #effective:r--

3:mask:r--

4:other:r--

$ chmod A1- file.1

$ ls -v

-rw-r--r--+ 1 root root 0 Sep 29 16:10 file.1

0:user::rw-

1:group::r-- #effective:r--

2:mask:r--

3:other:r--

示例 14从文件中删除所有 ACL

以下命令可用于 NFSv4/ZFS 或 POSIX 样式的 ACL。

请考虑以下 ACL:

$ ls -v file.3

-rw-r--r--+ 1 marks staff 0 Oct 9 15:49 file.3

0:user:lp:read_data/write_data:allow

1:user:marks:read_acl:allow

2:owner@:execute:deny

3:owner@:read_data/write_data/append_data/write_xattr/

write_attributes/write_acl/write_owner:allow

4:group@:write_data/append_data/execute:deny

5:group@:read_data:allow

6:everyone@:write_data/append_data/write_xattr/execute/

write_attributes/write_acl/write_owner:deny

7:everyone@:read_data/read_xattr/read_attributes/read_acl/

synchronize:allow

有效地删除现有 ACL 并替换为表示文件权限位的 ACL。

$ chmod A- file.3

$ ls -v file.3

-rw-r--r-- 1 marks staff 0 Oct 9 15:49 file.3

0:owner@:execute:deny

1:owner@:read_data/write_data/append_data/write_xattr/

write_attributes/write_acl/write_owner:allow

2:group@:write_data/append_data/execute:deny

3:group@:read_data:allow

4:everyone@:write_data/append_data/write_xattr/execute/

write_attributes/write_acl/write_owner:deny

5:everyone@:read_data/read_xattr/read_attributes/read_acl/

synchronize:allow

示例 15替换 ZFS 文件中的全部 ACL 条目

如果要完全替换 ACL,请使用以下 chmod 语法:

$ chmod A=owner@:read_data/write_data:allow,group@:read_data/

write_data:allow,user:lp:read_data:allow file.4

$ ls -v file.4

-rw-rw----+ 1 marks staff 0 Oct 9 16:12 file.4

0:owner@:read_data/write_data:allow

1:group@:read_data/write_data:allow

2:user:lp:read_data:allow

示例 16替换 UFS 文件中 POSIX 样式的整个 ACL

该操作稍微有些复杂。替换的 ACL 需要用于表示文件所有者、文件组所有者、其他用户和掩码的一些必要条目以及要设置的其他任何条目。

$ chmod A=user::rw-,group::rw-,other::---,mask:r--,

user:lp:r-- file.3

$ ls -v file.3

-rw-r-----+ 1 root root 0 Oct 9 16:14 file.3

0:user::rw-

1:user:lp:r-- #effective:r--

2:group::rw- #effective:r--

3:mask:r--

4:other:---

示例 17替换 ZFS 文件中的特定条目

请考虑以下 ACL:

$ ls -v file.5

-rw-r--r--+ 1 marks staff 0 Oct 9 16:18 file.5

0:user:marks:read_data:allow

1:owner@:execute:deny

2:owner@:read_data/write_data/append_data/write_xattr/

write_attributes/write_acl/write_owner:allow

3:group@:write_data/append_data/execute:deny

4:group@:read_data:allow

5:everyone@:write_data/append_data/write_xattr/execute/

write_attributes/write_acl/write_owner:deny

6:everyone@:read_data/read_xattr/read_attributes/read_acl/

synchronize:allow

现在,将用户 marks 的访问权限从允许更改为拒绝:

$ chmod A0=user:marks:read_data:deny file.5

$ ls -v file.5

-rw-r--r--+ 1 marks staff 0 Aug 23 09:11 file.5

0:user:marks:read_data:deny

1:owner@:read_data/write_data/append_data/write_xattr/write_attributes

/write_acl/write_owner:allow

2:group@:write_data/append_data/execute:deny

3:group@:read_data:allow

4:everyone@:write_data/append_data/write_xattr/execute/write_attributes

/write_acl/write_owner:deny

5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize

:allow

示例 18替换 UFS 文件中 POSIX 样式的特定 ACL

请考虑以下 ACL:

$ ls -v file.4

-rw-r--r--+ 1 marks staff 0 Oct 9 16:21 file.4

0:user::rw-

1:user:lp:rwx #effective:r--

2:group::r-- #effective:r--

3:mask:r--

4:other:r--

现在,将 lp 的权限从 rwx 更改为 r--:

$ chmod A1=user:lp:r-- file.4

$ ls -v file

-rw-r--r--+ 1 marks staff 0 Oct 9 16:21 file.4

0:user::rw-

1:user:lp:r-- #effective:r--

2:group::r-- #effective:r--

3:mask:r--

4:other:r--

示例 19在 ZFS 文件上设置 ACL 继承标志

只能在 ZFS 文件上设置继承标志。在目录上设置 ACL 时,可选择设置多个继承标志。

假设有一个用户 lp 对应的 ACL 条目,您希望其继承到某个目录中新创建的文件。首先,需要在该目录上创建一个可继承的 ACL 条目:

$ chmod A+user:lp:read_data:file_inherit:allow test.dir

$ ls -dv test.dir

drwxr-xr-x+ 2 marks staff 2 Aug 23 09:08 test.dir/

0:user:lp:read_data:file_inherit:allow

1:owner@::deny

2:owner@:list_directory/read_data/add_file/write_data/add_subdirectory

/append_data/write_xattr/execute/write_attributes/write_acl

/write_owner:allow

3:group@:add_file/write_data/add_subdirectory/append_data:deny

4:group@:list_directory/read_data/execute:allow

5:everyone@:add_file/write_data/add_subdirectory/append_data/write_xattr

/write_attributes/write_acl/write_owner:deny

6:everyone@:list_directory/read_data/read_xattr/execute/read_attributes

/read_acl/synchronize:allow

lp 条目即会继承到目录 test.dir 中新创建的文件。

$ touch test.dir/file.test

$ ls -v test.dir/file.test

-rw-r--r--+ 1 marks staff 0 Oct 9 16:29 test.dir/file.test

0:user:lp::deny

1:user:lp:read_data:allow

2:owner@:execute:deny

3:owner@:read_data/write_data/append_data/write_xattr/

write_attributes/write_acl/write_owner:allow

4:group@:write_data/append_data/execute:deny

5:group@:read_data:allow

6:everyone@:write_data/append_data/write_xattr/execute/

write_attributes/write_acl/write_owner:deny

7:everyone@:read_data/read_xattr/read_attributes/read_acl/

synchronize:allow

用户 lp 条目即会继承到新创建的文件。可以指定继承标志的多个组合。例如,如果希望 lp 条目也继承到多个目录,则可以使用以下命令:

$ chmod A+user:lp:read_data:file_inherit/\

dir_inherit:allow test.dir

示例 20替换 ZFS 文件的系统属性

以下示例将替换 ZFS 文件的系统属性:

$ chmod S=v{archive,hidden,readonly,system,appendonly,\

nonodump,immutable,noav_modified,noav_quarantined,\

nounlink,nosensitive} file1

$ chmod S=c{AHRSaiu} file1

$ chmod S=c{AHRSa-i--u-} file1

$ chmod S=cAHRSaiu file1

$ chmod -@ '..' S=cAHRSaiu file1

假设具有相应的特权,则将设置 file1 的以下系统属性:archive、hidden、readonly、system、appendonly、immutable 和 nounlink。假设具有相应的特权,则将清除 file1 的以下系统属性:nodump、av_modified 和 av_quarantined 和 sensitive。

示例 21清除 ZFS 文件的所有系统属性

以下示例将清除 ZFS 文件的所有系统属性:

$ chmod S-a file1

$ chmod -@ '..' S-a file1

假设具有相应的特权,则将清除 file1 的所有布尔读写系统属性。

示例 22设置 ZFS 文件的指定属性文件的系统属性

以下示例将设置 ZFS 文件的指定属性文件的系统属性,而非该文件本身的系统属性:

$ chmod -@ myattr S+vhidden file1

这样将设置 file1 的指定属性文件 myattr 的隐藏系统属性,而非该文件本身的隐藏系统属性。

示例 23设置 ZFS 文件的所有指定属性文件的系统属性

以下示例将设置 ZFS 文件的所有指定属性文件的系统属性,而非该文件本身的系统属性:

$ chmod -@ '*' S+a file1

示例 24设置 ZFS 文件的所有指定属性文件的系统属性

以下示例将设置 ZFS 文件的所有指定属性文件的系统属性,以及该文件本身的系统属性:

$ chmod -@ '..' -@ '*' S+vhidden file1

这样将设置 file1 的所有指定属性文件的隐藏系统属性,以及该文件本身的隐藏系统属性。

示例 25在目录分层结构中向下递归

以下示例将在目录分层结构中向下递归,并设置所有指定属性文件、ZFS 文件操作数以及目录本身的所有系统属性:

$ chmod -R -@ '..' -@ '*' S+a directory1

这样将设置所有正规文件的所有指定属性文件和 directory1 目录分层结构中目录的隐藏系统属性,以及 directory1 本身的隐藏系统属性。

示例 26设置 ZFS 文件的 hidden 和 system 系统属性

以下示例将设置 ZFS 文件的 hidden 和 system 系统属性:

$ chmod S+cHS file1

$ chmod S+vhidden,+vsystem file1

$ chmod S+v{hidden,system} file1

$ chmod S+c{-HS--------} file1

$ chmod S-v{nohidden,nosystem} file1

$ chmod S-v{hidden,system},+v{hidden,system} file1

示例 27清除 ZFS 文件的所有系统属性

以下示例将清除 ZFS 文件的所有系统属性:

$ chmod S-a file1

$ chmod S=v{} file1

在下面的两个示例中,最后指定的属性运算优先执行。

在本例中,替换属性名称列表 ({}) 将清除 file1 的所有系统属性:

$ chmod S+cHS,=v{} file1

在本例中,清除属性运算 (–a) 将清除 file1 的所有系统属性:

$ chmod S+vhidden,+vsystem,-a file1

示例 28设置文件的所有布尔读写系统属性的值

以下示例会将某个文件的所有布尔读写系统属性的值设置为与另一个文件的布尔读写系统属性的值相同:

$ chmod S=v`ls -/v file1|sed -n '2s/.*{/{/p'` file2

假设具有相应的特权,并且 file1 和 file2 支持的系统属性相同,则为 file1 设置的所有系统属性也会为 file2 设置。为 file1 清除的所有系统属性也会为 file2 清除。

环境变量

有关影响 chmod 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_CTYPE、LC_MESSAGES 和 NLSPATH。

退出状态

将返回以下退出值:

0

成功完成。

>0

出现错误。

属性

有关下列属性的说明,请参见 attributes(5):

属性类型

属性值

可用性

system/core-os

CSI

Enabled(已启用)

接口稳定性

Committed(已确定)

另请参见

附注

绝对更改对目录的 set-group-ID 位不起作用。必须使用 g+s 或 g-s。

chmod 允许生成无用的模式,前提是这些模式不违法(例如,使文本文件成为可执行文件)。chmod 不会检查文件类型来查看强制性锁定是否有意义。

如果是使用 nosuid 选项挂载的文件系统,则不允许 setuid 执行。

如果使用 chmod 更改包含 ACL 条目的文件的文件组所有者权限,则会同时将文件组所有者权限和 ACL 掩码更改为新的权限。请注意,对于文件中有其 ACL 条目的附加用户和组,新的 ACL 掩码权限可能会更改其有效权限。使用 getfacl(1) 或 ls(1) 命令可确保为所有 ACL 条目设置相应的权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux lzo 压缩文件,Linux常用压缩和解压命令

.tar 解包 tar xvf filename.tar.tar 打包 tar cvf filename.tar dirname.gz 解压1 gunzip filename.gz.gz 解压2 gzip -d filename.gz.gz 压缩 gzip filename.tar.gz 和 .tgz 解压 tar zxvf filename.tar.gz.tar.gz 和 .tgz 压缩 tar zcvf filename.tar.gz dirname.bz2 解压1 …

linux进程cpu时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼图 1 RT-Linux结构RT -Linux的关键技术是通过软件来模拟硬件的中断控制器。当Linux系统要封锁CPU的中断时时,RT-Linux中的实时子系统会截取到这个请求,把它记录下来,而实际上并不真正封锁硬件中断…

linux中进行远程服务器连机可以采用telnet,端口号为,使用telnet测试指定端口的连通性...

原标题:使用telnet测试指定端口的连通性telnet 是一个阉割版的 ssh ,它数据不加密,数据容易被盗窃,也容易受中间人攻击,所以默认情况下 telnet 端口是必须要被关闭的。telnet为用户提供了在本地计算机上完成远程主机工…

linux xd命令,看Linux文件的内容:用cat,less,more,head,tail,nl,od,xxd,gv,xdvi命令

使用命令在Linux系统中查看文件的内容是Linux管理员的基本技能之一,在Linux中,有许多应用程序以不同的方式显示文件内容。您可以使用cat、less、more、head、tail、nl、od、xxd、gv、xdvi命令来查看文本文件或任何其他文件。为了对此进行测试&#xff0c…

linux远程拷贝免手动输入密码,scp远程拷贝避免输入密码

使用scp远程拷贝文件到指定服务器上,在客户端生成密钥放在需要验证的服务器上,这样再次连接后直接登陆,避免输入密码。设定场景我们需要将tomcat服务器(client1)192.168.30.20 上的catalina.out日志文件,每天使用指定用户拷贝到日…

玩转linux文件描述符和重定向,玩转Linux文件描述符和重定向

本文介绍linux中文件描述符与重定向的相关知识,文件描述符是与文件输入、输出相关联的整数,它们用来跟踪已打开的文件。有需要的朋友参考下。原文出处:linux下的文件描述符是与文件输入、输出相关联的整数。它们用来跟踪已打开的文件。最常见…

linux哪个指令可以设定使用者的密码,linux期末考试练习题 2

一、单项选择题1、下面不是对Linux操作系统特点描述的是()A、良好的可移植性B、单用户C、多用户D、设备独立性2、查看创建目录命令mkdir的帮助文档可以使用()A、mkdir -hB、man mkdirC、help mkdirD、info mkdir3、用标准的输出重定向(>)像”>file01”能使文件file01的数…

linux脚本格式模板,Linux Shell 常见的命令行格式简明总结

#在后台执行 cmd 指令cmd &#命令序列. 在同一行执行多个命令cmd1 ; cmd2#在当前 shell 中以一组的形式执行多个命令{ cmd1 ; cmd2 ; }#在子 shell 中以一组的形式执行多个命令(cmd1 ; cmd2)#管道. 以 cmd1 的执行输出作为 cmd2 的输入cmd1 | cmd2#命令替换. 以 cmd2 的执行…

linux怎么用命令打开wine,Linux系统运维:10分钟教你如何使用Wine在Linux下玩魔兽世界...

本文主要向大家介绍了Linux系统运维的如何使用Wine在Linux下玩魔兽世界,通过具体的步骤向大家展现,希望对大家学习Linux系统运维有所帮助。目标:在 Linux 中运行魔兽世界发行版:适用于几乎所有的 Linux 发行版。要求:具…

linux中如何查看某个端口是否被占用,LINUX中如何查看某个端口是否被占用

之前查询端口是否被占用一直搞不明白,问了好多人,终于搞懂了,现在总结下:1.netstat -anp |grep 端口号如下,我以3306为例,netstat -anp |grep 3306(此处备注下,我是以普通用户操作&#…

linux实现自己的write函数,Linux 内核源码阅读 - write 系统调用的实现

最近在看write系统调用的实现,虽然还有一下细节不是很清楚,但是大致的实现机理还是有一定的理解了。总结如下:这里假设最普通的情况,不考虑Direct IO 的情况。从全家的高度看,要往一个文件中写入内容,需要一…

linux7.0使用教程,CentOS7.0使用手册精编.pdf

CentOS7.0 手册第一部分:显卡驱动安装篇 (针对单显卡而言)或许CentOS7.0 版本是遇到的装显卡驱动最烦的一个,相比Ubuntu 、CentOS7.0 之前版本(如:CentOS6.5、CentOS6.4 )而言,操作步骤如下:由于笔者我的显卡是华硕圣骑…

linux中s权限大小写的区别,Linux中的权限

1.文件与目录权限1)UID与GIDUIDUID是一个数值,是Linux系统中唯一的用户标识,用于区别不同的用户。在系统内部管理进程和文件保护时使用UID字段。在Linux系统中,注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要&…

linux中shell自动对齐代码,linux – Shell编程 – 如何printf像表一样对齐我的输出?...

如何printf像表格一样对齐我的输出?Title AuthorBaokyBook Baoky2Use basename commandUse basename command .. Baoky我的部分代码是这样的titlelength${#title};首先我获得标题长度,然后我就像这样打印titlespaceexpr 60 - titlelength;printf "%s %${titles…

linux的安装组和管理组的区别吗,Linux用户和组管理

Linux用户和组管理安装上下文:进程以其发起者的身份运行;进程对文件的访问权限,取决于发起此进程的用户的权限;系统用户:为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用…

在linux下vcd光盘提取,linux下抓取Vcd的视频文件[Linux安全]

赞助商链接本文“linux下抓取Vcd的视频文件[Linux安全]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:LP的瑜伽碟需…

Linux清mysql磁盘,mysql与linux ~ 磁盘分析与调优

一 简介 谈谈磁盘IO的问题二 目的:如何进行IO性能问题的排查二 linux角度一 机械硬盘基本定义寻道时间,表示磁头在不同磁道之间移动的时间(最耗时)。旋转延迟,表示在磁道找到时,中轴带动盘面旋转到合适的扇区开头处。传输时间,表…

arm与linux的些许问题,《ARM与Linux些许问题》第一章:ARM工作模式

早期的ARM核有状态(ARM或Thumb)切换(通过BX等指令修改CPSR寄存器(当前程序状态寄存器,存放条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息)中T的控制位完成程序状态的切换),现在ARM都只使用Thumb状态了。所以&#…

c语言给定一个字符串匹配,使用C语言解决字符串匹配问题的方法

最常想到的方法是使用KMP字符串匹配算法&#xff1a;#include #include #include int get_nextval(char *pattern,int next[]){//get the next value of the patternint i 0,j -1;next[0] -1;int patlen strlen(pattern);while ( i < patlen - 1){if ( j -1 || pattern…

c语言比较大小 谁大选谁,C语言比较优先级

满意答案wanggq2222018.03.14采纳率&#xff1a;42% 等级&#xff1a;7已帮助&#xff1a;57人#pragma once#include#include#include #includeusing namespace std;typedef struct SymKeyVal{string key;int val;};static SymKeyVal KeyValTable[]{{"",0},{"…