Linux学习笔记(14)——Linux 账号管理与 ACL 权限设定

来源:互联网 发布:淘宝头像尺寸 编辑:程序博客网 时间:2024/05/22 05:25

1) Linux账号与群组

a)  使用者标识符: UID 与GID

每一个档案都具有『拥有人与拥有群组』的属性,每个登入的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称 UID)、一个是群组 ID (Group ID ,简称 GID)。

b)  使用者账号

跟使用者账号有关的有两个非常重要的档案,一个是管理使用者 UID/GID 重要参数的 /etc/passwd ,一个则是专门管理密码相关数据的/etc/shadow

c)  /etc/passwd档案结构

【账户名称】:用来对应UID,root的UID为0(第三个字段).

【密码】:已经放到了/etc/shadow中,目前只能看到[x].

【UID】:使用者标识符,uid 为0,则表示系统管理员;uid在1到499之间,表示系统账号,uid大于500,则为普通账号。

【GID】:这个与/etc/group有关。

【用户信息说明栏】:解释账号意义,chfn

【家目录】:默认的用户家目录在/home/yourIDname。

【shell】:预设使用哪种shell,但是/sbin/nologin却无法让账号取得shell环境的登入动作。

d)  /etc/shadow档案结构

【账户名称】:对应相应的账号,必须要与/etc/passwd 相同。

【密码】:

【最近更改密码的日期】:1970年1月1日作为 1 累加的日期。

【密码不可被更改的天数】:(不第 3 字段相比)

【密码需要重新变更的天数】:(不第 3 字段相比)

【密码需要变更期限前的警告天数】:(不第 5 字段相比)

【密码过期后的账号宽限时间(密码失效日)】:

【账号失效日期】:

【保留】:

e)  /etc/group档案结构

这个档案就是在记录 GID 与组名的对应了

【组名】:

【群组密码】:,密码已经移动到/etc/gshadow去

【GID】:/etc/passwd 第四个字段使用的 GID 对应的群组名

【此群组支持的账号名称】:

f)  有效群组(effective group)与初始群组(initial group)

/etc/passwd 里面的第四栏 GID 就是所谓的『初始群组 (initial group) 』!用户一登入系统,立刻就拥有这个群组的相关权限

g)  groups:有效与支持群组的观察

#groups     查询当前账户所支持的群组

groups命令第一个输出的群组即为有效群组(effective group)

新建档案的拥有者为有效群组,有效群组的主要用途也在此。

h)  newgrp:有效群组的切换

#newgrp 群组名

newgrp命令实际上时另起一个shell,在新的shell中切换群组。如需退出,请使用exit

i)  /etc/gshadow

【组名】【密码栏】【群组管理员的账号】【该群组的所属账号】

2) 账号管理

a)  新增账号

#useradd  新建用户名

CentOS 这些默认值主要会帮我们处理几个项目:

---在 /etc/passwd 里面建立一行与账号相关的数据,包括建立 UID/GID/家目录等;

---在 /etc/shadow 里面将此账号的密码相关参数填入,但是尚未有密码;

---在 /etc/group 里面加入一个与账号名称一模一样的组名;

---在 /home 底下建立一个与账号同名的目录作为用户家目录,且权限为 700

b)  设置密码

#passwd username      #修改账号名为username的密码

#passwd               #修改当前账户的密码

可以使用如下命令查看账号密码参数:

#passwd username –S

#chage username

c)  useradd参考档

# useradd –D   呼叫useradd默认值

其实是呼叫/etc/default/useradd档案而来

【GROUP=100】:新建账号的初始群组使用 GID 为 100 ,即user,由于centos采用私有群组机制,故此项设定不会生效,新建账号的初始群组为与账号名称一样的群组。

【HOME=/home】:用户家目录的基准目录(basedir),用户的家目录通常是与账号同名的目录,这个目录将会摆放在此设定值的目录后。

【INACTIVE=-1】:密码过期后是否会失效的设定值,若为-1,则表示永远都不会失效

