linux编程中mask是什么意思呀?

linux编程中mask是什么意思呀?,第1张

enable:允许中断,默认为unmask

if

null

disable:禁止中断,默认为mask

if

null

mask:mask

一个中断源,通常是关闭中断

mask_ack:响应并mask中断源

unmask:unmask中断源

例如

irq_desc[irq].mask

=

pcf50606_mask_irq

irq_desc[irq].unmask

=

pcf50606_unmask_irq

//mask,unmask函数与enable_irq/disable_irq对应,把使能禁止中断对应到设置pcf50606中断mask中

1,先找到/etc/passwd里面是否有你输入的帐号,没有的话则跳出,有的话就将该帐号对应的UID,GID

读出来,另外还有该帐号的家目录与shell设定也一并读出;

2,核对密码表,这时Linux会进入/etc/shadow里面找出对应的帐号与UID,然后核对一下你刚刚输入的密码

与里面的密码是否相符

3,如果一切OK的话,就进入Shell控管的阶段

/etc/passwd的档案结构

1 帐号名称 用来对应UID的

2 密码 会看到一个X 密码数据改放到/etc/shadow

3 UID 0表示root 1~ 499表示系统帐号 1~99 由distributions自行建立的系统帐号,100~499用户有系统帐号需求时,可以使用的帐号UID

4 GID 这个/etc/group的观念和/etc/passwd差不多,用来规范组名与GID对应而已

5用户信息栏说明,只是用来解释这个帐号的意义而已,不过,如果你提供使用finger的功能时,这个字段可以提供很多的讯息,chfn指令用于解释

6 家目录 root就是/root

7 Shell 当用户登录系统后会取得一个Shell来与系统的核心沟通,以进行用户的 *** 作任务,一般取值为/sbin/bash, 如果用来替代成让帐号无法取得

shell环境的登录动作,那就是/sbin/nologin这个东西

/etc/shadow的档案结构

1 帐号名称 用来必须要与/etc/passwd 相同才行

2 密码 经过编码的密码(加密)啦!这个档案只有root才可以读写就是了,不要不小心更动这个档案的权限,由于固定的编码系统产生的密码长度

必须一致,因此在此字段上加上!或*改变了密码字段的长度,就会让密码【暂时失效】了

3最近更动密码癿日期: 这个字段的值是以1970年1月1日而累加的日期,14126表示的就是2008-09-04那一天,想要了解该日期,可以使用chage

这个指令的帮忙

4 密码不可被改动的天数: 这个帐号最近一次被更改后需要多少时间才能再次被变更,如果是0的话,表示密码随时可以更动的意思

5 密码需要重新变更的天数:强制性的规定该密码在多少时间后需要重新的设定一下密码

6 密码需要变更期限前的警告天数:表示提示用户这个密码就要到期了,请尽快重新设定你的密码

7 密码过期后的帐号宽限时间,过了期限后依旧没有更新密码,那么密码就算过期了,虽然密码过期了,但是该帐号还是可以用来进行其他工作的

包括登录系统取得bash,不过如果密码过期了,登录系统时,系统会强制你必须要重新设定密码才能登录继续使用,如果密码过期几天后,还是没有

登录更改密码,那么这个帐号密码就会【失效】,这个帐号再也无法使用该密码登录了,密码过期和密码失效并不相同

8 帐号失效日期: 表示此帐号在此日期之后,就无法再使用了,无论密码是否过期

9 保留字段,看以后是否有新功能加入

/etc/group的档案结构

1 组名

2 群组密码 密码已经移动到/etc/gshadow 中去了,这个字段只会存在一个【x】而已

3 GID群组ID,

4 此群组支持的帐号名称: 如果想让dmtsai加入root群组的话,那么在这行的最后面加上【,dmtsai】,注意不要空格【root:x:0:root,dmtsai】

执行groups得到这个用户所有支持的群组,第一个输出的群组即为有效群组,touch一个新档案,那么该档案的群组即为dmtsai了

newgrp:有效群组的切换,不过使用newgrp是有限制的,那就是你想要切换的群组必须是你已经有支持的群组,例如:dmtsai可以在

dmtsai/users这两个你支持的群组之间进行切换的,执行newgrp users 可以变更有效群组为users这个群组,这个指令执行后,是以另一个

