04_01_Linux用户管理命令详解

用户、组、权限

    操作系统的组成:1、硬件;2、内核;3、库(动态库,静态库);4、shell

    所谓的安装操作系统是把操作系统安装到哪里去了?

    答:不是内存;硬盘,外部存储设备;

    计算资源:

    权限

    用户

    用户,容器,关联权限;用户组,方便地指派权限

    用户:标识符

    用户组:标识符

    文件


安全上下文(secure context)

进程:也有属主和属组,进程能否访问资源,取决于发起进程的用户是否有权访问资源

        

        权限:

r,w,x

文件权限含义:

r:可读,可以使用类似cat等命令查看文件内容

w:可写,可以编辑或删除此文件

x:可执行,executable,可以在命令提示符下当做命令提交给内核运行

目录权限含义:

r:可以对此目录执行ls以列出内部的所有文件;

w:可以在此目录创建文件

x:可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息

一般情况下,不建议文件有执行权限,但目录应该有执行权限

rwx:

0 000 --- 无权限

1 001 --x 执行

2 010 -w- 写

3 011 -wx 写和执行

4 100 r-- 读

5 101 r-x 读和执行

6 110 rw- 读和写

7 111 rwx 读写执行

        用户账号信息:

用户:UID,/etc/passwd

组  :GID  /etc/group


        影子口令:密码

用户:/etc/shadow

组  :/etc/gshadow

用户类别:

    管理员:UID=0,内置的,改不了的

    普通用户:1-65535,超过此范围?

    系统用户:1-499(这类用户应该被限制,不允许登录系统)

    一般用户: 500-60000(可以登录系统获取资源的用户)

用户组类别:

    管理员组;

    普通组:

系统组

一般组

用户组类别:

    基本组:用户的默认组

    私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组

    附加组/额外组:默认组以外的其他组

一个进程如何去访问一个文件:

进程的权限=发起进程的用户的权限=进程的属组和属主

文件的权限=文件的属组/属主

怎么判断进程能否访问文件?看文件的属组和属主与进程的属组和属主是否重合

/etc/passwd

    用户名:密码:UID:GID:注释:家目录:默认SHELL

                account:用户名

password:也可能是X,密码占位符

UID:

GID:基本组

GECOS:注释信息

HOME DIR:家目录

SHELL:用户默认的shell

        /etc/shadow

用户名:密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告时间:非活动时间:过期时间

        

                    root:$1$OObZbuUH$2QXkgCFhaIxbnIAJ.2CsG1:16333:0:99999:7:::

1、用户名

2、数字1代表是MD5加密

3、$1$OObZbuUH$salt值,6位随机数

4、!!代表用户锁定

        /etc/group:

组名:密码:GID:以此组为其附加组的用户列表


        

        加密方法:

对称加密:加密和解密使用同一个密码

公钥加密:每个密码都成对出现,一个为私钥一个为公钥

单向加密(散列加密):提取数字的特征码,数据完整性校验

1、雪崩效应

2、定长输出

MD5:128位的定长输出

SHA1:160位定长输出


用户管理:

useradd,userdel,usermod,passwd,chsh,chfn,finger,id,chage

组管理:

groupadd,groupdel,groupmod,gpasswd

权限管理:

chown,chgrp,chmod

1、用户管理:


1.1用户添加

    useradd [options] USERNAME

-u UID(UID>=500,其他用户未使用的ID号)

    # useradd -u 1000 user1

    # tail -1 /etc/passwd

    user1:x:1000:1000::/home/user1:/bin/bash

            

        -g GID(基本组ID)

    # useradd -g hellosa user2

    useradda¥ hellosa

    # useradd -g mygroup user2

    # tail -1 /etc/passwd

    user2:x:1001:504::/home/user2:/bin/bash

        

        -G GID,... (附加组,可以有多个,用“,”隔开即可)

    # useradd -G mygroup user3

    # !tail

    tail -1 /etc/passwd

    user3:x:1002:1002::/home/user3:/bin/bash

    # tail /etc/group

    user3:x:1002:

-c "COMMENT1 COMMENT2 COMMENT3" 添加附件信息

