Bootstrap

Linux账号和权限管理

与 Windows 操作系统相比,Linux 操作系统中的用户账号和组账号的作用在本质上是一样的,同样都是基于用户身份来控制对资源的访问,只不过在表现形式及个别细节方面存在一些差异。

与 Windows 操作系统一样,Linux 操作系统的每一个用户账号也都有唯一的用户名与密码。用户在登录时输入正确的用户名和密码,就能够进入操作系统和自己的主目录。本小节将介绍 Linux 操作系统中用户账号和组账号的相关概念。
在 Linux 操作系统中,根据系统管理的需要将用户账号分为不同的类型,主要包括超级用户、普通用户和程序用户,各类型拥有的权限、担任的角色也各不相同。
基于某种特定联系(如都需要访问 FTP 服务)将多个用户集合在一起,即构成一个用户组,表示该组内所有用户的账号称为组账号。每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组);若该用户同时还包含在其他的组中,则这些组称为该用户的附加组(或公共组)。例如,用户 zhangsan 是技术部的员工,与部门内的其他同事同属于基本组 tech,后来因工作安排需要,公司将 zhangsan 加入邮件管理员组 mailadm,则此时用户 zhangsan 同时属于 tech、mailadm 组,tech 组是其基本组账号,而 mailadm 组是

其附加组账号。
对组账号设置的权限将适用于组内的每一个用户账号。

Linux 操作系统中的每一个用户账号都有一个数字形式的身份标记,称为 UID(User IDentity,用户标识号),对于操作系统核心来说,UID 是区分用户的基本依据,原则上每个用户的 UID 号应该是唯一的。root 用户账号的 UID 号为固定值 0,而程序用户账号的 UID 号默认为 1~499,500~60000 的 UID 号默认分配给普通用户使用。
与 UID 类似,每一个组账号也有一个数字形式的身份标记,称为 GID(Group IDentity, 组标识号)。root 组账号的 GID 号为固定值 0,而程序组账号的 GID 号默认为 1~499,500~ 60000 的 GID 号默认分配给普通组使用。

Linux 操作系统中的用户账号、密码等信息均保存在相应的配置文件中,直接修改这些文件或者使用用户管理命令都可以对用户账号进行管理。
与用户账号相关的配置文件主要有两个,分别是/etc/passwd 和/etc/shadow。前者用于保存用户名称、宿主目录、登录 Shell 等基本信息,后者用于保存用户的密码、账号有效期等信息。在这两个配置文件中,每一行对应一个用户账号,不同的配置项之间使用“:”(冒号) 进行分隔。
操作系统中所有用户的账号基本信息都保存在/etc/passwd 文件中,该文件是文本文件, 任何用户都可以读取文件中的内容。例如,以下操作可分别查看/etc/passwd 文件开头、末尾的几行内容。

[root@localhost ~]# head -2 /etc/passwd root❌0:0:root:/root:/bin/bash bin❌1:1:bin:/bin:/sbin/nologin [root@localhost ~]# tail -1 /etc/passwd
teacher❌1001:1001:teacher:/home/teacher:/bin/bash

在 passwd 文件开头的部分,包括超级用户 root 及各程序用户的账号信息,系统中新

增加的用户账号信息将保存到 passwd 文件的末尾。passwd 文件的每一行内容中包含了七个用“:”(冒号)分隔的配置字段,从左到右各配置字段的含义分别如下所述。
基于系统运行和管理的需要,所有用户都可以访问passwd 文件中的内容,但是只有root 用户才能进行更改。在早期的 UNIX 操作系统中,用户账号的密码信息也是保存在 passwd 文件中的,不法用户可以获取密码字串进行暴力破解,这样一来账号安全就存在一定 的隐患。因此,后来将密码转存入专门的 shadow 文件中,而 passwd 文件中仅保留密码占位符“x”。
shadow 文件又被称为“影子文件”,其中保存有各用户账号的密码信息,因此对 shadow 文件的访问应该进行严格限制。默认只有 root 用户能够读取 shadow 文件中的内容,且不允许直接编辑该文件中的内容。例如,以下操作可分别查看/etc/shadow 文件开头、末尾的几行内容。

