第五章、Linux用户及权限详解


03_04_Linux用户及权限详解


今天内容:

用户、组、权限


用户,用户组: 都只是标识符


安全上下文(secure context):

 

权限:

r, w, x

 

文件:

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

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

x: 可执行,eXacutable,可以命令提示符下当作命令提交给内核运行;

 

目录:

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

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

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

 

rwx:

         r--:只读

         r-x:读和执行

         ---:无权限

        

0 000 ---:无权限

1 001 --x: 执行

2 010 -w-: 写

3 011 -wx: 写和执行

4 100 r--: 只读

5 101 r-x: 读和执行

6 110 rw-: 读写

7 111 rwx: 读写执行

 

755:rwxr-xr-x:属主 属组 其他

 

rw-r-----: 640

 

660: rw-rw----

rwxrwxr-x: 775

 

用户:UID, /etc/passwd

:GID, /etc/group

 

影子口令

用户:/etc/shadow

组:/etc/gshadow

 

用户类别:

管理员:0

普通用户: 1-65535

         系统用户:1-499, 不需要登录系统,只用来运行某些后台服务

         一般用户:500-60000

 

用户组类别:

管理员组:

普通组:

         系统组:

         一般组:

        

用户组类别:

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

         基本组:用户的默认组

         附加组,额外组:默认组以外的其它组

    

e.g:    

进程:tom tom

对象:rwxrw-r--  jerry tom a.txt

 

tom执行ls命令

rwxr-xr-x root root /bin/ls, 文件属主各属组


ls 运行时,进程的属主是运行的用户

 

man 5 passwd

/etc/passwd

account: 登录名

password: 密码

UID:

GID:基本组ID

comment: 注释

HOME DIR:家目录

SHELL:用户的默认shell, cat /etc/shells查看合法shell

 

man 5 shadow: 查看/etc/shadow文件格式

/etc/shadow

account: 登录名

encrypted password: 加密的密码,两个!号表示锁定,不允许登录。格式: $1位$8位$密码

 

1位段: 加密方法

8位段:杂质(随机生成)


加密方法:

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

         公钥加密:每个密码都成对儿出现,一个为私钥(secret key),一个为公钥(public key)

         单向加密,散列加密:提取数据特征码,常用于数据完整性校验

                  特性: 1、雪崩效应  2、定长输出

                  MD5:Message Digest, 128位定长输出

                  SHA1:Secure Hash Algorithm, 160位定长输出

 

非对称加密更长,速度慢,慢3个数量级(1000倍以上) 


用户,组添加

useradd USERNAME

groupadd GRPNAME

 

用户管理:

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

 

组管理:

         groupadd, groupdel, groupmod, gpasswd

        

权限管理:

         chown, chgrp, chmod, umask

 

 

/etc/passwd:

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

 

/etc/group:

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

 

/etc/shadow:

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

 

用户管理:

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

 


 04_01_Linux用户管理命令详解


1. useradd  [options]  USERNAME

         -u UID

         -g GID(基本组)

         -G GID,...  (附加组) 一个用户可以属于多个附加组

         -c "COMMENT"

         -d /path/to/directory  指定家目录

         -s SHELL ; /etc/shells:指定了当前系统可用的安全shell

         -m  -k  创建家目录,并复制SKEL_DIR(default: /etc/skel) 下的文件到家目录

         -M 不创建用户主目录,即使系统在 /etc/login.defs 中的设置 (CREATE_HOME) 为 yes。

         -r: 添加系统用户

        

/etc/login.defs  用户操作的一些选项


环境变量:

         PATH

         HISTSIZE

         SHELL



2. userdel:

userdel [option] USERNAME

         -r: 同时删除用户的家目录

 

3. id:查看用户的帐号属性信息

         -u 显示uid

         -g 显示基本组id

         -G 显示附加组id

         -n 显示名称,而非ID号,结合其它选项

 

4. finger: 查看用户帐号信息

finger USERNAME

 

