Linux内容

账号和权限

一、管理用户账号和组账号

1、用于账号和组账号概述

Linux基于用户身份对资源访问进行控制。

用户:是用来标识操作系统中不同功能的身份。Linux系统中用户的分类:

超级用户root:即root用户,类似于Windows系统中的Administrator用户,只有当进行系统管理、维护任务时才建议使用root用户登录系统,非执行管理任务时不建议使用root用户登录系统,日常事务处理建议只使用普通用户账户。
普通用户:普通用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,普通用户帐号一般只在用户自己的宿主目录中有完全权限。
程序用户:在安装linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些账号一般不允许登录到系统,而仅用于用于维持系统或某个程序的正常运行,一般不允许登录到系统。例如:bin、daemon、ftp、mail等

组帐号:

基于某种特定联系(如都需要访问ftp服务)将多个用户集合在一起,即构成一个用户组。

基本组(私有组)
附加组(公共组)

每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组);若该用户同时还包含在其他的组中,则这些组称为该用户的附加组(或公共组)。

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

UID和GID:

UID(User Identity,用户标识号)
GID(Group Identify,组标识号)

Linux系统中的每一个用户账号都有一个数字形式的身份标记,称为UID(user identity,用户标识符),对于操作系统来说,UID是区分用户的基本依据,原则上每个用户的UID号应该是唯一的,root用户的UID的固定值为0 。1~499的UID默认保留给程序用户使用,普通用户/组使用的UID号在500~60000之间

与UID类似,每一个组账号也有一个数字形式的身份标识,称为GID(group identity,组标识号)。root组帐号的GID号为固定值0,而程序组账号的GID号默认为1~499,500~60000的GID号默认分配给普通组使用。

2、用户账号管理

Linux操作系统中的用户账号、密码等信息均保存在相应的配置文件中,直接修改这些文件或使用用户管理命令都可以对用户账号管理。

1)用户账号文件

与用户账号相关的配置文件主要有两个,分别是/etc/passwd和/etc/shadow。前者用于保存用户名称、宿主目录、登录shell等基本信息,后者用于保存用户的密码、账号有效期等信息。

(1)/etc/passwd: 用户信息

基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改。

在早期的UNIX操作系统中,用户帐号的密码信息是保存在passwd文件中的,不法用户可以很容易的获取密码字串并进行暴力破解,因此存在一定的安全隐患,后来经改进后,将密码转存入专门的shadow文件中,而passwd文件中仅保留密码占位符“x”。

字段1:用户帐号的名称

字段2:用户密码字串或者密码占位符“x”

字段3:用户帐号的UID号

字段4:所属基本组帐号的GID号

字段5:用户全名

字段6:宿主目录

字段7:登录Shell信息

(2)/etc/shadow: 用户密码相关的信息

Shadow文件又被称为“影子文件”,其中保存有各用户账号的密码信息,因此对shadow文件的访问应该进行严格限制,默认只有root用户能够读取文件中的内容,并且不允许root直接编辑该文件中的内容。

字段1:用户帐号的名称

字段2:加密的密码字串信息,说明,$1$:加密算法是md5。$6$:加密算法是sha512

字段3:上次修改密码的时间

字段4:密码的最短有效天数,默认值为0

字段5:密码的最长有效天数,默认值为99999

字段6:提前多少天警告用户口令将过期,默认值为7

字段7:在密码过期之后多少天禁用此用户

字段8:帐号失效时间,默认值为空

字段9:保留字段(未使用)

说明:上次修改密码的时间,表示从1970年01月01日(可理解为Unix系统的诞生日)算起到最近一次修改密码时间隔的天数。

2)添加、修改、删除用户账号

(1)useradd命令,添加用户账户

useradd命令

格式:useradd  [选项]…  用户名

常用命令选项

-u:指定 UID 标记号
-d:指定宿主目录,缺省为 /home/用户名
-e:指定帐号失效时间
-g:指定用户的基本组名(或UID号)
-G:指定用户的附加组名(或GID号)
-M:不为用户建立并初始化宿主目录
-s:指定用户的登录Shell
-r:  创建一个系统用户