[root@localhost ~]# head -2 /etc/shadow root: 6 6 6/NUnjYRJqdNTTJBc$NNmotUjwytodn/QnKLlGPZTDv09z1XDStb7fWywK3iKNXPa459 g/NsD0FZAyxZA8SU3v2saM19Dc9D.vflR0b1::0:99999:7:::
bin:*:17110:0:99999:7:::
[root@localhost ~]# tail -1 /etc/shadow teacher:$6 8 k G z 21 K V O r x F O Y E f 8kGz21KVOrxFOYEf 8kGz21KVOrxFOYEfr3ZjS2ynBODc62X44orKweVym62c.MG1SR.WFcarphf29yZ Z.ObRfLqJsbd6IdpAfTGny2JdIsIwvIjyc7gR6/::0:99999:7:::

shadow 文件的每一行内容中包含了九个用“:”(冒号)分隔的配置字段,从左到右各配置字段的含义分别如下所述。
时表示此用户不能登录到系统。若该字段内容为空,则该用户无须密码即可登录系

统。
日起计算),默认值为空,表示账号永久可用。

useradd 命令用于添加用户账号,其基本的命令格式如下:

useradd [选项] 用户名

最简单的用法是,不添加任何选项,只使用用户名作为 useradd 命令的参数,按系统默认配置建立指定的用户账号。在 CentOS 系统中,使用 useradd 命令添加用户账号时主要完成以下几项任务。
例如,执行以下操作可以创建名为 bdqn_zeng 的用户账号,并通过查看 passwd、shadow 文件和/home 目录来确认新增用户账号时的变化。

[root@localhost ~]# useradd bdqn_zeng [root@localhost ~]# tail -1 /etc/passwd bdqn_zeng❌1002:1002::/home/bdqn_zeng:/bin/bash

[root@localhost ~]# tail -1 /etc/shadow
bdqn_zeng:!!:17273:0:99999:7:::
[root@localhost ~]# ls -A /home/bdqn_zeng/ //确认自动创建的用户目录
.bash_logout .bash_profile .bashrc .mozilla

如果结合 useradd 命令的各种选项,可以在添加用户账号的同时对 UID 号、宿主目录、登录 Shell 等相关属性进行指定。以下列出了 useradd 命令中用于设置账号属性的几个常见选项。
上述的各个选项可以组合使用。例如,执行以下操作可以创建一个辅助管理员账号
admin,将其基本组指定为“wheel”,附加组指定为“root”,宿主目录指定为“/admin”。

[root@localhost ~]# useradd -d /admin -g wheel -G root admin

在账号管理工作中,有时候会希望在新建账号的同时指定该账号的有效期限,或者要求新建的账号不能登录系统(如仅用于访问 FTP 服务),这时可分别使用“-e”和“-s”选项。例如, 执行以下操作可以创建一个名为 b_down 的 FTP 账号( 禁止终端登录), 该账号将于 2020-12-31 失效。

[root@localhost ~]# useradd -e 2020-12-31 -s /sbin/nologin b_down

通过 useradd 命令新增用户账号以后,还需要为其设置一个密码才可以正常使用。使用 passwd 命令可以设置或修改密码,root 用户有权管理其他账号的密码(指定账号名称作为参数即可)。例如,执行“passwd bdqn_zeng”命令可为 bdqn_zeng 账号设置登录密码,

要根据提示重复输入两次,具体操作如下:

[root@localhost ~]# passwd bdqn_zeng Changing password for user bdqn_zeng. New password:
Retype new password:
passwd: all authentication tokens updated successfully.

用户账号具有可用的登录密码以后,就可以从字符终端进行登录了。虽然 root 用户可以指定用户名作为参数,对指定账号的密码进行管理,但是普通用户却只能执行单独的“passwd”命令修改自己的密码。
对于普通用户自行设置的密码,要求具有一定的复杂性(如不要直接使用英文单词,长度保持在六位以上),否则系统可能拒绝进行设置。普通用户设置自身的登录密码时,需要先输入旧的密码进行验证。例如,以下操作是用户 bdqn_zeng 更改登录密码的过程。

