Linux中的用户切换su.
将su可执行文件所属者设置为root的,则执行su时候则拥有了root的权限
切换到root用户下,chown root su 和chmod u+s su来改变su文件的权限
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <pwd.h>
#include <stdlib.h>
#include <assert.h>
#include <shadow.h>
#include <sys/types.h>
#include <termios.h>
int main(int argc, char *argv[])
{char *s = "root";if (argc == 2){s = argv[1];}//取su的第二个参数struct passwd *p = getpwnam(s);//通过次函数来看第二个参数是否存在if (p == NULL){perror("username error");}struct spwd *sp = getspnam(s);if(sp == NULL){perror("userpasswd error");exit(0);}printf("input passwd:");fflush(stdout);struct termios saveold, newreset;tcgetattr(fileno(stdin), &saveold);newreset = saveold;//保存旧的设置newreset.c_lflag &= ~ECHO;char buff[128] = {0};//获取键盘输入密码if (tcsetattr(fileno(stdin), TCSAFLUSH, &newreset) != 0)//消隐设置{perror("wrong happened\n");}else{fgets(buff,128,stdin);buff[strlen(buff)-1] = 0;tcsetattr(fileno(stdin), TCSANOW, &saveold);//恢复原设置}char lt[128] = {0};int i = 0;int num = 0;for(;i<strlen(sp->sp_pwdp);i++)//获取加密密钥{if(sp->sp_pwdp[i] == '$'){num += 1;if(num == 3){break;}}  lt[i] = sp->sp_pwdp[i];}char *pw = crypt(buff,lt);//密钥和明文进行加密生成密文if(strcmp(pw,sp->sp_pwdp) != 0)//系统的和生成密文进行比较{printf("failed\n");exit(0);}printf("success\n");pid_t pid = fork();//产生新进程为用户的bashassert(pid != -1);if (pid == 0){setuid(p->pw_uid);//将现在的root权限修改为切入用户的uidsetenv("HOME",p->pw_dir,1);//设置当前环境变量execl(p->pw_shell,p->pw_shell,(char *)0);//进入用户默认bashperror("exec error");//出错则发出信息,并且终止exit(0);}wait(NULL); //子进程的结束发出SIGCHLD信号清理子进程
}

Linux下su命令的实现相关推荐

  1. Linux下 su命令与su - 命令有什么区别?

    网址:https://zhidao.baidu.com/question/156103424.html Linux中切换用户的命令是su或su -.su命令和su -命令最大的本质区别就是:前者只是切 ...

  2. Linux下su命令无权限

    有时候我们在普通用户下做一些安装或其他操作时,会用到管理员权限,但是此时su命令却报权限不足,如法使用,可是我们单独登陆root用户是可以登陆的,说明用户没有问题,真的是权限问题. 通过chmod u ...

  3. Linux下 su命令与su - 命令的区别

    su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell:而后者连用户和Shell环境一起切换成root身份了.只有切换了Shell环境才不会出 ...

  4. linux su无效_如何处理Linux中su命令无反应的情况

    在前面的文章有介绍过su命令,su命令用于普通用户和超级用户的切换,但在有些系统中,使用su命令无反应,那么遇到这种情况该如何处理呢?下面随小编一起来看看Linux下su命令无反应的处理方法. 出现问 ...

  5. Linux系统su命令的详细用法

    1.命令作用 su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码. 2.使用方式 su [-fmp] [-c command] [-s shell] [--help] [--ve ...

  6. Linux下su与su -命令的区别

    Linux下su与su -命令的区别 在启动服务器ntpd服务时遇到一个问题 使用 su root 切换到root用户后,不可以使用service命令: 使用 su - 后,就可以使用service命 ...

  7. linux中su命令源码,Linux中的su命令的详细解释

    linxu下的su命令的主要作用是变更为其他使用者的身份执行命令,面由学习啦小编为大家整理了linux的su命令的详细解释的相关知识,希望对大家有帮助! 一.Linux中的su命令的详细解释 建议大家 ...

  8. Linux的su命令

    su命令   su(switch user) 用于变更为其他使用者的身份.除 root 外,需要键入该使用者的密码, 使用权限:所有使用者. su [-fmp] [-c command] [-s sh ...

  9. linux root 密码 鉴定故障,linux的su命令鉴定故障

    linux下的su命令有时会出现鉴定故障的问题该怎么解决呢?下面由学习啦小编为大家搜集整理了linux的su命令鉴定故障的相关知识,希望对大家有帮助! linux的su命令鉴定故障一 情况一 有两个用 ...

最新文章

  1. spring boot环境准备及搭建
  2. springboot中的spring-session用mysql实现session共享实践
  3. Wannafly summer camp
  4. PowerDesigner如何导出建表sql脚本(转)
  5. HTML+CSS+JS实现 ❤️canvas 3D立体图片相册幻灯片❤️
  6. rabbitmq的通配符模式(Topic Exchange)的*和#区别
  7. 丰田汽车顶级供应商 Denso 疑遭勒索攻击,被威胁泄露商业机密
  8. 【Tensorlayer系列】深度强化学习之FrozenLake介绍及表格型Q学习求解
  9. 【P2P网络】磁力链接转换为种子文件 magnet to torrent
  10. 软件研发管理体系建设
  11. 泛微oa部署linux步骤,泛微OA流程搭建操作流程
  12. 百人计划(图形部分)Bump Mapping(凹凸贴图映射技术)
  13. 软件销售公司交什么税
  14. Oriented R-CNN完整复现HRSC2016以及训练自己的HBB数据集(DIOR)
  15. 音乐格式如何进行转换,音频格式转换器哪个好
  16. Android app包下fragment详细使用
  17. 易盾php,PHP接入网易易盾验证码
  18. 电路板故障测试仪GR4080软件,电路板维修测试仪是一种的电路板故障检测设备
  19. MyBatis从入门到精通(十):使用association标签实现嵌套查询
  20. Android 控件 RecyclerView

热门文章

  1. 安装gcc提示libmpc.so.3()(64bit) 被 gcc-4.8.5-16.el7.x86_64 需要 libmpfr.so.4()(64bit) 被 gcc-4.8.5-16.el7.x
  2. 基于对蜜蜂需求的模型研究
  3. Android Studio 真机调试vivo系列手机安装失败解决办法
  4. acedSSGet 翻译
  5. 东航航空货运系统技术解析(二)配置服务端与新建界面层
  6. ppt流程图字体太小_PPT基础不好?这5个高大上的PPT技巧,瞬间让老板刮目相看!...
  7. 仿个人税务 app html5_假个税APP蹭热点窃信息,国家税务总局提醒下载正版
  8. SSM框架项目各文件内容及项目实践
  9. 如何使用TA-LIB进行技术分析?
  10. 01-java开发环境的搭建