linux用户管理

一. 用户管理

1.用户分类

    管理员          user id一定为0,务必唯一, root
    系统用户        伪用户,user id 201-999,默认是不允许登录系统,用于给予
                    某些服务运行时候所用的身份
    普通用户        user id 1000-60000, 通过手动或者命令建立起来的用户,
                    默认可以进行登录系统
    centos          /etc/login.defs
        UID_MIN         1000
        UID_MAX         60000
        SYS_UID_MIN     201
        SYS_UID_MAX     999

        GID_MIN         1000
        GID_MAX         60000
        SYS_GID_MIN     201
        SYS_GID_MAX     999

        0-200           是系统自带的, 建议别修改
        201-999         可以作为一些特殊服务运行时所用的身份
        1000-60000      普通用户的uid取值范围

        在未来,系统保留的uid值的范围可能会扩大,现在RHEL7官方文档中,
        已经推荐使用5000为普通用户的起始uid。

ubuntu /etc/adduser.conf

        FIRST_SYSTEM_UID=100
        LAST_SYSTEM_UID=999
        FIRST_SYSTEM_GID=100
        LAST_SYSTEM_GID=999

        FIRST_UID=1000
        LAST_UID=29999
        FIRST_GID=1000
        LAST_GID=29999

2.用户管理

    用户相关配置文件

        /etc/passwd
        /etc/shadow

        vim /etc/passwd
            root:x:0:0:root:/root:/bin/bash

            第一列 root       :     用户名
            第二列 x          :     密码    x代表密码存放在/etc/shadow里,
                                        如果去掉x就代表此用户没有密码
            第三列 0          :     uid 用户ID值操作系统是不认识用户名,只认uid
            第四列 0          :     gid,用户组的ID
            第五列 root       :     描述项,可以根据需要修改,也可为空
            第六列 /root      :     指定家目录
            第七列 /bin/bash  :     指定bash

            如果用户的家目录所在的设备空间不足,需要移动该用户的家目录,一般步骤如下:
            1. 预备一个有足够空间的存储设备,并作相应的挂载操作
            2. 确保该用户已经登出
            3. 把用户暂时禁用
            4. 把用户的家目录移动(或者复制)到新的地方
            5. 在/etc/passwd文件中对家目录作相应的修改
            6. 重新启用该用户

            练习
                (1). 创建一个用户u1, 设置好密码
                    sudo useradd u1
                    sudo passwd u1
                (2). 禁用u1用户
                    sudo passwd -l u1
                (3). 创建文件夹/u1, 把所属用户和所属用户组改成u1
                    sudo chown u1:u1 /u1
                (4). 把/home/u1里面的所有[隐藏]文件复制到/u1下面去
                (5). 用sudo打开/etc/passwd文件, 修改u1的第6列的家目录
                (5). 解锁u用户
                    sudo passwd -u u1
                (6). 登入u1, 看效果

vim /etc/shadow 用于保存用户的密码信息,只有root有查看的权限
​ root:!:17787:0:99999:7:::