[bdqn_zeng@localhost ~]$ passwd
Changing password for user bdqn_zeng.
Changing password for bdqn_zeng
(current) UNIX password: //需输入旧的密码进行验证New password:
Retype new password:
passwd: all authentication tokens updated successfully.

使用 passwd 命令除了可以修改账号的密码以外,还能够对用户账号进行锁定、解锁, 也可以将用户的密码设置为空(无须密码即可登录)。与上述功能相关的几个选项如下所示。
通过 passwd 命令锁定的用户账号,将无法再登录系统(shadow 文件中的对应密码字串前将添加“!!”字符),只能由管理员来解除锁定。例如,以下操作分别用于锁定、解锁用户账号 bdqn_zeng。

[root@localhost ~]# passwd -l bdqn_zeng //锁定账号Locking password for user bdqn_zeng.
passwd: Success
[root@localhost ~]# passwd -S bdqn_zeng //查看锁定的账号状态bdqn_zeng LK 2017-04-16 0 99999 7 -1 (Password locked.)
[root@localhost ~]# passwd -u bdqn_zeng //解锁账号Unlocking password for user bdqn_zeng.
passwd: Success.
[root@localhost ~]# passwd -S bdqn_zeng //查看解锁的账号状态bdqn_zeng PS 2017-04-16 0 99999 7 -1 (Password set, SHA512 crypt.)

对于操作系统中已经存在的用户账号,可以使用 usermod 命令重新设置各种属性。usermod 命令同样需要指定账号名称作为参数。usermod 命令中较常使用的几个选项如下所述。
使用 usermod 命令时,其大部分的选项与 useradd 命令的选项是对应的,作用也相似。除此以外,还有两个选项“-L”和“-U”,分别用于锁定、解锁用户账号。这两个选项与passwd 命令的“-l”和“-u”选项的作用基本相同,但是存在大小写区别。
若要修改已有账号的宿主目录,需要先将该账号原有的宿主目录转移到新的位置,然后通过 usermod 命令设置新的宿主目录位置。例如,执行以下操作可以将 admin 用户的宿主目录由/admin 转移至/home/admin。

[root@localhost ~]# mv /admin /home/

[root@localhost ~]# usermod -d /home/admin admin

通过 usermod 命令同样可以对账号进行锁定、解锁操作,经 usermod 命令锁定的账号也不能登录系统(shadow 文件中的对应密码字串前将添加“!”字符)。例如,以下操作分别用于锁定、解锁用户账号 admin,但是在 CentOS 7 系统中,如果账户没有设置密码,那么该账户锁定后将无法使用“usermod -U”命令解锁。因此在锁定 admin 账户之前需要先为其设置账户密码。

[root@localhost ~]# passwd admin Changing password for user admin. New password:
Retype new password:
passwd: all authentication tokens updated successfully. [root@localhost ~]# usermod -L admin //锁定账号
[root@localhost ~]# passwd -S admin //查看账号锁定状态admin LK 2017-04-16 0 99999 7 -1 (Password locked.)
[root@localhost ~]# usermod -U admin //解锁账号

若需要修改账号的登录名称,可以使用“-l”选项。例如,执行以下操作可以将 admin 用户的登录名称更改为 webmaster,下次登录时生效。

[root@localhost ~]# usermod -l webmaster admin [root@localhost ~]# grep “admin” /etc/passwd webmaster❌1003:10::/home/admin:/bin/bash

当操作系统中的某个用户账号不再使用时(如该员工已经从公司离职等情况),可以使用 userdel 命令将该用户账号删除。使用该命令也需要指定账号名称作为参数,结合“-r”选项可同时删除宿主目录。例如,执行以下操作将删除名为 bdqn_zeng 的用户账号,同时删除其宿主目录/home/bdqn_zeng。

