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