鸟哥私房菜 第十四章 Linux账号管理与ACL权限设置

来源:互联网 发布:成都电脑编程培训 编辑:程序博客网 时间:2024/05/11 23:46

Linux账号管理与ACL权限设置

 

Linux的账号与用户组

用户的标识符:UIDGID

每个登录的用户至少都会取得两个ID,一个是用户ID,即UID,一个是用户组ID,即GID

 

用户账号

/etc/passwd文件结构:

每一行使用“:”隔开,共有7个字段。

例:root:x:0:0:root:/root:/bin/bash

1.账号名称:用来对应UID

2.密码;早期UNIX系统的密码就放在这个字段,后来放到了/etc/shadow里面。

3.UID:当UID0的时候,代表这个账号是系统管理员

UID1~999时,代表这个账号是系统账号;当UID 1000~60000+时,代表这个账号是给一般用户使用的.

4.GID:这个与/etc/group有关。

5.用户信息说明列:解释账号的意义。

6.主文件夹:默认的用户主文件夹在/home/yourINname中。

7.Shell:当用户登入系统后就会取得一个shell来与系统的核心沟通以进行用户的操作任务。

 

/etc/shadow文件结构:

shadow同样以“:”作为分隔符,共有9个字段。

例:root:x:0:0:root:/root:/bin/bash

1.账号名称;

2.密码:经过编码加密过后的密码;

3.最近更动密码的日期;

4.密码不可被更动的天数(与第三个字段相比);

5.密码需要重新更改的天数(与第三个字段相比);

6.面膜需要更改期限前的警告天数(与第五个字段相比);

7.密码过期后的账号宽限时间(与第五个字段相比);

8.账号失效日期;

9.保留;

 一般用户忘记密码,可以请系统管理员帮忙重新设置好你的密码,不需要知道你的旧密码。

root忘记密码,可以重新启动进入用户维护模式,系统会主动给予root权限的bash接口,此时再以passwd修改密码即可;或者以Live CD开机后挂载根目录去修改/etc/passwd,将里面的root密码字段清空,再重启,并重新去设置密码。

 

有效与初始用户组:groupsnewgrp

/etc/group文件结构

例:root:x:o:root

1.用户组名称;

2.用户组密码;

3.GID

4.此用户支持的账号名称;

 

有效用户组与初始用户组

GID代表的就是所谓的初始用户组,也就是说,当用户登录系统,立刻就拥有这个用户组的相关权限的意思;

利用group可以查看有效与支持用户组,在输出的信息中,第一个输出的用户组即为有效用户组。通常有效用户组的作用是新建文件。

 

/etc/gshadow的文件结构

例:root:::root

1.用户组名;

2.密码列,开头为!表示无合法密码,所以无用户组管理员;

3.用户组管理员账号;

4.该用户组的所属账号。

 

账号管理

新增与删除用户:useradd,相关配置文件,passwd,usermod,userdel

Linux系统中可以使用useradd来新建用户,密码的给予则使用passwd

useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-nM]\