[root@localhost ~]# userdel -r bdqn_zeng

[root@localhost ~]# ls -ld /home/bdqn_zeng //确认宿主目录是否已删除ls: cannot access /home/bdqn_zeng: No such file or directory

添加一个新的用户账号后,useradd 命令会在该用户的宿主目录中建立一些初始配置文件。这些文件来自于账号模板目录/etc/skel/,基本上都是隐藏文件,较常用的初始配置文件包括“.bash_logout”、“.bash_profile”和“.bashrc”。其中,“.bash_profile”文件中的命令将在该用户每次登录时被执行;“.bashrc”文件中的命令会在每次加载“/bin/Bash”程序(当然也包括登 录系统)时执行;而“.bash_logout”文件中的命令将在用户每次退出登录时执行。理解这些文件的作用,可以方便我们安排一些自动运行的后台管理任务。
在“.bashrc”等文件中,可以添加用户自己设置的可执行语句(如 Linux 命令行、脚本控制语句等),以便自动完成相应的任务。如果希望为所有用户添加登录后自动运行的命令程序、自动设置变量等,可以直接修改/etc 目录下的类似文件,如/etc/bashrc 文件、/etc/profile 文件。例如,执行以下操作可以为所有用户自动设置 myls 命令别名。

[root@localhost ~]# vi /etc/bashrc
…… //省略部分内容alias myls=’/bin/ls -lhr’

前面学习了管理Linux 操作系统中用户账号的相关命令,接下来继续学习组账号管理的相关命令。组账号管理命令的使用相对较少,主要包括groupadd、groupdel、gpasswd 等。
对于用户账号来说,对应的组账号可分为基本组和附加组两种类型。每一个用户账号可 以是多个组账号的成员,但是其基本组账号只有一个。在/etc/passwd 文件中第 4 字段记录的即为该用户的基本组 GID 号。而对于该用户还属于哪些附加组,则需要在对应组账号的文件中体现。
与组账号相关的配置文件也有两个,分别是/etc/group 和/etc/gshadow。前者用于保存组账号名称、GID 号、组成员等基本信息,后者用于保存组账号的加密密码字串等信息(但是很少使用到)。某一个组账号包含哪些用户成员,将会在 group 文件内最后一个字段中体现出来(基本组对应的用户账号默认可能不会列出),多个组成员之间使用“,”(逗号)分隔。

例如,执行以下操作可分别获知 root 组包括哪些用户成员、哪些组中包含 root 用户。

[root@localhost ~]# grep “^root” /etc/group //检索root 组包括哪些用户
root❌0:webmaster
[root@localhost ~]# grep “root” /etc/group //检索哪些组包括root 用户
root❌0:webmaster

使用 groupadd 命令可以添加一个组账号,需要指定 GID 号时,可以使用“-g”选项。例如,执行如下的“groupadd class01”命令可以添加一个名为 class01 的组账号。

[root@localhost ~]# groupadd class01 [root@localhost ~]# tail -1 /etc/group class01❌1007:

gpasswd 命令本来是用于设置组账号的密码,但是该功能极少使用,实际上该命令更多地用来管理组账号的用户成员。需要添加、删除成员用户时,可分别使用“-a”和“-d”选项。例如,以下操作分别用于向 root 组中添加成员用户 mike、删除成员用户 webmaster。

[root@localhost ~]# useradd mike [root@localhost ~]# gpasswd -a mike root Adding user mike to group root
[root@localhost ~]# groups mike //确认mike 用户已加入 root 组
mike : mike root
[root@localhost ~]# gpasswd -d webmaster root
Removing user webmaster from group root
[root@localhost ~]# groups webmaster //确认webmaster 用户已退出 root 组
webmaster : webmaster wheel

如果需要同时指定组账号的所有成员用户,可以使用“-M”选项。例如,以下操作可

[root@localhost ~]# gpasswd -M root,adm,daemon,webmaster,mike adm [root@localhost ~]# grep “^adm” /etc/group adm❌4:root,adm,daemon,webmaster,mike

