管理用户和组,文件权限和属性和启用对帐户的sudo访问 - 第8部分

本文是10教程长系列的第8部分,在本节中,我们将指导您如何管理Linux系统中的用户和组权限,

去年八月,Linux基金会启动了LFCS认证(Linux基金会认证系统管理员 ),一个全新的计划,其目的是让个人无处不在,任何地方参加考试,才能获得认证的基本中间业务支持Linux系统,其中包括支持运行系统和服务,以及总体监控和分析,以及智能决策,以便能够决定何时需要将问题升级到更高级别的支持团队。

Linux用户和组管理

Linux基础认证Sysadmin - 第8部分

请快速查看以下介绍Linux基础认证计划简介的视频。

本文是10教程长系列的第8部分,在本节中,我们将指导您如何管理Linux系统中的用户和组权限,这是LFCS认证考试所需的。

由于Linux是一个多用户操作系统(它允许不同计算机或终端上的多个用户访问单个系统),因此您需要知道如何执行有效的用户管理:如何添加,编辑,挂起或删除用户帐户,以及授予他们执行分配的任务所需的权限。

添加用户帐户

要添加新的用户帐户,您可以以root用户身份运行以下两个命令。

# adduser [new_account]
# useradd [new_account]

当新用户帐户添加到系统时,将执行以下操作。

1.他/她的家目录中创建(/家/默认用户名 )。

2.以下隐藏的文件复制到用户的主目录,将被用来为他/她的用户会话提供的环境变量。

.bash_logout
.bash_profile
.bashrc

3.邮件池为位于/ var / spool / mail中/ 用户名用户创建。

4组被创建并给予相同的名称作为新的用户帐户。

理解/ etc / passwd

完整的帐户信息存储在/ etc / passwd文件 此文件包含每个系统用户帐户的记录,并具有以下格式(字段由冒号分隔)。

[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]
  1. 字段[用户名][注释]不言自明。
  2. 在第二场的X表示该帐户被遮挡的密码保护(在/ etc / shadow中 ),这是需要登录为[用户名]。
  3. [UID][GID]字段是代表用户标识和,初级组标识到[用户名]分别属于整数。
  4. [主目录]表示为[用户名]的主目录的绝对路径,
  5. [默认的shell]是将提供给该用户时,他或她登录系统外壳。
理解/ etc / group

集团信息存储在/ etc / group文件。 每个记录具有以下格式。

[Group name]:[Group password]:[GID]:[Group members]
  1. [组名称]是组的名称。
  2. [组密码] X表示未使用组密码。
  3. [GID]:同在/ etc / passwd文件。
  4. [组成员]:逗号分隔谁是[组名称]成员的用户列表。
在Linux中添加用户帐户

添加用户帐户

添加帐户后,您可以使用usermod命令,其usermod命令的基本语法如下编辑以下信息(仅举几场)。

# usermod [options] [username]
设置帐户的到期日期

使用-expiredate标志其次是YYYY-MM-DD格式的日期。

# usermod --expiredate 2014-10-30 howtoing
将用户添加到补充组

使用组合-ag,-append -groups选项,然后用逗号分隔的组列表。

# usermod --append --groups root,users howtoing
更改用户主目录的默认位置

使用-d,入户选项,然后到新的主目录的绝对路径。

# usermod --home /tmp howtoing
更改默认情况下用户将使用的shell

使用-shell,随后的路径新外壳。

# usermod --shell /bin/sh howtoing
显示用户所属的组
# groups howtoing
# id howtoing

现在让我们一起执行所有上述命令。

# usermod --expiredate 2014-10-30 --append --groups root,users --home /tmp --shell /bin/sh howtoing
usermod命令示例

usermod命令示例

在上面的例子中,我们将设置howtoing用户帐户二○一四年十月三十○日届满之日起,我们也会将该帐户添加到和用户组。 最后,我们将设置sh作为其默认的shell,改变主目录到/ tmp的位置:

