Linux学习(四)用户和权限管理

来源:互联网 发布:工程设计图软件 编辑:程序博客网 时间:2024/06/05 11:46

用户和用户组管理

1、用户管理相关文件

用户管理简介

  • 越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。
  • 在Linux中主要通过用户配置文件来查看和修改用户信息。

1.1、用户信息文件/etc/passwd,如:root:x:0:0:root:/root:/bin/bash

  • 第1字段:用户名称
  • 第2字段:密码标志
  • 第3字段:UID(用户ID)
    • 0:超级用户
    • 1-449:系统用户(伪用户)
    • 500-65535:普通用户
  • 第4字段:GID(用户初始组ID)
  • 第5字段:用户说明
  • 第6字段:家目录
    • 普通用户:/home/用户名
    • 超级用户:/root/
  • 第7字段:登录之后的Shell

初始组和附加组:

  • 初始组:指用户一登录就立即拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。
  • 附加组:指用户可以加入多个其它的用户组,并拥有这些组的权限,附加组可以有多个。

Shell是Linux的命令解析器。在/etc/passwd中,除了标准Shell是/bin/bash之外,还可以写如/sbin/nologin。

1.2、影子文件/etc/shadow

  • 第1字段:用户名
  • 第2字段:加密密码
    • 加密算法升级为SHA512散列加密算法
    • 如果密码位是“!!”或“*”代表没有密码,不能登录
  • 第3密码:米阿门最后一次修改日期
    • 使用1970年1月1日作为标准时间,每过一天时间戳加1
  • 第4字段:两次密码的修改间隔时间(和第3字段相比)
  • 第5字段:密码有效期(和第3字段相比)
  • 第6字段:密码修改到期前的警告天数(和第5字段相比)
  • 第7字段:密码过期后的宽限天数(和第5字段相比)
    • 0:代表密码过期后立即失效
    • -1:则代表密码永远不会生效
  • 第8字段:账号失效时间
    • 要用时间戳表示
  • 第9字段:保留

时间戳换算:

  • 把时间戳换算为日期
    • date -d “1970-01-01 16066 days”
  • 把日期换算为时间戳
    • echo (((date –date=”2017/08/28” +%s)/86400+1))

1.3、组信息文件/etc/group和组密码文件/etc/gshadow
1、组信息文件/etc/group

  • 第一字段:组名
  • 第二字段:组密码标志
  • 第三字段:GID
  • 第四字段:组中附加用户

2、组密码文件/etc/gshadow

  • 第一字段:组名
  • 第二字段:组密码
  • 第三字段:组管理源用户名
  • 第四字段:组中附加用户

2、用户管理相关文件

1、用户的家目录

  • 普通用户:/home/用户名/,所有者和所属组都市此用户,权限是700
  • 超级用户:/root/,所有者和所属组都是root用户,权限550

2、用户邮箱

  • /var/spool/mail/用户名

3、用户模板目录

-/etc/skel/

3、用户管理命令

3.1、用户添加命令useradd
useradd [选项] 用户名
选项:
-u UID:手工指定用户的UID号
-d 家目录:手工指定用户的家目录
-c 用户说明:手工指定用户的说明
-g 组名:手工指定用户的初始组
-G 组名:之地给你用户的附加组
-s shell: 手工指定用户的登录shell,默认是/bin/bash

useradd test:
- grep test /etc/passwd
- grep test /etc/shadow
- grep test /etc/group
- grep test /etc/gshadow
- ll -d /home/test/
- ll /var/spool/mail/test

用户默认值文件:

  • /etc/default/useradd
    • GROUP=100 #用户默认组
    • HOME=/home #用户家目录
    • INACTIVE=-1 #密码过期宽限天数(shadow文件第7字段)
    • EXPIRE= #密码失效时间(第8字段)
    • SHELL=/bin/bash #默认shell
    • SKEL=/etc/skel #模板目录
    • CREATE_MAIL_SPOOL=yes #是否建立邮箱
  • /etc/login.defs
    • PASS_MAX_DAYS 99999 #密码有效期(第5字段)
    • PASS_MIN_DAYS 0 #密码修改间隔(第4字段)
    • PASS_MIN_LEN 5 #密码最小5位(PAM)
    • PASS_WARN_AGE 7 #密码到期警告
    • UID_MIN 500 #最小UID范围
    • GID_MAX 60000 #最大UID范围
    • ENCRYPT_METHOD SHA512 #加密模式