​ 第一列:用户名
​ 第二列:真实的密码,经过加密的,以*或都!号开头的不能在登录页面登录
​ 删除之后登录的话就不需要密码了
​ 第三列:上一次修改密码的时间,linux以1970年1月1日到现在的天数来算的
​ 第四列:修改密码后几天内不允许再修改, 0代表不限制
​ 这个只能限制自己改自己的密码, sudo和root不在此列
​ 第五列:多少天内必须修改密码,99999代表不限制
​ 第六列:过期前几天给你一个警告信息
​ 第七列: 密码过期后的宽限期,代表密码过期后是否还能修改密码后正常登录.为空,代表什么时候都可以修改密码然后正常登录. 如果密码过期了,宽限期也到了,用户就无法修改密码登录了,只能联系系统管理员.
​ 第八列:这里可以写一个实际的账号过期天数,也是以1970年1月1日到现在来算的,多用于收费系统,详细信息查看man 5 shadow
​ 第九列:保留,留着以后功能扩展


            当忘记了root密码,修改密码的方法:
                1. 去登陆页面进grub页面去修改密码。
                2. 还记得一个有所有的sudo权限的密码的话, 可以用命令:
                    sudo su - root
                    去登陆root账户, 这个时候需要的密码是当前的账户密码

            密码过期后是否还能登录系统?
            密码过期后就不能再通过密码来登录系统,但是仍然可以通过别的方式登录,比如:
                su

    用户命令相关配置文件,保存useradd/adduser命令创建用户使用的默认值

        /etc/default/useradd
        /etc/login.defs


    用户相关命令(PPP1, PPP2, PPP3)
        C 新建用户
            useradd     命令行创建用户
                useradd a             创建a用户
                useradd -g u1 b      新建b用户并且把b用户添加进u1用户组
            adduser     创建用户

  在centos下面useradd和adduser是没有区别的,都是创建用户,且会创建家目录和邮箱,但是登陆的时候需要密码,且密码是不知道的,这个时候可以用sudo passwd username去修改密码,也可以去删除/etc/shadow下的第2列信息,再用su去登陆的时候就不需要密码了,但是在ubuntu下面的时候adduser是交互式的创建用户,会提示用户去输入密码, 注释等其他的一些信息

        R 用户信息获取
            id              查看当前登录用户信息
            id 用户名       查看对应用户的用户信息

D 删除用户
userdel
userdel a 删除a用户
userdel -r a
*删除a用户并且删除a的家目录和邮件目录(强烈建议使用这个)

U 修改用户
su 切换当前登录用户
su - a 完全切换,不继承上一个用户的环境变量,即sbin目录下的命令用不了
su a 不完全切换,继承上一个用户的环境变量,可以用sbin目录下的命令

passwd 修改用户密码

 passwd a              修改a用户密码
 passwd -l a
     临时关闭用户,或修改/etc/shadow第二个字段加*/!!
 passwd -u a
     释放临时关闭用户,或者删除/etc/passwd第二个字段的*/!!
 usermod         修改用户信息
    -u                      修改UID
     sudo usermod -u 1004 u3
       把u3用户的uid改为1004
            ps: 这个uid可以不存在
   -g                      修改GID
      sudo usermod -g 1001 u3
         把u3用户的gid改成1001
            ps: 这个gid必须存在
   -d                      修改家目录
      sudo usermod -d /u1 u3
          把u3用户的家目录改成/u1, 配置, 文件不会自动完成
   -s                      指用bash
   usermod -G u1 a            把a用户添加进u1用户组

锁定用户密码 usermod -L,用户无法通过密码来登录,但是可以通过别的方式登录,比如ssh证书
            解锁用户密码 usermod -U
            设定账户过期日期 usermod -e "2014-01-01" <name>
            清除账户过期日期 usermod -e "" <username>
            设定账户的初始组 usermod -g <group name>
            把用户添加进某个组或者某几个组 usermod -a -G g1,g2,g3 <username>
            给用户改名 usermod -l <new name> <current name>

sudo 授权

创建普通用户默认没有进行sudo授权, 所以登录不能使用sudo命令
sudo 只能执行外部命令, 并且只能执行 secure_path 变量保存目录里的命令

授权流程:
切换root登录(或者具有root权限的用户才能授权):
su root

sudo -i

            修改sudo配置
                vim /etc/sudoers
                    或
                visudo

            加入授权用户到配置文件
                tom ALL=(ALL:ALL) ALL   在93行左右

              给tom用户sudo授权

                %tom ALL=(ALL:ALL) ALL
                    给tom用户组sudo授权


授权单个权限
​ sudo 权限的表示格式
​ 用户名 机器名=(目标用户名) 命令列表
​ soul ALL=(root) /bin/ls,/bin/cat

给用户u2分配权限,一部分命令不需要输入密码,一部分命令需要输入密码,可以分开几行来书写
u2 ALL=(root) NOPASSWD: /bin/cat
u2 ALL=(root) /bin/mkdir

aUvWz6.png