【EXPIRE=】:账号失效的日期

【SHELL=/bin/bash】:默认使用的 shell 程序文件名,如果不希望用户登入系统取得 shell ,那么设定为 /sbin/nologin。

【SKEL=/etc/skel】:用户家目录参考基准目录,新增的用户家目录下的内容都是由/etc/skel 所复制过去的。

【CREATE_MAIL_SPOOL=yes】:建立使用者的mailbox

d)  /etc/login.defs账号额外参考值

此档案规范如下数据:

【mailbox 所在目录】:

【shadow 密码第 4, 5, 6 字段内容】

【UID/GID 挃定数值】

【用户家目录设定值】

【用户删除与密码设定值】

e)  useradd这支程序在建立Linux 上的账号时,至少会参考:

/etc/default/useradd

/etc/login.defs

/etc/skel/*

f)  usermod:对useradd中设定参数进行调整

#usermod [选项与参数] username

g)  userdel  删除用户的相关数据

用户的数据有:

【用户账号/密码相关参数】:/etc/passwd, /etc/shadow

 【使用者群组相关参数】:/etc/group,/etc/gshadow

【个人档案】: /home/username,/var/spool/mail/username..

如果只是想让账号[暂时不启用]的话,将/etc/shadow里头账号失效日期 (第八字段) 设定为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来。使用 userdel的时机通常是『真的确定不要让该用户在主机上面使用任何数据了!』

       

3) 用户功能

a)  finger  查询用户相关信息,大多是/etc/passwd这个档案中的

【Login:】为使用者账号,即 /etc/passwd 内的第一字段;

【Name:】为全名,即 /etc/passwd 内的第五字段(或称为批注);

【Directory】:就是家目录了;

【Shell】:就是使用的 Shell 档案所在;

【Never logged in.:】调查用户登入主机的情况

【No mail.:】调查 /var/spool/mail 当中的信箱资料;

【No Plan.:】调查 ~vbird1/.plan 档案,并取出来说明!

b)  chfn:

c)  chsh:change shell

d)  id:查阅账户的UID/GID等的信息

e)  新增与移除群组

#groupadd

#groupmod  与usermod相似,用来修改groupadd的参数

#groupdel  删除群组

删除群组时,必须确认 /etc/passwd 内的账号没有任何人使用该群组作为 initial group

f)  gpasswd:群组管理员功能

g)  例题

 

4) 主机的细部权限规划:ACL 的使用

a)  什么是ACL

ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限设定。ACL 可以针对单一使用者,单一档案或目录来进行 r,w,x 的权限规范。

b)  如何启动ACL

centos中预设ext3时启动支持ACL

# dumpe2fs -h /dev/sda2

c)  ACL的设定技巧:getfacl, setfacl

getfacl:取得某个档案/目录的 ACL 设定项目;

setfacl:训定某个目录/档案的 ACL 规范。

d)  setfacl指令用法

如果一个档案设定了 ACL 参数后,他的权限部分就会多出一个 + 号了!但是此时你看到的权限与实际权限可能就会有点误差! 可以透过 getfacl 来观察

e)  getfacl指令用法

# getfacl filename

显示的数据前面加上 # 的,代表这个档案的默认属性,包括文件名、档案拥有者与档案所属群组。底下出现的 user, group, mask, other 则是属于不同使用者、群组与有效权限(mask)的设定值。

使用者或群组所设定的权限必须要存在于 mask 的权限设定范围内才会生效,此即『有效权限 (effective permission)』

vbird1 与 mask 的集合发现仅有 r 存在,因此 vbird1 仅具有r 的权限而已,并不存在 x 权限!

f)  取消ACL属性

#setfacl -b 档案名

5) 使用者身份切换

a)  su

在su的用法中,减号[-]涉及到login-shell 与non-login shell 的变量读取方法。

单纯使用『 su 』切换成为 root 的身份,读取的变量设定方式为 non-login shell 的方式,这种方式很多原本的变量不会被改变,因此,务必添加减号[-]

一个只有 root 才能进行的指令,且执行完毕就恢复原本的身份,那就可以加上 -c 这个选项

若要完整的切换到新使用者的环境,必须要使用『 su- username 』或『 su -l username 』, 才会连同 PATH/USER/MAIL 等变量都转成新用户的环境;

如果仅想要执行一次 root 的指令,可以使用『 su - -c "指令串" 』癿方式来处理;

  使用 root 切换成为任何使用者时,并不需要输入新用户的密码;

    多人使用su来连接root时,容易导致root密码泄露,此时可以使用sudo来解决。

b)  sudo

并非所有人都能够执行 sudo , 而是仅有 /etc/sudoers 内的用户才能够执行 sudo 这个指令。

系统默认仅有 root 可以执行 sudo

无法使用『 su - sshd 』去切换系统账号 (因为sshd为系统账号,且shell 是 /sbin/nologin), 这个时候sudo 就好用了,立刻以 sshd 的权限在 /tmp 底下建立档案

c)  sudo执行流程

1. 当用户执行 sudo 时,系统于 /etc/sudoers 档案中搜寻该使用者是否有执行 sudo 的权限;

2. 若使用者具有可执行 sudo 的权限后,便让使用者『输入用户自己的密码』来确认;

3. 若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密码);

4. 若欲切换的身份与执行者身份相同,那也不需要输入密码。

d)  sudo执行的重点是:『能否使用sudo 必须要看 /etc/sudoers 的设定值, 而可使用 sudo 者是透过输入用户自己的密码来执行后续的指令串』

e)  visudo与/etc/sudoers

除了 root 之外的其他账号,若想要使用 sudo 执行属于 root 的权限指令,则 root 需要先使用 visudo 去修改 /etc/sudoers ,让该账号能够使用全部或部分 root 指令功能。

f)  单一用户进行 root 所有指令,与sudoers 档案语法:

那个 ALL 是特殊关键词,代表任何身份、主机或指令的意思

g)  利用群组以及免密码的功能处理 visudo

任何加入 wheel 这个群组的使用者,就能够使用 sudo 切换任何身份来操作任何指令』

以上的关键字nopasswd可以实现免密码使用sudo

h)  有限制的指令操作

当使用者仅能使用 passwd 这个指令帮忙 root 修改其他用户的密码

! 代表『不可执行』的意思,可以执行『 passwd 任意字符』,但是『 passwd 』与『 passwd root 』这两个指令例外! 如此一来授权用户 就无法改变 root 的密码了

i)  透过别名建置 visudo

j)  sudo时间间隔问题:

两次执行 sudo 的间隔在五分钟内,那么再次执行 sudo 时就不需要再次输入密码

k)  sudo搭配 su 的使用方式

只要输入『 sudo su - 』并且输入『自己的密码』后,立刻变成 root 的身份!不但 root 密码不会外流,用户的管理也变的非常方便!

6) 用户的特殊 shell 与 PAM 模块

a)  特殊的 shell, /sbin/nologin

所谓『无法登入』指的仅是:『这个使用者无法使用bash 或其他 shell 来登入系统』而已, 并不是说这个账号就无法使用其他的系统资源

可以修改/etc/nologin.txt配置文件,当用户无法登入时,提示我们自定义的信息,而不是系统预设的信息。

b)  PAM(Pluggable Authentication Modules, 嵌入式模块)

c)  PAM模块设定语法

以passwd这个指令为例,呼叫PAM的流程为:

1. 用户开始执行 /usr/bin/passwd 这支程序,并输入密码;

2. passwd 呼叫 PAM 模块进行验证;

3. PAM 模块会到 /etc/pam.d/ 找寻与程序 (passwd) 同名的配置文件;

4. 依据 /etc/pam.d/passwd 内的设定,引用相关的PAM 模块逐步进行验证分析;

5. 将验证结果 (成功、失败以及其他信息) 回传给 passwd 这支程序;

6. passwd 这支程序会根据 PAM 回传的结果决定下一个动作 (重新输入新密码或者通过验证!)

d)  常用模块简介

/etc/pam.d/*:每个程序个别的 PAM 配置文件;

/lib/security/*:PAM 模块档的癿实际放置目录;

/etc/security/*:其他 PAM 环境的配置文件;

 /usr/share/doc/pam-*/:详细的 PAM 说明文件。