[-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 用户账号名

-u:直接指定一个特定的UID

-M:强制!不要创建用户文件夹(系统账号默认值)!

-m:强制!要创建用户文件夹(一般账号默认)!

-d:指定某个目录成为主文件夹,而不要使用默认值。务必是绝对路径!

-r:创建一个系统的账号,这个账号的UID会有限制;

-s:后面接一个shell,默认的是/bin/bash

-e:后面接一个日期,即账号失效日的设置;

-f:后面接shadow的第七字段选项,指定密码是否会失效。0为立刻失效,-1为永不失效(密码只会过期二强制登录时重新设置而已)。

 

useradd参考文件

useradd -D可以调出useradd的默认值,这个数据是从/etc/default/useradd调用出来的。

GROUP=100:新建账号的初始用户组使用GID100者。

HOME=/home:用户主目录文件夹的基准目录;

INACTIVE=-1:密码过期后是否会失效的设置值;

EXPIRE=-1:账号失效日期;

SHELL=/bin/bash:默认使用的shell程序文件名;

SKEL=/etc/skel:用户主文件夹参考基准目录;

CREAT_MAIL_SPOOL=yes:创建用户的Mailbox

 

设置密码就使用passwd

passwd [--stdin] --->所有人都可使用来改变自己的密码;

passwd  [-l] [-u] [--stdin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日数账号 <==root功能

--stdin:可以通过来自前一个管道的数据,作为密码输入;

-l:是Lock的意思,会将/etc/shadow第二列最前面加上!使密码失效;

-u:与-l相对,是Unlock的意思;

-S:列出密码相关参数,即shadow文件内的大部分信息;

-n:后面接天数,shadow第四字段,多久不可修改密码;

-x:后面接天数,shadow第五字段,多久内必须改动密码;

-w:后面接天数,shadow第六字段,密码过期钱的警告天数;

-i:后面接日期shadow第七字段,密码失效日期。

 

对账号的相关数据进行微调

usermod [-cdegGlsuLU] username

-c:后面接账号说明;

-d:后面接账号的主文件夹;

-e:后面接日期,格式是YYYY-MM-DD,也就是/etc/shadow内的第八字段数据(账号失效日);

-f:后面接天数,为shadow的第七字段(密码失效日期);

-g:后面接初始化用户组,即GID字段;

-G:后面接次要用户组;

-a:与-G合用可增加次要用户组的支持而非设置;

-l:后面接账号名称,即修改账号名称;

-s:后面接Shell的实际文件;

-u:后面接UID数字;

-L:暂时将用户的密码冻结;

-U:将/etc/shadow密码列的!去掉。

 

删除用户的相关数据

userdel [-r] username

-r:连同用户的主文件夹一起删除。

 

用户功能

id这个指令可以查询某人或者自己的相关UID/GID等等信息:

id [username]

 

finger也可以查询许多用户相关的信息:

finger [-s] username

-s:仅列出用户的账号、全名、终端机代号与登录时间;

-m:列出与后面接的账号相同者,而不是利用部分比对。

 chfn有点像是change finger的意思!

chfn [-foph] [账号名]

-f:后面接完整的大名;

-o:你办公室的房间号码;

-p:办公室的电话号码;

-h:家里的电话号码。

 

chsh就是change shell的简写。

chsh [-ls]

-l:列出目前系统上面可用的shell,其中就是/etc/shells的内容!

-s:设置修改自己的shell

 新增与删除用户组

基本上群组的内容都与连个文件有关:/etc/group/etc/gshadow。群组的内容基本上就是上面两文件的新增、修改与删除。groupadd

groupadd [-g gid] [-r] 用户组名

-g:后面接某个特定的GID,用来直接给予某个UID

-r:新建系统用户组。

群组的GID会由1000以上最大GID+1来决定。

 

groupmod

groupmod [-g gid] [-n group_name] 群组名

-g:修改既有的GID数字;

-n:修改既有的组名。

groupdel

groupdel [groupname]

 

 

gpasswd:群组管理员功能

gpasswd groupname

gpassdw [-A user1,...] [-M user3,...] groupname 

gpasswd [-rR] groupname

没有参数,表示给予groupname一个密码(/etc/gshadow)

-A:将groupname的主控权交由后面的用户管理;

-M:将某些账号加入这个用户组中;

-r:将groupname的密码删除;

-R:让groupname的密码栏失效。

 

关于用户组管理员做的操作:

gpasswd [-ad] user groupname 

-a:将某位用户加入到groupname这个用户组中;

-d:将某位用户删除出groupname这个用户组中。

 

主机的具体权限规划:ACL的使用

什么是ACL

ACLAccess Control List的缩写,主要的目的是提供传统的ownergroupothersreadwriteexecute权限之外的具体权限设置。ACL可以针对单一用户单一文件或目录来进行rwx的权限设置,对于需要特殊权限的使用状况非常有帮助。

 

ACL的设置技巧:getfaclsetfacl

getfacl:取得某个文件/目录的ACL的设置项目;

setfacl:设置某个目录/文件的ACL设定;

 

setfacl命令:

setfacl [-bkRd] [{-m|-x} acl 参数目标文件名

-m:设置后续的acl参数给文件使用,不可与-x合用;

-x:删除后续的acl参数,不可与-m合用;

-b:删除所有的acl设置参数;

-k:删除默认的acl参数;

-R:递归设置acl,亦即包括子目录都会被设置起来;

-d:设置默认的acl参数!只对目录有效,在该目录新建的数据会引用此默认值。

 

getfacl命令:

getfacl filename

getfacl的参数几乎与setfacl相同。

 

针对特定用户的设置方式:

设置规定:“u:[用户账号列表]:[rwx]”,例如针对Jason的权限规定rxset -m u:jason:rx filename

 

针对特定群组的设置方式:

设定规范:“g:[群组列表]:[rwx]”,例如针对mygroup1的权限规范rxset -m g:mygroup1:rx filename

 

针对有效权限mask的设定方式:

设定规范:“m:[rwx]”,例如针对filename文件规定为仅有r

setfacl -m m:r filename

 

针对预设默认权限的设置方式:

设置规范:”d:[ug]:用户列表:[rwx]”,例如:setfacl -m d:u:myuser1:rx filename

 

用户身份切换

su

su是最简单的身份切换命令。方法如下:

su [-lm] [-c 命令] [username]

-:单纯使用-,如“su -”,代表使用login-shell的变量文件读取方式来登录系统;若用户名称没加,则代表切换为root身份;

-l:与-类似,但后面需要加欲切换的用户账号。也是login-shell的方式;

-m-m-p是一样的,表示使用目前的环境设置,而不读取新用户的配置文件;

-c:仅进行一次命令,所以-c后面可以加命令。

 

sudo

sudo的执行只需要自己的密码即可。方法如下:

sudo [-b] [-u 新用户账号]

-b:将后续的命令让系统自行执行,而不与目前的shell产生影响;

-u:后面可以接欲切换的用户,若无此项则代表切换身份为root

sudo的执行流程:

1.当用户执行sudo时,系统于/etc/sudoers文件中查找该用户是否有执行sudo的权限;

2.若用户具有权限,让用户输入自己账号的密码;

3.密码输入成功后,便开始进行后面的命令;

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

visudo/etc/sudoers

 

visudo就是利用vi/etc/sudoers文件呼叫出来进行修改。

若要让jason这个账号可以使用root的任何指令,其中一种是直接修改/etc/sudoers,即在”root ALL=(ALL) ALL”后面新增一行“jason ALL=(ALL) ALL”ALL是特殊的关键词,代表任何身份、主机或指令的意思。

上面的指令中,“root”为使用者账号:系统的哪个账号可以使用sudo 这个指令;

第一个“ALL”是登入者的来源主机名:这个主机由哪台主机连接到本Linux主机,默认值root可来自任何一台网络主机;

第二个“(ALL)”是可切换身份:这个账号可以切换成什么身份来下达后续的指令,默认root可以切换成任何人;

第三个“ALL”是可下达的指令:可由该身份下达什么指令?这个指令请务必使用绝对路径!预设root可以切换成任何身份且进行任何指令

 

用户的特殊shellPAM模块

特殊的shell/sbin/nologin

利用/sbin/nologin这个合法shell,可以使某个账号无法登录;如果我们想要某个具有/sbin/nologin的用户知道,他们不能登录主机时,可以新建”/etc/nologin.txt”,并在其中说明不能登录的原因,下次登录就会显示其中的内容。

 

PAM模块简介

PAM可以说是一套应用程序编程接口(Application Programming InterfaceAPI)它提供了一连串的验证机制,只要用户将验证阶段的需求告知PAM后,PAM就可以回报用户验证的结果。

 

PAM模块的设置语法

 以passwd指令呼叫PAM的重点是/etc/pam.d里面的配置文件,以及配置文件所呼叫的PAM模块进行的验证工作。

/etc/pam.d/passwd配置文件的内容主要分为三个字段:

第一个字段:验证类别(type

主要分为四种:authaccountsessionpassword

第二个字段:验证的控制标志(control flag

主要分为四种控制方式:requiredrequisitesufficientoptional

第三个字段:PAM的模块与该模块的参数。

 

常用模块介绍

详细的模块情报:

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

/lib/security/*PAM模块文件的实际放置目录;

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

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

几个较常用的模块:

pam_securetty.so:限制管理员只能够从安全的终端机登录;

pam_nologin.so:限制一般用户是否能够登录主机;

pam_selinux.so:针对程序来进行详细管理权限的功能;

pam_console.so:帮你解决一些某些特殊终端接口的权限问题;

pam_loginuid.so:规范系统账号和一般账号的UID

pam_env.so:用来设置环境变量的一个模块;

pam_UNIX.so:这个模块很复杂且重要,这个模块可以用于验证阶段的认证功能,可以用于授权阶段的账号许可管理,可以用于会议阶段的日志文件记录等;

pam_cracklib.so:用来验证密码强度,包括密码是否在字典中,密码输入错误多次就断掉连接等功能;

 

Linux主机上的用户信息传递

查询用户:w,who,last,lastlog

w,who:查询目前已登入在系统上面的用户;

last:查询过去登陆过的用户信息;

lastlog:每个账号最近的登入时间。

 

用户对话:write,mesg,wall

write可以直接将信息传给接受者:write 用户账号 [用户所在终端接口]

如果不想接受任何信息,可以执行:mesg n。不过对root的信息无影响,解开:mesg y

对所有系统上的用户传送信息:wall “....”

 

用户邮件信箱:mail

基础信件:mail username@localhost -s “邮件标题。一般来说,如果寄给本机上的用户,可以不加”@localhost“

利用数据流重定向,可以将已经用vim编辑好的信件内容发出去,命令例子:mail george -s “nice to meet you!” < filename

收信:直接利用mail,具体操作可以输入”?“来查看;

 

手动新增用户

一般不建议!

 

阅读全文
0 0
原创粉丝点击