5. usermod: 修改用户帐号属性

         -u UID

         -g GID

         -a -G GID:不使用-a选项,会覆盖此前的附加组;

         -c "COMMENT"

         -d -m:修改家目录,并复制原家目录下文件到新家目录下

         -s :  shell

         -l : 修改用户名

         -L:锁定帐号

         -U:解锁帐号

        

6. chsh: 修改用户的默认shell

 

7. chfn:change finger 修改更改真名和信息,注释信息

 

8. passwd [USERNAME]: 密码管理

         --stdin  从标准输入接收密码, echo "redhat" | passwd --stdin root

         -l  lock

         -u unlock

         -d: 删除用户密码

 

9. pwck:检查用户帐号完整性

 

组管理:

10. groupadd:创建组

         -g GID

         -r:添加为系统组

        

11. groupmod

         -g GID

         -n GRPNAME

 

12. groupdel

 

13. gpasswd:为组设定密码

 

14. newgrp GRPNAME <--> exit(退出临时组): 临时切换为其他基本组,这时候需要用到组密码(切换到自己的附加组不需要)

        

 

练习:

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

# groupadd -g 3003 distro

# groupadd linux

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

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

# useradd -c "Fedora Community" -s /bin/tcsh fedora

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

# usermod -u 4004 -g linux -G distro,fedora mandriva

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

# passwd -n 2 -x 50 fedora

 

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

usermod -s /bin/bash mandirva

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

# useradd -r -s /sbin/nologin hbase

7、

 

chage:修改用户密码过期时间

         -d: 最近一次的修改时间

         -E: 过期时间

         -I:非活动时间

         -m: 最短使用期限

         -M: 最长使用期限

         -W: 警告时间

 

04_02_权限及权限管理


复习:

权限管理:

r:

w:

x:

 

三类用户:

u: 属主

g: 属组

o: 其它用户

 

1. chown: 改变文件属主(只有管理员可以使用此命令)

# chown USERNAME file,...

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

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

 

chown USERNAME:GRPNAME file,...

chown USERNAME.GRPNAME file,...

        

2. chgrp: 改变文件属组

# chgrp GRPNAME file,...

         -R:recursive

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

        

3. chmod: 修改文件的权限

修改三类用户的权限:

chmod MODE file,...

         -R:recursive

         --reference=/path/to/somefile file:参考某个文件设定权限

 

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

u,g,o,a

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


e.g: chmod go=rw,u=r /tmp/abc


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

u,g,o,a

chmod 用户类别+|-MODE file,...

chmod u-x /tmp/abc

chmod u+x,g-x /tmp/abc

chmod u-rx /tmp/abc


 

练习:

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

 

 

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

    1. 修改/etc/passwd文件,data +%s 得到19700101到当前的秒数,使用bc(bc是Linux下的计算器)把秒数除以一天的秒数86400,得到19700101到今天的天数。

    2. 创建家目录、复制文件、修改文件权限

    3. 修改/etc/shadow文件,使用sslpasswd可以生成加盐的加密串。

openssl passwd -1 -salt '12345678' 


4. umask:遮罩码

文件:666-umask

目录:777-umask

 

# umask

# umask 022

 

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

 

umask: 023

文件:666-023=643 X

目录:777-023=754

 

站在用户登录的角度来说,SHELL的类型

登录式shell:

         正常通常某终端登录

         1. su - USERNAME

         2. su -l USERNAME

 

非登录式shell:

         1. su USERNAME

         2. 图形终端下打开命令窗口

         3. 自动执行的shell脚本

        

 

bash的配置文件:

全局配置

         /etc/profile, /etc/profile.d/*.sh, /etc/bashrc

个人配置

         ~/.bash_profile, ~/.bashrc

        

profile类的文件:

         设定环境变量

         运行命令或脚本

 

bashrc类的文件:

         设定本地变量

         定义命令别名

        

登录式shell如何读取配置文件?

/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

 

非登录式shell如何配置文件?

~/.bashrc --> /etc/basrc --> /etc/profile.d/*.sh