Linux 学习笔记 -- 第四部分 Linux 使用着管理 -- 第14章 Linux 账号管理与ACL权限设置

来源:互联网 发布:java解压缩gz文件 编辑:程序博客网 时间:2024/05/01 12:51
计算某个日期的积累日数
echo $((date --date="2008/09/04" +%s)/86400 + 1))


查看当前登录的账号所属的所有用户组:groups,第一个输出的用户组为有效用户组
通常有效用户组的作用是新建文件
切换有效用户组:newgrp,切换的用户组必须是已经有支持的用户组,且是以另外一个shell来提供这个功能


新增用户:useradd -[u UID] [-g 初始用户组] [-G 次要用户组] [-mM] [-c 说明栏] [-d 主文件夹绝对路径] [-s shell] 用户账号名
-u 后面接的是 UID,是一组是数字。直接制定一个特定的 UID 给这个账号
  -g 后面接的那个用户组名就是我们上面提到的 initial group
-G 后面接的组名则是这个账号还可以加入的用户组,
  这个参数会修改 /etc/group 内的相关数据
  -M 强制不要创建用户主文件夹(系统账号默认值)!
-m 强制要创建用户主文件夹(一般账号默认值)!
-c 这个就是 /etc/passwd 的第五列的说明内容。可以随便设置
-d 指定某个目录成为主文件夹,而不要使用默认值。务必使用绝对路径!
-r 创建一个系统的账号,这个账号的 UID 会有限制 (参考 /etc/login.defs)
-s 后面接一个 shell,诺没有指定则默认是 /bin/bash
-e 后面接一个日期,格式为 "YYYY-MM-DD",此选项可写入 shadow 第八字段,即账号失效日的设置选项
-f 后面接 shadow 的第七字段选项,指定密码是否会失效。0为立刻失效,-l 为永远不失效 (密码只会
  过期而强制于登录时重新设置而已)

useradd vbird1 
ll -d /home/vbird1
grep 'vbird1' /etc/passwd /etc/shadow /etc/group

useradd -u 700 -g users vbird2 (指定用户组就不创建与账号同名的用户组了)
ll -d /home/vbird2
grep vbird2 /etc/passwd /etc/shadow /etc/group

useradd -r vbird3 (加r为系统账号,不会主动创建主文件夹)
ll -d /home/vbird3
grep vbird3 /etc/passwd /etc/shadow /etc/group


useradd 默认值,参考文件 /etc/default/useradd
useradd -D

UID/GID、密码参数参考文件:/etc/login.defs
cat /etc/login.defs | sed 's/#.*&//g' | sed '/^$/d'