当系统中的某个组账号已经不再使用时,可以使用 groupdel 命令将该组账号删除。而添加指定的组账号名称作为参数。例如,若要删除组账号 class01,可以执行以下操作。

[root@localhost ~]# groupdel class01

在用户管理工作中,虽然直接查看用户账号、组账号的配置文件也可以查询相关信息, 但是并不是很直观。在 Linux 操作系统中,还可以使用几个常用的查询命令工具,如 id、groups、finger、users 等,本小节中主要介绍几个查询命令的使用。
使用 groups 命令可以查看指定的用户账号属于哪些组。例如,以下操作分别显示当前用户(root)和 daemon 用户所属的组账号信息。

[root@localhost ~]# groups
root
[root@localhost ~]# groups daemon
daemon : daemon adm

使用 id 命令可以快速查看指定用户账号的 UID、GID 等标识信息。例如,执行如下的“id root”命令可以查看 root 账号的用户 ID 号、组 ID 号,以及所在的附加组 ID 号。在输出结果中,gid 和 groups 部分第一个组账号对应该用户的基本组,groups 部分的其他组账号为该

用户的附加组。

[root@localhost ~]# id root
id=0(root) gid=0(root) groups=0(root),4(adm)

使用 finger 命令可以查询指定的用户账号的登录属性等详细信息,包括登录名称、完整名称、宿主目录、登录 Shell 等。例如,执行如下的“finger root”命令可以显示 root 账号的详细信息。若系统中没有该命令, 可以从系统光盘镜像的 Packages 目录下找到finger-0.17-52.el7.x86_64.rpm 进行安装。

[root@localhost Packages]# finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Tue Apr 18 05:28 (EDT) on :0 from :0 (messages off) On since Tue Apr 18 05:29 (EDT) on pts/0 from :0
4 hours 1 minute idle
On since Tue Apr 18 05:31 (EDT) on pts/1 from 192.168.12.1 No mail.
No Plan.

4.w 命令——查询当前主机的用户登录情况
使用 w 命令可以查询当前主机中的用户登录情况,列出登录账号名称、所在终端、登录时间、来源地点等信息,具体操作如下:

[root@localhost ~]# w
09:33:26 up 4:06, 3 users, load average: 0.02, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 05:28 ?xdm? 1:33 0.32s gdm-sessio root pts/0 :0 05:29 4:02m 0.11s 0.11s bash root pts/1 192.168.12.1 05:31 6.00s 0.57s 0.04s w

在 Linux 文件系统的安全模型中,系统中的文件(或目录)具有两个属性:访问权限和文件所有者,简称权限和归属。其中,访问权限包括读取、写入、可执行三种基本类型,归 属包括属主(拥有该文件的用户账号)、属组(拥有该文件的组账号)。Linux 操作系统根据文件或目录的访问权限、归属来对用户访问数据的过程进行控制。
下面讲解的内容中,查看或更改权限、归属的命令对目录和文件同样适用。需要注意的 是,由于 root 用户是系统的超级用户,拥有完全的管理权限,因此在练习相关命令操作时建议不要以 root 用户作为限制对象,否则可能看不到效果。

使用带“-l”选项的 ls 命令时,将以长格式显示文件或目录的详细信息,其中包括该文件的权限和归属等参数。例如,执行以下操作可以列出/etc 目录和/etc/passwd 文件的详细属性。

[root@localhost ~]# ls -ld /etc /etc/passwd
drwxr-xr-x. 140 root root 8192 Apr 18 09:13 /etc
-rw-r–r--. 1 root root 2363 Apr 18 07:12 /etc/passwd

在上述输出信息中,第 3、4 字段的数据分别表示该文件(或目录)的属主、属组,上例中/etc 目录和/etc/passwd 文件都属于 root 用户、root 组;而第 1 字段的数据表示该文件( 或目录) 的访问权限, 如“drwxr-xr-x”和“-rw-r–r--”。权限字段由四部分组成, 各自的含义如下所述。
在表示属主、属组内用户或其他用户对该文件的访问权限时,主要使用了三种不同的权