[root@localhost home]# chage -l test1  #查看用户的详情信息

最近一次密码修改时间                 :3月 06, 2022

密码过期时间                 :从不

密码失效时间                 :从不

帐户过期时间                     :1月 02, 1970 #账户过期时间为1天

两次改变密码之间相距的最小天数       :0

两次改变密码之间相距的最大天数       :99999

在密码过期之前警告的天数  :7

pam_unix(vsftpd:account): expired password for user username (password aged)

上述为密码用户过期

chage -M 99999 username  #永久修改密码

-M:修改密码过期时间

(2)passwd命令,为用户账号设置密码

passwd命令

格式:passwd  [选项]…  用户名

常用命令选项

-d:清空用户的密码,使之无需密码即可登录
-l:锁定用户帐号
-S:查看用户帐号的状态(是否被锁定)
-u:解锁用户帐号
echo “yonghu:123123” | chpasswd

注:普通用户也可以使用passwd命令,但只能更改自己的密码,密码要求有一定的复杂性(如不要直接使用英文单词,长度保持在6位以上),否则系统可能拒绝进行设置。

(3)su命令,切换用户

只允许特定用户使用该su命令

要做到这一点,编辑插入式验证模块为(PAM)配置文件/etc/pam.d/su 在文本编辑器中打开该文件,取消注释:

#auth           required        pam_wheel.so use_uid

将用户添加到名为wheel的特殊管理组 

usermod -a -G wheel test1  #意思是将test1用户加入到了组wheel

groups test1 #验证是加入了其他的组

(4)usermod命令,修改用户账户

usermod命令

格式:usermod  [选项]…  用户名

常用命令选项

-l:更改用户帐号的登录名称
-L:锁定用户账户
-U:解锁用户账户
以下选项与useradd命令中的含义相同

 -u、-d、-e、-g、-G、-s

[root@localhost ~]# usermod -e “2022-03-33” test1 ##修改用户的过期时间

[root@localhost ~]# usermod -s /bin/bash yixinbo #修改文件的登录bash

(5)userdel命令,删除用户账号

userdel命令

格式:userdel  [-r]  用户名
添加 -r 选项时,表示连用户的宿主目录一并删除

配置 PAM 模块:使用 PAM(Pluggable Authentication Modules)模块来限制登录。例如,可以编辑   /etc/security/access.conf   文件

Linux access.conf 限制用户ssh/rsh登陆不生效的问题

/etc/security/access.conf not working

操作系统

:CentOS 7.4

目的:通过修改access.conf文件限制用户从某些IP地址登陆系统。

问题:如下修改了/etc/security/access.conf 文件,但是用户还是可以从受限IP登录。

+ : root : ALL

– : ALL : 10.10.10.197 10.10.10.198

解决办法:

1、检查/etc/ssh/ssh_config

是否启用PAM

grep UsePAM /etc/ssh/sshd_config

如下显示

UsePAM yes

2、检查/etc/pam.d/sshd和/etc/pam.d/rsh文件

cat /etc/pam.d/sshd

/etc/pam.d/sshd

/etc/pam.d/common-account #需要手动去创建该文件

#%PAM-1.0

auth       required     pam_sepermit.so

auth       substack     password-auth

auth       include      postlogin

# Used with polkit to reauthorize users in remote sessions

-auth      optional     pam_reauthorize.so prepare

account    required     pam_nologin.so

account    include      password-auth

account    required     pam_access.so

password   include      password-auth

# pam_selinux.so close should be the first session rule

session    required     pam_selinux.so close

session    required     pam_loginuid.so

# pam_selinux.so open should only be followed by sessions to be executed in the user context

session    required     pam_selinux.so open env_params

session    required     pam_namespace.so

session    optional     pam_keyinit.so force revoke

session    include      password-auth

session    include      postlogin

# Used with polkit to reauthorize users in remote sessions

-session   optional     pam_reauthorize.so prepare