/home/username 下内容参考 /etc/skel/*


修改密码:passwd [--stdin]
 passwd [-l] [-u] [--stdin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号 
-l 是 Lock 的意思,会将 /etc/shadow 第二列最前面加上 ! 使密码失效
-u 与 -1 相对,是 Unlock 的意思!
-S 列出密码相关参数,即 shadow 文件内的大部分信息
-n 后面接天数,shadow 的第 4 字段,多久不可修改密码天数
-x 后面接天数,shadow 的第 5 字段,多久内必须要改动密码
-w 后面接天数,shadow 的第 6 字段,密码过期前的警告天数
-i 后面接“日期”,shadow 的第 7 字段,密码失效日期


passwd username (用root修改指定账户的密码)
passwd (修改当前登录用户的密码)

echo "abc55CC" | passwd --stdin username (直接更新用户密码而不用再次手动修改,不是每个 distribution 都有此参数)


passwd -x 60 -i 10 vbird2
passwd -S vbird2 (打印密码相关信息)


passwd -l vbird2 (是密码失效)
passwd -S vbird2
grep vbird2 /etc/shadow
passwd -u vbird2 (解锁密码)
grep vbird2 /etc/shadow


显示密码参数:chage [-ldEImMW] 账号名
-l 列出该账号的详细密码参数
-d 后面接日期,修改 shadow 的第三字段 (最近一次更改密码的日期),格式 YYYY-MM-DD
-E 后面节日期,修改 shadow 的第八字段 (账号失效日),格式 YYYY-MM-DD
-I 后面接天数,修改 shadow 的第七字段 (密码失效日期)
-m 后面接天数,修改 shadow 的第四字段 (密码最短保留天数)
-M 后面接天数,修改 shadow 的第五字段 (密码多久需要进行更改)
-W 后面接天数,修改 shadow 的第六字段 (密码过期前警告日期)


chage -l vbird2 (列出账户详细密码参数)


useradd agetest
echo "agetest" | passwd --stdin agetest
chage -d 0 agetest


账号数据调整:usermod [-cdegGlsuLU] username
-c 后面接账号的说明,即 /etc/passwd 第五列的说明,可以加入一些账号的说明
-d 后面接账号的主文件夹,即修改 /etc/passwd 的第六列
-e 后面接日期,格式是 YYYY-MM-DD,也就是在 /etc/shadow 内的第八个字段数据
-f 后面接天数,为 shadow 的第七字段
-g 后面街初始用户组,修改 /etc/passwd 的第四个字段,即是 GID 的字段
-G 后面接次要用户组,修改这个用户能够支持的用户组,修改的是 /etc/group
-a 与 -G 合用可增加次要用户组的支持而非设置
-l 后接账号名称,即是修改账号名称,/etc/passwd 的第一列
-s 后面接 Shell 的实际文件,例如 /bin/bash 或 /bin/csh 等
-u 后面接 UID 数字,即 /etc/passwd 第三列的数据
-L 暂时将用户的密码冻结,让他无法登录。其实仅改 /etc/shadow 的密码
-U 将 /etc/shadow 密码列的 ! 去掉

usermod -c "VBird's test" vbird2 (更改账号说明)
grep vbird2 /etc/passwd

usermod -e "2009-12-31" vbird2 (更改账号失效日期)
grep vbird2 /etc/shadow

ll -d ~vbird3
cp -a /etc/skel /home/vbird3
chown -R vbird3:vbird3 /home/vbird3 (递归更改)
chmod 700 /home/vbird3
ll -a ~vbird3 


usermod -G users -a username ( 将用户组 users 追加至 username 的次要用户组中,但是不删除 username 原先的次要用户组)


删除用户相关数据:userdel [-r] username
-r 连同用户的主文件夹也一起删除

相关数据有:
用户账号/密码相关参数:/etc/passwd, /etc/shadow
用户组相关参数:/etc/group,/etc/gshadow
用户个人文件数据:/home/username,/var/spool/mail/username


如果想要完整地将某个账号删除,最好可以在执行 userdel -r username
之前,先以"find / -user username"查出整个系统内属于 username 的文件,
然后再进行删除。


一般身份用户账号更改与查询命令
查阅用户相关信息:finger
-s 仅列出用户的账号、全名、终端机代号与登录时间
-m 列出与后面接的账号相同者,而不是利用部分对比(包括全名部分)


finger vbird1


finger (找出目前在系统上面登录的用户与登录时间)


修改finger命令的Name、Office、Office Phone、Home Phone
chfn [-foph] 账号名
-f 后面接完整的大名
-o 你办公室的房间号码
-p 办公室的电话号码
-h 家里的电话号码

chfn username (修改username的)

chfn (修改当前登录的)


改变shell:chsh [-ls]
-l 列出目前系统上面可用的 shell,其实就是 /etc/shells 的内容
-s 设置修改自己的 shell


chsh -l

chsh -s /bin/csh; grep vbird1 /etc/passwd
chsh -s /bin/bash

ll $(which chsh)


查询账户的 UID/GID 信息:id [username]
id
id vbird1


新增用户组:groupadd [-g gid] [-r] 用户组名
-g 后面接某个特定的 GID,用来直接给予某个 GID
-r 新建系统用户组。与 /etc/login.defs 内的 GID_MIN 有关

groupadd group1
grep group1 /etc/group /etc/gshadow


修改用户组参数:groupmod [-g gid] [-n groupname] 用户组名
-g 修改既有的GID
-n 修改既有的组名


groupmod -g 201 -n mygroup group1
grep mygroup /etc/group /etc/gshadow


删除用户组:groupdel [groupname] 删除之前必须确认 /etc/passwd 内的账号没有任何人
使用该用户组作为初始用户组才行,如果有的话,可以:
1.修改该用户的GID
2.删除该用户


用户组管理员功能:
关于系统管理员(root)做的动作:
gpasswd groupname 
gpasswd [-A user1,...] [-M user3,...] groupname
gpasswd [-rR] groupname
若没有任何参数,表示给予 groupname 一个密码(/etc/gshadow)
-A 将 groupname 的主控权交由后面的用户管理(该用户组的管理员)
-M 将某些账号加入这个用户组当中!
-r 将 groupname 的密码删除
-R 让 groupname 的密码栏失效

关于用户组管理员(Group administrator)做的操作
gpasswd [-ad] user groupname
-a 将某位用户加入到 groupname 这个用户组
-d 将某位用户删除出 groupname 这个用户组

groupadd testgroup 
gpasswd testgroup


gpasswd -A vbird1 testgroup 
grep testgroup /etc/group /etc/gshadow


su vbird1
id
gpasswd -a vbird1 testgroup
gpasswd -a vbird3 testgroup
grep testgroup /etc/group


创建一个无登录权限的用户:useradd -c "3rd user" -s /sbin/nologin myuser3


主机的具体权限规划:ACL的使用


启动 ACL :
mount 
dumpe2fs -h /dev/sda2 | grep 'acl'
如果有,表示 ACL 已启动,如果没有,则:
mount -o remount,acl /  (/表示根目录)
mount
如果想每次开机都生效,则:
vim /etc/fstab
LABEL=/1 / ext3 defaults,acl 1     1


ACL 的设置技巧:getfacl,setfacl
setfacl:[-bkRd] [{-m|-x} acl 参数] 目标文件名  (设置某个目录/文件的ACL规定)
-m 设置后续的 acl 参数给文件使用,不可与 -x 合用
-x 删除后续的 acl 参数,不可与 -m 合用
-b 删除所有的 ACL 设置参数
-k 删除默认的 ACL 参数
-R 递归设置 acl ,亦即包括子目录都会被设置起来
-d 设置默认 acl 参数!只对目录有效,在该目录新建的数据会引用此默认值


touch acl_test1
ll acl_test1


setfacl -m u:vbird1:rx acl_test1
ll acl_test1


setfacl -m u::rwx acl_test1
ll acl_test1


setfacl -m g:mygroup1:rx acl_test1
getfacl acl_test1


mask的意思是用户或组所设置的权限必须要存在于 mask 的权限设置范围内
才会生效,此即有效权限(effective permission)


setfacl -m m:r acl_test1
getfacl acl_test1

setfacl -m d:u:myuser1:rx /srv/projecta
setfacl -b /srv/projecta




getfacl filename 参数与 setfacl 几乎相同 (获取某个文件/目录的ACL规定)


用户身份切换
su [-lm] [-c 命令] [username]
- 单纯使用 - 如 "su - ",代表使用 login-shell 的变量文件读取方式来
 登录系统;若用户名称没有加上去,则代表切换为 root 的身份。
-l 与 - 类似,但后面需要加欲切换的用户账号,也是 login-shell 的方式。
-m -m 与 -p 是一样的,表示使用目前的环境设置,而不读取新用户的配置文件。
-c 仅进行一次命令,所以 -c 后面可以加上命令。

su
id
env | gerp 'vbird1'
exit
(单纯使用"su"切换成为 root 的身份,读取的变量设置方式为 non-login shell
的方式,这种方式下很多原本的变量不会被改变,因此很多 root 惯用的命令就
只能使用绝对路径来执行了)


su -
env | grep root
exit
(切换为 root 并开始操作系统,如果想要离开则利用exit)


head -n 3 /etc/shadow
su - -c "head -n 3 /etc/shadow"
(-c 执行一次 root 才能执行的命令)


su -l dmtsai
su - 
id sshd
su -l sshd
finger sshd
exit
exit
exit
(切换为一般用户)


sudo [-b] [-u 新用户账号]
-b 将后续的命令让系统自行执行,而不与目前的 shell 产生影响
  -u 后面可以接欲切换的用户,若无此项则代表切换身份为root


sudo -u sshd touch /tmp/mysshd
ll /tmp/mysshd
(以 sshd 身份新建文件,用户还是 root)


sudo -u vbird1 sh -c "mkdir ~/vbird1/www; cd ~vbird1/www; \
echo 'This is index.html file' > index.html"
ll -a ~/vbird1/www
(以 vbird1 身份执行一串命令)


除了 root 之外的其他账号,若想要使用 sudo 执行属于 root 的权限
命令,则 root 需要先使用 visudo 去修改/etc/sudoers,让该账号能够
使用全部或部分的 root 命令功能。


visudo :
1.单一用户可进行 root 所有命令与 sudoers 文件语法
visudo
vbird1   ALL=(ALL) ALL
su -l vbird1
tail -n 1 /etc/shadow
sudo tail -n 1 /etc/shadow


2.利用用户组以及免密码的功能处理visudo
visudo
%wheel     ALL=(ALL)ALL
usermod -a -G wheel pro1
su -l pro1
sudo tail -n 1 /etc/shadow
su -l pro2
sudo tail -n 1 /etc/shadow

%wheel     ALL=(ALL)NOPASSWD:ALL (不需要输入用户密码即可执行命令)


3.有限制的命令操作
visudo 
myuser1    ALL=(root)!/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \
       !/usr/bin/passwd root


4.通过别名设置visudo
visudo
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Zz-z]*, \
     !/usr/bin/passwd root
ADMPW   ALL=(root)    ADMPWCOM


5.sudo 的事件间隔问题
如果两次 sudo 操作的间隔超过 5 分钟,那就得要重新输入一次你的密码了

6.sudo 搭配 su 的使用方式
visudo
User_Alias ADMINS = pro1, pro2, pro3, myuser1
ADMINS   ALL=(root)    /bin/su -
sudo su - 


特殊的 shell,/sbin/nologin
/etc/passwd中的第7个字段,系统账号的 shell 就是使用 /sbin/nologin,因为系统账号是不需要登录的!
使用这个 shell 的用户即使有了密码也无法登陆。
所谓的“无法登陆”指的仅是这个用户无法使用 bash 或其他 shell 来登录系统而已,并不是说这个账号
就无法使用其他的系统资源。


利用 /etc/nologin.txt 这个文件告诉用户不能登录的原因。


PAM 模块
PAM 可以说是一套应用程序编程接口,它提供了一连串的验证机制,只要用户将验证
阶段的需求告知 PAM 后,PAM 就能够回报用户验证的结果(成功或失败)。

除了修改用户的~/.bashrc 配置文件之外,其实系统管理员可以统一通过 PAM 来管理:
vim /etc/security/limits.conf
#账号 限制依据限制项目 限制值
vbird1   soft fsize   90000
vbird1 hard fsize   100000
(vbird1 这个用户只能新建 100MB 的文件,且大于 90MB 会警告)
# 第一字段为账号,或者是用户组!若为用户组则前面需要加上 @ ,例如 @projecta
# 第二字段为限制的依据,是严格 (hard) 或者警告 (soft)
# 第三字段为限制项目
# 第四字段为限制的值,单位为KB

su -l vbird1
ulimit -a 
dd if=/dev/zero of=test bs=1M count=110
ll -k test
vim /etc/security/limits.conf

@pro1   hard maxlogins1
# 对初始用户组有效
# 如果你尝试多个 pro1 的登录时,第二个以后就无法登录了
# 而且在 /var/log/secure 文件中还会出现如下的信息:
# pam_limits (login:session) : Too many logins (max 1) for pro1


PAM 日志记录 /var/log/secure /var/log/messages

Linux 主机上的用户信息传递
查询用户:
last 查询用户登录历史记录
lastlog 查询每个用户最近登录的时间
w 查询目前在系统上面的用户
who 查询目前在系统上面的用户

用户对谈:
write 用户账号 [用户所在终端接口] (输入信息后按 Ctrl+d 结束输入)
mesg [y|n] 解开/关闭对谈功能(对来自root的信息无效,root如果 mesg 为 y,
  任何人不能向 root 发送信息)
wall 信息 向系统上面的所有用户传送信息(广播)

用户邮件信箱:
mail vbird1 -s "nice to meet you"
hello .....   (发送邮件)

mail -s "bashrc file content" vbird < ~/.bashrc (利用数据流发送邮件)


mail (查看邮箱)


/var/spool/mail/vbird1 信箱
/home/vbird1/mbox 收信箱
mail -f /home/vbird1/mbox


手动新增用户
一些检查工具:
pwck 检查 /etc/passwd 这个账号配置文件内的信息,与实际的
    主文件夹是否存在等信息,还可以比较 /etc/passwd /etc/shadow 的信息是否一致。

pwconv 主要目的是将 /etc/passwd 内的账号与密码移动到 /etc/shadow 当中


pwunconv 相对于 pwconv,pwunconv 则是将 /etc/shadow 内的密码列数据写回 /etc/passwd 
中,并且删除 /etc/shadow 文件。


chpasswd 可以读入未加密前的面膜,并且经过加密后,将加密后的密码写入 /etc/shadow 当中。
echo "dmtsai:abcdefg" | chpasswd -m (MD5加密)


特殊账号(如纯数字账号)的手工新建
1.先新建所需要的用户组(vim /etc/group);
2.将 /etc/group 与 /etc/gshadow 同步 (grpconv);
3.新建账号的各个属性 (vim /etc/passwd);
4.将 /etc/passwd 与 /etc/shadow 同步 (pwconv);
5.新建该账号的密码 (passwd accountname);
6.新建用户主文件夹 (cp -a /etc/skel /home/accountname);
7.更该用户主文件夹的属性 (chown -R accountname:group /home/accountname)。


vim /etc/group
在最后一行加入 normalgroup:x:520
grpconv
grep 'normalgroup' /etc/group /etc/gshadow
vim /etc/passwd
在最后一行加入 normaluser:x:700:520::/home/normaluser:/bin/bash
pwconv
grep 'normaluser' /etc/passwd /etc/shadow
passwd normauser

cp -a /etc/skel /home/normaluser
chown -R normaluser:normalgroup /home/normaluser
chmod 700 /home/normaluser
0 0
原创粉丝点击