e)  login的 PAM 验证机制流程

7) Linux主机上的用户信息传递

a)  查询使用者: w, who, last, lastlog

#last      #查询自系统建立以来登陆的用户信息

#w/who     #目前系统中已登录的用户

        #lastlog     #用户账号最近登陆的时间

b)  使用者对谈: write, mesg, wall

#mesg n    #设置mesg状态为n,表示不接受其他用户的信息

#mesg y    #设置mesg状态为y,表示接受其他用户的信息

#mesg      #查看mesg 的状态;

#wall      #对当前系统上所有的用户进行广播信息

注意:只有在在线时信息才能生效或传达

c)  使用者邮件信箱: mail

mailbox 都会放置在 /var/spool/mail 里面,一个账号一个 mailbox (档案)

#mail username@localhost -s"邮件标题"     #寄出邮件

由于mail程序中,编辑信件内容不太方便,可以使用数据流重导向功能来使用vi编辑,如下:

#mail username@localhost -s"邮件标题"< filename 

#mail    #收信

前面那个 > 代表目前处理的信件,而在大于符号的左边那个 N 代表该封信件尚未读过,直接按回车键enter进入查看邮件内容,退出时输入x即可

8) 手动新增使用者

a)  检查工具

#pwck   #检查/etc/passwd /etc/shadow 的信息是否一致