3.2、修改用户密码passwd
passwd [选项] 用户名
选项:
-S 查询用户密码的密码状态,仅root哟给你胡可用。
-l 暂时锁定用户,仅root用户可用。
-u 解锁用户,仅root用户可用。
–stdin 可以通过管道符输出的数据作为用户的密码。

2、查看密码状态

passwd -S testtest PS 2017-08-29 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)# 用户名密码设定时间 2017-08-29# 密码修改间隔时间 0# 密码有效期 99999# 警告时间 7# 密码不失效 -1

3、锁定用户和解锁用户

passwd -l testpasswd -u test

4、使用字符串作为用户的密码

echo "123" | passwd --stdin test

3.3、修改用户信息usermod,修改用户密码状态change
usermod [选项] 用户名
选项:
-u UID: 修改用户的UID号
-c 用户说明: 修改用户得说明信息
-G 组名: 修改用户得附加组
-L: 临时锁定用户(Lock)
-U: 解锁用户锁定(Unlock)

示例:

usermod -c "test user" test #设定用户说明usermod -G root test # 将test用户放入root组usermod -L test #锁定test用户usermod -U test #解锁test用户

chage [选项] 用户名
选项:
-l: 列出用户得详细密码状态
-d 日期: 修改密码最后一次更改日期(shadow第3字段)
-m 天数: 两次密码修改间隔(第4字段)
-M 天数: 密码有效期(第5字段)
-W 天数: 密码过期前警告天数(第6字段)
-I 天数: 密码过后宽限天数(第7字段)
-E 日期: 账号失效时间(第8字段)

chage -d 0 test# 这个命令是把密码修改日期归0(shadow第3字段),这样用户一登录就要修改密码

3.4、删除用户userdel、用户切换命令su
1、删除用户userdel
userdel [-r] 用户名
选项:-r 删除用户的同时删除用户家目录

手工删除用户

vim /etc/passwdvim /etc/shadowvim /etc/groupvim /etc/gshadowrm -rf /var/spool/mail/testrm -rf /home/test/

2、查看用户ID

id 用户名

3、切换用户身份su
su [选项] 用户名
选项:
-: 选项只使用“-”代表连带用户得环境变了一起切换
-c命令:仅执行一次命令,而不切换用户身份

su - root #切换成rootsu - root -c "useradd user1" #不切换成root,但是执行useradd命令添加user1用户

4、用户组管理命令

1、添加用户组
groupadd [选项] 组名
选项: -g GID 指定组ID

2、修改用户组
groupmod [选项] 组名
选项:
-g GID: 修改组ID
-n 新组名: 修改组名

groupmod -n gourp1 tg# 把组名tg修改为group1

3、删除用户组
groupdel 组名

4、把用户添加入组或从组中删除
gpasswd [选项] 组名
选项:
-a 用户名: 把用户加入组
-d 用户名: 把用户从组中删除

权限管理

1、ACL权限

1.1、ACL权限简介与开启

查看分区ACL权限是否开启

dumpe2fs -h /dev/sda3       # dumpe2fs命令是查询指定分区详细文件系统信息得命令选项:-h 仅显示超级块中信息,而不显示磁盘块组得详细信息

临时开启分区ACL权限

mount -o remount,acl/#重新挂载根分区,并挂载加入acl权限

永久开启分区ACL权限

vim /etc/fatabUUID=f3aeaf65-ba7b-473d-9826-aba201319448 /  ext4 defaults,acl  1 1 #加入aclmount -o remount/ #重新挂载文件系统或重启系统,使修改生效

1.2、查看与设定ACL权限
1、查看ACL命令

getfacle 文件名 #查看acl权限setfacl 选项 文件名选项:-m  设定ACL权限-x  删除指定的ACL权限-b  删除所有的ACL权限-d  设定默认ACL权限-k  删除默认ACL权限-R  递归设定ACL权限

设定权限示例:

useradd zhangsanuseradd lisiuseradd stgroupadd tgroupmkdir /projectchown root:tgroup /projectchmod 770 /projectsetfacl -m u:st:rx /project#给用户st赋予r-x权限,使用“u:用户:权限”格式