3.组管理(PPP5, PPP6)

    相关配置文件

        /etc/group
        /etc/gshadow

        vim /etc/group
            第一列:组名
            第二列:密码,x代表密码在/etc/gshadow
            第三列:gid
            第四列:代表属于这个组的用户名

        vim /etc/gshadow
            第一列:组名
            第二列:密码
            第三列:组管理员
            第四列:组成员

    相关命令

        groupadd                添加一新用户组
            sudo groupadd g3    创建一个组g3
        groupdel                删除一用户组
            sudo groupdel g3    删除用户组g3
                ps: 不能删除一个基本组, 要先删除这个用户, 才能删除这个用户的基本组
        groupmod                修改用户组信息
            sudo groupmod a1 -g 1003     把a1的gid修改为1003
        gpasswd                 修改用户组密码
            gpasswd a1          修改a1的组密码
        gpasswd -a a root       把a用户放进root用户组
        gpasswd -A a root       把a用户作为root用户组的管理员
        gpasswd -A a,b root     把a, b用户作为root用户组的管理员
        gpasswd -A "" root      清空root组的管理员
        gpasswd -d a root       把a用户从root用户组里删除
        gpasswd -M u1,u2 g1     把u1,u2用户添加到g1组里面
        newgrp root             把当前用户临时添加进root用户组,重新登录失效
        id                      显示用户的ID和组ID

       -------------------------------------------------------------------------------
        tips: 组管理可以同时存在多个, 但是只有root有权限取设置组管理员
                用命令添加组管理员的话, 会覆盖, 可以手动取修改文件/etc/gshadow
            组管理可以添加和删除组员
            组管理员可以删除其他的组管理员, 只是删除这个组管理员的普通成员身份, 还是具有管理员的权限
            组管理员可以把自己从这个组里面删除
       -------------------------------------------------------------------------------

手工创建用户

    第一步:在/etc/passwd添加一行信息
        bean:x:1003:1003::/home/bean:/bin/bash
    第二步:修改/etc/shadow的信息
        复制当前的普通用户那一行, 再进行相对应的修改
    第三步:在/etc/group添加组的信息
        bean:x:1003:
    第四步:在/etc/gshadow添加组的密码信息
        bean:!::
    第五步:创建家目录
        mkdir /home/bean
    第六步:把用户的环境变量文件复制到家目录
        cp /etc/skel/.bash* /home/bean
        chown bean:bean /home/bean/ -R
        chmod 700 /home/bean/ -R
    第七步:创建用户的邮件文件
        touch /var/mail/bean
        chown bean:bean /var/mail/bean
        chmod 660 /var/mail/bean

============================================================================

二、Linux权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ls -hl /tmp/readme.txt
- rw- r-- r-- 1 root root 4383 2011-03-01 01:37 readme.txt所属用户权限u 所属用户组权限g 其它人权限o
u <-- user 代表文件的所有者的权限
g <-- group 代表文件所属组的权限
o <-- other 代表的是其他用户的权限

r read 读权限
针对文件夹,具有r权限,就代表具有对这个文件夹进行列表的权限
针对文件,具有r权限,就代表具有读取这个文件的内容的权限

w write 写权限
针对文件夹,具有w权限,代表具有他能在此文件夹里创建修改等操作
针对文件,具有w权限,代表具有修改此文件内容的权限

x execute 执行权限
针对文件夹,具有x权限,代表可以切换到此文件夹
针对文件,具有x权限,代表可以运行它,文件必须是可执行或脚本等
二进制转八进制:
   8421
    000     0       ---
    001     1       --x
    010     2       -w-
    011     3       -wx
    100     4       r--
    101     5       r-x
    110     6       rw-
    111     7       rwx

    rwx, r-x, r-x
    421  401  401
    7    5      5

