标签:独立 时间 root 接口 shadow 很多 模块 有关 方法
# chown [-R] username file/dir # chown [-R] username:groupname file/dir -R:递归的改变目录下的文件和子目录 注意:username:groupname中的冒号也可以使用小数点.代替:username.groupname,但是当username或groupname中带小数点时会引起歧义。
# chgrp [-R] dirname/filename -R:递归的改变该目录下的所有文件和目录的所属组 注意:被改变的组名必须存在于/etc/group文件中
方法一:数字类型改变文件权限 r—4 w—2 x—1 # chmod [-R] xyz file/dir -R : 递归的改变目录下的文件和子目录 xyz:所有者、所属组、其他用户的权限表示数字 方法二:符号类型改变文件权限
文件属性
文件和目录的权限意义
umask:用来设置所创建文件和目录的默认权限。umask只是个掩码,它会屏蔽掉不想授予的权限,要把umask值从对象的预设全值减掉,得到的才是对象的默认权限。
目录和文件在默认权限的属性上是不同的,x权限对目录非常重要,但是一般文件的建立不需要执行权限,因此预设如下:
[root@localhost ~]# umask 0022
第一位:特殊权限
后三位:rwx权限
[root@localhost ~]# umask -S u=rwx,g=rx,o=rx
隐藏权限可以使用chattr设置,lsattr查看(最重要的属性就是将其设定为不可修改的特性,包括文件拥有着都不能修改, 在重要文件上加上不可更改属性有利于系统的安全性)
# chattr [+-=] [ASacdistu] filename/dirname 常用参数: a:文件只能增加数据,而不能删除或修改数据(只有root才能设定该属性) i:文件不能被删除、修改、新增数据,设定链接也无法写入,对系统数据安全具有重要作用(只有root才能设定该属性)
# lsattr [-adR] filename/dirname 常用参数: -a:将隐藏文件的属性也显示出来 -d:若接的是目录,则仅列出目录本身的属性 -R:连同子目录的数据一并列出
当 s 标志出现在文件拥有者的x权限上时,不要怀疑,就是SUID特殊权限,它的功能是:
例如:/etc/shadow文件只有root可读且仅有root可以修改,那么普通用户如何通过passwd去修改/etc/shadow文件?
[root@localhost tmp]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jan 30 2014 /usr/bin/passwd
当s标志出现在了文件所属组的x权限的时候,嗯,是SGID权限了,它的功能是:
当t标志出现在了文件的其他人的x权限的时候,SBIT来了,SBIT目前只针对目录有效,SBIT对目录的作用是:
/etc/passwd文件中记录了用户的登陆信息,每行代表一个用户,使用:分隔成七项;添加或删除一个用户最基础的操作就是在passwd文件中添加或删除个人纪录。
[root@bogon ~]# tail -n 5 /etc/passwd avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin letty:x:1000:1000:letty:/home/letty:/bin/bash
用户名称:密码:UID:GID:用户说明或注释:家目录:Shell
/etc/passwd文件中的密码区段只是一个x符号,真正的密码在/etc/shadow文件中,并在该文件中加入了很多密码限制参数。
[root@bogon ~]# head -n 4 /etc/shadow root:$6$gtpYPVVaFSp084pP$oERiAZADTS3MmBtNg8K6wwCAb16Lz4SZL1U4KdIoW7sjQdnuiuDTPf8nWBHsaKUxu33g3GS9wyftSfbA09I3q0::0:99999:7::: bin:*:17703:0:99999:7::: daemon:*:17703:0:99999:7::: adm:*:17703:0:99999:7:::
[root@bogon ~]# head -n 4 /etc/group root:x:0: bin:x:1: daemon:x:2: sys:x:3:
组名:群组密码:GID:此群组支持的账号名称
[root@bogon ~]# head -n 4 /etc/gshadow root::: bin::: daemon::: sys:::
组名:群组密码(为!或为空时表示该群组不具有群组管理员):群组管理员的账号(gpasswd):加入该群组支持的所属账号
基本上群组的相关操作都与/etc/group,/etc/gshadow两个文件有关。
# groupadd [-g gid] [-r] groupname 参数: -g:接GID -r:建立系统群组
# groupmod [-g Gid] [-n group_name] groupname 参数: -g:修改既有的GID -n:修改既有的组名
# groupdel [groupname]
注意:删除群组要确定/etc/passwd内的账号没有人使用该群组作为初始群组。
# gpasswd groupname # gpasswd [-A user1,...] [-M user3,...] groupname # gpasswd [-rR] groupname 参数: 若没有任何参数,则表示给予groupname一个密码(/etc/shadow) -A:将groupname的主控权交给后面的使用者管理(设置群组管理员) -M:将某些账号加入这个群组中 -r:将groupname的密码移出 -R:使groupname的密码字段失效
# gpasswd [-ad] user groupname
参数:
-a:将user加入groupname群组
-d:将user移出groupname群组
newgrp 指令类似 login 指令,当它是以相同的帐号,另一个群组名称,再次登入系统。欲使用 newgrp 指令切换群组,必须是该群组的用户,否则将无法登入指定的群组。单一用户要同时隶属多个群组,需利用交替用户的设置。若不指定群组名称,则 newgrp 指令会登入该用户名称的预设群组。
# useradd [-u UID] [-g 初始群组] [-G 次要群组] [-d 家目录绝对路径] [-s shell] 用户名 参数: -u:UID,/etc/passwd第三个字段 -g:GID,/etc/passwd第四个字段 -G:后接该账号还可以加入的组名,/etc/group第四个字段 -c:用户说明,/etc/passwd第五个字段 -d:指定用户的家目录(不使用默认值),/etc/passwd第六个字段 -s:后接一个shell(默认/bin/bash),/etc/passwd第七个字段 -M:不建立用户家目录(系统账户默认值) -m:建立用户家目录(一般账户默认值) -r:建立系统账户 -e:后接日期[YYYY-MM-DD],/etc/shadow第八个字段(账号失效日期)
-f:后接/etc/shadow的第七个字段,指定密码何时失效(0:立刻失效,-1:永不失效)
使用useradd建立账户系统的默认值会主动处理如下几个项目:
useradd参考文件
[root@bogon ~]# useradd -D GROUP=100 预设的群组 HOME=/home 默认的家目录所在目录 INACTIVE=-1 密码失效日(-1永不失效) EXPIRE= 账号失效日 SHELL=/bin/bash 预设的shell SKEL=/etc/skel 用户家目录的内容数据参考目录 CREATE_MAIL_SPOOL=yes 是否主动帮助使用者建立邮箱
[root@bogon ~]# cat /etc/login.defs UID_MIN 1000 一般用户最小的UID UID_MAX 60000 一般用户最大的UID SYS_UID_MIN 201 保留给用户自行设定系统账号的最小UID SYS_UID_MAX 999 保留给用户自行设定系统账号的最大UID GID_MIN 1000 一般用户自定义组的最小GID GID_MAX 60000 一般用户自定义组的最大GID SYS_GID_MIN 201 保留给用户自行设定的系统账号最小 GID SYS_GID_MAX 999 保留给用户自行设定的系统账号最大 GID CREATE_HOME yes 是否主动建立用户家目录 UMASK 077 用户家目录建立的umask USERGROUPS_ENAB yes 使用userdel删除时是否删除初始群组 ENCRYPT_METHOD SHA512 密码加密机制:sha512
使用useradd后如果某些地方需要修改,可以选择直接去/etc/passwd或/etc/shadow文件下直接去修改相应字段的数据,也可以使用usermod命令:
# usermod [-cdefgGa] [-LUsu] username 参数: -c:添加用户账户的备注信息 -d:用户家目录 -e:接日期YYYY-MM-DD,/etc/shadow的第八个字段(账户过期日期) -f:接天数,/etc/shadow的第七个字段(密码过期前的账号宽限天数) -g:接初始群组,修改/etc/passwd第四个字段(GID) -G:接次要群组,修改/etc/# usermod [-cdefgGa] [-LUsu] username 参数: -c:添加用户账户的备注信息 -d:用户家目录 -e:接日期YYYY-MM-DD,/etc/shadow的第八个字段(账户过期日期) -f:接天数,/etc/shadow的第七个字段(密码过期前的账号宽限天数) -g:接初始群组,修改/etc/passwd第四个字段(GID) -G:接次要群组,修改/etc/group的第四个字段(使用者支持的群组) -a:与-G连用可增加次要群组的支持,而非设定 -l:接账户名称,修改账户名称/etc/passwd第一栏 -s:接shell -u:接UID -L:冻结用户密码(修改/etc/shadow密码栏) 与passwd -l相同 -U:解冻用户密码(将/etc/shadow密码字段中的!拿掉) 与passwd -u相同
# userdel [-r] username
-r:连同用户家目录一起删除
删除用户的相关数据有:
ACL(Access Control List,访问控制列表),ACL可以针对单一使用者、单一文件或目录进行权限规范。
# setfacl [-bkRd] [{-m | -x} acl参数] 目标文件名 参数: -m:设定后续的ACL参数 -x:删除后续的ACL参数 -b:移除所有的ACL设定参数 -k:移除预设的ACL参数 -R:递归设定ACL(包括次目录) -d:设定预设ACL参数(只对目录有效,在该目录新建的数据会引用此默认值)
针对特定用户设定ACL: u:[使用者列表]:[rwx] (使用者为空表示设定该文件拥有者)
针对特定群组设定ACL: g:[群组列表]:[rwx]
针对有效权限设定ACL: m:[rwx] 通过mask来规范最大允许的权限
使用默认权限设定目录未来文件的ACL权限继承: d:[u|g]:[user|group]:权限
# su [-lm] [-c 指令] [username] -:su -代表使用login-shell的变量文件读取方式来登入系统 -l:与-类似,但后面需要加欲切换的使用者账号 -m:使用目前的环境设定,不读取新使用者的配置文件 -c:仅执行一次指令
一开始系统默认仅有root可以执行sudo,在安装系统的时候设定一般用户的项目中,如果选择了让该用户成为管理员,那么除了root该用户也可以使用 sudo。
# sudo [-b] [-u username] 参数: -b:将后续指令放在后台让系统自动执行,不与目前的shell产生影响 -u:后接要切换的使用者(无此选项默认切换为root)sudo可以通过 -u 切换到系统账号来执行命令(su就不可以)
sudo预设仅有root能够使用,sudo执行流程如下:
除了 root 之外的其他账号,若想要使用 sudo 执行属于 root 的权限指令,则 root 需要先使用 visudo 去修改 /etc/sudoers ,让该账号能够使用全部或部分的 root 指令功能。 visudo 利用 vi 将 /etc/sudoers 文件呼叫出来进行修改:
# visudo root ALL=(ALL) ALL [使用者账号] [登入者的来源主机名] [可切换的身份] [可下达的指令]
# visudo %wheel ALL=(ALL) ALL %表示群组之意 # usermod -a -G wheel username 将username加入wheel群组就能使用sudo命令切换任何身份来操作任何指令
# visudo
%wheel ALL=(ALL) NOPASSWD: ALL NOPASSWD关键字意味着免除密码输入
[root@study ~]# visudo <==注意是 root 身份
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2 Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root ADMPW ALL=(root) ADMPWCOM
注意:能够使用sudo的用户必须是能够信任的用户。
PAM(Pluggable Authentication Modules,插件式鉴别模块)机制采用模块化设计和插件功能,使得我们可以轻易地在应用程序中插入新的鉴别模块或替换原先的组件,而不必对应用程序做任何修改。应用程序可以通过 PAM API 方便的使用 PAM 提供的各种鉴别功能,而不必了解太多的底层细节。
PAM 为了实现其插件功能和易用性,它采取了分层设计思想:让各鉴别模块从应用程序中独立出来,然后通过PAM API作为两者联系的纽带,这样应用程序就可以根据需要灵活地在其中"插入"所需鉴别功能模块,PAM 的体系如下简图所示:
当应用程序调用 PAM API 时,应用接口层按照配置文件 pam.conf(/etc/pam.d 存放了各个需要pam验证的应用程序的配置文件) 的规定,加载相应的鉴别模块。然后把请求(从应用程序那里获得的参数)传递给底层的鉴别模块,这时鉴别模块就可以根据要求执行具体的鉴别操作了。当鉴别模块执行完相应操作后,将结果返回给应用接口层,然后由接口层根据配置的具体情况将来自鉴别模块的应答返回给应用程序。
# passwd [-luSnxwi] [--stdin] [username] 参数: --stdin:允许通过标准输入修改用户密码:echo ”NewPasswd“ | passwd --stdin Username -l:锁定用户禁止其登陆 -u:解锁用户允许其登陆 -S:显示用户密码是否被锁定,以及密码采用的加密算法名称 -n:密码不可变更的天数,/etc/shadow第四栏
-x:密码需要重新设定的天数,/etc/shadow第五栏
-w:密码过期前的警告天数,/etc/shadow第六栏
-i:密码失效日期,/etc/shadow第八栏
# chage [-ldmMWIE] Username 参数: -l:列出该账号的详细密码参数 -d:接日期YYYY-MM-DD,修改/etc/shadow第三字段(最近一次更改密码的日期) -m:接天数,修改/etc/shadow第四字段(密码不可更改的天数) -M:接天数,修改/etc/shadow第五字段(密码需要变更的天数) -W:接天数,修改/etc/shadow第六字段(密码过期前警告天数) -I:接天数,修改/etc/shadow第七字段 -E:接日期YYYY-MM-DD,修改/etc/shadow第八字段(账号失效日期)
通过chage设置账号第一次登陆系统系统默认密码,但必须更改过密码后使用新密码才能登陆系统使用的bash环境:
[root@bogon ~]# chage -d 0 letty 将密码建立时间设置为1970/01/01会有问题 [root@bogon ~]# chage -l letty Last password change : password must be changed Password expires : password must be changed Password inactive : password must be changed Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
当letty用户再次登陆时,系统提示用户使用与用户名相同的密码登陆,登陆后立即更改密码,更改密码完成后被踢出系统使用新密码重新登陆。
[root@bogon ~]# cat /etc/login.defs | grep PASS
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
PASS_MAX_DAYS 99999 /etc/shadow第五栏,指定天数变更密码
PASS_MIN_DAYS 0 /etc/shadow第四栏,指定天数内不可变更密码
PASS_MIN_LEN 5 密码最短的字符长度(已被pam取代)
PASS_WARN_AGE 7 /etc/shadow第六栏,过期前会警告的天数
PAM管理密码的机制写在/etc/pam.d/passwd中,该文件与密码相关的测试模块是使用:pam_cracklib.so,这个模块会检验密码相关的信息,并取代/etc/login.defs内的PASS_MIN_LEN的设定。
执行passwd后,该程序呼叫PAM的流程是:
[root@bogon ~]# cat /etc/pam.d/passwd #%PAM-1.0 auth include system-auth account include system-auth password substack system-auth -password optional pam_gnome_keyring.so use_authtok password substack postlogin
验证类别 控制标准 PAM模块与该模块的参数
每一行都是一个独立的验证流程。
为了系统的安全性,密码设定要求最好如下:
标签:独立 时间 root 接口 shadow 很多 模块 有关 方法
原文地址:https://www.cnblogs.com/wanao/p/12926339.html