sshd服务的account引用了password-auth文件

cat /etc/pam.d/rsh  #Centos7.9没有这个文件

#%PAM-1.0

# For root login to succeed here with pam_securetty, “rsh” must be

# listed in /etc/securetty.

auth       required     pam_nologin.so

auth       required     pam_securetty.so

auth       required     pam_env.so

auth       required     pam_rhosts.so

account    include      password-auth

session    optional     pam_keyinit.so    force revoke

session    required     pam_loginuid.so

session    include      password-auth

rsh服务的account也引用了password-auth文件

3、检查/etc/pam.d/password-auth文件

#%PAM-1.0

# This file is auto-generated.

# User changes will be destroyed the next time authconfig is run.

auth        required      pam_env.so

auth        required      pam_faildelay.so delay=2000000

auth        sufficient    pam_unix.so nullok try_first_pass

auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success

auth        required      pam_deny.so

account     required      pam_unix.so

#account     sufficient    pam_localuser.so

account     sufficient    pam_succeed_if.so uid < 1000 quiet

account     required      pam_permit.so

account     required      pam_access.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=

password    sufficient    pam_unix.so sha512 shadow nis nullok try_first_pass use_authtok

password    required      pam_deny.so

session     optional      pam_keyinit.so revoke

session     required      pam_limits.so

-session     optional      pam_systemd.so

session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

session     required      pam_unix.so

4、修改文件/etc/pam.d/password-auth

添加pam_access.so行

account     required      pam_access.so

注释掉pam_localuser.so

#account     sufficient    pam_localuser.so

修改后,及时生效。

systemctl restart sshd

3)用户账号的初始化配置文件

添加一个新的用户账号后,useradd命令会在用户的宿主目录中建立一些初始配置文件。这些文件来自于账号模板目录/etc/skel,基本上都是隐藏文件,

主要的用户初始配置文件

~/.bash_profile:用户每次登录时执行

~/.bashrc:每次进入新的Bash环境时执行(当然也包括登录系统)

~/.bash_logout:用户每次退出登录时执行

充分理解这些文件的作用,便于我们安排一些自动运行的后台管理任务,例如:.bashrc文件中默认设置了一些命令别名。

默认情况下,用户宿主目录下的初始配置文件只对当前用户有效,而全局配置文件对所有用户有效。

4)组账号管理

用户和组的关系: 组中可以没有用户、 也可以有一个或者多个用户。 用户只有一个主要组(基本组),可以同时属于多个组,但是除了主要组以外的其他组称为附属组。

组的分类:从用户的角度分的,分为:

主要组: 用户的默认组,也就是gid所标识的组

附属组:

(1)组账号文件

与用户帐号文件相类似,组账号相关的配置文件也有两个:

/etc/group:保存组帐号基本信息

/etc/gshadow:保存组帐号的密码信息(但很少使用到)

说明:

/etc/gshadow文件的应用极少,仅作简单介绍即可

group文件内的最后一个字段中列出属于该组的用户成员(一般不包括基本组对应的用户帐号),多个成员之间以逗号“,”分隔

(2)添加、管理、删除组账户

groupadd命令

格式:groupadd  [-g GID]  组帐号名

gpasswd命令

用途:设置组帐号密码(极少用)、添加/删除组成员
格式:gpasswd  [选项]…  组帐号名

常用命令选项

-a:向组内添加一个用户
-d:从组内删除一个用户成员
-M:定义组成员列表,以逗号分隔

groupdel命令 #删除组账号

格式:groupdel  组帐号名

5)查询账号信息

id命令

用途:查询用户身份标识
格式:id  [用户名]

groups命令

用途:查询用户所属的组
格式:groups  [用户名]

finger命令

用途:查询用户帐号的详细信息
格式:finger  [用户名]

users、w 、who命令

用途:查询已登录到主机的用户信息

练习:

1) 添加三个用户usr1, usr2, usr3

# useradd usr1

# useradd usr2

# useradd usr3

2) 添加用户usr4, 同时指定其主组为usr1, uid为2014, 并验证用户创建是否正确