shell来提供接下来的 *** 作的,这个时候dmtsai这个使用者目前是以另一个shell登录的,而且新的shell给予dmtsai有效的GID为users

有效群组被重新计算,由于是新取得的一个shell,想要返回到原本的环境中,需要输入exit回到原本的shell中

你要加入一个群组有两个方式,一个是透过系统管理员root利用usermod帮你加入,还可以透过群组管理员以gpasswd帮你

加入到他管理的群组中

新增与移除使用者:useradd 相关配置文件,passwd, usermod userdel

useradd [-u UID] [-g 刜始群组] [-G 次要群组] [-mM]\ 这句就是增加初始群组和次要群组的方法

创建用户时,默认会建立用户家目录,且目录的权限为700,同时还会帮我们处理几个项目

/etc/passwd 里面建立一行与数据有关的数据,包含UID和GID

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

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

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

用户建立系统账号一般由100号以后算起,所以这里我们加上 -r 这个选项后,系统将账号与账号同名群组的UID/ GID都指定小于500以下,由于这些账号只是用来运作

系统所需服务的权限设定所以不会主动建立家目录

useradd 会更改以下的文件

用户账号与密码参数方面的档案:/etc/passwd, /etc/shadow,使用者群组相关方面癿档案:/etc/group, /etc/gshadow 用户的家目录:/home/账号名称

而家目录中的内容来自于/etc/default/useradd 中的内容 可以用useradd -D查看到,

GROUP=100 的含义分为两种

1,私有群组机制,系统建立一个与账号一样的群组给使用者作为初始群组,RHEL FEDORA CENTOS 都是这样设定的

2,公有群组机制,就是以100这个群组作为新建账号的初始群组,SUSE就是这样设定的

HOME=/home:用户家目录的基准目录(basedir)

INACTIVE=-1:密码过期后是否会失效的设定值 0代表过期后失效,1代表永远不失效,30代表30天后失效

EXPIRE=:账号失效的日期

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

如果是mail server ,那么不许用户登陆系统得到shell,那么可以将这里设定为/sbin/nologin,如此以来,新建的用户都无法登陆,免去了后续使用usermod的修改手续了

SKEL=/etc/skel:用户家目录参考基准目录

vbird1 家目录 /home/vbird1 内的各项数据,都是由 /etc/skel 所复制过去的,你可以在/etc/skel目录内容修改.bashrc文件或者建立www这个目录,那么未来新增的使用者

的家目录下就会有www这个目录了

CREATE_MAIL_SPOOL=yes:建立使用者的 mailbox,这个值设置为yes,那么ll /var/spool/mail/这个目录下就会存在使用者的邮箱了

除了以上的账号设定值之外,UID和GID还有密码参数是参考/etc/login.defs文件的

文件内容包括

MAIL_DIR /var/spool/mail <==用户默认邮件信箱放置目录

现在用户登陆系统时的密码校验是通过PAM模块来验证的,所以PASS_MIN_LEN是失效的

UID_MIN UID_MAX UID的最小和最大值,一般创建用户时,会先查询/etc/passwd中的最大UID数值,再加上一就是新账号的UID了,如果加上-r 那么就会找出比500小的

最大的那个UID + 1

CREATE_HOME yes <==在不加 -M 及 -m 时,是否主动建立用户家目录

UMASK 077 <==用户家目录建立的 umask ,因此权限会是 700

USERGROUPS_ENAB yes <==使用 userdel 删除时,是否会删除初始群组

MD5_CRYPT_ENAB yes <==密码是否经过 MD5 的加密机制处理