另请参阅

  1. 15在Linux中的useradd命令示例
  2. 15 usermod命令在Linux中的示例

对于现有帐户,我们还可以执行以下操作。

通过锁定密码禁用帐户

使用-L(大写L)或-lock选项来锁定用户的密码。

# usermod --lock howtoing
解锁用户密码

使用-u-unlock选项解锁以前阻止用户的密码。

# usermod --unlock howtoing
在Linux中锁定用户

锁定用户帐户

创建一个新组以读取和写入需要由多个用户访问的文件

运行以下系列命令来实现目标。

# groupadd common_group # Add a new group
# chown :common_group common.txt # Change the group owner of common.txt to common_group
# usermod -aG common_group user1 # Add user1 to common_group
# usermod -aG common_group user2 # Add user2 to common_group
# usermod -aG common_group user3 # Add user3 to common_group
删除组

您可以使用以下命令删除组。

# groupdel [group_name]

如果网络中存在GROUP_NAME拥有的文件,他们将不会被删除,但该组的所有者将被设置为被删除的组的GID。

Linux文件权限

除了基本的读,写和执行,我们在讨论的权限归档工具,并设置文件属性- 3部分本系列,还有其他较少使用(但不是那么重要)的权限设置,有时也被称为“ 特殊权限 ”。

与前面讨论的基本权限类似,它们使用八进制文件或通过指示权限类型的字母(符号符号)设置。

删除用户帐户

您可以使用具有-remove选项userdel命令删除帐户(与它的主目录一起,如果它是由用户和居住在其中的所有文件,也是邮件池拥有)。

# userdel --remove [username]

组管理

每次将新用户帐户添加到系统时,将创建具有相同名称的组,并将用户名作为其唯一成员。 其他用户可以稍后添加到组中。 组的目的之一是通过对这些资源设置正确的权限来实现对文件和其他系统资源的简单访问控制。

例如,假设您有以下用户。

  1. user1(主组:user1)
  2. user2(主组:user2)
  3. user3(主组:user3)

他们都需要读取写入访问位于本地系统,或者在该USER1创建了一个网络共享上的某个地方一个名为common.txt。 你可能会被诱惑做类似的事情,

# chmod 660 common.txt
OR
# chmod u=rw,g=rw,o= common.txt [notice the space between the last equal sign and the file name]

但是,这将只提供读写访问文件的所有者和那些谁是该文件的组所有者的成员( 用户1在这种情况下)的用户。 同样,你可能受到诱惑, 用户2用户3添加到组USER1,但也会给他们访问由用户user1和组的user1拥有的文件的其余部分。

这是群体派上用场的地方,这里是你应该在这样的情况下做的。

了解Setuid

setuid权限应用到一个可执行文件,运行该程序的用户将继承该程序的所有者的有效权限。 由于此方法可以合理地引起安全问题,因此具有setuid权限的文件数必须保持为最小。 当系统用户需要访问由root拥有的文件时,可能会找到具有此权限集的程序。

总结一下,它不仅仅是用户可以执行二进制文件,而且他可以使用root权限来执行。 例如,让我们检查/斌/ passwd文件的权限。 这个二进制是用来更改帐户的密码,并修改/ etc / shadow文件。 超级用户可以更改任何人的密码,但所有其他用户应该只能更改自己的密码。

passwd命令示例

passwd命令示例

因此,任何用户应具有的权限来运行/斌/ passwd的 ,但只根将能够指定的帐户。 其他用户只能更改其相应的密码。

在Linux中更改用户密码

更改用户密码

了解Setgid

setgid位设置,真正的用户的有效GID成为该组所有者的。 因此,任何用户可以在授予该文件的组所有者的特权下访问文件。 此外,当在目录上设置setgid位时,新创建的文件继承与目录相同的组,新创建的子目录也将继承父目录的setgid位。 只要某个组的成员需要访问目录中的所有文件,无论文件所有者的主组是什么,您都将很可能使用此方法。