chmod(PPP9) 修改权限的命令

    chmod u+x,g+r,o-r file
    chmod u=rwx,g=rw,o=r file   rwx rw- r--
    chmod 755 file              rwx r-x r-x
    chmod 755 dirs -R           dirs目录下面所有文件的权限修改为755
    权限判断的顺序
        先判断是否是文件的所有人,如果是,则执行所属人的权限后结束,
        如果不是所有人,则判断是否所属组(可以是主组也可以是辅助组),如果是,则执行所属组的权限后结束,
        如果不是则执行其他人的权限后结束。

    公开的文件夹, 不要乱加权限, 给的最大权限不要超过755, 其他用户加w权限要谨慎
        就算给其他用户只给了3的权限, 别人也能进来修改文件强制保存,
        把文件变成别人的

chown 修改文件用户所属

    必须具有root权限才能修改
    sudo chown tom file               修改file文件所属用户为tom
    sudo chown :tom file              修改file文件所属组为tom
    sudo chown tom:jack file          修改file文件的所属用户为tom,所属用户组为jack
    sudo chown jack.root dirs -R      修改dirs目录下面所有文件的所属用户为jack,所属用户组为root

-------------------------------------------------------------

umask 默认创建文件或文件夹权限掩码

    管理员默认umask为022
    普通用户默认umask为002

    普通用户默认创建文件夹权限是777,而掩码设置为002,则要减去掩码,默认创建文件夹权限则变成775
    普通用户默认创建文件权限是666,而掩码设置为002,则减去掩码,默认创建文件权限为664

    root默认创建文件夹权限是777,而掩码设置为022,则要减去掩码,默认创建文件夹权限则变成755
    root默认创建文件权限是666,而掩码设置为022,则减去掩码,默认创建文件权限为644

    默认权限与掩码进行异或, 得出真实创建文件或文件夹的权限
    影响创建文件或文件夹的默认权限
    修改只是临时,只影响当前进程

    umask       查看当前权限掩码
        0777 111 111 111        异或
        0002 000 000 010
             111 111 101
            异或: 相同为0, 不同为1

    umask 0077  修改当前权限掩码

-------------------------------------------------------------

特权位

针对命令文件,设定setuid、setgid
命令文件设定setuid、setgid
没加特权位之前,命令运行的时候所采用的身份是运行者的身份
添加了特权位之后,命令运行的时候采用的身份不再是运行者的身份,而是命令本身的所属者
例:passwd 文件

ls -al /usr/bin/passwd

aUxpwQ.png

针对目录设定setgid

设定了组的特权位后,在该文件夹下创建子文件或子目录,它们自动继承文件夹的所属组的身份,子目录会继承目录的特权位

    chmod u+s/g+s  file         给file设置特权位
    chmod u-s/g-s  file         给file取消特权位

    例: tom用户指定mary可以在tom目录下创建文件
        adduser  tom
         adduser  mary
        mkdir /test/{tom,mary} -p
        sudo chown tom:tom /test/tom -R
        sudo chown mary:mary /test/mary -R
        sudo chmod 700 /test/{tom,mary} -R
        sudo cp /usr/bin/touch /test/mary/tomCreate
        sudo chown tom:tom /test/mary/tomCreate
        sudo chmod 755 /test/mary/tomCreate
        sudo chmod u+s /test/mary/tomCreate

        su - mary
            /test/mary/tomCreate /test/tom/mary.file
            su -  
          su - tom 
           -rw-rw-r-- 1 tom  mary 0 12月  9 21:40 mary.file

            查看新创建的文件的所有者和所属组是谁,会看到所属组为mary

针对目录的特权位
    只能对目录设置组特权,
    任何用户在此目录创建文件的所属用户组为目录的所属用户组(root用户也不行)
        组特权为只能管理到他的下面一级, 更里面的文件夹不能管理到
-------------------------------------------------------------

粘贴位(sticky)

防止其它用户删除文件,针对其它用户,管理员和本人可以删除,针对目录有效,文件没有用

    chmod o+t dirs              给dirs目录设置粘贴位

    例:
        cd /
        ls -l查看tmp目录具有的权限
        创建文件/tmp/uplooking.txt
        chmod 777 /tmp/uplooking.txt
        su - tom
        rm /tmp/uplooking.txt 看是否可以?
        exit
        sudo chmod o-t /tmp

        su - tom
        rm /tmp/uplooking.txt 看是否可以?

        sudo chmod o+t /tmp
        想想中间的原理是什么?