#grpck  #检查群组

b)  pwconv

将 /etc/passwd 内的账号与密码,移动到/etc/shadow 当中!

正常使用useradd添加用户时,pwconv不会有任何动作。

c)  手动建立账户流程

1. 先建立所需要的群组 ( vi /etc/group);

2. 将 /etc/group 与 /etc/gshadow 同步化 ( grpconv );

3. 建立账号的各个属性 ( vi /etc/passwd);

4. 将 /etc/passwd 与 /etc/shadow 同步化 ( pwconv );

5. 建立该账号的密码 ( passwdaccountname );

6. 建立用户家目录 ( cp -a /etc/skel/home/accountname );

7. 更改用户家目录的属性 ( chown -Raccountname.group /home/accountname )。

d)  大量建置账号模板

9) 总结

a)  使用者的账号/群组与 UID/GID 对应,参考/etc/passwd 及 /etc/group 两个档案

b)  /etc/passwd档案结构以分号隔开,共分为七个字段,分删是『账号名称、密码、UID、GID、全名、家目录、shell』

c)  使用者可以支持多个群组,其中在新建档案时会影响新档案群组者,为有效群组。而写入 /etc/passwd 的第四个字段者, 称为初始群组。

d)  与使用者建立、更改参数、初除有关的指令为:useradd, usermod, userdel等,密码建立则为 passwd;

e)  与群组建立、修改、删除有关的指令为:groupadd, groupmod, groupdel 等;

f)  群组的观察与有效群组的切换分删为:groups 及 newgrp ;

g)  useradd指令作用参考的档案有:/etc/default/useradd, /etc/login.defs, /etc/skel/ 等等

h)  观察用户详细的密码参数,可以使用『 chage -l 账号 』;

i)  ACL可进行单一个人或群组的权限管理,设定可使用 setfacl ,查阅则使用 getfacl ;

10)     练习

a)  账号分开管理

b)  暂时停掉账号

o将 /etc/passwd 的 shell 字段写成 /sbin/nologin ,即可让该账号暂时无法登入主机;

o将 /etc/shadow 内的密码字段,增加一个 * 号在最前面,这样该账号亦无法登入!

o 将 /etc/shadow 的第八个字段关于账号取消日期的那个,设定小于目前日期的数字,那么他就无法登入系统了!



------以上整理自鸟哥的Linux私房菜

0 0
原创粉丝点击