# chmod g+s [filename]

要设置八进制形式setgid的 ,前面加上数字2的电流(或预期)基本权限。

# chmod 2755 [directory]
在目录中设置SETGID
在Linux中添加Setgid

将Setgid添加到目录

了解粘滞位

当“ 粘性位 ”设置的文件,Linux的只是忽略它,而对于目录也有防止用户删除或重命名,即使这些文件包含,除非用户拥有的目录,文件,或者是根的效果。

# chmod o+t [directory]

要设置八进制形式的粘滞位 ,在前面加上数字1到当前(或需要)基本权限。

# chmod 1755 [directory]

没有粘滞位,任何能够写入目录的人都可以删除或重命名文件。 出于这个原因,粘滞位是常用的目录,如/ tmp,是世界可写找到。

在Linux中添加Stickybit

添加Stickybit到目录

特殊Linux文件属性

还有其他属性,允许对文件允许的操作进一步限制。 例如,防止文件被重命名,移动,删除或甚至被修改。 它们被设置为与chattr命令命令 ,并且可以使用lsattr来工具查看,如下。

# chattr +i file1
# chattr +a file2

执行这两个命令后, 文件1将是不可变的(这意味着它不能被移动,重命名,修改或删除),而文件2将进入追加-only模式(只能在附加模式写入打开)。

保护文件以免删除

Chattr命令保护文件

访问root帐户和使用sudo

用户可以访问root帐户的方法之一是通过键入。

$ su

然后输入root的密码。

如果验证成功,您将被记录在与当前工作目录,你和以前相同的 如果你想放在根目录下,运行。

$ su -

然后输入root的密码。

在Linux上启用sudo访问

对用户启用Sudo访问

上述过程要求正常用户知道root的密码,这造成严重的安全风险。 出于这个原因,系统管理员可以配置Sudo命令,以允许一个普通用户执行命令作为一个非常控制和限制的方式不同的用户(通常是超级用户)。 因此,可以对用户设置限制,以使得他能够运行一个或多个特定的特权命令而不运行其他命令。

另请阅读差异苏sudo的用户之间

要使用sudo进行身份验证,用户使用他/她自己的密码。 输入命令后,我们将提示输入我们的密码(而不是超级用户的密码),如果认证成功(如果用户已被授予运行命令的权限),则执行指定的命令。

授予访问sudo的,系统管理员必须编辑/ etc / sudoers文件。 建议该文件正在使用visudo命令,而不是直接用文本编辑器打开它进行编辑。

# visudo

这将打开使用vim/ etc / sudoers文件(你可以按照给出的说明安装和使用Vim作为编辑器-第2部分本系列编辑该文件)。

这些是最相关的线。

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin"
root        ALL=(ALL) ALL
howtoing     ALL=/bin/yum update
gacanepa    ALL=NOPASSWD:/bin/updatedb
%admin      ALL=(ALL) ALL

让我们仔细看看他们。

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin:/usr/local/bin"

这条线可以指定将用于Sudo的目录,并用于防止使用用户特定的目录,这可能会损害该系统。

下一行用于指定权限。

root        ALL=(ALL) ALL
  1. 第一ALL关键字表示该规则适用于所有主机。
  2. 第二ALL表明,在第一栏,用户可以与任何用户的权限运行命令。
  3. 第三ALL表示任何命令可以运行。
howtoing     ALL=/bin/yum update

如果=符号后没有指定用户,Sudo假定root用户。 在这种情况下,用户howtoing将能够运行Yum更新为根。

gacanepa    ALL=NOPASSWD:/bin/updatedb

NOPASSWD指令允许用户gacanepa,而无需输入他的密码运行/ bin中/数据库更新

%admin      ALL=(ALL) ALL

符号表示该行适用于一个名为“admin”的组。 该行的其余部分的含义与常规用户的含义相同。 这意味着,该集团为“admin”的成员可以运行所有的命令,在所有主机上的任何用户。