两个特殊权限都是在x位上,为了区分权限,如果在某一位有x权限,对应的特殊权限就是小写的,
    如果没有x权限,对应的特殊权限就是大写的,sS, tT
   chmod u-x tmp/
   ll tmp -d
    drwSrwxrwt.  16 root root 4096 12月  9 21:55 tmp

-------------------------------------------------------------
基本权限只能表示三类权限,如果对权限的需求超过三种,那么基本权限就无法满足需要了,
这个时候可以使用扩展的权限,请参考拓展部分内容。

-------------------------------------------------------------

文件特殊属性

    lsattr                      查看文件特殊属性

    chattr                      添加或修改文件特殊属性

        sudo chattr +i file          添加i属性,管理员也不得更改
        sudo chattr +a file          只能追加内容,不得修改内容,如果有i属性,先取消i,a属性才有用
        sudo chattr -i/-a file       取消文件特殊属性

    例:
        touch /tmp/uplooking.txt
        chmod 777 /tmp/uplooking.txt
        sudo chattr +i /tmp/uplooking
        vim /tmp/uplooking 看各种保存是否能成功(>, >>)
        sudo chattr +a /tmp/uplooking 看是否能成功?
        sudo chattr -i /tmp/uplooking
        sudo chattr +a /tmp/uplooking 看是否能成功?
        vim /tmp/uplooking 编辑文件,各种保存看是否能成功,
            且文件中并没有提示这是一个只读文件
        echo "hello world" >> /tmp/uplooking 看是否能成功

    PPP10 -> PPP16

===============================================================================

三、环境变量、命令别名与命令历史

env

显示当前shell定义的环境变量,包括当前用户的环境变量

set

显示当前shell定义的私有变量,包括用户环境变量,按变量名称排序

export

显示当前导出成用户变量shell变量,并显示变量的属性,按变量名称排序

用户环境变量相关配置文件
    路径:/home/用户名/  或  /root/

    .bash_history               用户退出登录之后记录之前的历史命令,logout后才会把当前命令历史添加到此文件
    .bash_logout                用户退出登录时执行的代码,前提是logout退出或su切换用户用exit或logout才会生效
    .bash_profile               用户的环境变量常规设定的地方,用户登录时执行
    .bashrc                     命令别名的设定地方,打开终端时执行

全局环境变量相关配置文件

    /etc/bashrc                 和上述一样,只不过这是全局,所有用户都影响
    /etc/profile

    source /etc/profile         立即生效对/etc/profile文件的修改
    . /etc/profile              功能同上


命令历史

    history                     查看当前用户的历史命令

        !!                      重复执行上一条命令
        !a                      重复执行上一条以a为首的命令
        !100                    重复执行第100条命令
        !$                      获取上一条命令的参数,多用于获取路径

    history 10                  显示最后10条命令历史
    history -w  b.history       把当前命令历史写到b.history文件中
    history -r  a.history       把a.history的命令读到命令历史列表中
    history -c                  清除命令历史


命令别名

    alias                       列出目前所有的别名设置
    alias ls='ls -l'            创建ls -l的别名为ls, 只在本shell生效,而且重启终端即失效
    unalias ls                  释放ls -l的别名

    echo "set -o vi"  >> ~/.bashrc

    用命令别名去快速的挂载和取消挂载
    alias ms='sudo mount 192.168.0.183:/ /guazai'
    alias ums='sudo umount /guazai'

    . ~/.bashrc

    永久生效就把alias创建加入到~/.bashrc里即可

bash快捷键

    tab                         一次补完命令行或文件名,二次可以列出所有匹配的选择
    ctrl+c                      结束当前的任务
    ctrl+a                      跳到行首

评论


:D 一言句子获取中...

加载中,最新评论有1分钟缓存...