限字符:r、w、x,分别表示可读、可写、可执行。若需要去除对应的权限,则用“-”表示。例如,root 用户对/etc 目录具有可读、可写、可执行的完全权限(rwx),其他任何用户对/etc目录只具有可读可执行的权限(r-x);root 用户对/etc/passwd 文件具有可读、可写权限(rw-), root 组内的各用户对/etc/passwd 文件只具有可读权限(r–)。
权限字符 r、w、x 用于文件表示可读、可写、可执行,但是对于目录来说,它们的具体含义是存在一些差别的,如表 4-1 所示。例如,用户只要对目录有写入权限,就可以删除该目录下任何文件或子目录,而不管这些文件或子目录是否属于该用户。

表 4-1
权限字符在文件和目录中的含义
权限
文件
目录
r
查看文件内容
查看目录内容(显示子目录、文件列表)
w
修改文件内容
修改目录内容(在目录中新建、移动、删除文件或子目录)
x
执行该文件(程序或脚本)
执行 cd 命令进入或退出该目录
若用户在对要访问的文件或目录中不具备相应的权限,则操作将被拒绝。例如,当普通用户 mike 尝试查看/etc/shadow 文件时,将会提示“Permission denied(因权限不足而被拒绝访问)”,具体操作如下:

[mike@localhost root]$ ls -l /etc/shadow
----------. 1 root root 1345 Apr 18 07:12 /etc/shadow [mike@localhost root]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

需要设置文件或者目录的权限时,主要通过 chmod 命令进行。在设置针对每一类用户的访问权限时,可以采用两种形式的权限表示方法:字符形式和数字形式。r、w、x 权限字符可分别表示为八进制数字 4、2、1,表示一个权限组合时需要将数字进行累加。例如,“rwx” 采用累加数字形式表示成“7”,“r-x”采用累加数字形式表示成“5”;而“rwxr-xr-x”由三个权限段组成,因此可以表示成“755”,“rw-r–r--”可以表示成“644”。
使用 chmod 命令设置文件或目录的权限时,基本的命令格式如下:

chmod [ugoa…][±=][rwx] 文件或目录…

或者

chmod nnn 文件或目录…

上述格式中,字符组合“[ugoa…][±=][rwx]”或数字组合“nnn”的形式表示要设置的权限模式。其中,“nnn”为需要设置的具体权限值,如“755”“644”等;而 “[ugoa…][±=][rwx]”的形式中,三个组成部分的含义及用法如下所述。
代表仅设置对应的权限。
下面的操作将 mkdir 命令程序复制为 mymkdir,并通过去除 mymkdir 文件的“x”权限来验证可执行权限的变化。

[root@localhost ~]# cp /bin/mkdir mymkdir
[root@localhost ~]# ls -l mymkdir
-rwxr-xr-x. 1 root root 79768 Apr 18 09:38 mymkdir
[root@localhost ~]# ./mymkdir dir01 //可以使用mymkdir 程序新建文件夹
[root@localhost ~]# ls -ld dir01
drwxr-xr-x. 2 root root 6 Apr 18 09:39 dir01
[root@localhost ~]# chmod ugo-x mymkdir //删除所有的"x"权限, 也可改用"a-x" [root@localhost ~]# ls -l mymkdir
-rw-r–r--. 1 root root 79768 Apr 18 09:38 mymkdir
[root@localhost ~]# ./mymkdir dir02 //因缺少"x"权限, mymkdir 无法执行
-bash: ./mymkdir: Permission denied

需要将不同类别的用户对文件或目录的权限设置为不同值时,可以用逗号进行分隔。例 如,执行以下操作可以调整 mymkdir 文件的权限,为属主用户添加执行权限,删除其他用

户的读取权限。

[root@localhost ~]# chmod u+x,o-r mymkdir
[root@localhost ~]# ls -l mymkdir
-rwxr -. 1 root root 79768 Apr 18 09:38 mymkdir

