在登录时以root身份运行脚本(没有sudoer用户,shell会话)

很像/etc/profile~/.profile但是由root运行而不是用户正在登录。 /etc/rc.local在启动后运行但我需要在登录前运行脚本。 用户不是一个sudoer。

谢谢!

回到sudoers方法,我想你在放弃之前几乎就在那里。 看看你的最新评论,我只是想解决一些可能会解决问题的方法:

如果以root身份运行脚本,则无需从其中调用sudo。

我有一个这样的脚本:

 #! /bin/bash echo $USER whoami 

如果我运行sudo ./myscript我看到root返回了这两个。 运行脚本的会话是root shell。

简而言之,这意味着您在脚本中执行的所有操作都具有root权限。 你不需要调用sudo (不是它应该受到伤害 – root通常具有sudo权限)。

所以编写你的脚本,将它chownrootchmod700 (所以只有root可以运行,读取或编辑它),然后只允许你的用户通过sudoers运行它。 这应该工作。

如果它不起作用,那么脚本可能是一个更大的问题,而不是权限框架。 我建议给用户提供完全的sudo访问权限(添加到admin组是最简单的方法),然后运行你的脚本。

步骤1.使用任何编辑器使用bind命令创建脚本。 例如:

 sudo emacs bind_user_directories.sh 

内容:

 #!/bin/bash #NOTE: this file would be placed in /usr/local/sbin/ folder as bind_user_directories.sh #alternatively it could be placed in /etc/init.d/ ... (I guess) ### BEGIN INIT INFO # Provides: bind_user_directories # Required-Start: # Required-Stop: # Should-Start: $named # Default-Start: 0 2 3 4 5 6 (I guess...) # Default-Stop: 1 # Short-Description: mount --bind for a user # Description: runs mount --bind command for certain pre-defined directories for a specific user ### END INIT INFO # What is this? DESC="bind_user_directories" # See how we were called. case "$1" in start) log_progress_msg "bind directories for user..." sudo mount --bind /source/path /target/path log_progress_msg "done: bind directories for user" ;; stop) log_progress_msg "umount --bind directories for user..." sudo umount /target/path log_progress_msg "done: unbind directories for user" ;; restart) $0 stop sleep 1 $0 start ;; *) #log_success_msg "Usage: bind_user_directories {start|stop|restart}" log_success_msg "Usage: service bind_user_directories " exit 1 ;; esac exit 0 

步骤2.保存bind_user_directories.sh并使其可执行:

 chmod a+x bind_user_directories.sh 

步骤3.将其链接到合适的位置,例如/ usr / local / sbin:

 sudo ln -s bind_user_directories.sh /usr/local/sbin/bind_user_directories.sh 

步骤4.创建upstart脚本:

 sudo emacs /etc/init/bind_user_directories.conf 

内容:

 description "runs mount --bind command for certain pre-defined directories for a specific user" start on filesystem and net-device-up IFACE!=lo stop on runlevel [!023456] console output respawn respawn limit 10 5 exec /usr/local/sbin/bind_user_directories.sh start 

如果这对你有用,请告诉我。 您可以在登录后检查系统日志中的消息。(我之前没有测试过,我之前从未实现过这样的任何内容。)如果您改进了解决方案,请在此处分享您的最终解决方案。 谢谢。

在登录前以root身份运行脚本

  1. 您可以使用Upstart启动脚本 。

  2. 您可以将脚本调用添加到现有的kdm / gdm / etc启动脚本中 。

示例: 主题:常见问题:自动启动/自动运行,定期运行 。