用户管理以及文件管理是linux中核心部分,高效和安全的使用会起到事半功倍的效果
在系统中完成以下用户操作
1.建立用户组Manufacture, Finance, Technology并满足以下要求
Manufacture组id为8000
Finance组id为8001
Technology组id为8002
2.建立westosuser , linux, lee, wes tosadmin等用户完成以下要求:westosuser用户的附加组为Manufac ture和Technology,lee的主组Finance,附加组为Technology, lee的uid和gid必须一致。linux为系统账号不能直接被操作者使用
westosadmin用户不属于以上三个组内,但是可以在系统中自由的管理用户
3.*以上用户密码均为westos ,井要求用户首次登陆时强制修改密码
*设定以上用户密码必须在30天内进行修改,并在过期前2天发出警告
4.建立目录完成以下要求
*新建目录/WESTOS_ Manufacture , /WESTOS_ Finance ,
/WESTOS _Technology, /WESTOS_Public
/WESTOS_Manufacture目录是Manufacture内的数据存储目录。
只能被Manufacture内的人员读写,并且在sc中建立的文件都属于Manufacture内。
/WESTOS_ Finance目录是Finance组的数据存储目录.只能被Finance内的人员读写,并且在Cw中建立的文件都属于Finance组
我们可使用命令groupadd来建立用户组,使用groupdel来删除组。具体使用方法如下:
ugroupadd -g id groupname 建立用户组并指定其组id
groupdel groupname 删除用户组
cat /etc/group 查看用户组信息
这里我们需要一条或几条命令可以实现创建用户的命令以及指定用户的附加组。对应的命令:useradd。其中第三小问:linux为系统账号不能直接被操作者使用,要实现此功能,需要设置该用户shell为/sbin/nologin。第四小问:westosadmin用户不属于以上三个组内,但是可以在系统中自由的管理用户,说明westosadmin是有特权的,要实现此功能,第一时间想到的设计方案是把该用户的uid设为0,因为uid=0的用户是超级用户(root),设置为超级用户后可实现题目中的要求(后面发现不行)。命令具体用法如下:
useradd username ##用户建立
-u id username ##uid 2*16==>uid范围0-65535
-g id username ##主组id
-G id username ##附加组id
-d dir username ##指定用户家目录
-M username #建立用户时不建立家目录
-C word username ##指定用户说明
-s shell username ##指定用shell
#指定test用户的uid为2021
[root@localhost ~]# useradd -u 2021 test
#使用tail命令查看文件最后十行(默认)
#useradd创建的用户会进入/etc/passwd 保存
[root@localhost ~]# tail /etc/passwd
...
test:x:2021:2021::/home/test:/bin/bash
[root@localhost ~]# id test
uid=2021(test) gid=2021(test) groups=2021(test),1000(jeff)
同时命令 usermod 可以管理用户和用户组的信息我们也会用到
usermod [options] username
-l #更改用户名称
-u id #更改用户id
-g gid #更改主组id
-G gid #更改用户附加组身份
-aG gid #添加用户附加组身份
-C word #更改用户说明
-d dir #更改家目录指向
-md dir #更改家目录指向同时更改家目录名称
-S shell #更改默认shell
-L #冻结账号
-∪ #解锁
[root@localhost ~]# tail /etc/group
jeff:x:1000:test
hello:x:6666;
westos:x:6667:
Manufacture:x:8080:westosuser,lee
Finance:x:8081:westosuser
Technology:x:8082:
westosuser:x:8083:
westosadmin:x:6668:
linux:x:8084:
test:x:2021:
##给用户test添加组名为jeff的附加组
[root@localhost ~]# usermod -aG jeff test
或
[root@localhost ~]# usermod -aG 1000 test
用id命令查看,发现多了一个jeff的属组
[root@localhost ~]# id test
uid=2021(test) gid=2021(test) groups=2021(test),1000(jeff)
这里我们需要用到设定及修改用户密码的命令:passwd或chage主要应用方法如下表:
交互式过程
passwd lee #只有root可以执行"echo 123| passwd --stdin lee"
passwd #普通用户改密码
Changing password for user lee.
Current password: #输入原始密码
New password: #输入新密码(8位以上无序数字+无序字母组合)
Retype new password: ##重复输入
passwd: all authentication tokens updated successfully.
#冻结认证)
passwd -l lee ##冻结账号认证
passwd -u lee ##解锁账号认证
#密码删除)
passwd -d lee
#密码使用天数
*从1970-1-1算其到今天的时间
passwd -e lee #修改默认使用时间为0
chage -d 0 lee ##账号必须改密码才能登陆系统
密码最短有效期
passwd -n 1 lee ##lee在1天内不能改密码
chage -m 1 lee
#密码最长有效期
passwd -x 40 lee ##40天内1 ee用户必须更新密码否则会被冻結
chage -M 30 lee
#密码过期警告
passwd -w 2 lee #账号过期前警告时间
chage -W 1 lee
#认证非活跃天数
passwd -i 2 Lee #账号认证最大时间超过后还能用多久
#账号认证到期时间
chage -E "2020-05-11" #到2020-5-11这天账号会被冻结
首先理解每个文件都有三个身份管理它,用户,用户组,属组
以file_system.sh文件为例
chmod 控制用户对文件的权限的命令
这里我们对权限位理解一下
r 读 设置为可读权限
w 写 设置为可写权限
x 执行权限 设置为可执行权限
X 特殊执行权限 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
s setuid/gid 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
t 粘贴位 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位
此篇主题是作业,chmod命令具体用法可以参考转载的博客
例1:
chmod u-rw /mnt/westos1 #给/mnt/westos1文件(目录)的属主减去读和写的权限
chmod a+r /mnt/test.sh #给/mnt/test.sh 的属主、属组、附加组添加查看文件的权限
chmod g+s /root/yongyoulinux #给yongyoulinux.sh文件的属组设置粘贴位,使得目录下创建的所有文件以后都属于此属组
chown 改变文件的属主和属组
用法:
chown -[option] user.grouper file
例2:
chown westos /mnt/test #更改此目录属主为westos
chown -R westos /mnt/test #更改此目录及目录下所有文件的属主为westos(新写入的文件属主不会变)
chgrp 改变文件属组
用法:
chgrp 属组 文件
chgrp westos /mnt/westos #更改属组为westos
在求解问题之前,我们需要做一些准备工作以便于能够更直观的感受到用户的变化过程,在这里我们会用到监控命令watch,想要看到用户、用户组、以及用户密码状态以及用户家目录的变化,我们需要对/etc/passwd、/etc/group、/etc/shadow、/home这四个部分的内容进行监控,指令为:
watch -n 1 "tail -n 3 /etc/passwd /etc/group /etc/shadow;ls -l /home"
其中watch所监控的内容默认情况下为两秒钟一次更新,我们在这里设置为1秒:watch -n 1;另外,我们用tail -n 3来显示后面三个指定文件内容的后三行,当然,显示的行数可以自己设置。执行该指令后所显示的内容如下:
由于需要的命令比较多我们这里还是采用脚本来实现项目
vim file_system.sh
(具体代码分散在具体步骤了)
#!/bin/sh
groupadd -g 8000 manufacture
groupadd -g 8001 Finance
groupadd -g 8002 Technology
#/etc/group 文件是用户组配置文件,即用户组的所有信息都存放在此文件中
cat /etc/group
Manufacture:x:8080:westosuser,lee
Finance:x:8081:westosuser
Technology:x:8082:
# useradd user westosuser linux lee westosadmin
useradd westosuser
useradd westosadmin
useradd -g Finance -G Manufacture -u 8001 lee
useradd -u 10 -M -s /sbin/nologin linux
usermod -aG 8080,8081 westosuser
尝试给westosadmin用户的uid设置为0(root超级用户)
发现useradd是不行的,接着尝试先创建用户,再usermod修改也是不行的,提示uid已存在。
如果不用脚本的话,我们也可以使用交互式的 visudo命令( #此命会作用是编辑/etc/sudoers并提供语法检测)
这里我们采取往/etc/sudoers里面插入数据完成要求,
这里采用的是通过sed命令往一百行后面加入一行 来达到我们的目的
#add priority for user westosuser
sed -i '100a\westosuser localhost=NOPASSWD: /usr/sbin/useradd, /usr/sbin/userdel' /etc/sudoers
#echo "westosuser localhost=NOPASSWD: /usr/sbin/useradd, /usr/sbin/userdel" >> /etc/sudoers
这里使用for循环实现westosuser,linux,lee,westosadmin四个用户的密码为westos,并且必须在30天内进行修改密码,并在过期前2天发出警告
# set password for sers
for i in {
westosuser,linux,lee,westosadmin};
do echo "westos"| passwd --stdin $i;
passwd -e $i;
chage -d 0 -M 30 -W 2 $i;
done
mkdir /WESTOS_Manufacture /WESTOS_Finance /WESTOS_Technology /WESTOS_Public
#4 only groupers can read and write
for n in {
Manufacture,Finance,Technology}
do chgrp -R $n /WESTOS_$n;
chmod 770 /WESTOS_$n;
chmod g+s /WESTOS_$n;
done
#满足了WESTOS_Public为公司人员公共目录,可以被公司任何员工读写,但是只能删除自己的文件
chmod 777 /WESTOS_Public
chmod o+t /WESTOS_Public
#通过setfacl 实现westadmin用户对 /WESTOS_Manufacture等目录可以做任何操作(rwx)
setfacl -m user:westosadmin:rwx /WESTOS_Manufacture /WESTOS_Finance /WESTOS_Technology /WESTOS_Public
可以通过getfacl来查看是否赋权成功
getfacl --omit-header /WESTOS_Manufacture /WESTOS_Finance /WESTOS_Technology /WESTOS_Public
以上就是这次项目作业的全部过程了。里面知识点比较多,需要我们多加练习,加油吧干饭人。 另外用户管理十分重要,注意对权限的分配才能为生产环境规避风险。