要查看权限由Sudo授予你,使用“-l”选项中列出。

Sudo访问规则

Sudo访问规则

PAM(可插拔认证模块)

插入式验证模块 (PAM)提供了关于使用模块每个应用程序和/或每个服务的基础上设置一个特定的身份验证方案的灵活性。 所有现代Linux发行版上的这个工具克服了Linux早期开发人员面临的问题,当每个需要身份验证的程序都需要专门编译以知道如何获取必要的信息时。

例如,PAM,它不要紧,你的密码是否存储在/ etc / shadow文件或你的网络内部的独立服务器上。

例如,当登录程序需要验证用户时,PAM动态提供包含适当验证方案的功能的库。 因此,改变的认证方案为登录应用程序(或使用PAM任何其他程序)是容易的,因为它仅涉及编辑一个配置文件(最可能的是,一个应用程序命名的文件时,位于内/etc/pam.d ,少在可能/etc/pam.conf )。

内部文件/etc/pam.d显示哪些应用程序正在使用本地PAM。 此外,我们可以知道某个应用程序是否使用PAM,如果此PAM库(libpam可以 )已被链接到它的检查:

# ldd $(which login) | grep libpam # login uses PAM
# ldd $(which top) | grep libpam # top does not use PAM
检查Linux PAM库

检查Linux PAM库

在上图中,我们可以看到,libpam将一直与登录应用程序联系在一起。 这是有道理的,因为这个应用程序涉及系统用户认证的操作,而top不需要。

让我们来看看PAM配置文件的passwd -是的,众所周知的工具来修改用户的密码。 它位于修改/etc/pam.d/passwd:

# cat /etc/passwd
Linux密码的PAM配置文件

Linux密码的PAM配置文件

第一列指示type的认证与用于module-path (第三列)。 当连字符出现在类型之前时,如果无法加载模块,因为在系统中找不到模块,PAM将不会记录到系统日志中。

以下身份验证类型可用:

  • account :此模块的类型检查,如果用户或服务提供有效证书进行身份验证。
  • auth :此模块类型验证该用户是他/她声称谁是并授予任何需要的权限。
  • password :这个模块类型允许用户或服务来更新自己的密码。
  • session :这个模块类型指示应该是什么之前和/或之后的认证成功完成。
  • 第二列(被称为control )表示,如果此模块验证失败会发生什么:

    1. requisite :如果通过这个模块的认证失败,整个认证将被立即拒绝。
    2. required类似于必要的,但此服务的所有其他上市的模块将拒绝认证之前被调用。
    3. sufficient :如果通过这个模块的验证失败,PAM仍然会给予验证,即使以前按要求标注不合格。
    4. optional :如果通过这个模块的认证失败或成功,什么都不会发生,除非这是为这个服务定义它的类型唯一的模块。
    5. include意味着给定类型的线应来自另一个文件中读取。
    6. substack类似于包括但验证失败或成功不会导致整个模块的出口处,但只有substack的。

    第四列(如果存在)显示要传递给模块的参数。

    前三行修改/etc/pam.d/passwd(如上图所示),加载系统验证模块来检查用户提供有效凭证(帐户)。 如果是这样,它可以让他/她通过给使用passwd文件(AUTH)权限更改身份验证令牌(密码)。

    例如,如果你追加

    remember=2
    

    到以下行

    password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
    

    将/etc/pam.d/system-auth:

    password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=2
    

    每个用户的最后两个散列密码保存在/ etc /安全/ opasswd,使他们不能重复使用:

    Linux密码字段

    Linux密码字段

    概要

    有效的用户和文件管理技能是任何系统管理员的必备工具。 在这篇文章中,我们已经涵盖了基础知识,希望你可以使用它作为一个良好的开始指向基础。 请随时留下您的意见或问题,我们将迅速作出回应。