-d /path/to/directory 为用户指定某个家目录

    # useradd -c "Tony Blare" -d /home/blare user4

    # tail -1 /etc/passwd

    user4:x:1003:1003:Tony Blare:/home/blare:/bin/bash

-s SHELL路径

    # useradd -s /sbin/nologin user5

    # su - user5

    This account is currently not available.


    # useradd -s /bin/tcsh user6

    # su - user6

    $ echo $SHELL

    /bin/tcsh

    $ exit

    logout

    # tail -1 /etc/passwd

    user6:x:1005:1005::/home/user6:/bin/tcsh

-m -k 强行为用户创建家目录,-k复制/etc/skel文件

        -M

    # useradd -M user7

    # su - user7

su: warning: cannot change directory to /home/user7: No such file or directory

-bash-3.2$ pwd

/root

-bash-3.2$

归纳:有shell,但没有家目录


1.2 用户删除

userdel:

userdel [options] USERNAME :如果删除用户没有指定任何选项,用户的家目录不被删除

# ls /home

blare  tom  user1  user2  user3  user5  user6  w1  wqm

# userdel user1

# ls /home

tom  user1  user2  user3  user5  user6  w1  wqm

#userdel -r user2

# ls /home

blare  tom  user1  user3  user5  user6  w1  wqm


1.3 查看用户账号信息


id:查看用户的账号属性信息

-u 

-g

-G

-n

    eg:

    # id

    uid=0(root) gid=0(root)groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

    # id user1

    uid=1000(user1) gid=1000(user1) groups=1000(user1)

    # id -u user1

    1000

    # id -g user1

    1000

    # id -G user1

    1000

    # id -G

    0 1 2 3 4 6 10

    # id -u -n user1

    user1

    # id -G -n

    root bin daemon sys adm disk wheel

finger:查看用户账号信息

                    eg:

finger USERNAME

# finger user1

Login: user1                            Name: (null)

Directory: /home/user1                  Shell: /bin/bash

Never logged in.

No mail.

No Plan.



1.4 修改用户信息

usermod:修改用户的账号信息

-u UID

    # id user3

    uid=1002(user3) gid=1002(user3) groups=1002(user3),504(mygroup)

    # usermod -u 2002 user3

    # id -u user3

    2002

        -g GID

-G:用新的附加组覆盖原有的附加组

        -a -G:在原有的附加组后,在追加新的附加组

        -c 指定注释信息

        -d 为用户指定新的家目录,用户之前创建的文件,使用不了了

        -d -m:既指定了新的家目录,又将原来家目录的文件移到新的家目录下

        -l 指定新的登录名

        -L 锁定用户账号

        -U 解锁用户账号

chsh:修改用户的SHELL

# finger user3

Login: user3                            Name: (null)

irectory: /home/user3                  Shell: /bin/bash

Never logged in.

No mail.

No Plan.

# chsh user3

Changing shell for user3.

New shell [/bin/bash]: /bin/tcsh

Shell changed.

chfn:修改用户的注释信息

1.5 用户密码管理:

passwd [USERNAME]

    --stdin 标准输入

        # echo "redhat" | passwd --stdin user3

        Changing password for user user3.

        passwd: all authentication tokens updated successfully.

    -d 删除用户密码

    -l 锁定用户账号

    -u 解锁用户账号

        pwck:检查用户账号完整性

2、组管理:


2.1 创建组:

        groupadd

    -g(基本组)

    -r(添加为系统组)

                # useradd -r apache

        # tail -1 /etc/passwd

        apache:x:101:102::/home/apache:/bin/bash

                # ls /home

                blare  tom  user1  user3  user5  user6  w1  wqm

                # groupadd -r nginx

                apache:x:101:102::/home/apache:/bin/bash

                # tail -1 /etc/group

                nginx:x:103:


2.2 修改组

groupmod

    -g GID

    -n  GROUPNAME


2.3 删除组:

groupdel

2.4 为组加密码:

gpasswd:为组设定密码

# useradd hadoop

# su - hadoop

$ cd /tmp

$ touch a.hadoop

$ ls -l

-rw-rw-r-- 1 hadoop hadoop    0 09-23 15:14 a.hadoop

$ id

uid=2003(hadoop) gid=2003(hadoop) groups=2003(hadoop)


newgrp GRPNAME <--->exit

passwd