更简便易用的方法是采用数字形式表示的权限模式。例如,若要将 mymkdir 文件的访问权限设置为“rwxr-xr-x”,其对应的数字组合是 755。

[root@localhost ~]# chmod 755 mymkdir
[root@localhost ~]# ls -l mymkdir
-rwxr-xr-x. 1 root root 79768 Apr 18 09:38 mymkdir

在实际的目录权限管理工作中,有时会需要将某一个目录中的所有子目录及文件的权限都设置为相同的值,这时只要结合 chmod 命令的“-R”选项即可轻松实现。若不指定“-R”选项, chmod 命令将只改变所指定目录本身的权限。例如,执行以下操作将以递归的方式将
/var/ftp/pub 目录中所有子目录、文件的权限都设置为“rw-r–r--”。
[root@localhost ~]# chmod -R 644 /var/ftp/pub/

需要设置文件或者目录的归属时,主要通过 chown 命令进行。可以只设置属主或属组, 也可以同时设置属主、属组。使用 chown 命令的基本格式如下:

chown 属主[:[属组]] 文件或目录…

同时设置属主、属组时,用户名和组名之间用“:”进行分隔。若只设置属组,则需使用“: 组名”的形式。
如果只需要设置目录或文件的属主,直接以用户名表示归属即可,递归修改目录归属同

样可以使用“-R”选项。例如,执行以下操作可将/var/ftp/pub/目录的属主由 root 改为 ftp(调整后用户 ftp 将拥有“rwx”的权限)。

[root@localhost ~]# ls -ld /var/ftp/pub/ //修改前的属主为root drw-r–r--. 2 root root 6 Nov 5 15:43 /var/ftp/pub/
[root@localhost ~]# chown -R ftp /var/ftp/pub/
[root@localhost ~]# ls -ld /var/ftp/pub/ //修改后的属主变为ftp drw-r–r--. 2 ftp root 6 Nov 5 15:43 /var/ftp/pub/

如果同时设置目录和文件的属主、属组,则需要用到分隔符“:”。例如,执行以下操作可 将 mymkdir 文件的属主更改为 daemon、属组更改为 wheel。

[root@localhost ~]# ls -ld mymkdir
-rwxr-xr-x. 1 root root 79768 Apr 18 09:38 mymkdir [root@localhost ~]# chown daemon:wheel mymkdir [root@localhost ~]# ls -ld mymkdir
-rwxr-xr-x. 1 daemon wheel 79768 Apr 18 09:38 mymkdir

在 Linux 操作系统中,设置文件访问权限、归属是目录和文件管理常见的工作内容,很多网络服务或应用程序的安全强化工作实际上都包括了文件权限和归属的修改。因此, 在具体工作中应慎重进行, 不当的权限设置可能会导致系统故障, 甚至带来一些安全隐患。

4.2.3 设置目录和文件的默认权限

现在我们知道了如何改变一个文件或目录的属性了,不过,你知道当你新建一个新的文 件或目录时,它的默认权限是什么吗?这个是与 umask 有关。
umask 就是默认指定目前用户在新建文件或目录时的权限默认值。执行“umask 022” 即可以设置当前用户的默认权限。直接执行“umask”命令就是查看当前系统的默认权限。需要注意的是,umask 的分数指的是“该默认值需要减掉的权限”。因此 r、w、x 分别是 4、2、1,如果执行“umask 022”代表 group 和 other 被拿掉了权限"2",也就是被拿掉了“写”权限。
如果执行命令“umask 000”,代表文件的默认权限是“777”。

[root@kgc ~]# umask 000 [root@kgc ~]# mkdir /umask1 [root@kgc ~]# ls -ld /umask1/
drwxrwxrwx 2 root root 4096 3 月 13 17:02 /umask1/
[root@kgc ~]# umask 022 [root@kgc ~]# mkdir /umask2 [root@kgc ~]# ls -ld /umask2/
drwxr-xr-x 2 root root 4096 3 月 13 17:03 /umask2/ [root@kgc ~]#

;