linux用户管理
一. 用户管理
1.用户分类
管理员 user id一定为0,务必唯一, root
系统用户 伪用户,user id 201-999,默认是不允许登录系统,用于给予
某些服务运行时候所用的身份
普通用户 user id 1000-60000, 通过手动或者命令建立起来的用户,
默认可以进行登录系统
centos /etc/login.defs
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
0-200 是系统自带的, 建议别修改
201-999 可以作为一些特殊服务运行时所用的身份
1000-60000 普通用户的uid取值范围
在未来,系统保留的uid值的范围可能会扩大,现在RHEL7官方文档中,
已经推荐使用5000为普通用户的起始uid。
ubuntu /etc/adduser.conf
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999
FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999
FIRST_UID=1000
LAST_UID=29999
FIRST_GID=1000
LAST_GID=29999
2.用户管理
用户相关配置文件
/etc/passwd
/etc/shadow
vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
第一列 root : 用户名
第二列 x : 密码 x代表密码存放在/etc/shadow里,
如果去掉x就代表此用户没有密码
第三列 0 : uid 用户ID值操作系统是不认识用户名,只认uid
第四列 0 : gid,用户组的ID
第五列 root : 描述项,可以根据需要修改,也可为空
第六列 /root : 指定家目录
第七列 /bin/bash : 指定bash
如果用户的家目录所在的设备空间不足,需要移动该用户的家目录,一般步骤如下:
1. 预备一个有足够空间的存储设备,并作相应的挂载操作
2. 确保该用户已经登出
3. 把用户暂时禁用
4. 把用户的家目录移动(或者复制)到新的地方
5. 在/etc/passwd文件中对家目录作相应的修改
6. 重新启用该用户
练习
(1). 创建一个用户u1, 设置好密码
sudo useradd u1
sudo passwd u1
(2). 禁用u1用户
sudo passwd -l u1
(3). 创建文件夹/u1, 把所属用户和所属用户组改成u1
sudo chown u1:u1 /u1
(4). 把/home/u1里面的所有[隐藏]文件复制到/u1下面去
(5). 用sudo打开/etc/passwd文件, 修改u1的第6列的家目录
(5). 解锁u用户
sudo passwd -u u1
(6). 登入u1, 看效果
vim /etc/shadow 用于保存用户的密码信息,只有root有查看的权限
root:!:17787:0:99999:7:::
第一列:用户名
第二列:真实的密码,经过加密的,以*或都!号开头的不能在登录页面登录
删除之后登录的话就不需要密码了
第三列:上一次修改密码的时间,linux以1970年1月1日到现在的天数来算的
第四列:修改密码后几天内不允许再修改, 0代表不限制
这个只能限制自己改自己的密码, sudo和root不在此列
第五列:多少天内必须修改密码,99999代表不限制
第六列:过期前几天给你一个警告信息
第七列: 密码过期后的宽限期,代表密码过期后是否还能修改密码后正常登录.为空,代表什么时候都可以修改密码然后正常登录. 如果密码过期了,宽限期也到了,用户就无法修改密码登录了,只能联系系统管理员.
第八列:这里可以写一个实际的账号过期天数,也是以1970年1月1日到现在来算的,多用于收费系统,详细信息查看man 5 shadow
第九列:保留,留着以后功能扩展
当忘记了root密码,修改密码的方法:
1. 去登陆页面进grub页面去修改密码。
2. 还记得一个有所有的sudo权限的密码的话, 可以用命令:
sudo su - root
去登陆root账户, 这个时候需要的密码是当前的账户密码
密码过期后是否还能登录系统?
密码过期后就不能再通过密码来登录系统,但是仍然可以通过别的方式登录,比如:
su
用户命令相关配置文件,保存useradd/adduser命令创建用户使用的默认值
/etc/default/useradd
/etc/login.defs
用户相关命令(PPP1, PPP2, PPP3)
C 新建用户
useradd 命令行创建用户
useradd a 创建a用户
useradd -g u1 b 新建b用户并且把b用户添加进u1用户组
adduser 创建用户
在centos下面useradd和adduser是没有区别的,都是创建用户,且会创建家目录和邮箱,但是登陆的时候需要密码,且密码是不知道的,这个时候可以用sudo passwd username去修改密码,也可以去删除/etc/shadow下的第2列信息,再用su去登陆的时候就不需要密码了,但是在ubuntu下面的时候adduser是交互式的创建用户,会提示用户去输入密码, 注释等其他的一些信息
R 用户信息获取
id 查看当前登录用户信息
id 用户名 查看对应用户的用户信息
D 删除用户
userdel
userdel a 删除a用户
userdel -r a
*删除a用户并且删除a的家目录和邮件目录(强烈建议使用这个)
U 修改用户
su 切换当前登录用户
su - a 完全切换,不继承上一个用户的环境变量,即sbin目录下的命令用不了
su a 不完全切换,继承上一个用户的环境变量,可以用sbin目录下的命令
passwd 修改用户密码
passwd a 修改a用户密码
passwd -l a
临时关闭用户,或修改/etc/shadow第二个字段加*/!!
passwd -u a
释放临时关闭用户,或者删除/etc/passwd第二个字段的*/!!
usermod 修改用户信息
-u 修改UID
sudo usermod -u 1004 u3
把u3用户的uid改为1004
ps: 这个uid可以不存在
-g 修改GID
sudo usermod -g 1001 u3
把u3用户的gid改成1001
ps: 这个gid必须存在
-d 修改家目录
sudo usermod -d /u1 u3
把u3用户的家目录改成/u1, 配置, 文件不会自动完成
-s 指用bash
usermod -G u1 a 把a用户添加进u1用户组
锁定用户密码 usermod -L,用户无法通过密码来登录,但是可以通过别的方式登录,比如ssh证书
解锁用户密码 usermod -U
设定账户过期日期 usermod -e "2014-01-01" <name>
清除账户过期日期 usermod -e "" <username>
设定账户的初始组 usermod -g <group name>
把用户添加进某个组或者某几个组 usermod -a -G g1,g2,g3 <username>
给用户改名 usermod -l <new name> <current name>
sudo 授权
创建普通用户默认没有进行sudo授权, 所以登录不能使用sudo命令
sudo 只能执行外部命令, 并且只能执行 secure_path 变量保存目录里的命令
授权流程:
切换root登录(或者具有root权限的用户才能授权):
su root
或
sudo -i
修改sudo配置
vim /etc/sudoers
或
visudo
加入授权用户到配置文件
tom ALL=(ALL:ALL) ALL 在93行左右
给tom用户sudo授权
%tom ALL=(ALL:ALL) ALL
给tom用户组sudo授权
授权单个权限
sudo 权限的表示格式
用户名 机器名=(目标用户名) 命令列表
soul ALL=(root) /bin/ls,/bin/cat
给用户u2分配权限,一部分命令不需要输入密码,一部分命令需要输入密码,可以分开几行来书写
u2 ALL=(root) NOPASSWD: /bin/cat
u2 ALL=(root) /bin/mkdir
3.组管理(PPP5, PPP6)
相关配置文件
/etc/group
/etc/gshadow
vim /etc/group
第一列:组名
第二列:密码,x代表密码在/etc/gshadow
第三列:gid
第四列:代表属于这个组的用户名
vim /etc/gshadow
第一列:组名
第二列:密码
第三列:组管理员
第四列:组成员
相关命令
groupadd 添加一新用户组
sudo groupadd g3 创建一个组g3
groupdel 删除一用户组
sudo groupdel g3 删除用户组g3
ps: 不能删除一个基本组, 要先删除这个用户, 才能删除这个用户的基本组
groupmod 修改用户组信息
sudo groupmod a1 -g 1003 把a1的gid修改为1003
gpasswd 修改用户组密码
gpasswd a1 修改a1的组密码
gpasswd -a a root 把a用户放进root用户组
gpasswd -A a root 把a用户作为root用户组的管理员
gpasswd -A a,b root 把a, b用户作为root用户组的管理员
gpasswd -A "" root 清空root组的管理员
gpasswd -d a root 把a用户从root用户组里删除
gpasswd -M u1,u2 g1 把u1,u2用户添加到g1组里面
newgrp root 把当前用户临时添加进root用户组,重新登录失效
id 显示用户的ID和组ID
-------------------------------------------------------------------------------
tips: 组管理可以同时存在多个, 但是只有root有权限取设置组管理员
用命令添加组管理员的话, 会覆盖, 可以手动取修改文件/etc/gshadow
组管理可以添加和删除组员
组管理员可以删除其他的组管理员, 只是删除这个组管理员的普通成员身份, 还是具有管理员的权限
组管理员可以把自己从这个组里面删除
-------------------------------------------------------------------------------
手工创建用户
第一步:在/etc/passwd添加一行信息
bean:x:1003:1003::/home/bean:/bin/bash
第二步:修改/etc/shadow的信息
复制当前的普通用户那一行, 再进行相对应的修改
第三步:在/etc/group添加组的信息
bean:x:1003:
第四步:在/etc/gshadow添加组的密码信息
bean:!::
第五步:创建家目录
mkdir /home/bean
第六步:把用户的环境变量文件复制到家目录
cp /etc/skel/.bash* /home/bean
chown bean:bean /home/bean/ -R
chmod 700 /home/bean/ -R
第七步:创建用户的邮件文件
touch /var/mail/bean
chown bean:bean /var/mail/bean
chmod 660 /var/mail/bean
============================================================================
二、Linux权限
1 | ls -hl /tmp/readme.txt |
二进制转八进制:
8421
000 0 ---
001 1 --x
010 2 -w-
011 3 -wx
100 4 r--
101 5 r-x
110 6 rw-
111 7 rwx
rwx, r-x, r-x
421 401 401
7 5 5
chmod(PPP9) 修改权限的命令
chmod u+x,g+r,o-r file
chmod u=rwx,g=rw,o=r file rwx rw- r--
chmod 755 file rwx r-x r-x
chmod 755 dirs -R dirs目录下面所有文件的权限修改为755
权限判断的顺序
先判断是否是文件的所有人,如果是,则执行所属人的权限后结束,
如果不是所有人,则判断是否所属组(可以是主组也可以是辅助组),如果是,则执行所属组的权限后结束,
如果不是则执行其他人的权限后结束。
公开的文件夹, 不要乱加权限, 给的最大权限不要超过755, 其他用户加w权限要谨慎
就算给其他用户只给了3的权限, 别人也能进来修改文件强制保存,
把文件变成别人的
chown 修改文件用户所属
必须具有root权限才能修改
sudo chown tom file 修改file文件所属用户为tom
sudo chown :tom file 修改file文件所属组为tom
sudo chown tom:jack file 修改file文件的所属用户为tom,所属用户组为jack
sudo chown jack.root dirs -R 修改dirs目录下面所有文件的所属用户为jack,所属用户组为root
-------------------------------------------------------------
umask 默认创建文件或文件夹权限掩码
管理员默认umask为022
普通用户默认umask为002
普通用户默认创建文件夹权限是777,而掩码设置为002,则要减去掩码,默认创建文件夹权限则变成775
普通用户默认创建文件权限是666,而掩码设置为002,则减去掩码,默认创建文件权限为664
root默认创建文件夹权限是777,而掩码设置为022,则要减去掩码,默认创建文件夹权限则变成755
root默认创建文件权限是666,而掩码设置为022,则减去掩码,默认创建文件权限为644
默认权限与掩码进行异或, 得出真实创建文件或文件夹的权限
影响创建文件或文件夹的默认权限
修改只是临时,只影响当前进程
umask 查看当前权限掩码
0777 111 111 111 异或
0002 000 000 010
111 111 101
异或: 相同为0, 不同为1
umask 0077 修改当前权限掩码
-------------------------------------------------------------
特权位
针对命令文件,设定setuid、setgid
命令文件设定setuid、setgid
没加特权位之前,命令运行的时候所采用的身份是运行者的身份
添加了特权位之后,命令运行的时候采用的身份不再是运行者的身份,而是命令本身的所属者
例:passwd 文件
ls -al /usr/bin/passwd
针对目录设定setgid
设定了组的特权位后,在该文件夹下创建子文件或子目录,它们自动继承文件夹的所属组的身份,子目录会继承目录的特权位
chmod u+s/g+s file 给file设置特权位
chmod u-s/g-s file 给file取消特权位
例: tom用户指定mary可以在tom目录下创建文件
adduser tom
adduser mary
mkdir /test/{tom,mary} -p
sudo chown tom:tom /test/tom -R
sudo chown mary:mary /test/mary -R
sudo chmod 700 /test/{tom,mary} -R
sudo cp /usr/bin/touch /test/mary/tomCreate
sudo chown tom:tom /test/mary/tomCreate
sudo chmod 755 /test/mary/tomCreate
sudo chmod u+s /test/mary/tomCreate
su - mary
/test/mary/tomCreate /test/tom/mary.file
su -
su - tom
-rw-rw-r-- 1 tom mary 0 12月 9 21:40 mary.file
查看新创建的文件的所有者和所属组是谁,会看到所属组为mary
针对目录的特权位
只能对目录设置组特权,
任何用户在此目录创建文件的所属用户组为目录的所属用户组(root用户也不行)
组特权为只能管理到他的下面一级, 更里面的文件夹不能管理到
-------------------------------------------------------------
粘贴位(sticky)
防止其它用户删除文件,针对其它用户,管理员和本人可以删除,针对目录有效,文件没有用
chmod o+t dirs 给dirs目录设置粘贴位
例:
cd /
ls -l查看tmp目录具有的权限
创建文件/tmp/uplooking.txt
chmod 777 /tmp/uplooking.txt
su - tom
rm /tmp/uplooking.txt 看是否可以?
exit
sudo chmod o-t /tmp
su - tom
rm /tmp/uplooking.txt 看是否可以?
sudo chmod o+t /tmp
想想中间的原理是什么?
两个特殊权限都是在x位上,为了区分权限,如果在某一位有x权限,对应的特殊权限就是小写的,
如果没有x权限,对应的特殊权限就是大写的,sS, tT
chmod u-x tmp/
ll tmp -d
drwSrwxrwt. 16 root root 4096 12月 9 21:55 tmp
-------------------------------------------------------------
基本权限只能表示三类权限,如果对权限的需求超过三种,那么基本权限就无法满足需要了,
这个时候可以使用扩展的权限,请参考拓展部分内容。
-------------------------------------------------------------
文件特殊属性
lsattr 查看文件特殊属性
chattr 添加或修改文件特殊属性
sudo chattr +i file 添加i属性,管理员也不得更改
sudo chattr +a file 只能追加内容,不得修改内容,如果有i属性,先取消i,a属性才有用
sudo chattr -i/-a file 取消文件特殊属性
例:
touch /tmp/uplooking.txt
chmod 777 /tmp/uplooking.txt
sudo chattr +i /tmp/uplooking
vim /tmp/uplooking 看各种保存是否能成功(>, >>)
sudo chattr +a /tmp/uplooking 看是否能成功?
sudo chattr -i /tmp/uplooking
sudo chattr +a /tmp/uplooking 看是否能成功?
vim /tmp/uplooking 编辑文件,各种保存看是否能成功,
且文件中并没有提示这是一个只读文件
echo "hello world" >> /tmp/uplooking 看是否能成功
PPP10 -> PPP16
===============================================================================
三、环境变量、命令别名与命令历史
env
显示当前shell定义的环境变量,包括当前用户的环境变量
set
显示当前shell定义的私有变量,包括用户环境变量,按变量名称排序
export
显示当前导出成用户变量shell变量,并显示变量的属性,按变量名称排序
用户环境变量相关配置文件
路径:/home/用户名/ 或 /root/
.bash_history 用户退出登录之后记录之前的历史命令,logout后才会把当前命令历史添加到此文件
.bash_logout 用户退出登录时执行的代码,前提是logout退出或su切换用户用exit或logout才会生效
.bash_profile 用户的环境变量常规设定的地方,用户登录时执行
.bashrc 命令别名的设定地方,打开终端时执行
全局环境变量相关配置文件
/etc/bashrc 和上述一样,只不过这是全局,所有用户都影响
/etc/profile
source /etc/profile 立即生效对/etc/profile文件的修改
. /etc/profile 功能同上
命令历史
history 查看当前用户的历史命令
!! 重复执行上一条命令
!a 重复执行上一条以a为首的命令
!100 重复执行第100条命令
!$ 获取上一条命令的参数,多用于获取路径
history 10 显示最后10条命令历史
history -w b.history 把当前命令历史写到b.history文件中
history -r a.history 把a.history的命令读到命令历史列表中
history -c 清除命令历史
命令别名
alias 列出目前所有的别名设置
alias ls='ls -l' 创建ls -l的别名为ls, 只在本shell生效,而且重启终端即失效
unalias ls 释放ls -l的别名
echo "set -o vi" >> ~/.bashrc
用命令别名去快速的挂载和取消挂载
alias ms='sudo mount 192.168.0.183:/ /guazai'
alias ums='sudo umount /guazai'
. ~/.bashrc
永久生效就把alias创建加入到~/.bashrc里即可
bash快捷键
tab 一次补完命令行或文件名,二次可以列出所有匹配的选择
ctrl+c 结束当前的任务
ctrl+a 跳到行首
- 本文标题:linux用户管理
- 本文作者:yichen
- 本文链接:https://yc6.cool/2020/08/03/linux用户管理/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
1.sed的常用命令的使用
2.linux根下目录文件介绍
3.vim的使用
4.linux中丢失grub.cfg引导文件修复
5.linux系统管理
6.linux磁盘管理
7.磁盘命令lvm
8.linux软件管理