/etc/passwd

/etc/shadow

/etc/group


                环境变量:

PATH

HISTSIZE

SHELL

/etc/shells:制定了当前系统可以的安全shell

/etc/login.defs

export LANG=en 输出格式改为标准英文

练习:

1、创建一个用户mandriva,其ID号为2002,基本组为distro(组ID为3003),附加组为linux;

   答:    #groupadd -g 3003 distro

          #groupadd linux

          #adduser -u 2002 -g distro -G linux mandriva 


2、创建一个用户fedora,其全名为Fedora Community,默认shell为tcsh;

   答:   # useradd fedora

          # chfn fedora

          # chsh fedora


    一行命令:# useradd -c "Fedora Community" -s /bin/tcsh fedora


3、修改mandriva的ID号为4004,基本组为linux,附加组为distro和fedora;

   答:   # usermod -u 4004 -g linux -a -G distro,fadora mandriva


4、给fedora加密码,并设定其密码最短使用期限为2天,最长为50天;

   答:passwd -n 2 -x 50 fedora  


5、将mandriva的默认shell改为/bin/bash; 

    答:# chsh Mandriva

        /bin/bash 

    一行命令:usermod -s /bin/bash

6、添加系统用户hbase,且不允许其登录系统

    答:# adduser -r hbase

        # chsh hbase

          /sbin/nologin

    一行命令:adduser -r -s /sbin/nologin hbase

7、chage:更改用户密码到期信息

    chage [options] USER

-d :最近一次修改时间

-E :过期时间

-I :非活动时间

-m :最短使用期限

-M :最长使用时间

-W :警告时间


04_02_权限及权限管理


权限管理:

r:文件 cat、more、less、,目录:ls

w:文件:编辑   目录:创建文件

x:文件:可执行 目录:cd ,ls -l


三类用户

u:属主

g:属组

o:其他用户


chown:改变文件属主

用法:

# chown USERNAME file,...

-R:修改目录及其内部文件的属主

--reference=/path/to/somefile file,...

# chown USERNAME:GRPNAME file,...

# chown :GRPNAME file,...


chgrp:改变文件属组

# chgrp GRPNAME file,...

-R

--reference=/path/to/somefile file,...

chmod:修改文件的权限

修改三类用户的权限

#chmod MODE file,...

-R

--reference=/path/to/somefile

修改某类用户或某些用户的权限

u,g,o,a

# chmod 用户类别=MODE file,...

修改某类用户的某位或某些位权限

u,g,o,a

# chmod 用户类别+/-MODE file,...


练习:

1、新建一个没有家目录的用户openstack;

# useradd -M openstack

2、复制/etc/skel为/home/openstack;

# cp -r /etc/skel /home/openstack

3、改变/home/openstack及其内部文件的属主属组均为openstack;

# chown -R openstack:openstack /home/openstack

4、/home/openstack及其内部的文件,属组和其它用户没有任何访问权限

# chmod -R go= /home/openstack


实验:手动创建一个Linux用户


用户创建的过程:即修改三个文件

/etc/passwd 最后加一行

/etc/shadow 最后加一行

/etc/group 最后加一行

手动添加用户hive,基本组为hive(5000),附加组为mygroup

/etc/passwd

hive:x:5000:5000::/home/hive:/bin/bash

/etc/shadow

hive:$1$salt$md5:16336:0:99999:7:::

/etc/group

mygroup:x:mygroupGID:hive

openssl:算密码

  openssl -1 -salt "salt(8位)"

        -1(yi)表示:MD5加密

        -salt   表示:加盐



用户创建的过程:

/etc/passwd 最后加一行

/etc/shadow 最后加一行

/etc/group 最后加一行

手动添加用户hive,基本组为hive(5000),附加组为mygroup

/etc/passwd

hive:x:5000:5000::/home/hive:/bin/bash

/etc/shadow

hive:$1$salt$md5$:16336:0:99999:7:::

/etc/group

mygroup:x:mygroupGID:hive

openssl:算密码


umask:遮罩码

666-umask

777-umask


# umask 

# umask 022


文件默认不能具有执行权限,如果算得的结果中有执行权限,则将其权限加1;


umask: 023

文件:666-023=643 X 

目录:777-023=754