• Linux——用户和组管理,文件权限管理,文件查找(find)


    一、用户和组相关的管理命令

    1)创建用户:useradd

    命令格式:useradd [options] LOGIN

    选项:

    • -u UID: [UID_MIN, UID_MAX], 定义在/etc/login.defs
    • -g GID:指明用户所属基本组,可为组名,也可以GID;
    • -c "COMMENT":用户的注释信息;
    • -d /PATH/TO/HOME_DIR: 以指定的路径为家目录;
    • -s SHELL: 指明用户的默认shell程序,可用列表在/etc/shells文件中;
    • -G GROUP1[,GROUP2,...[,GROUPN]]]:为用户指明附加组;组必须事先存在;
    • -r: 创建系统用户

    默认值设定:/etc/default/useradd文件中

    命令含义
    useradd -d /home/abc abc -m 创建abc用户,如果/home/abc目录不存在,就自动创建这个目录,同时用户属于abc组
    useradd -d /home/a a -g test -m 创建一个用户名字叫a,主目录在/home/a,如果主目录不存在,就自动创建主目录,同时用户属于test组
    cat /etc/passwd 查看系统当前用户

    2)创建组:groupadd

    命令格式:groupadd [OPTION]... group_name

    选项:

    • -g GID: 指明GID号;[GID_MIN, GID_MAX]
    • -r: 创建系统组;

    查看用户组:cat /etc/group

    3)查看用户相关的ID信息:id

    命令格式:id [OPTION]... [USER]

    • -u: UID,用户id
    • -g: GID,组id
    • -G: Groups:组名
    • -n: Name:用户名

    4)切换用户或以其他用户身份执行命令:su

    命令格式:su [options...] [-] [user [args...]]

    切换用户的方式:

    • su UserName:非登录式切换,即不会读取目标用户的配置文件;
    • su - UserName:登录式切换,会读取目标用户的配置文件;完全切换;
    • Note:root su至其他用户无须密码;非root用户切换时需要密码;

    换个身份执行命令

    • su [-] UserName -c 'COMMAND'

    选项:

    • -l:“su -l UserName”相当于“su - UserName”

    5)用户属性修改:usermod

    命令格式:usermod [OPTION] login

    • -u UID: 新UID
    • -g GID: 新基本组
    • -G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append;
    • -s SHELL:新的默认SHELL;
    • -c 'COMMENT':新的注释信息;
    • -d HOME: 新的家目录;原有家目录中的文件不会同时移动至新的家目录;若要移动,则同时使用-m选项;
    • -l login_name: 新的名字;
    • -L: lock指定用户
    • -U: unlock指定用户
    • -e YYYY-MM-DD: 指明用户账号过期日期;
    • -f INACTIVE: 设定非活动期限;

    6)给用户添加密码:passwd

    命令格式:passwd [OPTIONS] UserName  # 修改指定用户的密码,仅root用户权限

    passwd: 修改自己的密码;

    常用选项:

    • -l: 锁定指定用户
    • -u: 解锁指定用户
    • -n mindays: 指定最短使用期限
    • -x maxdays:最大使用期限
    • -w warndays:提前多少天开始警告
    • -i inactivedays:非活动期限;
    • --stdin:从标准输入接收用户密码;
      • echo "PASSWORD" | passwd --stdin USERNAME

    7)删除用户:userdel

    命令格式:userdel [OPTION]... login

    选项:

    • -r: 删除用户家目录;

    8)组属性修改:groupmod

    命令格式:groupmod [OPTION]... group

    • -n group_name: 新名字
    • -g GID: 新的GID;

    9)组删除:groupdel

    groupdel GROUP

    10)组密码:gpasswd

    命令格式:gpasswd [OPTION] GROUP

    选项:

    • -a user: 将user添加至指定组中;
    • -d user: 删除用户user的以当前组为组名的附加组
    • -A user1,user2,...: 设置有管理权限的用户列表

    newgrp命令:临时切换基本组;

    如果用户本不属于此组,则需要组密码;

    11)修改用户属性:chage

    命令格式:chage [OPTION]... LOGIN

    选项:

    • -d LAST_DAY:将最近一次密码设置时间设为“最近日期LAST_DAY”
    • -E, --expiredate EXPIRE_DATE:将帐户过期时间设为“过期日期EXPIRE_DATE”
    • -I, --inactive INACTIVE:显示帐户年龄信息
    • -m, --mindays MIN_DAYS:将两次改变密码之间相距的最小天数设为“最小天数MIN_DAYS”
    • -M, --maxdays MAX_DAYS:将两次改变密码之间相距的最大天数设为“最大天数MAX_DAYS”
    • -W, --warndays WARN_DAYS:将过期警告天数设为“警告天数WARN_DAYS”

    二 、权限管理

    文件的权限主要针对三类对象进行定义:

    • owner: 属主, u
    • group: 属组, g
    • other: 其他, o

    每个文件针对每类访问者都定义了三种权限:

    文件:

    • r: 可使用文件查看类工具获取其内容;
    • w: 可修改其内容;
    • x: 可以把此文件提请内核启动为一个进程;

    目录:

    • r: 可以使用ls查看此目录中文件列表;
    • w: 可在此目录中创建文件,也可删除此目录中的文件;
    • x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录;

    数字表示:

    • --- 000 0
    • --x 001 1
    • -w- 010 2
    • -wx 011 3
    • r-- 100 4
    • r-x 101 5
    • rw- 110 6
    • rwx 111 7

    1)修改文件权限:chmod

    chmod 修改文件权限有两种使用格式:字母法与数字法。

    a.字母法:chmod u/g/o/a +/-/= rwx 文件

    [ u/g/o/a ]含义
    u user 表示该文件的所有者
    g group 表示与该文件的所有者属于同一组( group )者,即用户组
    o other 表示其他以外的人
    a all 表示这三者皆是
    [ +-= ]含义
    + 增加权限
    - 撤销权限
    = 设定权限
    rwx含义
    r read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录的内容。
    w write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。
    x excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。

    b)数字法:“rwx” 这些权限也可以用数字来代替

    字母说明
    r 读取权限,数字代号为 "4"
    w 写入权限,数字代号为 "2"
    x 执行权限,数字代号为 "1"
    - 不具任何权限,数字代号为 "0"

    如执行:chmod u=rwx,g=rx,o=r filename 就等同于:chmod u=7,g=5,o=4 filename

    chmod 751 file:

    • 文件所有者:读、写、执行权限
    • 同组用户:读、执行的权限
    • 其它用户:执行的权限

     

    注意:如果想递归所有目录加上相同权限,需要加上参数“ -R ”。 如:chmod 777 test/ -R 递归 test 目录下所有文件加 777 权限

    2)修改文件所有者:chown

    3)修改文件所属组:chgrp

    三、文件查找

    在文件系统上查找符合条件的文件,主要分两种:非实时查找(数据库查找):locate,实时查找:find。

    1)locate

    依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行(周期性任务);手动更新数据库(updatedb);(不建议使用)

    索引构建过程需要遍历整个根文件系统,极消耗资源;

    工作特点:查找速度快,模糊查找,非实时查找;

    命令格式:locate KEYWORD

    2)find

    实时查找工具,通过遍历指定路径下的文件系统完成文件查找;

    工作特点:查找速度略慢,精确查找,实时查找;

    命令格式:find [OPTION]... [查找路径] [查找条件] [处理动作]

    a.查找路径:指定具体目标路径;默认为当前目录;

    b.查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件;

    根据文件名查找:

    • -name "文件名称":支持使用glob(*, ?, [], [^])
    • -iname "文件名称":不区分字母大小写
    • -regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;

    根据属主、属组查找:

    • -user USERNAME:查找属主为指定用户的文件;
    • group GROUPNAME: 查找属组为指定组的文件;
    • -uid UserID:查找属主为指定的UID号的文件;
    • -gid GroupID:查找属组为指定的GID号的文件;
    • -nouser:查找没有属主的文件(用户被删,文件还在);
    • -nogroup:查找没有属组的文件(用户组被删,文件还在);

    根据文件类型查找:

    -type TYPE:

    • f: 普通文件
    • d: 目录文件
    • l: 符号链接文件
    • s:套接字文件
    • b: 块设备文件
    • c: 字符设备文件
    • p: 管道文件

    组合条件:

    • 与:-a
    • 或:-o
    • 非:-not, !

    !A -a !B <==> !(A -o B)

    !A -o !B <==> !(A -a B)

    示例:找出/tmp目录下,属主不是root,且文件名不是fstab的文件;

    1. find /tmp ( -not -user root -a -not -name 'fstab' ) -ls   # -ls只对后面的生效,所以要加()
    2. find /tmp -not ( -user root -o -name 'fstab' ) -ls   # 整个条件取反时,-o要变成-a

    根据文件大小来查找:

    -size [+|-]#UNIT

    常用单位:k, M, G

    • #UNIT: (#-1, #]  (#为几K,几M...的代指)
    • -#UNIT:[0,#-1]
    • +#UNIT:(#,oo)

    根据时间戳:

    以“天”为单位;

    • -atime [+|-]#, :访问时间
      • #: [#,#+1)
      • +#: [#+1,oo]
      • -#: [0,#)
    • -mtime:修改时间
    • -ctime:改变时间

    以“分钟”为单位:

    • -amin
    • -mmin
    • -cmin

    根据权限查找:数字权限表示方式

    -perm [/|-]MODE

    • MODE: 精确权限匹配
    • /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可;
      • 示例:find /etc -perm +060 -ls # 属组能读或者能写(6==>rw-)
    • -MODE:每一类对象都必须同时拥有为其指定的权限标准;
      • 示例:find /etc -perm -666 -ls # -777也符合标准,因为7是rwx,6是rw-,7里面包含6

    c.处理动作:

    对符合条件的文件做什么操作;默认输出至屏幕;

    • -print:默认的处理动作,显示至屏幕;
    • -ls:类似于对查找到的文件执行“ls -l”命令;
    • -delete:删除查找到的文件;
    • -fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中;
    • -ok COMMAND {} ; :对查找到的每个文件执行由COMMAND指定的命令;
      • 对于每个文件执行命令之前,都会交互式要求用户确认;
    • -exec COMMAND {} ; :对查找到的每个文件执行由COMMAND指定的命令;
      • {}: 用于引用查找到的文件名称自身;
      • 示例:find /tmp -cmin -5 -exec mv {} {}.new ; # 将查找到的文件名后面加一个.new

    注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;

    有些命令不能接受过多参数,此时命令执行可能会失败;另一种方式可规避此问题:find | xargs COMMAND

     1 练习:
     2 1、查找/var目录下属主为root,且属组为mail的所有文件或目录;
     3     # find /var -user root -group mail
     4 
     5 2、查找/usr目录下不属于root、bin或hadoop的所有文件或目录;
     6     # find /usr -not -user root -a -not -user bin -a -not -user hadoop
     7     # find /usr -not ( -user root -o -user bin -o -user hadoop )
     8 
     9 3、查找/etc目录下最周一周内其内容修改过,同时属主不为root,也不是hadoop的文件或目录;
    10     # find /etc -mtime -7 -a -not -user root -a -not -user hadoop
    11     # find /etc/ -mtime -7 -a -not ( -user root -o -user hadoop )
    12 
    13 4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件或目录;
    14     # find / -nouser -a -nogroup -a -atime -7
    15 
    16 5、查找/etc目录下大于1M且类型为普通文件的所有文件;
    17     # find /etc -size +1M -type f
    18 
    19 
    20 6、查找/etc目录下所有用户都没有写权限的文件;
    21     # find /etc -not -perm /222
    22 
    23 7、查找/etc目录下至少有一类用户没有执行权限的文件;
    24     # find /etc -not -perm -111
    25 
    26 8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件;
    27     # find /etc/init.d -perm -113
    View Code

     四、Linux文件系统上的特殊权限

    1)文件权限

    2)安全上下文

    前提:进程有属主和属组;文件有属主和属组;

    (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限;

    (2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组;

    (3) 进程访问文件时的权限,取决于进程的发起者:

    •  进程的发起者,同文件的属主:则应用文件属主权限;
    •  进程的发起者,属于文件的属组;则应用文件属组权限;
    •  应用文件“其它”权限;

    3)SUID

    让本来没有相应权限的用户运行这个程序时,可以访问没有权限访问的资源。

    (1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限;

    (2) 启动为进程之后,其进程的属主为原程序文件的属主;

    chmod u+s FILE...  # 设定权限

    chmod u-s FILE...  # 取消权限

    4)SGID

    默认情况下,用户创建文件时,其属组为此用户所属的基本组;

    一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组;

    chmod g+s DIR...  # 设置权限

    chmod g-s DIR...  # 取消权限

    5)Sticky

    对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件;/tmp和/var/tmp目录默认就有这个权限

    chmod o+t DIR...  # 设置权限

    chmod o-t DIR...  # 取消权限

    SUID SGID STICKY三个权限的数字表示法:

    • 000 0
    • 001 1
    • 010 2
    • 011 3
    • 100 4
    • 101 5
    • 110 6
    • 111 7
      • 示例:chmod 4777 /tmp/a.txt # 将文件的属主属组其他设置为rwx,有suid权限

    几个权限位映射:

    SUID: user, 占据属主的执行权限位;

    • s: 属主拥有x权限
    • S:属主没有x权限

    SGID: group, 占据group的执行权限位;

    • s: group拥有x权限
    • S:group没有x权限

    Sticky: other, 占据ohter的执行权限位;

    • t: other拥有x权限
    • T:other没有x权限
  • 相关阅读:
    学习Oracle数据库入门到精通教程资料合集
    linux编程中printf显示不加换行的缓冲问题
    让 Terminal/vim 使用 Solarized 配色
    vim插件ctags的安装和使用
    rsync 同步文件
    try catch 场景
    关于浮点型的运算---比较
    mysql数据库死锁的产生原因及解决办法
    Laravel下载地址合集
    php垃圾回收机制
  • 原文地址:https://www.cnblogs.com/x54256/p/8144575.html
Copyright © 2020-2023  润新知