给用户组设定ACL权限

groupadd tgroup2setfacl -m g:tgroup2:rwx /project#为组tgroup2分配ACL权限,使用“g:组名:权限”格式

1.3、最大有效权限与删除ACL权限
1、最大有效权限mask
mask是用来指定最大有效权限的。如果给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限。

setfacl -m m:rx 文件名#设定mask权限为r-x,使用“m:权限”格式

2、删除ACL权限

#删除指定用户的ACL权限setfacl -x u:用户名 文件名 #删除指定用户组的ACL权限setfacl -x g:组名 文件名 # 文件恢复原始权限setfacl -b 文件名

1.4、默认ACL权限和递归ACL权限
1、递归ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限

setfacl -m u:用户名:权限 -R 文件名 #递归设定权限

2、默认ACL权限
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。

setfacl -m d:u:用户名:权限 文件名

示例:

setfacl -m d:u:user3:rx -R /project/ #递归设置默认权限

2、文件特殊权限

2.1、SetUID

  • 只有可以执行的二进制程序才能设定SUID权限
  • 命令执行者要对该程序拥有执行权限
  • 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
  • SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码

ll /usr/bin/passwd#s就是SetUID权限-rwsr-xr-x. 1 root root 25980 222 2012 /usr/bin/passwd 

cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容

ll /bin/cat

设定SetUID的方法

  • 4代表SUID
    • chmod 4755 文件名
    • chmod u+s 文件名

取消SetUID的方法

  • chmod 755 文件名
  • chmod u-s 文件名

危险的SetUID

  • 关键目录应严格控制写权限,比如:“/”、“/usr”等
  • 用户的密码设置要严格遵守密码三原则
  • 对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限

2.2、SetGID
1、SetGID针对文件的作用

  • 只有可执行的二进制程序才能设置SGID权限
  • 命令执行者要对该程序拥有执行权限
  • 命令执行在执行程序的时候,组身份升级为该程序文件的属组
  • SetGID权限同样只有在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

执行过程:

  1. /usr/bin/locate是可执行二进制程序,可以赋予SGID
  2. 执行用户user1对/usr/bin/locate命令拥有执行权限
  3. 执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
  4. 命令结束,user1用户的组身份返回为user1组

2、SetGID针对目录的作用

  • 普通用户必须对此目录拥有r和x权限,才能进入此目录
  • 普通用户在此目录中的有效组会变成此目录的属组
  • 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组

设定SetGID

2代表SGIDchmod 2755 文件名chmod g+s 文件名

取消SetGID

chmod 755 文件名chmod g-s 文件名

示例:

mkdir /tmp/testchmod 2777 /tmp/testll -d /tmp/testsu - user1cd /tmp/testtouch all

2.3、Sticky BIT
1、SBIT粘着位作用

  • 粘着位目前只对目录有效
  • 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
  • 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其它用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其它用户建立的文件

示例:

ll -d /tmp/drwxrwxrwt. 7 root root 4096 831 17:45 /tmp/

2、设置与取消粘着位

  • 设置粘着位
    • chmod 1755 目录名
    • chmod o+t 目录名
  • 取消粘着位
    • chmod 777 目录名
    • chmod o-t 目录名

3、文件系统属性chattr权限

1、chattr命令格式
chattr [+-=][选项] 文件或目录名
+:增加权限
-: 删除权限
=:等于某权限
选项:
- i:如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
- a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除。

2、查看文件系统属性
lsattr 选项 文件名
选项:
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本省的属性,而不是子文件的

4、系统命令sudo权限

1、sudo权限

  • root把本来只能超级用户执行的命令赋予普通用户执行
  • sudo的操作对象是系统命令

2、sudo使用

[root@localhost ~]# visudo#实际修改的是/etc/sudoers文件root ALL=(ALL) ALL#用户名被管理主机的地址=(可使用的身份)授权(绝对路径)# shuai   ALL=/sbin/shutdown -r now# %wheel ALL=(ALL) ALL#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

3、普通用户执行sudo赋予的命令

[root@localhost ~]# su - shuai[shuai@localhost ~]$ sudo -l#查看可用的sudo命令[shuai@localhost ~]$ sudo /sbin/shutdown -r now# 普通用户执行sudo赋予的命令
原创粉丝点击