linux 6

24 AUG

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

useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 用户账号名
一般新建文件夹之后会默认创建一个与账号一模一样的用户组名;默认会创建用户主文件夹。一般可以直接用useradd accountName来创建就好了。

CentOS默认值会帮我们处理一下几个项目:

  • /etc/passwd里面创建一行与账号相关的数据,包括创建UID/GID/主文件夹等
  • /etc/shadow里面将此账号的密码相关参数填入,但是尚未有密码
  • /etc/group里面加入一个与账号名称一模一样的组名
  • /home下面创建一个与账号同名的目录作为用户住文件夹,且权限为700.

eg. 用users作为初始用户组,以及uid为700创建一个名为vbird2的账号(已知系统中有一个用户组users已存在,且uid700不存在)
useradd -u 700 -g users vbird2

eg. 创建一个系统账号,名称为vbird3
useradd -r vbird3 (系统账号的UID小于500,且系统账号默认不会主动创建文件夹)

30 AUG

useradd参考文件(默认值):useradd -D,在/etc/default/useradd

使用useradd创建账号之后,默认情况下,该账号是暂时被封锁的(无法登陆),此时应该设置一下新密码,才可以登录:passwd username,只使用passwd表示修改自己这个当前用户的密码。

eg. 让liangst的账号失效:
passwd -l liangst #Looking password for user liangst
passwd -S liangst 查看账号liangst
这里写图片描述
grep liangst /etc/shadow 发现密码栏多了两个“!”而已
这里写图片描述

passwd -u liangst #Unlock password for user liangst

  • chage
    chage -l liangst 列出该用户的详细密码参数

eg.
让用户在第一次登录时强制他们一定要更改密码后才能使用系统资源:
useradd newuser 创建一个新用户username
echo "username" | passwd --stdin newuser #令username作为新用户newuser的密码
chage -d 0 agetest #此时账号的密码新建时间会被改为1970/1/1, 所以会被要求强制修改密码。(第一次登录可以用账号同名的密码登录)

  • usermod : 用于修改使用useradd的时候加入了一些错误设置,可以对已存在账号进行相关数据的微调。它的使用方法及参数和useradd类似.
    (refer to P416)

  • userdel:用于删除用户的相关数据,包括:

    • 用户账号/密码相关参数-/etc/passwd,/etc/shadow
    • 用户组相关参数-/etc/group,/etc/gshadow
    • 用户个人文件数据-/home/username,/var/spool/mail/username

用法: userdel [-r] username #-r表示连同用户的主文件夹一起删除。
删除之前注意,先执行一下find / -user username查出整个系统内属于username的文件,然后再执行userdel -r username

14.2.2 用户功能

由于useradd, usermod, userdel都是系统管理员所能够使用的命令。那这里介绍几个一般身份用户常用的账号数据更改与查询命令。

  • finger. 用于查阅用户信息
    这里写图片描述

  • 利用某用户新建自己的计划文档
    echo "I will study Linux during this year." > ~/.plan

  • chfn 用来修改用户的相关信息,如,办公室房间号码,电话号码之类的。

  • chsh: change shell的简写.
    • -l 列出目前系统上面可用的shell,其实就是/etc/shells的内容
    • -s 设置修改自己的shell
  • id : 查询某人或者自己相关的UID/GID等信息。eg id username. 使用这个命令也可以用来判断系统上面有没某个账号。