# useradd -g usr1 -u 2014 usr4

# id usr4

3) 添加用户usr5, 家目录为/tmp/usr5, 附加组为usr2, usr3

# useradd -d /tmp/usr5 -G usr2,usr3 usr5

4) 修改usr4的附加组为usr2, usr3, 注意验证

# usermod -G usr2,usr3 usr4

# id usr4

5) 修改usr1的shell为非登录shell

# usermod -s /sbin/nologin usr1

# grep usr1 /etc/passwd //仅过滤出文件中含有usr1的行

6) 彻底删除usr5用户

# userdel -r usr5

7) 为用户usr1设置密码redhat

# passwd usr1

3、设置目录和文件的权限

在linux文件系统的安全模型中,系统中的文件或目录具有两个属性:访问权限和文件所有者,简称权限和归属。其中,访问权限包括读取、写入、可执行三种基本类型,归属包括属主(拥有该文件的用户账户)、属组(拥有该文件的组账号),Linux操作系统根据文件或目录的访问权限和归属来对用户访问数据的过程进行控制。

查看目录或文件的属性:

“-rw-r–r–”部分的第1个字符表示文件类型,可以是d(目录)、b(块设备文件)、c(字符设备文件),减号“-”(普通文件)、字母“l”(链接文件)等,其余部分指定了文件的访问权限。

第2~4个字符表示该文件的属主用户(user)对该文件的访问权限。

第5~7个字符表示该文件的属组内各成员用户(group)对该文件的访问权限。

第8~10个字符表示其他任何用户(other)对该文件的访问权限。

第11个字符这里的“.”与selinux有关,后面会讲解。

在表示属主、属组或其他用户对该文件的访问权限时,主要使用了四种不同的权限字符:

r    可读 ;w   可写 ;x   可执行 ;-   无权限

r、w、x、- 权限字符还可分别表示为8进制数字4、2、1、0

权限

数字表示

对文件的影响

对目录的影响

r (读取)

4

可读取文件中的内容

可以列出目录的内容(文件或子目录)

w (写入)

2

可以修改文件的内容

可以创建或删除、移动目录中的任一文件、子目录

x (可执行)

1

可以作为命令或脚本执行文件

可以使用cd切换进此目录,即可以进入或通过目录,

2)设置目录和文件的权限

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

使用chmod命令设置文件或目录的权限时,基本的命令格式如下:

格式1:chmod   [ugoa]  [+-=]  [rwx]  文件或目录…

说明:

u、g、o、a 分别表示属主、属组、其他用户、所有用户

+、-、= 分别表示增加、去除、设置权限

格式2:chmod nnn 文件或目录…

说明:nnn为需要设置的具体权限值,如755、644等

格式3:chmod [选项] –reference=参考文件 文件…

常用命令选项

-R:递归修改指定目录下所有子目录及文件的权限,若不指定-R选项,chmod命令将只改变所指定目录本身的权限。

举例说明:

#文件file.txt的所有者增加读和运行的权限。

chmod u+rx file.txt

#文件file.txt的群组增加读的权限。

chmod g+r file.txt

#文件file.txt的其他用户移除读的权限。

chmod o-r file.txt

#文件file.txt的群组增加读的权限,其他用户移除读的权限。

chmod g+r,o-r file.txt

#文件file.txt的群组和其他用户均移除读的权限。

chmod go-r file.txt

#文件file.txt的所有用户增加运行的权限。

chmod +x file.txt

#文件file.txt的所有者分配读,写和执行的权限;群组分配读的权限,不能写或执行;其他用户没有任何权限。

chmod u=rwx,g=r,o=- file.txt

#递归执行赋权,设置newname文件夹权限

chmod -R 700 /home/newname

3)设置目录和文件的归属

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

chown命令

格式:chown  属主   文件或目录

      chown  :属组  文件或目录

      chown  属主:属组  文件或目录

      chown [选项] –reference=参考文件 文件…

常用命令选项

-R:递归修改指定目录下所有文件、子目录的归属

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容