用户管理
useradd (默认是是最大的ID号向下加一)
-u UID 尚未制定大于等于500
-g GID (基本组)必须事先存在 也可以使用组名,useradd -g two one id one
-G GID 附加组 可以有多个
-c "COMMENT" 制定注释信息
-d 家目录 需要制定目录
-s shell 路径 最好是/etc/shells文件中的shell
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
-m -k 创建家目录 强行复制 /etc/skel文件,其实默认创建用户就会自动复制skel文件
-M 不创建家目录,不代表不能登陆
-r 添加系统用户
/etc/skel 其实默认创建用户就会自动复制skel目录下的文件到用户家目录
/etc/login.defs 是/etc/shadow文件的默认配置文件,用于定义默认
环境变量:
PATH
HISTSIZE
SHELL 保存当前用户shell
id
-u 用户ID
-g 基本组ID
-G 附加组ID
-n 显示用户名配合其他三个选项
finger 查看用户账户属性信息
userdel 默认不会删除用户家目录 但一个用户被删除以后,此前属主为此用户的文件变为删除用户的UID
-r 同时删除家目录
修改用户账号属性
usermod
-u 修改用户ID
-g GID 必须存在 基本组
-a -G GID 不使用-a选项会覆盖之前的附加组,如果之前有附加组的话。
-c 制定注释信息
-d -m 为用户制定新的家目录 以前原家目录文件至新家目录中
-s 修改用户shell
-l 修改用户名字
-e 定义用户过期时间 YYYY-MM-DD
-f 密码过去还没禁用时间
-L 锁定账户
-U 解锁用户
chsh 修改用户shell
chfn 修改finger信息,修改注释信息
passwd 修改用户密码,普通用户自己修改自己的密码,管理员可以制定修改其他用户,禁止空密码登陆。
--stdin 标准输入读取密码,可以从其他文件带起键盘 echo "redhat | passwd --stdin user1
-l 锁定用户账户
-u 解锁用户账户
-d 删除用户密码
-n 密码最短使用期限
-x 最长使用期限
-w 警告时间
-i 非活动时间
chage 也可以修改用户密码时间,类似passwd
-d 最近一次的修改时间
-E 过期时间
-I 非活动时间
-m 最短使用期限
-M 最长使用期限
-W 警告时间
pwck 检查用户账号的完整性
组管理
groupadd 创建组
-g gid
-r 添加为系统组
groupamod 修改组名或者ID
-g gid
-n GRPNAME
groupdel 删除组
gpasswd 为组设置密码,一个用户创建文件的属主是这个用户自身,而属组则是这个用户账户的基本组
newgrp 切换组,如果用户本来就输入切换组的附加组,就不需要密码,切换完成之后此组成为用户的基本组。
newgrp为一个登陆属性,可以用exit推出。
练习题
1.创建一个用户mandriva,其ID号位2002,基本组为distro(组ID为3003),附加组为linux groupadd linux groupadd -g 3003 distro 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 mandriva 6.将添加系统用户hbase,且不运行其登陆 useradd -r -s /sbin/nologin hbase
权限管理
r
w
x
三类用户
o 属主
g 属组
o 其他用户
chown 改变文件属主(只有管理员可以用此命令)
chown username file
-R 修改目录以及目录中子目录和文件的属主
--reference=/path/to/somefile file 设定新文件跟参考文件一样的属主和属组
同时修改属主和属组
chown username:grpname file
chown username.grpname file
chown --reference=/tmp/abc test
--reference=/path/to/somefile file 设定新文件跟参考文件一样的属主和属组
chgrp 改变文件属组(用法和chown用法一样)
-R
--reference=/path/to/somefile file
chmod 修改文件的权限 操作范围越来越精细
修改三类用户的权限
chmod mode file
-R 递归
--reference=/path/to/somefile file
chomod 750 file
位数不够就从左往右识别
75 075
5 005
修改某类用户或某些类用户权限
u,g,o,a rxw
chmod 用户类别=rwx file
chmod go=rw file
chmod g=rx,o=r file
chmod g=rx,o= file 不写权限就是没有权限
修改某类用户某位或某些位权限
chmod u-x,g+x file
chmod a+x file 等于 chmod +x file
chmod u-wx file
umask 遮罩码
root缺省创建文件权限 644
缺省创建目录权限 755 0022
user缺省创建文件权限 664
缺省创建目录权限 775 0002
umask 023
文件 666-023=643 实际是644 默认不能有执行权限,有了就自动+1
目录 777-023=754
练习
1、新建一个没有家目录的用户openstack useradd -M openstack 2、复制/etc/skel为/home/openstack cp -r /etc/skel /home/openstack 3、改变/home/openstack及其内部文件的属主均为openstack cp -R openstack 4、/home/openstack及其内部的文件,属组和其他用户没有任何访问权限 chmod go= -R /home/openstack su - openstack 手动建立用户,其他人没有权限访问openstack的家目录 linux 任何权限对root是无效的 所以可以修改密码保存此文件中 ls -l /etc/shadow -r-------- 1 root root 1197 Jul 23 16:13 /etc/shadow 普通用户也可以修改自己的密码,如何实现的? ls -l $(which passwd) -rwsr-xr-x 1 root root 22960 Jul 17 2006 /usr/bin/passwd 5、手动添加用户hive,基本组为hive(5000),附加组为mygroup vi /etc/group hive:x:5000: mygroup:x:504:user2,hive vi /etc/passwd hive:x:5000:5000:Hive:/home/hive:/bin/bash vi /etc/shadow hive:!!:15909:0:99999:7::: cp -r /etc/skel /home/hive chown -R hive:hive /home/live chmod -R go= /home/live 密码生成 whatis passwd 中查看由sslpasswd man sslpasswd -1 Use the MD5 based BSD password algorithm 1. -salt string (杂质) Use the specified salt. When reading a password from the terminal, this implies -noverify. openssl passwd -1 -salt '12345678' Password:123 $1$12345678$tRy4cXc3kmcfRZVj4iFXr/ "/"也属于hash的元素 杂质默认8位,不代表必须输入8位,但不同杂质计算相同密码等到的hash一定不同。 openssl passwd -1 -salt '1234567' Password:123 $1$1234567$Y8QuHrN2po5VtIYAWSZOn/
特殊权限
[hadoop@localhost testsgid]$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 23420 Aug 3 2010 /usr/bin/passwd
启动进程之后进程的身份不是在是发起进程者,而是发起进程前文件本身的属主,者就叫做SUID
SUID:运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者。
chmod u+s file 如果file本身原有执行权限显示为s,否则显示为S
不到万不得已,一定不要给它SUID
SGID运行某程序时,相应进程的属主是程序文件自身的属组,而不是启动者所属的基本组
应用场景 developteam:hadoop,hive 之间可以相互编辑文件
chmod g+s file
chmod g-s file
mkdir /tmp/testsgid
useradd hadoop
useradd hive
groupadd developteam
usermod -a -G developteam hadoop 附加组
usermod -a -G developteam hive
id hadoop 查看是否添加成功
chown -R :developteam /tmp/testsgid 虽然目录属组已为developtem,但没有w权限,用户依然无法创建文件
chmod -R g+w /tmp/testsgid hadoop,hive可以创建文件,但创建文件默认的属主和属组是自己,因此无法互相修改文件内容
chmod g+s /tmp/testsgid SGID成功,2个用户默认创建文件的属组为developteam,因此可以互相修改彼此文件
chmod o+t /tmp/testsgid 2用户此时不能删除对方文件,依然可以互相修改,那些属主属组都是自己的用户不再可以强行编辑和删除对方文件
Sticky 在一个公共目录,每个人都可以创建文件,删除自己的文件,但不能删除别人的文件。冒险位
chmod o+t DIR
chmod o-t DIR
三位组合 suid sgid sticky
000
001 *
110 * *
chmod 1755 /tmp/testdir sticky
2755 sgid
3755 sgid sticky
4755 suid
5755 suid sticky
6755 suid sgid
7755 suid sgid sticky
umask 0002
FACL 适用场景
jerry访问tom文件时候需要相应权限,应该如何设置呢?
如果用户是把jerry设为tom的others是一种办法,但others范围太广,不只是jerry一个人。
如果把jerry属组改为tom也可以,但是普通用户没有权限使用chown命令改变自己的属组。
那该怎么办呢?FACL的作用就体现出来了。
FACL:Filesystem Access Control List
利用文件扩展属性保存额外的访问权限
注意:复制文件,归档文件,很可能丢失属性,除非使用相关命令的特殊选项。
普通文件权限生效过程:Owner-->Group-->Ohter
如何知道文件是否有FACL?
ls -l filename
-rw-rw-r--+
右侧结尾带有+号则说明此文件有FACL扩展属性
FACL命令
getfacl 查看
filename
setfacl 设置
-m设定
u:username:permfilesetfacl 用户
-m u:hadoop:rw inittab
g:groupname:permfilesetfacl 组
-m g:developteam:rw inittab
#目录下的文件继承该目录的FACL
d:u:username:permfilesetfacl
-m d:u:hadoop:rw inittab
d:g:username:permfilesetfacl
-m d:g:hadoop:rw inittab
-x取消
u:username filesetfacl
-x u:hadoop inittab
g:groupname filesetfacl
-x g:developteam inittab
注意:文件权限(perm+FACL):Owner-->FACL,User-->Group-->FACL,Group-->Other