14.2.3 新增与删除用户组

  • groupadd [-g gid] [-r] group_name

    • -g 后面接某个特定的GID, 用来直接给予某个GID
    • -r 新建系统用户组。
  • groupmod [-g gid] [-n new_group_name] group_name

    • -g gid 用来修改用户组GID
    • -n new_group_name用来修改用户组名称
  • groupdel [group_name] 注意不能删除某用户的初始用户组。必须要确认/etc/passwd内的账号没有任何人使用该用户组作为初始用户组才行。
  • gpasswd 用户组管理员功能,可以管理哪些账号可以加入/移出该用户组

    • 如何新建一个用户组管理员?
      1 系统管理员root做的操作:
      gpasswd groupname
      gpasswd [-A user1,...] [-M user3,...] groupname
      gpasswd [-rR] groupname

    -A 表示将groupname的主控权交由后面的用户管理(该用户组的管理员)
    -M 表示将某些账号加入这个用户组中
    -r 表示将groupname的密码删除
    -R 表示让groupname的密码栏失效

    2 用户组管理员做的操作:(切换到用户管理员登录)
    gpasswd [-ad] user groupname #-a为add, -d为delete
    注意:有可能用户组管理员不在该用户组内。

    3 可以用grep mygroup /etc/group查看是否添加用户组成员成功。

    4 可以用 newgrp othergroup来切换当前用户组(针对有multi-group的用户)

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

ACL: Access Control List, 目的为提供传统的owner, group, others 的rwx权限之外的具体权限设置。 ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限设置。

查看本系统是否支持ACL功能:

mount #查看挂载参数
dumpe2fs -h dev/sda1 | grep acl  #查看是否支持ACL
mount -o remount,acl / #加入ACL支持

14.3.3 ACL的设置技巧:getfacl, setfacl

  • getfacl: 取得某个文件/目录的ACL设置项目
  • setfacl:设置某个目录/文件的ACL规定

如何设置ACL的特殊权限?

  • 针对单一用户的设置方法
    • setfacl
      创建一个测试文件acl_test1,其权限是644

      设置rx权限给用户liangst
      这里写图片描述
      setfacl -m u::rwx acl_test1
      这里写图片描述
      两个“:”中间没有user字段,代表设置该文件所有者,所以显示root的权限变成rwx了。

总结,以上是最简单的ACL设置,利用“u:用户:权限”的方式进行设置。-m表示:设置后续的acl参数给文件使用;-x表示:删除后续的acl参数。

getfacl
如果一个文件设置了ACL参数后,它的权限部分就会多出一个+号,但是此时看到的权限与实际权限可能会有误差,此时可以通过getfacl来查看。

getfacl acl_test1

这里写图片描述
mask 表示此文件默认的有效权限

31 AUG
- 针对特定用户组的方式
设置规范:”g:[用户组列表]:[rwx]”, eg setfacl -m g:mygroup:rx acl_test1, 然后查看
这里写图片描述

  • 针对有效权限mask的设置方式
    设置规定:”m:[rwx]”
    意义:即“有效权限”,用户或组所设置的权限必须要存在于mask的权限设置范围内才会生效 - effective permission。取user或group与mask的交集才是实际得到的权限。
    作用:通过使用mask来规定最大允许的权限,就能避免不小心开放某些权限给其他用户或用户组。

  • 我们发现,获得ACL设置的文件夹,其子文件夹并没有继承父文件夹的ACL属性,所以可以通过以下设置使得ACL属性在目录下面的数据都有继承的功能:

    • 设置规范:“d:[ug]:用户列表:[rwx]”
      这里写图片描述
  • 如果要删除所有的ACL设置参数,通过 setfacl -b filename即可。

14.4 用户身份切换