通过以上说明,useradd这个命令会参考 /etc/default/useradd /etc/login.defs /etc/skel/* 等文件的内容

passwd

当使用useradd建立账号之后,预设情况下账号暂时是封锁的,无法登陆的,只有passwd设定密码后才能登陆

选项与参数

--stdin :可以透过来自前一个管线的数据,作为密码输入,对 shell script 有帮助

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

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

-S :列出密码相关参数,亦即 shadow 档案内的大部分信息。

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

-x :后面接天数,shadow 的第 5 字段,多久内必须要更动密码

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

-i :后面接『日期』,shadow 癿第 7 字段,密码失效日期

一般用户设置密码的格式非常严格,大多使用PAM模块来进行密码的检验,这个管理的机制写在 /etc/pam.d/passwd 当中,而该档案与密码有关的测试模块

就是使用pam_cracklib.so 这个模块会检验密码的相关信息,取代/etc/login.defs内的PASS_MIN_LEN

设定密码还可以使用管道的方式 echo "abc543CC" | passwd --stdin vbird2

chage 这个命令也可以查看密码的相关参数信息的

-l :列出该账号详细密码参数;

-d :后面接日期,修改 shadow 第三字段(最近一次更改密码癿日期),格式 YYYY-MM-DD

-E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD

-I :后面接天数,修改 shadow 第七字段(密码失效日期)

-m :后面接天数,修改 shadow 第四字段(密码最短保留天数)

-M :后面接天数,修改 shadow 第五字段(密码多丽需要迚行变更)

-W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)

chage -l vbird2 列出vbird的详细密码信息

chage还有一个功能,当用户第一个登入时,强制她们一定要修改密码才能使用系统资源,

例如:

useradd agetest

echo "agetest" | passwd --stdin agetest

chage -d 0 agetest 此时此账号的密码建立时间会被改为1970.1.1,所以有问题

再次登录的时候,就会强制你修改密码了

usermod 进行相关数据的微调

userdel 删除用户的相关数据,包括 :/etc/passwd, /etc/shadow /etc/group, /etc/gshadow /home/username, /var/spool/mail/username..

选项不参数: -r :连同用户的家目录也一起删除

如果想让某个账号暂时不启用的话,将/etc/shadow中的第八个字段设定为0就可以让该账号无法使用了,所有跟该账号相关的数据都会留下来

真正删除用户之前最好先执行 find / -user username 查询该用户创建了的所有文件

无论是 useradd/usermod/userdel ,那都是系统管理员所能够使用的指令,一般用户除了修改密码之外,还可以进行一些账号数据变更与查询指令的

finger

一般用户可以使用这个命令来查阅用户相关的信息,大部分是/etc/passwd这个档案里面的信息,

finger [-s] username 列出的信息包括账号,全名,家目录,shell,查询用户登陆主机的情况,信箱资料,计划资料

利用 vbird1 建立自己的计划档

echo "I will study Linux during this year." >~/.plan 接着使用finger vbird1就可以看到计划信息了

finger不加参数 , 找出目前在系统上面登入的用户与登入时间 除了显示这个信息之外,还会显示Office Phone等信息,这些信息是通过chfn来设定的

chfn 有点像 change finger的意思

-f :后面接完整的大名; -o :您办公室的房间号码; -p :办公室的电话号码; -h :家里的电话号码!

vbird1 自己更改一下自己的相关信息

chfn 接着等待用户输入

chsh 就是change shell 的简写

chsh [-ls]

选项与参数: -l :列出目前系统上面可用的shell ,其实就是 /etc/shells 的内容! -s :设定修改自己的 Shell 啰

无论是 chfn 不 chsh ,都是能够让一般用户修改 /etc/passwd 这个系统文件的,而这两个命令一定有SUID这个属性的,否则一般用户是不能修改passwd文件的

id

id 这个指令则可以查询某人或自己的相关 UID/GID 等等的值

新增与移除群组

groupadd

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

-r :建立系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。

单单家里群组时,最好使用 groupadd -r 群组名的方式来建立啦

groupmod 与 usermod类似

选项与参数: -g :修改既有的 GID 数字;

-n :修改既有的组名

groupmod -g 201 -n mygroup group1

groupdel 删除群组

删除群组时必须要确认/etc/passwd内的账号没有与任何人使用该群组作为 初始化群组

gpasswd:群组管理员功能

-A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员) 例如 gpasswd [-A user1,...] [-M user3,...] groupname

-M :将某些账号加入这个群组当中!

-r :将 groupname 的密码秱除 例如 gpasswd [-rR] groupname

-R :让 groupname 的密码栏失效

:若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow) 例如gpasswd groupname

-a :将某位使用者加入到 groupname 这个群组当中!

-d :将某位使用者移除出 groupname 这个群组当中。

gpasswd -A vbird1 testgroup 将vbird1设置为testgroup 的群组管理员

gpasswd -a vbird3 testgroup 让vbird3设置成为testgroup组的成员

群组管理员可以设定多个,上面的vbird1就可以设定testgroup的群组管理员了,所以 vbird1 就可以自行增加群组成员啰,该群组成员就能够使用 newgrp 啰

测试:建立三个用户的共同开发目录

需要将这三个用户都加上一个共有的公有群组,接着在这个目录上设置为该群组,再将这个目录的权限设置为2770 ,其中的2代表SGID,也就是这三个使用者能够修改

对方的档案,这个SGID必须要存在,

那如果需要增加一个myuser1作为这个项目的助理,他需要有查看这个项目的内容,但不能修改这个目录内的任何数据,这样既不能修改目录的权限为2775,因为这样的话

其他人也能进入这个目录了,同时也不能将这个用户加入到公有的群组上,因为一旦加上,这个用户就可以修改这个目录内的内容了。

所以这个时候就需要加上ACL的使用了

传统的权限仅有三种身份,也就是(owner, group, others) 搭配三种权限 (r,w,x) 而已,没有办法为某一个使用者或某一个群组来设定特定的权限需求,此时就一定要使用

ACL这个机制了

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

于需要特殊权限的使用状况非常有帮助

ACL主要可以针对以下这些方面来控制权限

使用者 : 可以针对使用者来设定权限

群组:可以针对群组为对象来设定其权限

默认属性mask 还可以针对在该目录下在建立新档案/目录时,规范新数据的默认权限

使用ACL必须要有文件系统的支持才行,目前绝大多数的文件系统都有支持 ACL的功能,包括 Ext3 Ext4 JFS XFS等等

查看本文件系统是否支持ACL可以执行 mount命令

mount命令 可以看到文件系统的大致情况,接着也可以由superblock内容去查询 dumpe2fs -h /dev/hda1

由mount单独查询,未必可以看到实际的项目,由于目前的distributions 常常会主动加入某些默认功能,在rhel预设的情况下(Default Default mount ) ,就会帮你加入acl的

如果没有默认加上acl,那么就要手动的加上acl的支持了,mount -o remount,acl / 这样就可以了,再执行mount就可以看到效果了,但是如果想要每次开机都生效,那么就

要写入到/etc/fstab中去

acl的命令有getfacl 和 setfacl

当设置好文件系统支持acl后,接下来可以利用 getfacl setfacl 来设定acl了

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

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

setfacl 指令用法

选项不参数:

-m :设定后续的 acl 参数给档案使用,不可与 -x 合用;

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

-b :移除所有的 ACL 设定参数;

-k :移除预设的 ACL 参数,关于所谓的『预设』参数于后续范例中介绍;

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

-d :设定『预设 acl 参数』的意思!叧对目录有效,在该目录新建癿数据会引用此默认值

1. 针对特定使用者的方式:,例如针对 vbird1 癿权限规范rx:

原先的 -rw-r--r-- 1 root root 0 Feb 27 13:28 acl_test1

执行 setfacl -m u:vbird1:rx acl_test1

执行后的 -rw-r-xr--+ 1 root root 0 Feb 27 13:28 acl_test1

结果 权限部分多了个 + ,且与原本的权限 (644) 看起来差异很大!

再次执行 setfacl -m u::rwx acl_test1

结果 -rwxr-xr--+ 1 root root 0 Feb 27 13:28 acl_test1 使用者栏位为冒号代表设定该档案拥有者,所以root的权限变成了rwx了

设定的格式为 『 u:使用者:权限 』的方式来设定的啦,一个档案设定了ACL参数后,他的权限部分会多出一个 + 号,而且此时看到的权限与实际的权限很可能会有不一样

可以使用getfacl来进行查看

getfacl 指令用法

getfacl filename getfacl的选项几乎与 setfacl 相同

列出刚刚设定的acl_test1的权限内容

# file: acl_test1 <==说明档名而已!

# owner: root <==说明此档案的拥有者,

# group: root <==此档案的所属群组,

user::rwx <==使用者列表栏是空的,代表档案拥有者的权限

user:vbird1:r-x <==针对 vbird1 的权限设定为 rx ,与拥有者不同!

group::r-- <==针对档案群组的权限设定仅有 r

mask::r-x <==此档案预设的有效权限 (mask)

other::r-- <==其他人拥有的权限啰!

显示的数据前面加上 # 的,代表这个档案的默认属性,包括文件名、档案拥有者与档案所属群组。

底下出现的 user, group, mask, other 则是属于不同的使用者、群组与有效权限(mask)的设定值


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7321756.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存