linux 入门第四天_用户管理,su,sudo,alias
特殊权限
SUID: 让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限,SUID对目录是无效的
SGID : 文件:如果SGID设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有效用户组(effective group)将会变成该程序的用户组所有者(group id); 目录:如果SGID是设置在某目录上,则在该目录内所建立的文件或目录的用户组,将会是该目录的用户组。 SGID多用在特定的多人团队的项目开发上,在系统中用得较少
STICKY : 只针对目录有效,在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权力删除。
rwsrw-r-- 表明有suid标识,
用户和用户组
linux使用文件保存用户信息 :
文件
# /etc/passwd 用户账户信息。
# /etc/shadow 安全用户账户信息。
# /etc/group 组账户信息。
# /etc/gshadow 安全组账户信息。
# /etc/default/useradd 账户创建的默认值。
# /etc/skel/ 包含默认文件的目录。
# /etc/login.defs Shadow 密码套件配置。
daemon,,,:/var/lib/colord:/usr/sbin/nologin hplip:x:117:7:HPLIP system user,,,:/var/run/hplip:/bin/false geoclue:x:118:124::/var/lib/geoclue:/usr/sbin/nologin gnome-initial-setup:x:119:65534::/run/gnome-initial-setup/:/bin/false gdm:x:120:125:Gnome Display Manager:/var/lib/gdm3:/bin/false rico:x:1000:1000:Rico,,,:/home/rico:/bin/bash 描述 用man 5 passwd查看 /etc/passwd 为每个用户账户包含一行,包含使用冒号 (“:”) 分隔的七个字 段,分别是: · 登录名 · 可选的加密后的密码 #用x占位 · 数字用户 ID · 数字组 ID · 用户名和注释字段 · 用户主目录
· 可选的用户命令解释器 #shell: 壳 bash csh zsh tcsh 还是有很多其他shell,一般bash(ba-shell)用的最多。通过shell和系统进行交互
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
less /etc/shadow rico:$6$S2Aq6b4K$oeTg.glgCUqHg0FzdDnQ0EmmyjaXV1zbhwxmlBTSahzmmbWH8elJbe.D0LJdSsyw9g9Qyuhy3cmT3A0Fbcj6V0:17691:0:99999:7::: 描述 shadow 是一个文件,它包含系统账户的密码信息和可选的年龄信息。 如果没有维护好密码安全,此文件绝对不能让普通用户可读。 此文件的每行包括 9 个字段,使用半角冒号 (“:”) 分隔,顺序如下: 登录名 必须是有效的账户名,且已经存在于系统中。 加密了的密码 请参考 crypt(3) 来了解关于解析此字符串的细节信息。 如果密码字段包含一些不是 crypt(3) 合法结果的字符,比如 ! 或 *,用户 将无法使用 unix 密码登录(但是可以通过其它方法登录系统)。 此字段可以为空,此时认证为特定的登录名时,不要求密码。然而,一些读 取 /etc/shadow 文件的应用程序,在密码字段为空时,可能决定禁止任何访 问。 A password field which starts with an exclamation mark means that the password is locked. The remaining characters on the line represent the password field before the password was locked. 最后一次更改密码的日期 最近一次更改密码的时间,表示从1970年1月1日开始的天数。 The value 0 has a special meaning, which is that the user should change her password the next time she will log in the system. 空字段表示密码年龄功能被禁用。 密码的最小年龄 最小密码年龄是指,用户一次更改密码之后,要等多长时间才再次被允许更 改密码。 空字段或 0 表示没有最小密码年龄。 最大密码年龄 最大密码年龄是指,这写天之后,用户必须更改密码。 这写天之后,密码仍然可用。用户将会在下次登录的时候被要求更改密码。 空字段表示没有最大密码年龄,没有密码警告时间段,没有密码禁用时间 段(请看下边)。 如果最大密码年龄小于最小密码年龄,用户将会不能更改密码。 密码警告时间段 密码过期之前,提前警告用户的的天数(请参考上边的密码的最大年龄)。 空字段或者 0 表示没有密码警告期。 密码禁用期 密码过期(查看上边的密码最大年龄)后,仍然接受此密码的天数(在此期 间,用户应该在下次登录时修改密码)。 密码到期并且过了这个宽限期之后,使用用户的当前的密码将会不能登 录。用户需要联系系统管理员。 账户过期日期 账户过期的日期,表示从1970年1月1日开始的天数。 Note that an account expiration differs from a password expiration. In case of an account expiration, the user shall not be allowed to login. In case of a password expiration, the user is not allowed to login using her password. 空字段表示账户永不过期。 应该避免使用 0,因为它既能理解成永不过期也能理解成在1970年1月1日过 期。 保留字段 此字段保留作将来使用。
ctrl -
ctrl shift +
useradd: 添加用户
# -c 备注 加上备注。并会将此备注文字加在/etc/passwd中的第5项字段中 # -d 用户主文件夹。指定用户登录所进入的目录,并赋予用户对该目录的的完全控制权 # -e 有效期限。指定帐号的有效期限。格式为YYYY-MM-DD,将存储在/etc/shadow # -f 缓冲天数。限定密码过期后多少天,将该用户帐号停用 # -g 主要组。设置用户所属的主要组 www.cit.cn # -G 次要组。设置用户所属的次要组,可设置多组 # -M 强制不创建用户主文件夹 # -m 强制建立用户主文件夹,并将/etc/skel/当中的文件复制到用户的根目录下 # -p 密码。输入该帐号的密码 # -s shell。用户登录所使用的shell # -u uid。指定帐号的标志符user id,简称uid useradd user1 # 添加用户 user1 useradd -d /home/userTT user2
id 查看当前用户
CTRL + D 退出user1用户账号
ls 列出目录(文件夹)中的文件和子目录 -l 长格式列出 -a 显示所有文件,包括隐藏文件和目录(所有以“.”为开始的文件和目录为隐藏文件) 所以ls -la 是列出当前目录中的所有文件和目录,包括隐藏文件和目录 但不是查看文件里面的内容,查看文件的里的内容用的是more,less,cat等命令
userdel : 删除用户
userdel user1 # userdel -r user1 # -r, --remove 用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件必须手动搜索并删除。 # -f, --force 此选项强制删除用户账户,甚至用户仍然在登录状态。它也强制删除用户的主目录和邮箱,即使其它用户也使用同一个主目录或邮箱不属于指定的用户
usermod : 修改用户信息
# -c<备注> 修改用户帐号的备注文字。 # -d登入目录> 修改用户登入时的目录。 # -e<有效期限> 修改帐号的有效期限。 # -f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。 # -g<群组> 修改用户所属的群组。 # -G<群组> 修改用户所属的附加群组。 # -l<帐号名称> 修改用户帐号名称。 # -L 锁定用户密码,使密码无效。 # -s<shell> 修改用户登入后所使用的shell。 # -u<uid> 修改用户ID。 # -U 解除密码锁定。 usermod -G staff user2 # 将 newuser2 添加到组 staff 中 usermod -l newuser1 newuser # 修改 newuser 的用户名为 newuser1 usermod -L newuser1 # 锁定账号 newuser1 usermod -U newuser1 # 解除对 newuser1 的锁定
groupadd : 添加组
groupadd group1 groupadd -g 1000 group1 # 指定gid
groupdel : 删除组
groupdel group1 # 删除组
su与 sudo
su : 切换用户,没有参数时,默认切换为root用户;
su # 切换为root ## 推荐 su - # 切换为root 并加载user1的环境配置 su - user1 # 切换为user1 并加载user1的环境配置
sudo : 让当前用户暂时以管理员的身份root来执行命令。
Ubuntu 默认没有启用root用户, 普通用户执行一些特殊的操作时,使用sudo就可以让普通用户以root用户的身份执行命令
sudo有一个配置文件: /etc/sudoers ; 通过修改配置文件可以让指定用户使用sudo命令
man sudoers # 查看man手册 看下面几行: # Host alias specification # 配置Host_Alias:就是主机的列表 Host_Alias HOST_FLAG = hostname1, hostname2, hostname3 # User alias specification # 配置User_Alias:就是具有sudo权限的用户的列表 User_Alias USER_FLAG = user1, user2, user3 # Cmnd alias specification # 配置Cmnd_Alias:就是允许执行的命令的列表,命令前加上!表示不能执行此命令.命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径! Cmnd_Alias COMMAND_FLAG = command1, command2, command3 ,!command4 # 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表 Runas_Alias RUNAS_FLAG = operator1, operator2, operator3 # User privilege specification # 配置权限的格式如下: # USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG root ALL=(ALL:ALL) ALL 如果不需要密码验证的话,则按照这样的格式来配置 USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG 格式为:用户名(用户别名) 主机名(主机别名)=[(运行用户或是Runas_Alias)可选] [tag可选] 可以执行的命令(或Cmmd_Alias) 这样描述语法很生硬,不易理解,举例子 user1 host1 = /bin/kill # user1 可以在host1上使用命令/bin/kill user1 host1 = NOPASSWD: /bin/kill # user1 可以在host1上使用命令/bin/kill 同时可以不必输入密码(这里就是使用了NOPASSWD # 这个tag,默认是PASSWD) user1 host1 = NOPASSWD: /bin/kill , PASSWORD: /bin/ls # user1 可以在host1上使用命令/bin/kill无需输入密码,但是使用/bin/ls则需要输入密码 user1 host1 = (opterator) /bin/kill # user1 可以在host1上使用命令/bin/kill但是必须是以operator用户运行这个命令,等价于# su -u opertor /bin/kill user1 host1 = (:group_name) /bin/kill # user1 可以在host1上使用命令/bin/kill,且必须以group_name这个用户群组里面的用户来运行。 %group_name host1 = /bin/kill # 所有group_name里面的用户都可以在host1上执行/bin/kill(Linux中一般代表整个用户群组用# %group_name) 再举个实际例子,我之前对sudo su这个命令不理解,为什么我可以直接就su到root用户了呢,连密码都不需要?查看了一下sudoers文件才知道原来里面有这么一行: xxx ALL=NOPASSWD: /bin/su
alias : 给命令起别名
alias ll='ls -alF' alias la='ls -A' alias l='ls -CF'
如果需要别名永久生效,需要保存到 .bashrc 文件