14.4.4 su

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

  • 切换到root: su -
    - 表示使用login-shell的变量文件读取方式来登陆系统。注意不推荐单纯使用su切换为root的身份,因为这样读取的变量设置方式为non-login shell的方式,这种方式下很多原本的变量不会被改变(如环境变量env

  • 只执行一个只有root才能进行的命令:su - -c "head -n 3 /etc/shadow"
    这里-c后面接的就是一句命令。进行完这个命令之后还是继续用就的身份继续操作。

  • 切换到某些特殊账号:su -l dmtsai, su -l sshd

  • 或者可以使用:su - username

切换到root时,普通用户需要知道密码,这不安全。此时可以考虑使用sudo。

14.4.2 sudo

sudo的执行只需要自己的密码即可。由于sudo可以让普通用户以root(或其他用户)的身份执行,因此并非所有人都能执行sudo,而是仅有/etc/sudoers内的用户才能够执行sudo这个命令。

运行sudo XXXX的时候,遇到问题: “XXX is not in the sudoers file. This incident will be reported.”
http://jingyan.baidu.com/article/2a1383284bb3e8074a134f2d.html
Solution:

su - root
visudo
----在下面添加一行xxx ALL=(ALL) ALL 其中xxx为用户名称
root                    ALL=(ALL)           ALL
用户账号    登录者的来源主机名=(可切换的身份)  可执行的命令
#其中可执行的命令务必使用绝对路径编写。

sudo命令用法:sudo [-b] [-u 新用户账号]
-b : 将后续的命令让系统自动执行,而不与目前的shell产生影响
-u : 后面可以接欲切换的用户,若无此项则代表切换身份为root

eg. 以sshd用户的权限在/tmp文件夹下新建一个名为mysshd的文件
这里写图片描述

用test1的身份新建~test1/www 并在其中新建index.html文件
这里通过sh一串命令行实现:

sh -c "一串命令"  #注意“一串命令”里面不能用“”双引号,只能用‘’单引号

这里写图片描述

  • sudo可以让你切换身份来进行某项任务。我们无法使用“su - sshd”去切换系统账号(因为系统账号的shell是/sbin/nologin),这个时候sudo就很好用了!

  • 利用用户组以及免密码功能处理visudo

visudo #先用root身份对/etc/sudoerds进行设置

#看到以下信息
%wheel      ALL=(ALL)       ALL

#%后面的wheel指用户组的名称,可以选择把某些用户加入到wheel用户组,也可以选择把wheel改成自己的用户组名
#修改结束后所有组内成员都可以用sudo执行root权限了
  • 不需要密码即可使用sudo
visudo
%wheel      ALL=(ALL)       NOPASSWD:ALL
#针对wheel用户组里的所有用户都不需要输入密码
  • 有限制的命令操作
    限制一般用户仅能够进行部分系统任务。
visudo
myuser1     ALL=(root)      /usr/bin/passwd #路径务必使用绝对路径

#然而这样会有可能让一般用户可以修改root用户的密码,所以还要修改

myuser1     ALL=(root)      !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
# "!"表示不可执行的意思

前面的例子代表除了passwdpasswd root命令之外,可以执行passwd 任意字符

  • 通过别名设置visudo
visudo

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
通过User_Alias新建一个新账号(一定要使用大写字符处理)。将来要修改的时候,只需要修改User_Alias以及Cmnd_Alias这两行即可,在设置方面会比较简单而且有弹性

  • sudo 搭配su的使用方式
    User_Alias ADMINS = pro1, pro2, pro3, myuser1
    ADMINS ALL= (root) /bin/su -
    账号别名的四位用户,只要输入 sudo su - 并且输入自己的密码后,立刻变成root身份。

14.5 用户的特殊shell与PAM模块

14.5.1 特殊的shell, /sbin/nologin

利用/etc/nologin.txt告知用户不要利用该账号登录系统
>vim /etc/nologin.txt
This account is system account or mail account.
Please DO NOT use this account to login my Linux server.
测试:
这里写图片描述

14.5.2 PAM模块简介

PAM: Pluggable Authentication modules 嵌入式模块
PAM是一套应用程序编程接口(API),它提供了一连串的验证机制,只要用户将验证阶段的需求告知PAM后,PAM就能够回复用户验证的结果(成功或失败)。可以供其他任何程序调用,让账号密码或者其他方式的验证具有一致的结果。

  • /var/log/secure, /var/log/messages
    如果发生任何无法登录或者无法预期的错误时, 由于PAM模块都会将数据记载在/var/log/secure当中,所以可以去以上两个文件中进行trouble shooting。

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

  • who,w :查看目前已登录在系统上面的用户
    这里写图片描述

  • lastlog: 查询每个账号的最近登录时间。lastlog命令会去读取/var/log/lastlog文件

14.6.2 用户对谈write, mesg, wall

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

  • mesg [n/y] 拒绝/接收消息

  • wall “…………….” 对所有系统上面的用户传送广播信息

注意 使用wall, write要等到用户在线才能够进行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值