有没有一种方法可以让事情只是假设当我运行它们时我以特权管理员(AKA root)的身份运行它们?我知道这可能很危险,但为了方便,我愿意冒这个险。
自从我安装了 Ubuntu 以与 Windows 一起运行以来,我遇到了一个问题,我认为如果安装它来替换其他操作系统也是一样的,安装程序会提示您在输入密码时创建密码用户帐户名,如果您不输入密码而只输入用户帐户名,它最终会说要创建密码。我的比较是在 Windows 和 Mac OS X 中,您永远不会被迫创建密码。
如果您在系统设置 > 用户帐户中删除管理员帐户的密码,则在尝试安装某些内容时将无法进行身份验证,因为它要求输入密码并且根本不输入密码是行不通的,它只会像你输入了一个无效的密码一样。这就是我所说的“被锁定在特权之外”。
我发现每当您安装某些东西或访问某个令人讨厌的地方时都会出现“身份验证”窗口,因为它总是要求您输入密码。
所以我的问题是 - 为什么 Ubuntu 会强制用户在安装时创建密码?
在某些时候,我的应用程序需要执行管理任务,例如在 /etc 中创建文件或使用 root 权限运行命令。
我知道可以做一个问答:
os.popen("pkexec foo bar")
Run Code Online (Sandbox Code Playgroud)
但我也知道这不是可预见的干净方式。对用户来说有些烦人,因为他总是需要重新输入密码,而不是进行类似会话的处理。
我非常乐观,因为我找到了用于身份验证的 python 示例。
这是一个立即生效的简单示例:
import dbus
bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy, dbus_interface='org.freedesktop.PolicyKit1.Authority')
system_bus_name = bus.get_unique_name()
subject = ('system-bus-name', {'name' : system_bus_name})
action_id = 'org.freedesktop.policykit.exec'
details = {}
flags = 1 # AllowUserInteraction flag
cancellation_id = '' # No cancellation id
result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)
print result
Run Code Online (Sandbox Code Playgroud)
我一直很天真地认为在授权后我可以继续使用一些 os.popen() 命令在脚本中。现在我知道了 :(
我可以在上面的示例中看到元组结果,但是在进一步的文档中,我找不到此时可以继续执行的工作代码。
这个结果与我有什么关系?我怎样才能继续执行我需要的任务?是否有提供可用方法的示例的 python 参考?
我尝试使用 dir() 列出授权方法,但找不到任何线索如何继续。
我真的想避免使用我的后备,但这将是我的最后手段。请帮助我以正确的方式做这件事:)
感谢致敬
安德烈 …
有没有办法gksudo在我点击 Sublime Text 图标时自动运行?
我知道这是一个有点基本的问题,也许是一个愚蠢的问题,但我一直无法找到答案。
我知道每个文件都有"Executable"位。
我假设需要的程序,root由root用户和root组拥有的不会有Executable位 forOther并且会阻止非 root 用户执行这些。但是在/bin和/sbin目录中,我看到所有文件都具有类似的权限-rwxr-xr-x
那么究竟是什么决定了用户是否需要拥有 root 权限才能执行某些操作呢?
出于某种原因,我的 root crontab 似乎没有运行。
尝试在每晚午夜重新启动设备。
作为 root 应该是以下内容:
crontab -e
Run Code Online (Sandbox Code Playgroud)
然后加:
0 0 * * * /sbin/shutdown -r now
Run Code Online (Sandbox Code Playgroud)
当我使用一些接近当前时间的值进行测试时,没有任何反应。我安装了 NTP 并确保时区正确。我还指定使用 24 小时制。例如,要立即测试此行(下午 5:35),我尝试输入以下内容:
36 17 * * * /sbin/shutdown -r now
Run Code Online (Sandbox Code Playgroud)
我已经用 date -R 检查了时间。crontab 运行的时间来了又去,系统不会重新启动。我在这里缺少什么?
我不小心启用(设置)了我的 root 密码(默认情况下它是锁定的),现在我想“撤消”它。我使用了两个命令
sudo usermod -p '!' root
Run Code Online (Sandbox Code Playgroud)
和
sudo passwd -dl root
Run Code Online (Sandbox Code Playgroud)
以该顺序。
如何检查 root 的帐户是否被锁定?
我有一个包含 ext4 文件系统的文件,并且希望每次都在不使用 sudo 的情况下挂载它(脚本应该以用户权限运行)。我想挂载的文件和我也想挂载的文件夹都在我加密的主目录中,所以我无法将文件位置放入/etc/fstab.
我尝试过,fusermount但总是收到错误消息,例如“fusermount:挂载点后的额外参数”。
我知道“不使用sudo su -”等。但老实说,几乎我们所有人都这样做。
所以,这就是问题所在。我们不能启用 root 登录,所以我们必须以我们的用户身份 ssh 进入,然后 su 到 root。
这是进程树:
1 7897 7826 7826 ? -1 S 1000 0:00 sshd: josh@pts/0
7897 7898 7898 7898 pts/0 8182 Ss 1000 0:00 \_ -bash
7898 7990 7990 7898 pts/0 8182 S 0 0:00 \_ sudo su -
7990 7991 7990 7898 pts/0 8182 S 0 0:00 \_ su -
7991 7992 7992 7898 pts/0 8182 S 0 0:00 \_ -su
7992 8182 8182 7898 pts/0 8182 R+ 0 …Run Code Online (Sandbox Code Playgroud) 我读了这个答案,解释说“有时” root 可以在/home/$USER目录中拥有某些东西。
谁能举个例子来证明。当我运行时,当发生非常糟糕的事情时给出一个测试用例
sudo gedit /etc/rc.local
Run Code Online (Sandbox Code Playgroud)
编辑文件并保存。
我在试图帮助 OP 的过程中得到了很多反对意见,并且大量评论说使用 sudo 运行 gedit 是一种犯罪。
谁能举一个真实的例子?
我清楚地解释了为什么这个问题不是重复的。对于链接的问题,没有特定于 gedit 的答案。
重要的是要解释为什么广泛使用sudo gedit是不好的,或者不是真的,等等。
root ×10
sudo ×3
permissions ×2
bash ×1
command-line ×1
cron ×1
dbus ×1
debian ×1
gedit ×1
mount ×1
ownership ×1
password ×1
policykit ×1
privileges ×1
python ×1
security ×1
session ×1
ssh ×1
sublime-text ×1
users ×1