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